Cum să utilizați comanda stat pe Linux

Publicat: 2022-01-29
Un terminal Linux pe un desktop în stil Ubuntu.
Fatmawati Achmad Zaenuri/Shutterstock.com

Comanda Linux stat vă arată mult mai multe detalii decât face ls . Aruncă o privire în spatele cortinei cu acest utilitar informativ și configurabil. Vă vom arăta cum să-l utilizați.

stat te duce în culise

Comanda ls este excelentă în ceea ce face - și face multe - dar cu Linux, se pare că există întotdeauna o modalitate de a merge mai adânc și de a vedea ce se află sub suprafață. Și adesea, nu este vorba doar de ridicarea marginii covorului. Puteți să rupeți podeaua și apoi să sapi o groapă. Puteți curăța Linux ca pe o ceapă.

10 comenzi de bază Linux pentru începători
LEGATE 10 comenzi de bază Linux pentru începători

ls vă va arăta o mulțime de informații despre un fișier, cum ar fi ce permisiuni sunt setate pentru el și cât de mare este și dacă este un fișier sau o legătură simbolică. Pentru a afișa aceste informații, ls le citește dintr-o structură de sistem de fișiere numită inod.

Fiecare fișier și director are un inod. Inodul deține metadate despre fișier, cum ar fi blocurile de sistem de fișiere pe care le ocupă și ștampilele de dată asociate fișierului. Inodul este ca un card de bibliotecă pentru fișier. Dar ls vom arăta doar câteva dintre informații. Pentru a vedea totul, trebuie să folosim comanda stat .

La fel ca ls , comanda stat are o mulțime de opțiuni. Acest lucru îl face un candidat excelent pentru utilizarea aliasurilor. Odată ce ați descoperit un anumit set de opțiuni care fac ca stat să vă ofere rezultatul dorit, includeți-l într-o funcție alias sau shell. Acest lucru îl face mult mai convenabil de utilizat și nu trebuie să vă amintiți un set arcanic de opțiuni de linie de comandă.

LEGATE: Cum să utilizați comanda ls pentru a lista fișiere și directoare pe Linux

O comparație rapidă

Să folosim ls pentru a ne oferi o listă lungă (opțiunea -l ) cu dimensiuni de fișiere care pot fi citite de om (opțiunea -h ):

 ls -lh ana.h 

Publicitate

De la stânga la dreapta, informațiile pe care ls le furnizează sunt:

  • Primul caracter este o cratimă „-” și aceasta ne spune că fișierul este un fișier obișnuit și nu un socket, un link simbolic sau un alt tip de obiect.
  • Proprietarul, grupul și alte permisiuni sunt listate în format octal.
  • Numărul de link-uri hard care indică acest fișier. În acest caz, și în cele mai multe cazuri, va fi unul.
  • Proprietarul fișierului este Dave.
  • Proprietarul grupului este Dave.
  • Dimensiunea fișierului este de 802 octeți.
  • Ultima modificare a fișierului a fost vineri, 13 decembrie 2015.
  • Numele fișierului este ana.c

Să aruncăm o privire cu stat :

 stat ana.h 

Informațiile pe care le obținem de la stat sunt:

  • Fișier : numele fișierului. De obicei, este același cu numele pe care l-am transmis la stat pe linia de comandă, dar poate fi diferit dacă ne uităm la o legătură simbolică.
  • Dimensiune : dimensiunea fișierului în octeți.
  • Blocuri : numărul de blocuri de sistem de fișiere pe care fișierul le necesită, pentru a fi stocat pe hard disk.
  • Bloc IO : dimensiunea unui bloc de sistem de fișiere.
  • Tip de fișier : tipul de obiect descris de metadatele. Cele mai comune tipuri sunt fișierele și directoarele, dar pot fi, de asemenea, link-uri, socket-uri sau named pipes.
  • Dispozitiv : numărul dispozitivului în hexazecimal și zecimal. Acesta este ID-ul hard disk-ului pe care este stocat fișierul.
  • Inode : numărul inodului. Adică numărul de identificare al acestui inod. Împreună, numărul inodului și numărul dispozitivului identifică în mod unic un fișier.
  • Legături : acest număr indică câte legături rigide indică acest fișier. Fiecare hard link are propriul inod. Deci, un alt mod de a gândi la această cifră este câte inoduri indică acest fișier. De fiecare dată când se creează sau se șterge o legătură hard, acest număr va fi ajustat în sus sau în jos. Când ajunge la zero, fișierul în sine a fost șters, iar inodul este eliminat. Dacă utilizați stat într-un director, acest număr reprezintă numărul de fișiere din director, inclusiv „.” intrarea pentru directorul curent și intrarea „..” pentru directorul părinte.
  • Acces : permisiunile fișierelor sunt afișate în rwx lor octal și tradițional (formate de citire, scriere, execuție).
  • Uid : ID de utilizator și numele contului proprietarului.
  • Gid : ID-ul grupului și numele contului proprietarului.
  • Acces : marcajul de timp al accesului. Nu atât de simplu pe cât ar părea. Distribuțiile moderne Linux folosesc o schemă numită relatime , care încearcă să optimizeze scrierile pe hard disk necesare pentru a actualiza timpul de acces. Mai simplu spus, timpul de acces este actualizat dacă este mai vechi decât timpul modificat.
  • Modificare : marcajul de timp al modificării. Acesta este momentul când conținutul fișierului a fost modificat ultima dată. (După noroc, conținutul acestui fișier a fost modificat ultima dată în urmă cu patru ani.)
  • Modificare : marcajul de timp al modificării. Acesta este momentul în care atributele sau conținutul fișierului au fost modificate ultima dată. Dacă modificați un fișier setând noi permisiuni pentru fișiere, marcajul de timp al modificării va fi actualizat (deoarece atributele fișierului s-au schimbat), dar marcajul de timp modificat nu va fi actualizat (deoarece conținutul fișierului nu a fost modificat).
  • Naștere : Rezervat pentru a afișa data originală de creare a fișierului, dar aceasta nu este implementată în Linux.

Înțelegerea marcajelor de timp

Marcajele de timp sunt sensibile la fusul orar. Semnul -0500 de la sfârșitul fiecărei linii arată că acest fișier a fost creat pe un computer într-un fus orar Coordonat Universal Time (UTC) care este cu cinci ore înainte de fusul orar al computerului curent. Deci acest computer este cu cinci ore în urmă față de computerul care a creat acest fișier. De fapt, fișierul a fost creat pe un computer de fus orar din Regatul Unit și îl analizăm aici pe un computer din fusul orar standard de est al SUA.

Modificarea și modificarea marcajelor de timp poate provoca confuzie, deoarece, pentru cei neinițiați, numele lor sună ca și cum ar însemna același lucru.

Să folosim chmod pentru a modifica permisiunile fișierului pe un fișier numit ana.c . Vom face să fie scris de toată lumea. Acest lucru nu va afecta conținutul fișierului, dar va afecta atributele fișierului.

 chmod +w ana.c

Și apoi vom folosi stat pentru a ne uita la marcajele de timp:

 stat ana.c 

Publicitate

Marca temporală a modificării a fost actualizată, dar cea modificată nu.

Marca temporală modificată va fi actualizată numai dacă se modifică conținutul fișierului. Marca temporală a modificării este actualizată atât pentru modificările de conținut, cât și pentru modificările atributelor.

Utilizarea Stat cu mai multe fișiere

Pentru a avea un raport statistic pentru mai multe fișiere simultan, transmiteți numele fișierelor la stat pe linia de comandă:

 stat ana.h ana.o 

Pentru a utiliza stat pentru un set de fișiere, utilizați potrivirea modelelor. Semnul întrebării „?” reprezintă orice caracter unic, iar asteriscul „*” reprezintă orice șir de caractere. Putem spune stat să raporteze orice fișier numit „ana” cu o singură extensie de literă, cu această comandă:

 stat ana.? 

Folosind stat pentru a raporta sistemele de fișiere

stat poate raporta starea sistemelor de fișiere, precum și starea fișierelor. Opțiunea -f (sistem de fișiere) îi spune stat să raporteze sistemul de fișiere în care se află fișierul. Rețineți că putem trece, de asemenea, un director precum „/” la stat în loc de un nume de fișier.

 stat -f ana.c 

Informațiile pe care ni le oferă stat sunt:

  • Fișier : numele fișierului.
  • ID : ID-ul sistemului de fișiere în notație hexazecimală.
  • Namelen : lungimea maximă permisă pentru numele fișierelor.
  • Tip : tipul sistemului de fișiere.
  • Dimensiune bloc : cantitatea de date pentru a solicita cereri de citire pentru rate optime de transfer de date.
  • Dimensiunea fundamentală a blocului : dimensiunea fiecărui bloc de sistem de fișiere.

Blocuri:

  • Total : Numărul total al tuturor blocurilor din sistemul de fișiere.
  • Gratuit : numărul de blocuri libere din sistemul de fișiere.
  • Disponibil : numărul de blocuri gratuite disponibile pentru utilizatorii obișnuiți (non-root).

Inode:

  • Total : numărul total de inoduri din sistemul de fișiere.
  • Gratuit : numărul de inoduri libere din sistemul de fișiere.

Dereferențierea legăturilor simbolice

Dacă utilizați stat pe un fișier care este de fapt un link simbolic, acesta va raporta pe link. Dacă doriți ca stat să raporteze fișierul către care trimite linkul, utilizați opțiunea -L (referință). Fișierul code.c este o legătură simbolică către ana.c . Să ne uităm la asta fără opțiunea -L :

 cod statistic.c 

Publicitate

Numele fișierului arată code.c indicând spre ( -> ) ana.c Dimensiunea fișierului este de numai 11 octeți. Există zero blocuri dedicate stocării acestui link. Tipul de fișier este listat ca link simbolic.

În mod clar, nu ne uităm la fișierul real aici. Să facem asta din nou și să adăugăm opțiunea -L :

 stat -L cod.c 

Aceasta afișează acum detaliile fișierului pentru fișierul indicat de linkul simbolic. Dar rețineți că numele fișierului este încă dat ca code.c . Acesta este numele linkului, nu fișierul țintă. Acest lucru se întâmplă deoarece acesta este numele pe care l-am transmis stat pe linia de comandă.

Raportul concis

Opțiunea -t (concisă) face ca stat să furnizeze un rezumat condensat:

 stat -t ana.c 

Nu sunt date indicii. Pentru a înțelege acest lucru, până când ați memorat secvența câmpului, trebuie să faceți referințe încrucișate la această ieșire cu o ieșire stat completă.

Formate personalizate de ieșire

O modalitate mai bună de a obține un set diferit de date de la stat este să utilizați un format personalizat. Există o listă lungă de jetoane numite secvențe de format. Fiecare dintre acestea reprezintă un element de date. Selectați-le pe cele pe care doriți să le includeți în rezultat și creați un șir de format. Când apelăm stat și îi transmitem șirul de format, rezultatul va include doar elementele de date pe care le-am solicitat.

Publicitate

Există diferite seturi de secvențe de format pentru fișiere și sisteme de fișiere. Lista de fișiere este:

  • %a : Drepturile de acces în octal.
  • %A : Drepturile de acces în formă care poate fi citită de om ( 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 hexadecimal.
  • %f : Modul brut în hexadecimal.
  • %F Tipul fișierului.
  • %g : ID-ul de grup al proprietarului.
  • %G : Numele grupului proprietarului.
  • %h : Numărul de link-uri hard.
  • %i : numărul inodului.
  • %m : Punctul de montare.
  • %n : Numele fișierului.
  • %N : Numele fișierului citat, cu numele fișierului dereferențiat dacă este o legătură simbolică.
  • %o : Sugestia de dimensiune optimă a transferului I/O.
  • %s : dimensiunea totală, în octeți.
  • %t : Tipul principal de dispozitiv în hexadecimal, pentru fișierele speciale pentru dispozitive de tip caracter/bloc.
  • %T : Tipul minor de dispozitiv în hexadecimal, pentru fișierele speciale pentru dispozitive de tip caracter/bloc.
  • %u : ID-ul de utilizator al proprietarului.
  • %U : numele de utilizator al proprietarului.
  • %w : ora nașterii fișierului, care poate fi citită de om sau o cratimă „-” dacă nu este cunoscută.
  • %W : Ora nașterii fișierului, secunde de la Epocă; 0 dacă necunoscut.
  • %x : ora ultimului acces, care poate fi citită de om.
  • %X : Ora ultimului acces, secunde de la Epocă.
  • %y : ora ultimei modificări a datelor, care poate fi citită de om.
  • %Y : Ora ultimei modificări a datelor, secunde de la Epocă.
  • %z : ora ultimei schimbări de stare, care poate fi citită de om.
  • %Z : Ora ultimei schimbări de stare, secunde de la Epocă.

„Epoca” este Epoca Unix, care a avut loc la 1970-01-01 00:00:00 +0000 (UTC).

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

  • %a : numărul de blocuri gratuite disponibile pentru utilizatorii obișnuiți (non-root).
  • %b : totalul blocurilor de date din sistemul de fișiere.
  • %c : Numărul total de inoduri din sistemul de fișiere.
  • %d : numărul de inoduri libere din sistemul de fișiere.
  • %f : numărul de blocuri libere din sistemul de fișiere.
  • %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 este hexazecimal.
  • %T : tip de sistem de fișiere în formă care poate fi citită de om.

Există două opțiuni care acceptă șiruri de secvențe de format. Acestea sunt --format și --printf . Diferența dintre ele este --printf interpretează secvențele de evadare în stil C, cum ar fi newline \n și tab \t , și nu adaugă automat un caracter newline la ieșirea sa.

Să creăm un șir de format și să-l transmitem la stat . Secvențele de format pe care urma să le folosească sunt %n pentru numele fișierului, %s pentru dimensiunea fișierului și %F pentru tipul fișierului. Vom adăuga secvența de escape \n la sfârșitul șirului pentru a ne asigura că fiecare fișier este tratat pe o linie nouă. Șirul nostru de format arată astfel:

 „Fișierul %n are %s octeți și este un %F\n”

Vom transmite acest lucru către stat folosind opțiunea --printf . Vom cere stat să raporteze un fișier numit code.c și un set de fișiere care se potrivesc cu ana.? . Aceasta este comanda completă. Rețineți semnul egal „ = ” între --printf și șirul de format:

 stat --printf="Fișierul %n are %s octeți și este un cod %F\n".c ana/ana.? 

Raportul pentru fiecare dosar este listat pe un rând nou, ceea ce am solicitat. Numele fișierului, dimensiunea fișierului și tipul fișierului ne sunt furnizate.

Publicitate

Formatele personalizate vă oferă acces la și mai multe elemente de date decât sunt incluse în ieșirea stat standard.

Controlul cerealelor fine

După cum puteți vedea, există o mare posibilitate de a extrage anumite elemente de date care vă interesează. Probabil puteți vedea și de ce v-am recomandat folosirea pseudonimelor pentru incantațiile mai lungi și mai complexe.

LEGATE: Cele mai bune laptopuri Linux pentru dezvoltatori și entuziaști