fswatch - file system checksum checker

zrodlo: http://fswatch.sourceforge.net/
autor: dominik karczmarski (http://www.karczmarski.com)
data aktualizacji: 2006-03-30 14:03 (wersja robocza)


co to jest fswatch

fswatch jest narzedziem ktore umozliwia sledzenie zmian w systemie plikow.

fswatch to trzy programy: fswbuild, fswcmp, fswshow. fswbuild buduje baze informacji o plikach. fswcmp porownuje dwa pliki bazy i informuje o roznicach (zmianach). fswshow wyswietla zawartosc pliku bazy. utworzony plik bazy jest niezalezny od architektury komputera.

fswatch pozwala gromadzic nastepujace informacje o plikach: inode, links, uid, gid, mode, size, flags, ctime, checksum (sha1). informuje ktore pliki sie zmienily, ktore zostaly usuniete, ktore zostaly dodane.

fswatch jest jednym z wielu tego typu programow. jedyna roznica jest inna konfiguracja. umozliwia okreslenie dowolnych ustawien na kazdym poziomie w drzewie plikow. pliki moga byc wskazywane na podstawie nazwy, numeru uid, numeru gid oraz typu.



spis tresci

1. instalacja
2. plik konfiguracyjny
2.1 wezly
2.2 wpisy
2.2.1 naglowek wpisu
2.2.2 cialo wpisu
2.2.3 proste wyrazenia regularne slowa name
2.2.4 proste wyrazenia regularne slowa uid i gid
2.2.5 przyklady
2.3 dziedziczenie
2.3.1 dziedziczenie przez wezly
2.3.2 dziedziczenie przez podkatalogi
2.4 przyklady
3. narzedzia
3.1 fswbuild
3.2 fswcmp
3.3 fswshow
3.4 fswconf



1. instalacja

instalacja przebiega w trzech krokach.

 # ./configure
 # make
 # make install
uruchamiajac plik configure mozna podac nastepujace argumenty:
--enable-regex - umozliwia uzywanie rozszerzonych wyrazen regularnych w pliku konfiguracyjnym. (dziala na wszystkich systemach zgodnych z POSIX)
--enable-stflags - wlacza sprawdzanie flag (tylko na *BSD)

na systemach *BSD polecenie ma nastepujaca postac:

 # ./configure --enable-regex --enable-stflags
na pozostalych systemach zgodznych z POSIX:
 # ./configure --enable-regex


2. plik konfiguracyjny

fswatch uzywa jednego pliku konfiguracyjnego w ktorym okresla sie ktore czesci systemu plikow maja byc sprawdzone oraz jakie informacje maja byc zgromadzone. domyslnie fswbuil stara sie odczytac /usr/local/etc/fswatch.conf. mozna okreslic inna sciezke do pliku uruchamiajac fswbuild z argumentem -c path gdzie paramatr path jest nazwa (sciezka) pliku konfiguracyjnego.

plik konfiguracyjny sklada sie z wezlow. w wezle okreslamy sciezke bezwzgledna do katalogu. z kazdym wezlem skojarzone sa wpisy. wpisy okreslaja ktore pliki (w katalogu okreslonym przez wezel) maja byc sprawdzane oraz jakie informacje maja byc gromadzone.

linie puste, linie rozpoczynajace sie od spacji (' '), tabulatora ('\t'), znaku hash ('#'), srednika (';') sa ignorowane. struktura pliku jest nastepujaca:

 --poczatek--
wezel_1
wpis_1
wpis_2
...
wpis_n1

wezel_2
wpis_1
wpis_2
...
wpis_n2

...

wezel_N
wpis_1
wpis_2
...
wpis_nN
 -- koniec --


2.1. wezly

w wezlach okreslamy katalog do ktorego beda odnosic sie wpisy. wpisy okreslaja ktore pliki maja byc sprawdzone oraz jakie informacje maja byc zgromadzone. skladnia wezla jest nastepujaca:

@_DZIEDZICZENIE_:_KATALOG_
gdzie _DZIEDZIECZENIE_ okresla rodzaj dziedziczenia (dziedziczenie z wezla nadrzednego), a _KATALOG_ jest sciezka bezwzgledna do katalogu. dziedziczenie jest jednym ze slow: NO, PRE, POST ;. slowo NO oznacza brak dziedziczenia. slowo PRE i POST oznacza dziedziczenie przez dodanie odziedziczonych wpisow na poczatku i koncu wezla odpowiednio.

przyklad 1

nasz wezel wskazuje na katalog /usr/local oraz ma ustawiony brak dziedziczenia. poniewaz z naszym wezlem nie ma skojarzonych zadnych wpisow fswbuild w tym katalogu nie sprawdzi zadnego pliku (oraz nie zgromadzi zadnych informacji).

 --poczatek--
@NO:/usr/local
 --koniec--


2.2. wpisy

wpisy okreslaja ktore pliki maja zostac sprawdzone oraz jakie informacje maja zgromadzone. kazdy wpis musi byc skojarzony z jakims wezlem. wpisy znajdujace sie po deklaracji wezla skojarzone sa z tym wezlem. fswbuild przechodzi przez caly system plikow. kiedy znajdzie sie w katalogu okreslonym w wezle dla kazdego pliku w tym katalogu szuka pasujacego wpisu. wpisy sa sprawdzane po kolei i sprawdzanie konczy sie na pierwszym dopasowanym wpisie. jesli zaden wpis nie zostanie dopasowany to dla takiego pliku nie zostana zgromadzone zadne informacje. jesli wpis zostanie dopasowany to dla pliku zostana zgromadzone informacje okreslone w masce wpisu. skladnia wpisu jest nastepujaca:

+_MASKA_:_OPCJE_
name:_NAZWA_
namere:_NAZWARE_
uid:_UID_
gid:_GID_
type:_TYPE_


2.2.1. naglowek wpisu

_MASKA_ okresla jakie dane maja zostac gromadzone dla dopasowanego pliku. slowa: name, namere, uid, gid, type ; okreslaja pliki ktore maja zostac dopasowane do tegu wpisu.

_MASKA_ moze skladac sie tylko z nastepujacych znakow: i, l, u, g, m, s, f, t, c, N, F, C ;. oznaczenia: i (inode), l (links), u (uid), g (gid), m (mode), s (size), f (flags), t (time), c (checksum sha1). znak N oznacza aby nie sprawdzac pliku. znak F oznacza aby gromadzic wszystkie dane. znak C jest rownowazny umieszczeniu nastepujacych znakow: ilugmf ;. znak C moze byc stosowany do plikow ktore sie zmieniaja w sposob dozwolony np: /tmp i wtedy beda sprawdzane wszystkie pola z wyjatkiem ctime (czas zmiany), size (wielkosc pliku), csum (suma kontrolna).

_OPCJE_ moze skladac sie tylko z nastepujacych znakow: S, I ;. znacznik I oznacza ze wpis moze byc dziedziczony. patrz punkt 2.3.. znacznik S ma sens tylko dla katalogow. jesli katalog zostanie dopasowany do wpisu ze znacznikiem S w opcjach wtedy program fswbuild nie bedzie wchodzil do takiego katalogu oraz wszystkich jego potomkow. w rezultacie nie zostana zgromadzone zadne informacje o tym katalogu oraz wszystkich jego potomkach. uzycie tego znacznika moze przyspieszyc dzialanie programu jesli katalog jest w rozproszonym systemem plikow (np NFS) albo katalogiem z bardzo duza iloscia plikow/katalogow ktorych nie chcemy sprawdzac.


2.2.2. cialo wpisu

slowa: name, namere, uid, gid, type ; moga wystapic dowolna ilosc razy. sa cztery typy slow. pierwszy typ okreslajacy nazwe pliku (name, namere). drugi typ okreslajacy wlasciciela pliku (uid). trzeci typ okreslajacy grupe pliku (gid). czwarty typ okreslajacy typ pliku (type). miedzy slowami tego samego typu stoi funktor alternatywy ("lub"). miedzy slowami roznego typu stoi funktor koniunkcji ("i").

slowo name okresla nazwe pliku. moze zawierac bardzo proste wyrazenia regularne. patrz punkt 2.2.3.

slowo namere jest rozszerzonym wyrazeniem regularnym okreslajacym nazwe pliku. jego skladnia jest taka sama jak w rozszerzonych wyrazeniach regularnych polecenia grep.

slowo uid okresla numer wlasciciela pliku (owner). patrz punkt 2.2.4.

slowo gid okresla numer grupy pliku (group). patrz punkt 2.2.4.

slowo type okresla typ pliku. moze skaldac sie tylko z nastepujacych znakow: f, c, d, b, r, l, s ;. oznaczenia: f (fifo), c (character special), d (directory), b (block special), r (regular), l (symbolic link), s (socket).


2.2.3. proste wyrazenia regularne slowa name

oprocz znakow uzywanych w nazwach plikow mozna uzyc znaku gwiazdki ('*') oraz znaku zapytania ('?'). znak gwiazdki oznacza zero lub wiecej wystapien dowolnego znaku. znak zapytania oznacza wystapienie dokladnie jednego dowolnego znaku. znak gwiazdki nie moze miec w bezposrednim sasiedztwie znaku gwiazdki. znak zapytania moze miec w bezposrednim zasiedztwie inny znak zapytania. znak zapytania moze stac przed znakiem gwiazdki. znak zapytania nie moze stac za znakiem gwiazdki.

przyklad

name:abc
name:??
name:*
name:?a?b?c?
name:??*abc*
niestosowanie sie do tych zasad moze podowowac nieokreslone dopasowanie nazwy pliku.


2.2.4. proste wyrazenie regularne slowa uid, gid

skladnia argumentu dla slowa uid i gid jest taka sama. sa cztery typy argumentow:

1. pojedynczy numer id
uid:id
gid:id
2. przedzial lewostronnie domkniety [id; ...)
uid:id-
gid:id-
3. przedzial prawostronnie domkniety (...; id]
uid:-id
gid:-id
4. przedzial obustronnie domkniety [id1; id2]
uid:id1-id2
gid:id1-id2

2.2.5. przyklady

przyklad 1

+F
name:*

w powyzszym przykladzie zostana dopasowane pliki spelniajace wszystkie warunki:
- nazwa "*" (czyli dowolna)
dla dopasowanych plikow zostana zgromadzone informacje skojarzone ze znakiem F (czyli ilugmsftc).


przyklad 2

+F
name:a
name:b

w powyzszym przykladzie zostana dopasowane pliki spelniajace wszystkie warunki:
- nazwia "a" lub "b"
dla dopasowanych plikow zostana zgromadzone informacje skojarzone ze znakiem F (czyli ilugmsftc).


przyklad 3

+F
name:a
name:b
name:c
type:r

w powyzszym przykladzie zostana dopasowane pliki spelniajace wszystkie warunki:
- nazwia "a" lub "b" lub "c"
- typ pliku "r" (regular)
dla dopasowanych plikow zostana zgromadzone informacje skojarzone ze znakiem F (czyli ilugmsftc).


przyklad 4

+ugmtc
name:a
name:b
name:c
uid:1001
uid:2000-4000
type:rd

w powyzszym przykladzie zostana dopasowane pliki spelniajace wszystkie warunki:
- nazwia "a" lub "b" lub "c"
- numer uid (owner) rowny 1001 lub z przedzialu [2000; 4000]
- typ pliku "r" (regular) lub "d" (directory)
dla dopasowanych plikow zostana zgromadzone informacje skojarzone ze znaki ugmfc.


przyklad 5

+N
uid:2000-4000
+F
name:*

w powyzszym przykladzie sa dwa wpisy.
do pierwszego wpisu zostana dopasowane pliki spelniajace wszystkie warunki:
- numer uid (owner) z przedzialu [2000; 4000]
dla dopasowanych plikow zostana nie zostana zgromadzone zadne informacje (znak "N").

do drugiego wpisu zostana dopasowane pliki (ktore nie zostaly dopasowane przez pierwszy wpis) spelniajace wszystkie warunki:
- nazwia "*" (czyli dowolna)
dla dopasowanych plikow zostana zgromadzone informacje skojarzone ze znakiem F (czyli ilugmsftc).


przyklad 6

+N
uid:2000-4000
+C
name:tmp
name:run
type:d
+F
name:*

w powyzszym przykladzie sa trzy wpisy.
do pierwszego wpisu zostana dopasowane pliki spelniajace wszystkie warunki:
- numer uid (owner) z przedzialu [2000; 4000]
dla dopasowanych plikow zostana nie zostana zgromadzone zadne informacje (znak "N").

do drugiego wpisu zostana dopasowane pliki (ktore nie zostaly dopasowane przez pierwszy wpis) spelniajace wszystkie warunki:
- nazwia "tmp" lub "run
- typ pliku "d" (directory)
dla dopasowanych plikow zostana zgromadzone informacje skojarzone ze znakiem C (czyli ilugmf).

do trzeciego wpisu zostana dopasowane pliki (ktore nie zostaly dopasowane przez pierwszy oraz przez drugi wpis) spelniajace wszystkie warunki:
- nazwia "*" (czyli dowolna)
dla dopasowanych plikow zostana zgromadzone informacje skojarzone ze znakiem F (czyli ilugmsftc).


przyklad 7

+F
name:???
type:d

w powyzszym przykladzie zostana dopasowane pliki spelniajace wszystkie warunki:
- nazwa "???" (czyli skladajaca sie dokladnie z trzech znakow)
- typ pliku "d" (directory)
dla dopasowanych plikow zostana zgromadzone informacje skojarzone ze znakiem F (czyli ilugmsftc).


przyklad 8

+F
name:???
+F
type:d

w powyzszym przykladzie sa dwa wpisy.
do pierwszego wpisu zostana dopasowane pliki spelniajace wszystkie warunki:
- nazwa "???" (czyli skladajaca sie dokladnie z trzech znakow)
dla dopasowanych plikow zostana zgromadzone informacje skojarzone ze znakiem F (czyli ilugmsftc).

do drugiego wpisu zostana dopasowane pliki (ktore nie zostaly dopasowane przez pierwszy wpis) spelniajace wszystkie warunki:
- typ pliku "d" (directory)
dla dopasowanych plikow zostana zgromadzone informacje skojarzone ze znakiem F (czyli ilugmsftc).


2.3. dziedziczenie

sa dwa typy dziedziczenia. pierwszy typ to dziedziczenie przez wezly. drugi typ to dziedziczenie przez podkatalogi.


2.3.1. dziedziczenie przez wezly

tworzac plik konfiguracyjny mozna okreslic aby czesc wpisow z wezla nadrzednego zostala odziedziczona przez wezel podrzedny. nalezy wtedy wykonac nastepujace dwie czynnosci. po pierwsze wpisy ktore maja byc dziedziczone oznaczyc w opcjach znakiem "I". po drugie w wezle ktory ma dziedziczyc okreslic dziedziczenie PRE albo POST. PRE dodaje odziedziczone wpisy przed wpisami w dziedziczacym wezle. POST dodaje odziedziczone wpisy za wpisami w dziedziczacym wezle.

dziedziczenie przez wezly ma uproscic i skrocic plik konfiguracyjny. bez problemu kazda konfiguracje z dziedziczeniem przez wezly mozna zamienic na taka ktora takiego dziedziczenia nie zawiera.

przyklad 1

 --poczatek--
@NO:/
+C
name:tmp
name:dev
+F:I
name:*

@POST:/home
+N
gid:1010
 --koniec--

w wezle pierwszym sa dwa wpisy. drugi wpis w opcjach ma litere "I" ktora oznacza ze ten wpis ma zostac odziedziczony. w drugim wezle jest okreslone dziedziczenie "POST". drugi wezel dziedziczy od pierwszego wezela wpisy oznaczone litera "I" i dodaje je za wpisami w dziedziczacym wezle. w rezulatacie drugi wezel ma nastepujace wpisy:

+N
gid:1010
+F:I
name:*


przyklad 2

 --poczatek--
@NO:/home/
+N:I
uid:2000
uid:2001
uid:2010
+N:I
gid:1010
+C
type:rd

@PRE:/home/ftp
+N
gid:1001
+F:I
name:*
 --koniec--
w drugim wezle jest okreslone dziedziczenie "PRE". drugi wezel dziedziczy od pierwszego wezela wpisy oznaczone litera "I" i dodaje je przed wpisami w dziedziczacym wezle. w rezulatacie drugi wezel ma nastepujace wpisy:
+N:I
uid:2000
uid:2001
uid:2010
+N:I
gid:1010
+N
gid:1001
+F:I
name:*


2.3.2. dziedziczenie przez podkatalogi

oczywiscie nie trzeba tworzyc oddzielnego wezla dla kazdego katalogu w systemie plikow poniewaz wiekszosc ustawien jest wspolna. dla katalogow dla ktorych nie jest stworzony wezel wpisy oznaczone opcja "I" sa dziedziczone z najblizszego (w hierarhii drzewa katalogow) wezla.

fswbuild dziala w nastepujacy sposob:
- jesli jestesmy w katalogu dla ktorego zostal stworzony wezel to (dla plikow w tym katalogu) poszukiwany jest pasujacy wpis sposrod wszystkich wpisow
- jesli jestesmy w katalogu dla ktorego nie zostal stworzony wezel to poszukiwany jest najblizszy (w hierarhii drzewa katalogow) wezel. dla plikow w takim katalogu poszukiwany jest pasujacy wpis sposrod wpisow (w znalezionym wezle) ale tylko tych oznaczonych opcja "I".

--poczatek--
@NO:/dev
+N
name:tty*
+lugmf:I
name:*
-- koniec --

jesli fswbuild bedzie w katalogu /dev to dla kazdego pliku w tym katalogu bedzie szukany pasujacy wpis sposrod wszystkich wpisow (w naszym przypadku dwoch). jesli fswbuild bedzie w jakis podkatalogu katalogu /dev np: /dev/net wtedy (poniewaz dla takiego katalogu nie ma okreslonego wezla) wiec zostanie odszukany najblizszy (w hierarhii drzewa katalogow) wezel. odszukanym wezelem bedzie /dev. dla kazdego pliku w katalogu /dev/net bedzie szukany pasujacy wpis sposrod tych oznaczonych opcja "I" (w odszukanym wezle czyli w wezle /dev). w rezultacie wszystkie pliki w katalogu /dev/net beda sprawdzane czy pasuja do drugiego wpisu w wezle /dev.

aby byc pewnym ze stworzony plik konfiguracyjny jest dokladnie tym czego oczekujemy mozna uzyc programu fswconf.


2.4. przyklady

przyklad 1

 --poczatek--
@NO:/
+F
name:plik1
name:plik2
name:plik3
namere:^plik[a-z]
uid:1000-1500
uid:2000
type:rd
 --koniec--

w katalogu "/" zostana dopasowane pliki spelniajace wszystkie ponizsze warunki:
- nazwa pliku musi byc "plik1" lub "plik2" lub "plik3" lub pasowac do wyrazenia regularnego "^plik[a-z]"
- numer uid (owner) pliku musi byc z przedzialu "1000-1500" lub rowny "2000"
- typ pliku musi byc "r" (regular) lub "d" (directory)
dla dopasowanych plikow zostana zgromadzone informacje skojarzone ze znakiem "F".

fswbuild bedzie przemierzdzal caly system plikow w poszukiwaniu innych pasujacych plikow jednak tylko te pliki zostana sprawdzone.

dziedziczenie dla katalogu / nie ma znaczenia poniewaz jest na szczycie w herarhii i nie ma od kogo dziedziczyc.


przyklad 2

 --poczatek--
@NO:/
+ugmi
name:*
 --koniec--

w katalogu "/" zostana dosasowane wszystkie pliki ("*") i dla nich zostana zgromadzone informacje zgodne ze znakiami "ugmi". dla plikow znajdujaych sie w podkatalogach katalogow w "/" nie zostana zgromadzone zadne informacje.


przyklad 3

 --poczatek--
@NO:/
+ugmi:I
name:*
 --koniec--

jedyna roznica miedzy przykladem poprzednim jest opcja "I". dzieki tej opcji zostanie zastosowane "dziedziczenie przez katalogi" (patrz punkt 3.7.2.). w rezultacie zostana zgromadzone informacje dla wszystkich plikow w systemie plikow zgodnie ze znakami "ugmi".


przyklad 4

 --poczatek--
@NO:/kata/katb/katc
+F
name:*
 --koniec--

zostanie sprawdzona cala katalogu /kata/katb/katc (bez zawartosci jego podkatalogow) jednak sam plik katalogu nie zostanie sprawdzony.


przyklad 5

 --poczatek--
@NO:/kata/katb/katc
+F:I
name:*
 --koniec--

zostanie sprawdzona cala zawartosc katalogu /kata/katb/katc (wraz z podkatalogami) jednak sam plik katalogu nie zostanie sprawdzony.


przyklad 6

 --poczatek--
@NO:/kata/katb
+F
name:katc

@NO:/kata/katb/katc
+F:I
name:*
 --koniec--

zostanie sprawdzona cala zawartosc katalogu /kata/katb/katc (wraz z podkatalogami) oraz zostanie sprawdzony plik katalogu.


przyklad 7

 --poczatek--
@NO:/
+N:S
name:dev
+F:I
 --koniec--

 --poczatek--
@NO:/
+N
name:dev
+F:I

@NO:/dev
+N:I
name:*
 --koniec--

powyzsze dwa przyklady sa rownowazne. jesli /dev zawieralby bardzo duzo plikow pierwsze rozwiazanie dzialaloby troche szybciej.


przyklad 8

 --poczatek--
@NO:/
+C
name:dev
+C:S
name:tmp
name:var
+F:I
name:*

@NO:/dev
+C
name:mem
name:kmem
name:ad*

@POST:/usr
+C:S
name:ports
 --koniec--

w katalogu /:
- dla pliku /dev zostana zgromadzone informacje skojarzone ze znakiem "C"
- dla plikow /tmp, /var zostana zgromadzone informacje skojarzone ze znakiem "C" oraz program fswbuild nie bedzie wchodzil do tych katalgow.
- dla pozostalych plikow w / zostana zgromadzone informacje skojarzone ze znakiem "F".

w katalogu /dev (bez dziedziczenia)
- dla plikow /dev/mem, /dev/kmem, /dev/ad* zostana zgromadzone informacje skojarzone ze znakiem "C".

w katalogu "/usr" (dziedziczenie post)
- dla pliku /usr/ports zostana zgromadzone informacje skojarzone ze znakiem "C" oraz fswbuild nie bedzie wchodzil do tego katalogu.
- poniewaz jest zastosowane dziedziczenie "POST" zostaje odziedziczony ostatni wpis z wezla "/". oznacza to ze dla wszystkich pozostalych plikow w "/usr" (oraz w jego podkatalogach) zostania zgromadzone informacje zgodne ze znakiem "F".

w pozostalych katalogach (innych niz okreslone w wezle "/dev" i "/usr")
- poniewaz ostatni wpis w wezle "/" ma znacznik "I" zostaje zastosowane "dziedzieczenie przez katalogi". w konsekwancji we wszystkich podkatalogach dla wszystkich plikow zostana zgromadzone informacje skojarzone ze znakiem "F".


3. narzedzia

3.1. fswbuild

fswbuild odczytuje plik konfiguracyjny i na jego podstawie buduje baze informacji o plikach. domyslnym plikiem konfiguracyjnym jest /usr/local/etc/fswatch.conf. skladnia polecenia jest nastepujaca:

  fswbuild [-c file1] [-d file2]

mozna okreslic inna sciezke do pliku konfiguracyjnego uruchamiajac fswbuild z argumentem -c path.

fswbuild domyslnie tworzy w biezacym katalogu plik bazy o nazwie fswdb-YYYY-MM-DD-HH-MM-SS (YYYY - rok, MM - miesiac, DD - dzien, HH - godzina, MM - minuty, SS - sekundy). mozna okreslic inna nazwe pliku podajac argument -d path.

suma kontrolna wyliczana jest tylko dla plikow regularnych i katalogow. fswbuild gromadzi tylko informacje okreslone w masce wpisu (w pliku konfiguracyjnym). dla pozostalych pol ustawia wartosc zerowa.


3.2. fswcmp

fswcmp porownuje dwa pliki bazy w poszukiwaniu zmian. skladnia polecenia jest nastepujaca:

  fswcmp [-h [-x] | -p | -d file] [-m mask | -M mask] database1 database2

database1, database2 sa plikami otrzymanymi w programie fswbuild. pierwszy plik jest stanem wczesniejszym drugi stanem pozniejszym.

fswcmp znalezione roznice (miedzy stanem wczesniejszym a stanem pozniejszym) moze albo przeslac na standardowe wyjscie albo zapisac w pliku. standardowo fswcmp dziala tak jakby zostal podany argument -h. wynik przesylany jest na standardowe wyjscie. jesli chcemy aby znalezione roznice byly zapisane do pliku nalezy podac argument -d file. utworzony plik mozna przejrzec uzywajac narzedzia fswshow.

opcje: -h, -x, -p, -m mask, -M mask; okreslaja sposob w jaki roznice maja zostac przeslane na standardowe wyjscie. maja takie same znaczenie jak w programie fswshow.

fswcmp nie uznaje ze plik zostal zmieniony jesli jego stan wczesniejszy oraz pozniejszy roznia sie tylko polem ctime.


3.3. fswshow

fswshow wyswietla zawartosc pliku bazy utworzonej przez fswbuild lub fswcmp. skladnia polecenia jest nastepujaca:

  fswshow [-h [-x] | -p] [-m maska | -M maska] plik
kazda wyswietlana informacja o pliku jest zbudowana z naglowka i tresci.

naglowek sklada sie z trzech pol. pierwsze pole jest jednym ze znakow: D, N, C, ? ;. oznaczenia: D (usuniety), N (nowy), C (zmieniony), ? (niezdefiniowany). drugie pole to maska ktora okresla ktore informacje zostaly zgromadzone. trzecie pole jest sciezka bezwzgledna do pliku. jesli plik bazy zostal utworzony przez fswbuild to kazde pierwsze pole naglowka jest znakiem ?. jesli plik zostal utworzony przez fswcmp to kazde pierwsze pole naglowka jest jednym ze znakow: D, N, C ;.

tresc sklada sie z jednego wyniku dla znakow: D, N, ? ; oraz z dwoch wynikow dla znaku: C (pierwszy wynik okresla stan przed zmiana a drugi po zmienie). kazdy wynik moze zawierac pola: inode, links, uid, gid, mode, size, flags, ctime, sha ;. ale sens maja tylko te okreslone w masce (drugie pole naglowka).

jesli zostanie uzyta opcja -p to kazdy wynik jest wyswietlany w postaci jedej linii. pola rozdzielone sa znakiem spacji.

jesli zostanie uzyta opcja -h to kazdy wynik jest wyswietlany w postaci wielu linii (osobna linia dla kazdego pola) i przed kazda informacja znajduje sie nazwa (rodzaj informacji). w polaczeniu z opcja -x wyswietla dodatkowo: mode, flags ; w formie bardziej czytelnej dla czlowieka.

jesli zostanie uzyta opcja -M mask to dla kazdego wyniku zostana wyswietlone dokladnie te pola ktore zostaly okreslone w parametrze mask.

jesli zostanie uzyta opcja -m mask to dla kazdego wyniku zostana wyswietlone te pola ktore zostaly okreslone zarowno w parametrze mask oraz w masce (drugie pole naglowka).

jesli nie zostanie uzyta ani opcja -m mask ani -M mask wtedy dla kazdego wyniku zostana wyswietlone tylko pola okreslone w masce (drugie pole naglowka).

przyklad 1

niech baza1 bedzie plikiem bazy utworzonym przez fswbuild. wtedy zgromadzone informacje o pliku /etc/lf.conf maja nastepujaca postac:

uzycie opcji -p

? ilugmsftc /etc/lf.conf                                                       
12836 1 0 0 100644 42 00000000 2006-02-24 03:34:57 e73c5ad4745c3c281270309d271ae0074ff291b                                                                    
uzycie opcji -h
? ilugmsftc /etc/lf.conf                        
ino:    12836                                   
links:  1                                       
uid:    0                                       
gid:    0                                       
mode:   100644                                  
size:   42                                      
flags:  00000000                                
ctime:  2006-02-24 03:34:57                     
csum:   e73c5ad4745c3c281270309d271a6e0074ff291b
uzycie opcji -hx
? ilugmsftc /etc/lf.conf                        
ino:    12836                                   
links:  1                                       
uid:    0                                       
gid:    0                                       
mode:   100644 (-rw-r--r--)                     
size:   42                                      
flags:  00000000 ()                             
ctime:  2006-02-24 03:34:57                     
csum:   e73c5ad4745c3c281270309d271a6e0074ff291b

przyklad 2

niech baza1 i baza2 beda plikami bazy utworzonymi przez fswbuild i niech pierwszy bedzie stanem wczesniejszym a drugi stanem pozniejszym. zakladamy ze zaszly nastepujace zmiany: zostal usuniety plik /etc/crontab. zostal zmieniony plik /etc/rc.conf. zostal dodany plik /etc/lf.conf. aby zobaczyc zmiany moze albo zapisac zmiany do pliku i potem odczytac plik przez fswshow

# fswcmp -d roznica baza1 baza2
# fswshow roznica
albo odrazu przeslac roznice na standardowe wyjscie.
# fswcmp baza1 baza2
w obydwu przypadkach rezultat jest taki sam.

uzycie opcji -p
C ilugmsftc /etc                                                               
12481 17 0 0 040755 2048 00000000 2006-02-24 03:34:57 74fd5a4d9701f5524c71e4c3fc98ebd01e49cd6                                                                 
12481 17 0 0 040755 2048 00000000 2006-02-24 04:25:48 46e8964a533fd3c2956eca56c2d984c02e528af                                                                 
D ilugmsftc /etc/crontab                                                       
12909 1 0 0 100644 737 00000000 2005-10-09 17:17:59 b267bd2fe3653c9ec910f7e53b438c0e8b8c367                                                                   
N ilugmsftc /etc/lf.conf                                                       
12836 1 0 0 100644 42 00000000 2006-02-24 04:25:30 e73c5ad4745c3c281270309d271ae0074ff291b                                                                    
C ilugmsftc /etc/rc.conf                                                       
12972 1 0 0 100644 638 00000000 2006-01-12 15:57:53 2162efbbe9e7ce523ad91e756149be747db589f                                                                   
12972 1 0 0 100644 639 00000000 2006-02-24 04:25:32 0c248e89fb11126a29b24dba04004287abcb907                                                                   
uzycie opcji -h
C ilugmsftc /etc                                   
ino:    12481                                      
links:  17                                         
uid:    0                                          
gid:    0                                          
mode:   040755                                     
size:   2048                                       
flags:  00000000                                   
ctime:  2006-02-24 03:34:57                        
csum:   74fd5a4d9701f5524c71e4c3f0c98ebd01e49cd6   
                                                   
ino:    12481                                      
links:  17                                         
uid:    0                                          
gid:    0                                          
mode:   040755                                     
size:   2048                                       
flags:  00000000                                   
ctime:  2006-02-24 04:25:48                        
csum:   46e8964a533fd3c2956eca56c92d984c02e528af   

D ilugmsftc /etc/crontab                           
ino:    12909                                      
links:  1                                          
uid:    0                                          
gid:    0                                          
mode:   100644                                     
size:   737                                        
flags:  00000000                                   
ctime:  2005-10-09 17:17:59                        
csum:   b267bd2fe3653c9ec910f7e53b4a38c0e8b8c367   

N ilugmsftc /etc/lf.conf                         
ino:    12836                                    
links:  1                                        
uid:    0                                        
gid:    0                                        
mode:   100644                                   
size:   42                                       
flags:  00000000                                 
ctime:  2006-02-24 04:25:30                      
csum:   e73c5ad4745c3c281270309d271a6e0074ff291b 

C ilugmsftc /etc/rc.conf                          
ino:    12972                                     
links:  1                                         
uid:    0                                         
gid:    0                                         
mode:   100644                                    
size:   638                                       
flags:  00000000                                  
ctime:  2006-01-12 15:57:53                       
csum:   2162efbbe9e7ce523ad91e75614f9be747db589f  
                                                  
ino:    12972                                     
links:  1                                         
uid:    0                                         
gid:    0                                         
mode:   100644                                    
size:   639                                       
flags:  00000000                                  
ctime:  2006-02-24 04:25:32                       
csum:   0c248e89fb11126a29b24dba040604287abcb907  
uzycie opcji -hx
C ilugmsftc /etc                                   
ino:    12481                                      
links:  17                                         
uid:    0                                          
gid:    0                                          
mode:   040755 (drwxr-xr-x)                        
size:   2048                                       
flags:  00000000 ()                                
ctime:  2006-02-24 03:34:57                        
csum:   74fd5a4d9701f5524c71e4c3f0c98ebd01e49cd6   
                                                   
ino:    12481                                      
links:  17                                         
uid:    0                                          
gid:    0                                          
mode:   040755 (drwxr-xr-x)                        
size:   2048                                       
flags:  00000000 ()                                
ctime:  2006-02-24 04:25:48                        
csum:   46e8964a533fd3c2956eca56c92d984c02e528af   

D ilugmsftc /etc/crontab                          
ino:    12909                                     
links:  1                                         
uid:    0                                         
gid:    0                                         
mode:   100644 (-rw-r--r--)                       
size:   737                                       
flags:  00000000 ()                               
ctime:  2005-10-09 17:17:59                       
csum:   b267bd2fe3653c9ec910f7e53b4a38c0e8b8c367  

N ilugmsftc /etc/lf.conf                          
ino:    12836                                     
links:  1                                         
uid:    0                                         
gid:    0                                         
mode:   100644 (-rw-r--r--)                       
size:   42                                        
flags:  00000000 ()                               
ctime:  2006-02-24 04:25:30                       
csum:   e73c5ad4745c3c281270309d271a6e0074ff291b  

C ilugmsftc /etc/rc.conf                           
ino:    12972                                      
links:  1                                          
uid:    0                                          
gid:    0                                          
mode:   100644 (-rw-r--r--)                        
size:   638                                        
flags:  00000000 ()                                
ctime:  2006-01-12 15:57:53                        
csum:   2162efbbe9e7ce523ad91e75614f9be747db589f   
                                                   
ino:    12972                                      
links:  1                                          
uid:    0                                          
gid:    0                                          
mode:   100644 (-rw-r--r--)                        
size:   639                                        
flags:  00000000 ()                                
ctime:  2006-02-24 04:25:32                        
csum:   0c248e89fb11126a29b24dba040604287abcb907   
w powyzszym przykladzie widac ze usuniete pliki sa oznaczone znakiem D dodane pliki sa oznaczone znakiem N zmienione pliki sa oznaczone znakiem C. dla plikow zmienionych jest podawany stan wczesniejszy i stan pozniejszy. poniewaz zaszly zmiany w katalogu /etc wiec plik tego katalogu rowniez sie zmienil.


3.4. fswconf

fswconf jest dodatkowym narzedziem ktore ma ulatwic zrozumienie konfiguracji. wyswietla wynikowa konfiguracje calosciowa lub efektywna tylko dla wybranego katalogu. skladnia polecenia jest nastepujaca:

  fswconf [-a | -d dir] [-c file]

opcja -c file okresla file jako sciezke do pliku konfiguracyjnego. domyslnie jest to /usr/local/etc/fswatch.conf.

jesli zostanie uzyta opcja -a zostanie wyswietlona cala konfiguracja po scaleniu dziedziczenia przez wezly. jest to domyslna opcja.

jesli zostanie uzyta opcja -d dir to dla katalogu dir zostanie wyswietlona efektywna konfiguracja.

przyklad 1

niech plik fswatch.conf ma postac:

 --poczatek--
@NO:/
+C
name:tmp
name:dev
+F:I
name:*

@POST:/home
+N
gid:1010
 --koniec--
uzycie opcji -a spowoduje wyswietlenie calej konfiguracji po scaleniu dziedziczenia przez wezly:
# fswconf -c fswatch.conf -a

@/;               
+ilugm-f-- --     
        name:tmp; 
        name:dev; 
+ilugmsftc -I     
        name:*;   
                  
@/home;           
+N         --     
        gid:1010  
+ilugmsftc -I     
        name:*;   
uzycie opcji -d dir wyswietli efektywna konfiguracje dla katalogu dir. dla katalogu /home:
# fswconf -c fswatch.conf -d /home

+N         --   
        gid:1010
+ilugmsftc -I   
        name:*; 
dla katalogu /home/user1/kat1:
+ilugmsftc -I   
        name:*; 
poniewaz dla /home/user1/kat1 nie zostal utworzony wezel wiec zostalo zastosowane dziedziczenie przez podkatalogi.