Cum să utilizați comanda stat pe Linux
Publicat: 2022-01-29 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ă.
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
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
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
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.
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.
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.
Comenzi Linux | ||
Fișiere | tar · pv · cat · tac · chmod · grep · diff · sed · ar · om · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · tip · redenumire · zip · dezarhivare · montare · demontare · instalare · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
Procese | alias · ecran · sus · frumos · renice · progres · strace · systemd · tmux · chsh · istoric · la · lot · gratuit · care · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · da · kill · sleep · sudo · su · time · groupadd · usermod · grupuri · lshw · shutdown · repornire · stop · poweroff · passwd · lscpu · crontab · data · bg · fg | |
Rețele | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
LEGATE: Cele mai bune laptopuri Linux pentru dezvoltatori și entuziaști