A stat parancs használata Linuxon

A Linux stat parancs sokkal több részletet mutat meg, mint az ls. Kukkants be a függöny mögé ezzel az informatív és konfigurálható segédprogrammal. Megmutatjuk, hogyan kell használni.

stat Elvisz a színfalak mögé

Az ls parancs nagyszerű abban, amit csinál – és nagyon sokat tesz –, de Linux esetén úgy tűnik, hogy mindig van mód mélyebbre menni, és megnézni, mi rejlik a felszín alatt. És gyakran nem csak a szőnyeg szélének felemeléséről van szó. Feltépheti a padlódeszkát, majd lyukat áshat. A Linuxot megpucolhatod, mint a hagymát.

Az ls sok információt mutat meg egy fájlról, például, hogy milyen engedélyek vannak beállítva, és mekkora, és hogy fájlról vagy szimbolikus hivatkozásról van-e szó. Az információ megjelenítéséhez az ls beolvassa a fájlrendszer-struktúra, amelyet inode-nak neveznek.

Minden fájlnak és könyvtárnak van inode. Az inode tart metaadatok a fájlról, például, hogy melyik fájlrendszert blokkolja, és a fájlhoz tartozó dátumbélyegzőket. Az inode olyan, mint egy könyvtárkártya a fájl számára. De csak az információk egy részét mutatjuk meg. Ahhoz, hogy mindent lássunk, a stat parancsot kell használnunk.

Az ls-hez hasonlóan a stat parancsnak is sok lehetősége van. Ez kiváló jelöltté teszi az álnevek használatára. Miután felfedezett egy adott beállításkészletet, amely a stat a kívánt kimenetet adja meg, csomagolja be álnévbe vagy shell függvénybe. Ez sokkal kényelmesebbé teszi a használatát, és nem kell emlékeznie a parancssori opciók rejtélyes halmazára.

Gyors összehasonlítás

Használjuk az ls-t, hogy hosszú listát adjunk (-l opció) ember által olvasható fájlméretekkel (-h opció):

ls -lh ana.h

Balról jobbra az ls által biztosított információ a következő:

A legelső karakter egy kötőjel „-”, és ez azt jelzi, hogy a fájl egy normál fájl, nem pedig socket, szimbolikus hivatkozás vagy más típusú objektum.
A tulajdonos, a csoport és az egyéb engedélyek oktális formátumban vannak felsorolva.
A fájlra mutató merev hivatkozások száma. Ebben az esetben és a legtöbb esetben egy lesz.
A fájl tulajdonosa Dave.
A csoport tulajdonosa Dave.
A fájl mérete 802 bájt.
A fájl legutóbbi módosítása 2015. december 13-án, pénteken történt.
A fájl neve ana.c.

Nézzük a statisztikával:

stat ana.h

A statból kapott információ a következő:

Fájl: A fájl neve. Általában megegyezik azzal a névvel, amelyet a parancssorban a stat-nak adtunk át, de más lehet, ha szimbolikus hivatkozást nézünk.
Méret: A fájl mérete bájtban.
Blokkok: A fájlrendszer blokkjainak száma, amelyekre a fájlnak szüksége van a merevlemezen való tároláshoz.
IO blokk: A fájlrendszer blokk mérete.
Fájltípus: A metaadatok által leírt objektum típusa. A leggyakoribb típusok a fájlok és a könyvtárak, de lehetnek hivatkozások, socketek vagy elnevezett csövek is.
Eszköz: Az eszköz száma hexadecimális és decimális. Ez annak a merevlemeznek az azonosítója, amelyen a fájl található.
Inode: Az inode száma. Vagyis ennek az inode-nak az azonosító száma. Az inode száma és az eszközszám együttesen egyedileg azonosítja a fájlt.
Hivatkozások: Ez a szám azt jelzi, hogy hány merev hivatkozás mutat erre a fájlra. Minden merev hivatkozásnak megvan a maga inódája. Tehát egy másik módja ennek a számnak az, hogy hány inode mutat erre az egy fájlra. Minden egyes merev hivatkozás létrehozása vagy törlése esetén ez a szám felfelé vagy lefelé módosul. Amikor eléri a nullát, maga a fájl törlődik, és az inode eltávolításra kerül. Ha egy könyvtárban statisztikát használ, ez a szám a könyvtárban található fájlok számát jelenti, beleértve a „.” bejegyzés az aktuális címtárhoz és a „..” bejegyzés a szülőkönyvtárhoz.
Hozzáférés: A fájljogosultságok oktális és hagyományos rwx-ben jelennek meg (olvasási, írási, végrehajtási formátumok).
Uid: a tulajdonos felhasználói azonosítója és fiókneve.
Gid: Csoportazonosító és a tulajdonos fiókneve.
Hozzáférés: A hozzáférési időbélyeg. Nem olyan egyszerű, mint amilyennek látszik. A modern Linux disztribúciók a relatime nevű sémát használják, amely megpróbálja optimalizálja a merevlemez írási számát, amely a hozzáférési idő frissítéséhez szükséges. Egyszerűen fogalmazva, a hozzáférési idő frissül, ha régebbi, mint a módosított idő.
Módosítás: A módosítás időbélyege. Ez az az idő, amikor a fájl tartalma utoljára módosult. (Szerencsére ennek a fájlnak a tartalma utoljára négy éve változott, napjainkig.)
Módosítás: A változás időbélyege. Ez az az idő, amikor a fájl attribútumai vagy tartalma utoljára módosult. Ha módosít egy fájlt új fájljogosultságok megadásával, akkor a változás időbélyege frissül (mivel a fájl attribútumai megváltoztak), de a módosított időbélyeg nem frissül (mivel a fájl tartalma nem változott).
Születés: fenntartva a fájl eredeti létrehozási dátumának megjelenítésére, de ez nem valósult meg Linuxon.

  Az iPhone vagy iPad helyreállítási módba állítása

Az időbélyegek megértése

Az időbélyegek időzónaérzékenyek. A -0500 minden sor végén azt mutatja, hogy ez a fájl egy számítógépen jött létre a Összehangolt világidő (UTC) időzóna, amely öt órával megelőzi az aktuális számítógép időzónáját. Tehát ez a számítógép öt órával elmarad a fájlt létrehozó számítógép mögött. Valójában a fájlt az Egyesült Királyság időzónája szerinti számítógépen hozták létre, és mi itt az Egyesült Államok keleti szabványos időzónájában lévő számítógépen nézzük.

A módosítási és módosítási időbélyegek zavart okozhatnak, mert az avatatlanok számára a nevük úgy hangzik, mintha ugyanazt jelentené.

Használjuk a chmod-ot az ana.c nevű fájl fájlengedélyeinek módosítására. Mindenki számára írhatóvá tesszük. Ez nincs hatással a fájl tartalmára, de hatással lesz a fájl attribútumaira.

chmod +w ana.c

Ezután a stat segítségével nézzük meg az időbélyegeket:

stat ana.c

A módosítási időbélyeg frissítve lett, de a módosított nem.

A módosított időbélyeg csak akkor frissül, ha a fájl tartalma megváltozik. A módosítási időbélyeg mind a tartalom-, mind az attribútummódosítások esetén frissül.

Stat használata több fájllal

Ha egyszerre több fájlról szeretne statisztikai jelentést készíteni, adja át a fájlneveket a parancssorban a stat-nak:

stat ana.h ana.o

Ha a stat fájlokat szeretné használni, használja a mintaillesztést. A „?” kérdőjel bármely karaktert jelöl, a csillag pedig a „*” bármely karakterláncot jelöl. Ezzel a paranccsal megmondhatjuk a stat-nak, hogy jelentést készítsen bármely „ana” nevű, egyetlen betűs kiterjesztésű fájlról:

stat ana.?

A stat használata a fájlrendszerek jelentéséhez

A stat képes jelentést készíteni a fájlrendszerek állapotáról, valamint a fájlok állapotáról. Az -f (filesystem) kapcsoló arra utasítja a statot, hogy jelentse azt a fájlrendszert, amelyen a fájl található. Megjegyzés: fájlnév helyett átadhatunk egy könyvtárat, például „/”-t a stat-nak.

stat -f ana.c

A statisztikai adatok a következők:

  Fájlok titkosítása és visszafejtése GPG-vel Linuxon

Fájl: A fájl neve.
ID: A fájlrendszer azonosítója hexadecimális jelöléssel.
Namelen: A fájlnevek maximális megengedett hossza.
Típus: A fájlrendszer típusa.
Blokkméret: Az optimális adatátviteli sebességhez szükséges olvasási kérelmek adatmennyisége.
Alapvető blokkméret: Az egyes fájlrendszer-blokkok mérete.

Blokkok:

Összesen: A fájlrendszer összes blokkjának száma.
Ingyenes: A fájlrendszerben lévő szabad blokkok száma.
Elérhető: A normál (nem root) felhasználók számára elérhető ingyenes blokkok száma.

Inodes:

Összesen: A fájlrendszerben lévő inode-ok teljes száma.
Ingyenes: A fájlrendszerben található szabad inódok száma.

A szimbolikus hivatkozások hivatkozásának megszüntetése

Ha statokat használ egy fájlon, amely valójában egy szimbolikus hivatkozás, akkor jelentést készít a hivatkozásról. Ha azt szeretné, hogy a stat jelentést készítsen arról a fájlról, amelyre a hivatkozás mutat, használja a -L (dereference) opciót. A code.c fájl szimbolikus hivatkozás az ana.c fájlra. Nézzük meg az -L opció nélkül:

stat code.c

A fájlnév azt mutatja, hogy a code.c a ( -> ) ana.c-re mutat. A fájl mérete mindössze 11 bájt. Ennek a hivatkozásnak a tárolására nulla blokk található. A fájl típusa szimbolikus hivatkozásként jelenik meg.

Nyilvánvaló, hogy itt nem a tényleges fájlt nézzük. Tegyük meg újra, és adjuk hozzá a -L opciót:

stat -L code.c

Ez most a szimbolikus hivatkozás által mutatott fájl fájl részleteit mutatja. De vegye figyelembe, hogy a fájlnév továbbra is code.c. Ez a hivatkozás neve, nem a célfájl. Ez azért történik, mert ezt a nevet adtuk át a stat-nak a parancssorban.

A Terse jelentés

A -t (terse) opció hatására a stat tömörített összegzést ad:

stat -t ana.c

Nincsenek megadva nyomok. Ahhoz, hogy érthető legyen – amíg meg nem jegyzi a mezőszekvenciát – kereszthivatkozást kell adni erre a kimenetre egy teljes stat kimenetre.

Egyedi kimeneti formátumok

A statisztikai adatoktól eltérő adatkészlet beszerzésének jobb módja egyéni formátum használata. A formátumszekvenciáknak nevezett tokenek hosszú listája található. Ezek mindegyike egy-egy adatelemet jelent. Válassza ki azokat, amelyeket szerepeltetni szeretne a kimenetben, és hozzon létre egy formátum karakterláncot. Amikor meghívjuk a stat-ot és átadjuk neki a formátum karakterláncot, a kimenet csak az általunk kért adatelemeket tartalmazza.

A fájlokhoz és fájlrendszerekhez különböző formátumsorozatok léteznek. A fájlok listája a következő:

%a: A hozzáférési jogok nyolcas számban.
%A: A hozzáférési jogok ember által olvasható formában (rwx).
%b: A kiosztott blokkok száma.
%B: Az egyes blokkok mérete bájtban.
%d: Az eszköz száma decimálisan.
%D: Az eszköz száma hexadecimális formában.
%f: A nyers mód hexadecimális formában.
%F A fájl típusa.
%g: A tulajdonos csoportazonosítója.
%G: A tulajdonos csoportneve.
%h: A kemény hivatkozások száma.
%i: Az inode száma.
%m: A beillesztési pont.
%n: A fájl neve.
%N: Az idézett fájlnév, a hivatkozott fájlnévvel, ha szimbolikus hivatkozásról van szó.
%o: Az optimális I/O átviteli méretre vonatkozó tipp.
%s: A teljes méret bájtban.
%t: A fő eszköztípus hexadecimális formában, a karakter/blokk eszköz speciális fájljaihoz.
%T: A kisebb eszköztípus hexadecimális alakban, a karakter/blokk eszköz speciális fájljaihoz.
%u: A tulajdonos felhasználói azonosítója.
%U: A tulajdonos felhasználóneve.
%w: A fájl születési ideje, ember által olvasható, vagy kötőjel „-”, ha ismeretlen.
%W: A fájl születési ideje, másodpercek az Epoch óta; 0 ha ismeretlen.
%x: Az utolsó hozzáférés időpontja, ember által olvasható.
%X: Az utolsó hozzáférés ideje, másodpercek az Epoch óta.
%y: Az utolsó adatmódosítás ideje, ember által olvasható.
%Y: Az utolsó adatmódosítás ideje, másodpercek az Epoch óta.
%z: Az utolsó állapotváltozás időpontja, ember által olvasható.
%Z: Az utolsó állapotváltozás ideje, másodpercek az Epoch óta.

  A hivatkozások automatikus megnyitása a Chrome-ban iPhone és iPad készüléken

A „korszak” az Unix Epoch, amely 1970-01-01 00:00:00 +0000 (UTC) napon történt.

Fájlrendszerek esetén a formátum szekvenciák a következők:

%a: A normál (nem root) felhasználók számára elérhető ingyenes blokkok száma.
%b: Az összes adatblokk a fájlrendszerben.
%c: Az összes inode a fájlrendszerben.
%d: A fájlrendszerben lévő szabad inódok száma.
%f: A fájlrendszerben lévő szabad blokkok száma.
%i: A fájlrendszer azonosítója hexadecimális formában.
%l: A fájlnevek maximális hossza.
%n: A fájlnév.
%s: A blokk mérete (az optimális írásméret).
%S: A fájlrendszer-blokkok mérete (a blokkszámhoz).
%t: A fájlrendszer típusa hexadecimális formában.
%T: fájlrendszer típusa ember által olvasható formában.

Két lehetőség van, amely elfogadja a formátumsorozatok karakterláncait. Ezek a –format és –printf. A különbség köztük a –printf értelmezi C-stílusú escape szekvenciák például újsor n és tabulátor t , és nem ad hozzá automatikusan újsor karaktert a kimenetéhez.

Hozzunk létre egy formátum karakterláncot, és adjuk át a stat-nak. A használni kívánt formátumszekvenciák: %n a fájlnév, %s a fájl mérete és %F a fájltípus. Hozzáadjuk az n escape szekvenciát a karakterlánc végéhez, hogy megbizonyosodjunk arról, hogy minden fájl új sorban lesz kezelve. A formátum karakterláncunk így néz ki:

"File %n is %s bytes, and is a %Fn"

Ezt a –printf kapcsolóval továbbítjuk a stat-nak. Meg fogjuk kérni a statot, hogy tegyen jelentést egy code.c nevű fájlról és az ana.?-nak megfelelő fájlkészletről. Ez a teljes parancs. Vegye figyelembe a „=” egyenlőségjelet a –printf és a formátum karakterlánc között:

stat --printf="File %n is %s bytes, and is a %Fn" code.c ana/ana.?

stat --printf=

Az egyes fájlokhoz tartozó jelentés egy új sorban jelenik meg, ezt kértük. A fájlnév, a fájl mérete és a fájl típusa rendelkezésünkre áll.

Az egyéni formátumok még több adatelemhez biztosítanak hozzáférést, mint amennyit a szabványos stat kimenet tartalmaz.

Finom szemcseszabályozás

Amint látja, óriási lehetőség áll rendelkezésre az Önt érdeklő adatelemek kinyerésére. Valószínűleg azt is láthatja, miért javasoltuk az álnevek használatát a hosszabb és összetettebb varázsigékhez.