Cum să utilizați comanda stat pe Linux

Comanda Linux stat dezvăluie detalii mult mai ample comparativ cu ls. Acest instrument informativ și adaptabil permite o analiză profundă a datelor. În continuare, vom explora modul de utilizare.

Explorarea detaliilor cu `stat`

Deși comanda ls este performantă în rolul său, în universul Linux există mereu oportunitatea de a investiga mai în profunzime. Asemănător cu examinarea straturilor unei cepe, comanda stat ne permite să disecăm informații despre fișiere.

ls prezintă detalii esențiale, precum permisiunile, dimensiunea și tipul unui fișier. Această informație este extrasă dintr-o structură a sistemului de fișiere numită inod.

Fiecare fișier sau director are alocat un inod. Inodul stochează metadate despre fișier, cum ar fi locurile de stocare și timpii de acces. Este, practic, un card de identificare detaliat pentru fișier. Cu toate acestea, ls expune doar o parte din aceste informații. Pentru o analiză completă, utilizăm comanda stat.

Similar cu ls, comanda stat oferă numeroase opțiuni, ceea ce o face ideală pentru aliasuri. Configurarea unui set de opțiuni personalizat într-un alias sau funcție shell simplifică semnificativ utilizarea și elimină necesitatea de a memora comenzi complexe.

Comparație rapidă între ls și stat

Vom utiliza ls pentru a afișa o listă extinsă (opțiunea -l) cu dimensiuni lizibile (opțiunea -h) pentru un fișier:

ls -lh ana.h

Rezultatul oferit de ls este structurat astfel:

  • Primul caracter indică tipul fișierului (un minus - semnifică un fișier obișnuit).
  • Permisiunile de acces (proprietar, grup, alții) sunt reprezentate în format octal.
  • Numărul de legături hard către fișier (de obicei, este 1).
  • Proprietarul fișierului (în acest caz, „Dave”).
  • Grupul de proprietari (tot „Dave”).
  • Dimensiunea fișierului în octeți.
  • Data și ora ultimei modificări.
  • Numele fișierului.

Acum vom folosi stat pe același fișier:

stat ana.h

Informațiile furnizate de stat sunt:

  • Fișier: Numele fișierului, identic cu cel introdus (dar poate diferi pentru legături simbolice).
  • Dimensiune: Mărimea fișierului în octeți.
  • Blocuri: Numărul de blocuri necesare pentru stocarea fișierului.
  • Bloc IO: Dimensiunea unui bloc de sistem de fișiere.
  • Tip de fișier: Tipul obiectului (fișier, director, legătură, socket, etc.).
  • Dispozitiv: ID-ul dispozitivului de stocare, afișat în hexazecimal și zecimal.
  • Inode: Numărul inodului, unic pentru fișier.
  • Legături: Numărul de legături hard către acest inod.
  • Acces: Permisiunile fișierului, în format octal și rwx.
  • Uid: ID-ul și numele proprietarului.
  • Gid: ID-ul și numele grupului proprietarului.
  • Acces: Timestamp-ul ultimului acces (actualizat conform unei strategii de optimizare).
  • Modificare: Timestamp-ul ultimei modificări de conținut.
  • Schimbare: Timestamp-ul ultimei modificări de atribute (permisiuni etc.).
  • Naștere: Momentul creării fișierului (neimplementat în Linux).

Interpretarea Timestamp-urilor

Timestamp-urile sunt influențate de fusul orar. Sufixul -0500 indică o diferență de cinci ore față de fusul orar curent al sistemului. Acest lucru evidențiază discrepanțe între momentele creării și analizării fișierului, provenind din fusuri orare diferite.

Diferența dintre modificare și schimbare poate fi confuză. Modificarea se referă la modificarea conținutului, în timp ce schimbarea se referă la orice modificare a metadatelor (inclusiv permisiunile).

Să ilustrăm acest lucru modificând permisiunile unui fișier:

chmod +w ana.c

Verificăm modificările cu stat:

stat ana.c

Observăm că timestamp-ul de schimbare a fost actualizat, în timp ce timestamp-ul de modificare a rămas neschimbat.

Utilizarea `stat` cu mai multe fișiere

Pentru a obține statistici pentru mai multe fișiere simultan, enumerați-le după comanda stat:

stat ana.h ana.o

Pentru selecții bazate pe modele, folosiți simbolurile ? (un caracter) și * (un șir de caractere):

stat ana.?

Analiza sistemelor de fișiere cu `stat`

Comanda stat poate evalua și sistemele de fișiere. Opțiunea -f indică raportarea informațiilor sistemului de fișiere al fișierului specificat. Un director, precum /, poate fi utilizat în loc de un fișier:

stat -f ana.c

Informațiile prezentate includ:

  • Fișier: Numele fișierului.
  • ID: ID-ul sistemului de fișiere în hexazecimal.
  • Namelen: Lungimea maximă admisă a numelor de fișiere.
  • Tip: Tipul sistemului de fișiere.
  • Dimensiunea blocului: Cantitatea optimă de date pentru citire.
  • Dimensiunea fundamentală a blocului: Dimensiunea blocului sistemului de fișiere.

Blocuri:

  • Total: Numărul total de blocuri.
  • Gratuit: Numărul de blocuri libere.
  • Disponibil: Blocuri disponibile pentru utilizatorii obișnuiți.

Inode:

  • Total: Numărul total de inoduri.
  • Gratuit: Numărul de inoduri libere.

Dereferențierea legăturilor simbolice

Când folosiți stat pe o legătură simbolică, implicit se vor afișa informațiile legăturii. Pentru a obține informațiile fișierului țintă, folosiți opțiunea -L (referință). Presupunem că code.c este o legătură simbolică către ana.c:

stat code.c

Acest rezultat prezintă informații despre legătura simbolică code.c. Pentru a obține detaliile despre ana.c, adăugăm opțiunea -L:

stat -L code.c

Acum sunt afișate detaliile fișierului ana.c, chiar dacă numele fișierului raportat este code.c (numele legăturii simbolice).

Raport concis

Opțiunea -t oferă un rezumat condensat al informațiilor:

stat -t ana.c

Rezultatul este concis, dar fără indicatoare, necesită o memorare a ordinii câmpurilor pentru a fi interpretat corect.

Formate personalizate de ieșire

O modalitate flexibilă de a obține date de la stat este utilizarea formatelor personalizate. Secvențele de format sunt jetoane care reprezintă elemente de date specifice. Selectând secvențele dorite și creând un șir de format, rezultatul va include doar datele selectate.

Există seturi separate de secvențe de format pentru fișiere și sisteme de fișiere. Pentru fișiere, avem:

  • %a: Permisiunile de acces în octal.
  • %A: Permisiunile de acces în format rwx.
  • %b: Numărul de blocuri alocate.
  • %B: Dimensiunea în octeți a fiecărui bloc.
  • %d: Numărul dispozitivului în zecimal.
  • %D: Numărul dispozitivului în hexazecimal.
  • %f: Modul brut în hexazecimal.
  • %F: Tipul fișierului.
  • %g: ID-ul grupului proprietarului.
  • %G: Numele grupului proprietarului.
  • %h: Numărul de legături hard.
  • %i: Numărul inodului.
  • %m: Punctul de montare.
  • %n: Numele fișierului.
  • %N: Numele fișierului citat (cu numele dereferențiat pentru legături).
  • %o: Sugestia optimă de dimensiune pentru transfer I/O.
  • %s: Dimensiunea totală în octeți.
  • %t: Tipul major de dispozitiv în hexazecimal.
  • %T: Tipul minor de dispozitiv în hexazecimal.
  • %u: ID-ul de utilizator al proprietarului.
  • %U: Numele de utilizator al proprietarului.
  • %w: Timpul de naștere al fișierului (format lizibil).
  • %W: Timpul de naștere al fișierului (secunde de la Epocă).
  • %x: Timpul ultimului acces (format lizibil).
  • %X: Timpul ultimului acces (secunde de la Epocă).
  • %y: Timpul ultimei modificări de date (format lizibil).
  • %Y: Timpul ultimei modificări de date (secunde de la Epocă).
  • %z: Timpul ultimei schimbări de stare (format lizibil).
  • %Z: Timpul ultimei schimbări de stare (secunde de la Epocă).

Epoca este Epoca Unix (1970-01-01 00:00:00 +0000 UTC).

Pentru sistemele de fișiere, secvențele de format sunt:

  • %a: Blocuri gratuite disponibile pentru utilizatorii obișnuiți.
  • %b: Totalul blocurilor de date.
  • %c: Numărul total de inoduri.
  • %d: Numărul de inoduri libere.
  • %f: Numărul de blocuri libere.
  • %i: ID-ul sistemului de fișiere în hexazecimal.
  • %l: Lungimea maximă a numelor de fișiere.
  • %n: Numele fișierului.
  • %s: Dimensiunea blocului (dimensiunea optimă de scriere).
  • %S: Dimensiunea blocurilor sistemului de fișiere (pentru numărul de blocuri).
  • %t: Tipul sistemului de fișiere în hexazecimal.
  • %T: Tipul sistemului de fișiere în format lizibil.

Opțiunile --format și --printf acceptă șiruri de secvențe de format. --printf interpretează secvențele de evadare în stil C (\n pentru linie nouă, \t pentru tab) și nu adaugă automat o linie nouă la final.

Să creăm un șir de format personalizat: "File %n is %s bytes, and is a %F\n". Acest șir va afișa numele fișierului, dimensiunea și tipul, pe o linie nouă.

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

Rezultatul va include un raport structurat, cu informațiile dorite.

Formatele personalizate oferă acces extins la date, depășind informațiile standard afișate de stat.

Control precis al informațiilor

După cum se poate observa, stat oferă o gamă largă de posibilități pentru extragerea datelor dorite. Recomandarea utilizării aliasurilor pentru comenzile complexe devine evidentă.