Naredbe za koje (možda) niste znali 13: stat

Naredba stat nam omogućava dobijanje informacija o datotekama, kao što su veličina, vrijeme kreiranja, promjene i pristupa, inode broja i slično. Sve ovo možete saznati i preko naredbe ls, ali stat daje sve ove informacije odjednom, pa je u nekim situacijama prikladnija. Stat je, zapravo, prilagodba sistemskog poziva stat(), ali i funkcije koja se pojavljuje u većini programskih jezika.

Pogledajmo ispis naredbe stat, na istoj datoteci koju smo rabili u članku o naredbi touch:

debian# stat datoteka.log
  File: 'datoteka.log'
  Size: 0        Blocks: 0   IO Block: 4096   regular empty  file
Device: 806h/2054d Inode: 30916  Links: 1
Access: (0644/-rw-r--r--)  Uid: (  0/  root)   Gid: (  0/  root)
Access: 1999-10-10 10:10:00.000000000 +0200
Modify: 1999-10-10 10:10:00.000000000 +0200
Change: 2010-03-23 14:02:42.000000000 +0100

Vidimo mnoštvo informacija, kao što je veličina (ovdje je 0, kao i broj blokova koji zauzima datoteka). Naredba prepoznaje veličinu 0, pa ispisuje "regular empty file", inače bi riječ "empty" bila izostavljena.

Nadalje, ispisuju nam se podaci o uređaju u heksadecimalnom obliku, te inode broj. Inode je broj jedinstven za svaku datoteku i direktorij na datotečnom sustavu. Vrijednost "Links" označava koliko hard linkova na tu datoteku postoji, a u ovom slučaju to je samo jedan - njen vlastiti. Simbolički linkovi se ne ubrajaju u ovu vrijednost.

Sljedeće što ćemo saznati su prava pristupa, u oktalnom i simboličkom obliku, kao i tko je vlasnik i grupa datoteke (opet, u numeričkom i simboličkom obliku).

Zadnje što ćemo saznati su vremena pristupa ("Access"), promjene ("Modify") i promjene inodea ("Change"). Drugim riječima, ATIME, CTIME i MTIME. Ovo zaslužuje malo pojašnjenja.

ATIME, ili "Access Time", je vrijeme zadnjeg pristupa datoteci. Ovo uključuje uređivanje i pregledavanje preko naredbi cat, less i sličnih, te promjenu atributa datoteke. Vrijeme zadnjeg pristupa možete vidjeti i preko naredbe ls, u obliku "ls -lu". Osvježavanje zadnjeg pristupa datoteci ponešto smanjuje performanse, a kako taj podatak obično nema neku vrijednost, sistem administratori znaju isključiti generiranje ovog zapisa kako bi dobili na performansama datotečnog sustava.

CTIME, ili "Change Time", nikako ne treba brkati s pojmom "Creation Time". Ovaj podatak na Unix/Linux sustavima zapravo ne možemo doznati. CTIME se odnosi na vrijeme promjene podataka u datoteci, ali i promjene na inode broju (ovo uključuje promjenu vlasnika ili prava pristupa preko chown/chmod naredbi). Vrijeme zadnje promjene možete vidjeti i preko naredbe ls, u obliku "ls -lc".

MTIME, ili "Modification Time", se mijenja kad se mijenja sadržaj datoteke. Ovo vrijeme je podrazumijevano kada rabite naredbu ls u proširenom obliku, "ls -l". Ovo je vjerojatno vrijednost koja vam je najzanimljivija.

Kako je preko primjera najlakše shvatiti sve gore izrečeno, navest ćemo tipične primjere iz prakse.

debian# stat datoteka.log
Access: 1999-10-10 10:10:00.000000000 +0200
debian# cat datoteka.log
debian# stat datoteka.log
Access: 2010-03-24 15:01:28.000000000 +0100

Vidimo da se promijenilo vrijeme zadnjeg pristupa datoteci (ATIME).

debian# chmod g+wx datoteka.log
Modify: 1999-10-10 10:10:00.000000000 +0200
Change: 2010-03-24 15:05:33.000000000 +0100

Ukoliko promjenimo prava pristupa, što automatski znači i promjenu pripadajućeg inodea, promijenili smo CTIME, ne i MTIME.

Promijenimo sada sadržaj same datoteke:

debian# echo "Sadrzaj" > datoteka.log
debian# stat datoteka.log
Modify: 2010-03-24 15:09:36.000000000 +0100
Change: 2010-03-24 15:09:36.000000000 +0100

Možemo vidjeti da se promijenilo i vrijeme CTIME i MTIME.

Stat prepoznaje i druge tipove datoteka, kao što su direktoriji, socketi, linkovi i tako dalje, te će tu informaciju i ispisati:

debian# stat /dev/null
  File: '/dev/null'
  Size: 0    Blocks: 0  IO Block: 4096  character  special file
Device: dh/13d  Inode: 97777566   Links: 1   Device type: 1,3
. . .

Vidimo da je stat ispravno prepoznao datoteku /dev/null kao "character special file".

Moguće je dobiti informacije o datotečnom sustavu, umjesto o pojedinoj datoteci. Za to ćemo upotrijebiti opciju "-f":

debian# stat -f /
File: "/"
    ID: f72aeed7c2b49bfd Namelen: 255   Type: ext2/ext3
Block size: 1024       Fundamental block size: 1024
Blocks: Total: 248895     Free: 118437     Available: 105585
Inodes: Total: 64512      Free: 51266

Na kraju, ispis naredbe stat je moguće prilagoditi svojim potrebama, što je zgodno za pisanje skripti. Primjer:

debian# stat --format "%a %A" datoteka.log
674 -rw-rwxr--

Naredbi stat smo rekli da ispiše samo prava pristupa datoteci, i to prvo u oktalnom zapisu, a potom i simboličkom. Što možete sve koristiti kao format pročitajte u man stranici, jer je opcija zaista mnogo.

Napomena: u vašoj ljusci (shellu) može postojati ugrađena naredba stat, pa provjerite o kojoj naredbi se točno radi (zsh ljuska ima svoju inačicu u vidu dodatnog modula).

Stat je dio paketa coreutils.

Kuharice: 
Kategorije: 
Vote: 
0
No votes yet