Sådan bruger du stat-kommandoen på Linux

Linux stat-kommandoen viser dig meget flere detaljer end ls gør. Tag et kig bag gardinet med dette informative og konfigurerbare hjælpeprogram. Vi viser dig, hvordan du bruger det.

stat tager dig med bag kulisserne

ls-kommandoen er fantastisk til, hvad den gør – og den gør meget – men med Linux ser det ud til, at der altid er en måde at gå dybere og se, hvad der ligger under overfladen. Og ofte er det ikke kun et tilfælde af at løfte kanten af ​​tæppet. Du kan rive gulvbrædderne op og derefter grave et hul. Du kan skrælle Linux som et løg.

ls vil vise dig en hel del information om en fil, såsom hvilke tilladelser der er sat på den, og hvor stor den er, og om det er en fil eller et symbolsk link. For at vise denne information læser jeg den fra en filsystemstruktur kaldet en inode.

Hver fil og mappe har en inode. Inoden holder metadata om filen, såsom hvilke filsystemblokke den optager, og de datostempler, der er knyttet til filen. Inoden er som et bibliotekskort til filen. Men jeg vil kun vise dig nogle af oplysningerne. For at se alt skal vi bruge stat-kommandoen.

Ligesom ls har stat-kommandoen mange muligheder. Dette gør det til en god kandidat til brug af aliaser. Når du har opdaget et bestemt sæt muligheder, der får stat til at give dig det output, du ønsker, skal du pakke det ind i et alias eller en shell-funktion. Dette gør det meget mere bekvemt at bruge, og du behøver ikke at huske et mystisk sæt kommandolinjeindstillinger.

En hurtig sammenligning

Lad os bruge ls til at give os en lang liste (-l option) med menneskelæselige filstørrelser (-h option):

ls -lh ana.h

Fra venstre mod højre er de oplysninger, som ls giver:

Det allerførste tegn er en bindestreg “-“, og dette fortæller os, at filen er en almindelig fil og ikke en socket, et symbolsk link eller en anden type objekt.
Ejeren, gruppen og andre tilladelser er angivet i oktalt format.
Antallet af hårde links, der peger på denne fil. I dette tilfælde, og i de fleste tilfælde, vil det være en.
Filejeren er dave.
Gruppeejeren er dave.
Filstørrelsen er 802 bytes.
Filen blev senest ændret fredag ​​den 13. december 2015.
Filnavnet er ana.c.

Lad os tage et kig med stat:

stat ana.h

Oplysningerne vi får fra stat er:

Fil: Navnet på filen. Normalt er det det samme som det navn, vi sendte til stat på kommandolinjen, men det kan være anderledes, hvis vi ser på et symbolsk link.
Størrelse: Filens størrelse i bytes.
Blokke: Antallet af filsystemblokeringer filen kræver, for at blive gemt på harddisken.
IO-blok: Størrelsen af ​​en filsystemblok.
Filtype: Den type objekt metadataene beskriver. De mest almindelige typer er filer og mapper, men de kan også være links, sockets eller navngivne rør.
Enhed: Enhedsnummeret i hexadecimal og decimal. Dette er ID’et på den harddisk, filen er gemt på.
Inode: Inodenummeret. Det vil sige ID-nummeret på denne inode. Sammen identificerer inodenummeret og enhedsnummeret en fil entydigt.
Links: Dette tal angiver, hvor mange hårde links, der peger på denne fil. Hvert hårdt led har sin egen inode. Så en anden måde at tænke på denne figur på er, hvor mange inoder der peger på denne ene fil. Hver gang et hårdt link oprettes eller slettes, vil dette tal blive justeret op eller ned. Når den når nul, er selve filen blevet slettet, og inoden fjernes. Hvis du bruger stat på en mappe, repræsenterer dette nummer antallet af filer i mappen, inklusive “.” posten for den aktuelle mappe og “..” posten for den overordnede mappe.
Adgang: Filtilladelserne vises i deres oktale og traditionelle rwx (læse, skrive, udføre formater).
Uid: Bruger-id og kontonavn på ejeren.
Gid: Gruppe-id og kontonavn på ejeren.
Adgang: Adgangstidsstemplet. Ikke så ligetil, som det kan se ud. Moderne Linux-distributioner bruger et skema kaldet relatime, som forsøger at optimere den nødvendige harddiskskrivning for at opdatere adgangstiden. Kort sagt opdateres adgangstiden, hvis den er ældre end den ændrede tid.
Ændre: Ændringstidsstemplet. Dette er tidspunktet, hvor filens indhold sidst blev ændret. (Som held ville have det, blev indholdet af denne fil sidst ændret for fire år siden til i dag.)
Ændring: Ændringstidsstemplet. Dette er det tidspunkt, hvor filens attributter eller indhold sidst blev ændret. Hvis du ændrer en fil ved at indstille nye filtilladelser, vil ændringstidsstemplet blive opdateret (fordi filattributterne er ændret), men det ændrede tidsstempel vil ikke blive opdateret (fordi filindholdet ikke blev ændret).
Fødsel: Reserveret til at vise filens oprindelige oprettelsesdato, men dette er ikke implementeret i Linux.

  Sådan installeres Gnome 40 på Linux tidligt

Forstå tidsstemplerne

Tidsstemplerne er tidszonefølsomme. -0500 i slutningen af ​​hver linje viser, at denne fil blev oprettet på en computer i en Koordineret universel tid (UTC) tidszone, der er fem timer foran tidszonen for den aktuelle computer. Så denne computer er fem timer efter den computer, der oprettede denne fil. Faktisk blev filen oprettet på en britisk tidszonecomputer, og vi ser på den her på en computer i US Eastern Standard-tidszonen.

Ændring og ændring af tidsstempler kan forårsage forvirring, fordi for uindviede lyder deres navne, som om de betyder det samme.

Lad os bruge chmod til at ændre filtilladelserne på en fil kaldet ana.c. Vi vil gøre det skrivbart for alle. Dette vil ikke påvirke indholdet af filen, men det vil påvirke filens attributter.

chmod +w ana.c

Og så bruger vi stat til at se på tidsstemplerne:

stat ana.c

Ændringstidsstemplet er blevet opdateret, men det ændrede er ikke.

Det ændrede tidsstempel vil kun blive opdateret, hvis indholdet af filen ændres. Ændringstidsstemplet opdateres for både indholdsændringer og attributændringer.

  Sådan installeres en Debian-pakke på enhver Linux-distribution

Brug af Stat med flere filer

For at få en stat rapport om flere filer på én gang skal du videregive filnavnene til stat på kommandolinjen:

stat ana.h ana.o

For at bruge stat på et sæt filer skal du bruge mønstertilpasning. Spørgsmålstegnet “?” repræsenterer ethvert enkelt tegn, og stjernen “*” repræsenterer enhver streng af tegn. Vi kan fortælle stat at rapportere om enhver fil kaldet “ana” med en enkeltbogstavs udvidelse, med denne kommando:

stat ana.?

Brug af stat til at rapportere om filsystemer

stat kan rapportere om status for filsystemer, såvel som status for filer. Indstillingen -f (filsystem) fortæller stat at rapportere om det filsystem, som filen ligger på. Bemærk, at vi også kan sende en mappe som “/” til stat i stedet for et filnavn.

stat -f ana.c

Informationsstatistikken giver os er:

Fil: Navnet på filen.
ID: Filsystem-id’et i hexadecimal notation.
Namelen: Den maksimalt tilladte længde for filnavne.
Type: Typen af ​​filsystem.
Blokstørrelse: Mængden af ​​data, der skal anmodes om læseanmodninger for optimale dataoverførselshastigheder.
Fundamental blokstørrelse: Størrelsen af ​​hver filsystemblok.

Blokke:

Total: Det samlede antal af alle blokke i filsystemet.
Gratis: Antallet af ledige blokke i filsystemet.
Tilgængelig: Antallet af gratis blokke, der er tilgængelige for almindelige (ikke-root) brugere.

Inoder:

Total: Det samlede antal inoder i filsystemet.
Gratis: Antallet af ledige inoder i filsystemet.

Der henvises til symbolske links

Hvis du bruger stat på en fil, der faktisk er et symbolsk link, vil den rapportere om linket. Hvis du ville have stat til at rapportere om filen, som linket peger på, skal du bruge -L (dereference) muligheden. Filen code.c er et symbolsk link til ana.c. Lad os se på det uden -L-indstillingen:

stat code.c

Filnavnet viser code.c, der peger på ( -> ) ana.c. Filstørrelsen er kun 11 bytes. Der er nul blokke afsat til at gemme dette link. Filtypen er angivet som et symbolsk link.

Det er klart, at vi ikke ser på den faktiske fil her. Lad os gøre det igen og tilføje -L-indstillingen:

stat -L code.c

Dette viser nu fildetaljerne for filen, der peges på af det symbolske link. Men bemærk, at filnavnet stadig er angivet som code.c. Dette er navnet på linket, ikke målfilen. Dette sker, fordi dette er det navn, vi videregav til stat på kommandolinjen.

Terse-rapporten

Indstillingen -t (terse) får stat til at give en komprimeret oversigt:

stat -t ana.c

Der er ingen ledetråde givet. For at få mening ud af det – indtil du har husket feltsekvensen – skal du krydshenvise dette output til et fuldt statistisk output.

Brugerdefinerede outputformater

En bedre måde at få et andet sæt data fra stat er at bruge et brugerdefineret format. Der er en lang liste af tokens kaldet formatsekvenser. Hver af disse repræsenterer et dataelement. Vælg dem, du vil have inkluderet i outputtet, og opret en formatstreng. Når vi kalder stat og sender formatstrengen til den, vil output kun indeholde de dataelementer, vi har anmodet om.

  Sådan bruger du bash til at oprette mapper i Linux [Guide]

Der er forskellige sæt formatsekvenser for filer og filsystemer. Listen for filer er:

%a: Adgangsrettighederne i oktal.
%A: Adgangsrettighederne i menneskelæsbar form (rwx).
%b: Antallet af tildelte blokke.
%B: Størrelsen i bytes af hver blok.
%d: Enhedsnummeret i decimal.
%D: Enhedsnummeret i hex.
%f: Den rå tilstand i hex.
%F Filtypen.
%g: Ejerens gruppe-id.
%G: Ejerens gruppenavn.
%h: Antallet af hårde links.
%i: Inodenummeret.
%m: Monteringspunktet.
%n: Filnavnet.
%N: Det citerede filnavn, med derhenvist filnavn, hvis det er et symbolsk link.
%o: Tip til den optimale I/O-overførselsstørrelse.
%s: Den samlede størrelse i bytes.
%t: Den primære enhedstype i hex for tegn/blok-enheds-specialfiler.
%T: Den underordnede enhedstype i hex for tegn/blokenheds-specialfiler.
%u: Ejerens bruger-id.
%U: Brugernavnet på ejeren.
%w: Tidspunktet for filens fødsel, læsbar af mennesker eller en bindestreg “-“, hvis ukendt.
%W: Tidspunktet for filfødsel, sekunder siden epoken; 0 hvis ukendt.
%x: Tidspunktet for sidste adgang, kan læses af mennesker.
%X: Tidspunktet for sidste adgang, sekunder siden epoken.
%y: Tidspunktet for sidste dataændring, læsbar for mennesker.
%Y: Tidspunktet for sidste dataændring, sekunder siden epoken.
%z: Tidspunktet for sidste statusændring, læsbar for mennesker.
%Z: Tidspunktet for sidste statusændring, sekunder siden epoken.

“Epoken” er Unix epoke, som fandt sted den 1970-01-01 00:00:00 +0000 (UTC).

For filsystemer er formatsekvenserne:

%a: Antallet af gratis blokke, der er tilgængelige for almindelige (ikke-root) brugere.
%b: De samlede datablokke i filsystemet.
%c: Det samlede antal inoder i filsystemet.
%d: Antallet af ledige inoder i filsystemet.
%f: Antallet af ledige blokke i filsystemet.
%i: Filsystem-id’et i hexadecimal.
%l: Den maksimale længde af filnavne.
%n: Filnavnet.
%s: Blokstørrelsen (den optimale skrivestørrelse).
%S: Størrelsen af ​​filsystemblokke (til blokantal).
%t: Filsystemtypen er hexadecimal.
%T: filsystemtype i menneskelæselig form.

Der er to muligheder, der accepterer strenge af formatsekvenser. Disse er –format og –printf. Forskellen mellem dem er –printf fortolker C-stil flugtsekvenser såsom newline n og tab t, og den tilføjer ikke automatisk et newline-tegn til outputtet.

Lad os oprette en formatstreng og sende den til stat. Formatsekvenserne skulle bruge er %n for filnavn, %s for størrelsen på filen og %F for filtypen. Vi vil tilføje n escape-sekvensen til slutningen af ​​strengen for at sikre, at hver fil håndteres på en ny linje. Vores formatstreng ser sådan ud:

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

Vi vil videregive dette til stat ved hjælp af –printf-indstillingen. Vi vil bede stat om at rapportere om en fil kaldet code.c og et sæt filer, der matcher ana.?. Dette er den fulde kommando. Bemærk lighedstegnet “=” mellem –printf og formatstrengen:

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

stat --printf=

Rapporten for hver fil er opført på en ny linje, hvilket er det, vi har bedt om. Filnavnet, filstørrelsen og filtypen leveres til os.

Brugerdefinerede formater giver dig adgang til endnu flere dataelementer, end der er inkluderet i standardstatoutputtet.

Finkornskontrol

Som du kan se, er der enorme muligheder for at udtrække de særlige dataelementer, der er af interesse for dig. Du kan sikkert også se, hvorfor vi anbefalede at bruge aliaser til de længere og mere komplekse besværgelser.