Fatmawati Achmad Zaenuri/Shutterstock.com
Das Linux stat
Befehl zeigt Ihnen viel mehr Details als ls
tut. Werfen Sie mit diesem informativen und konfigurierbaren Dienstprogramm einen Blick hinter die Kulissen. Wir zeigen Ihnen, wie Sie es verwenden.
stat führt Sie hinter die Kulissen
Der ls
Command ist großartig in dem, was es tut – und es kann viel –, aber mit Linux scheint es immer einen Weg zu geben, tiefer zu gehen und zu sehen, was unter der Oberfläche liegt. Und oft geht es nicht nur darum, den Rand des Teppichs anzuheben. Sie können die Dielen aufreißen und dann ein Loch graben. Sie können Linux wie eine Zwiebel schälen.
ls
zeigt Ihnen viele Informationen zu einer Datei an, z. B. welche Berechtigungen für sie festgelegt sind, wie groß sie ist und ob es sich um eine Datei oder einen symbolischen Link handelt. Um diese Informationen anzuzeigen ls
liest es aus a Dateisystemstruktur namens Inode.
Jede Datei und jedes Verzeichnis hat einen Inode. Die Inode hält Metadaten zur Datei, z. B. welche Dateisystemblöcke es belegt, und die mit der Datei verknüpften Datumsstempel. Der Inode ist wie ein Bibliotheksausweis für die Datei. Aber ls
zeigt Ihnen nur einige der Informationen an. Um alles zu sehen, müssen wir die stat
Befehl.
Mögen ls
, das stat
Befehl hat viele Optionen. Dies macht es zu einem großartigen Kandidaten für die Verwendung von Aliasen. Sobald Sie eine bestimmte Reihe von Optionen entdeckt haben, die dazu führen, dass stat
Geben Sie die gewünschte Ausgabe ein, packen Sie sie in eine Alias- oder Shell-Funktion ein. Dies macht die Verwendung viel bequemer, und Sie müssen sich keine geheimnisvollen Befehlszeilenoptionen merken.
Ein schneller Vergleich
Lass uns verwenden ls
um uns eine lange Liste zu geben ( -l
Option) mit menschenlesbaren Dateigrößen ( -h
Möglichkeit):
ls -lh ana.h

Von links nach rechts liefert ls folgende Informationen:
- Das allererste Zeichen ist ein Bindestrich „-“ und dies sagt uns, dass die Datei eine normale Datei ist und kein Socket, Symlink oder ein anderer Objekttyp.
- Der Besitzer, die Gruppe und andere Berechtigungen werden im Oktalformat aufgelistet.
- Die Anzahl der Hardlinks, die auf diese Datei verweisen. In diesem Fall und in den meisten Fällen wird es einer sein.
- Der Dateibesitzer ist Dave.
- Der Gruppenbesitzer ist Dave.
- Die Dateigröße beträgt 802 Byte.
- Die Datei wurde zuletzt am Freitag, den 13. Dezember 2015 geändert.
- Der Dateiname ist
ana.c
.
Schauen wir mal mit stat
:
stat ana.h

Die Informationen, die wir von stat
ist:
- Datei: Der Name der Datei. Normalerweise ist es derselbe wie der Name, an den wir weitergegeben haben
stat
in der Befehlszeile, aber es kann anders sein, wenn wir einen symbolischen Link betrachten.
- Größe: Die Größe der Datei in Byte.
- Blöcke: Die Anzahl der Dateisystemblöcke, die die Datei benötigt, um auf der Festplatte gespeichert zu werden.
- IO-Block: Die Größe eines Dateisystemblocks.
- Dateityp: Der Objekttyp, den die Metadaten beschreiben. Die gebräuchlichsten Typen sind Dateien und Verzeichnisse, sie können aber auch Links, Sockets oder Named Pipes sein.
- Gerät: Die Gerätenummer in hexadezimal und dezimal. Dies ist die ID der Festplatte, auf der die Datei gespeichert ist.
- Inode: Die Inode-Nummer. Das heißt, die ID-Nummer dieses Inode. Zusammen identifizieren die Inode-Nummer und die Gerätenummer eine Datei eindeutig.
- Links: Diese Zahl gibt an, wie viele Hardlinks auf diese Datei verweisen. Jeder Hardlink hat seinen eigenen Inode. Eine andere Möglichkeit, über diese Zahl nachzudenken, ist, wie viele Inodes auf diese eine Datei zeigen. Jedes Mal, wenn ein Hardlink erstellt oder gelöscht wird, wird diese Zahl nach oben oder unten angepasst. Wenn er Null erreicht, wurde die Datei selbst gelöscht und der Inode entfernt. Wenn du benutzt
stat
in einem Verzeichnis steht diese Zahl für die Anzahl der Dateien im Verzeichnis, einschließlich des „.“ Eintrag für das aktuelle Telefonbuch und den Eintrag „..“ für das übergeordnete Telefonbuch.
- Zugriff: Die Dateiberechtigungen werden oktal und traditionell angezeigt
rwx
(Lesen, Schreiben, Ausführen von Formaten).
- Uid: Benutzer-ID und Kontoname des Eigentümers.
- Gid: Gruppen-ID und Kontoname des Eigentümers.
- Zugriff: Der Zugriffszeitstempel. Nicht so einfach, wie es scheinen mag. Moderne Linux-Distributionen verwenden ein Schema namens
relatime
, die versucht zu Optimieren Sie die Schreibvorgänge auf der Festplatte, die zum Aktualisieren der Zugriffszeit erforderlich sind. Einfach ausgedrückt wird die Zugriffszeit aktualisiert, wenn sie älter als die geänderte Zeit ist.
- Ändern: Der Änderungszeitstempel. Dies ist der Zeitpunkt, zu dem die Datei zuletzt geändert wurde. (Zufälligerweise wurde der Inhalt dieser Datei auf den Tag genau vor vier Jahren zuletzt geändert.)
- Veränderung: Der Änderungszeitstempel. Dies ist der Zeitpunkt, zu dem die Datei oder zuletzt geändert wurde. Wenn Sie eine Datei ändern, indem Sie neue Dateiberechtigungen festlegen, wird der Änderungszeitstempel aktualisiert (weil sich die Datei geändert hat), aber der geänderte Zeitstempel wird nicht aktualisiert (weil die Datei nicht geändert wurde).
- Geburt: Reserviert, um das ursprüngliche Erstellungsdatum der Datei anzuzeigen, dies ist jedoch in Linux nicht implementiert.
Verstehen der Zeitstempel
Die Zeitstempel sind zeitzonensensitiv. Der -0500
am Ende jeder Zeile zeigt an, dass diese Datei auf einem Computer in a . erstellt wurde abgestimmte Weltzeit (UTC) Zeitzone, die der Zeitzone des aktuellen Computers fünf Stunden voraus ist. Dieser Computer liegt also fünf Stunden hinter dem Computer zurück, der diese Datei erstellt hat. Tatsächlich wurde die Datei auf einem Computer in der britischen Zeitzone erstellt, und wir betrachten sie hier auf einem Computer in der Zeitzone US Eastern Standard.
Die Änderungs- und Änderungszeitstempel können Verwirrung stiften, da ihre Namen für den Uneingeweihten so klingen, als ob sie dasselbe bedeuten würden.
Lass uns verwenden chmod
um die Dateiberechtigungen für eine Datei namens . zu ändern ana.c
. Wir werden es für jeden beschreibbar machen. Dies wirkt sich nicht auf den Inhalt der Datei aus, jedoch auf die Attribute der Datei.
chmod +w ana.c
Und dann verwenden wir stat
um die Zeitstempel zu sehen:
stat ana.c

Der Änderungszeitstempel wurde aktualisiert, der geänderte jedoch nicht.
Der Zeitstempel wird nur aktualisiert, wenn der Inhalt der Datei geändert wird. Der Zeitstempel wird sowohl für Inhaltsänderungen als auch für Attributänderungen aktualisiert.
Statistik mit mehreren Dateien verwenden
Um einen Statistikbericht zu mehreren Dateien gleichzeitig zu erhalten, übergeben Sie die Dateinamen an stat
auf der Kommandozeile:
stat ana.h ana.o

Benutzen stat
Verwenden Sie für eine Reihe von Dateien den Mustervergleich. Das Fragezeichen „?“ steht für ein beliebiges einzelnes Zeichen, und das Sternchen „*“ steht für eine beliebige Zeichenfolge. Wir können es sagen stat
um über eine Datei namens „ana“ mit einer einzelnen Buchstabenerweiterung zu berichten, mit diesem Befehl:
stat ana.?

Verwenden von stat zum Erstellen von Berichten über Dateisysteme
stat
kann über den Status von Dateisystemen sowie den Status von Dateien berichten. Der -f
(Dateisystem) Option sagt stat
um über das Dateisystem zu berichten, auf dem sich die Datei befindet. Beachten Sie, dass wir auch ein Verzeichnis wie „/“ an . übergeben können stat
anstelle eines Dateinamens.
stat -f ana.c

Die Information stat
gibt uns ist:
- Datei: Der Name der Datei.
- ICH WÜRDE: Die Dateisystem-ID in hexadezimaler Schreibweise.
- Namelen: Die maximal zulässige Länge für Dateinamen.
- Typ: Der Typ des Dateisystems.
- Block Größe: Die Datenmenge zum Anfordern von Leseanforderungen für optimale Datenübertragungsraten.
- Grundlegende Blockgröße: Die Größe jedes Dateisystemblocks.
Blöcke:
- Gesamt: Die Gesamtzahl aller Blöcke im Dateisystem.
- Kostenlos: Die Anzahl der freien Blöcke im Dateisystem.
- Erhältlich: Die Anzahl der kostenlosen Blöcke, die normalen (Nicht-Root-)Benutzern zur Verfügung stehen.
Inoden:
- Gesamt: Die Gesamtzahl der Inodes im Dateisystem.
- Kostenlos: Die Anzahl der freien Inodes im Dateisystem.
Dereferenzieren symbolischer Links
Wenn du benutzt stat
Bei einer Datei, die eigentlich ein symbolischer Link ist, wird über den Link berichtet. Wenn du wolltest stat
Um über die Datei zu berichten, auf die der Link verweist, verwenden Sie die -L
(Dereferenzierung) Option. Die Datei code.c
ist ein symbolischer Link zu ana.c
. Schauen wir es uns ohne an -L
Möglichkeit:
stat code.c

Der Dateiname zeigt code.c
zeigt auf ( ->
) ana.c
. Die Dateigröße beträgt nur 11 Byte. Es gibt null Blöcke, die dem Speichern dieses Links gewidmet sind. Der Dateityp wird als symbolischer Link aufgeführt.
Offensichtlich betrachten wir hier nicht die eigentliche Datei. Machen wir das noch einmal und fügen die hinzu -L
Möglichkeit:
stat -L code.c

Dies zeigt nun die Dateidetails für die Datei an, auf die durch den symbolischen Link verwiesen wird. Beachten Sie jedoch, dass der Dateiname immer noch als code.c
. Dies ist der Name des Links, nicht die Zieldatei. Dies geschieht, weil dies der Name ist, an den wir weitergegeben haben stat
auf der Kommandozeile.
Der knappe Bericht
Der -t
(kurze) Option verursacht stat
um eine komprimierte Zusammenfassung zu geben:
stat -t ana.c

Es werden keine Hinweise gegeben. Um dies zu verstehen – bis Sie sich die Halbbildsequenz auswendig gelernt haben – müssen Sie diese Ausgabe mit einem vollständigen Querverweis versehen stat
Ausgang.
Benutzerdefinierte Ausgabeformate
Eine bessere Möglichkeit, einen anderen Datensatz von . zu erhalten stat
ist die Verwendung eines benutzerdefinierten Formats. Es gibt eine lange Liste von Token, die als Formatsequenzen bezeichnet werden. Jedes davon repräsentiert ein Datenelement. Wählen Sie diejenigen aus, die Sie in die Ausgabe aufnehmen möchten, und erstellen Sie eine Formatzeichenfolge. Wenn wir anrufen stat
und übergeben Sie ihm die Formatzeichenfolge, enthält die Ausgabe nur die von uns angeforderten Datenelemente.
Es gibt verschiedene Sätze von Formatsequenzen für Dateien und Dateisysteme. Die Liste für Dateien lautet:
- %ein: Die Zugriffsrechte in Oktal.
- %EIN: Die Zugriffsrechte in menschenlesbarer Form (
rwx
).
- %B: Die Anzahl der zugewiesenen Blöcke.
- %B: Die Größe jedes Blocks in Byte.
- %D: Die Gerätenummer in Dezimalform.
- %D: Die Gerätenummer in Hex.
- %F: Der Raw-Modus in Hex.
- %F Der Dateityp.
- %g: Die Gruppen-ID des Besitzers.
- %G: Der Gruppenname des Besitzers.
- %h: Die Anzahl der Hardlinks.
- %ich: Die Inode-Nummer.
- %m: Der Mount-Punkt.
- %n: Der Dateiname.
- %N: Der Dateiname in Anführungszeichen, mit dereferenziertem Dateinamen, wenn es sich um einen symbolischen Link handelt.
- %Ö: Hinweis zur optimalen E/A-Übertragungsgröße.
- %S: Die Gesamtgröße in Byte.
- %T: Der Hauptgerätetyp in Hex, für spezielle Gerätedateien für Zeichen-/Blockgeräte.
- %T: Der untergeordnete Gerätetyp in Hex, für spezielle Gerätedateien für Zeichen-/Blockgeräte.
- %u: Die Benutzer-ID des Besitzers.
- %U: Der Benutzername des Besitzers.
- %w: Der Zeitpunkt der Dateigeburt, für Menschen lesbar oder ein Bindestrich „-“, falls unbekannt.
- %W: Der Zeitpunkt der Dateigeburt, Sekunden seit der Epoche; 0 wenn unbekannt.
- %x: Der Zeitpunkt des letzten Zugriffs, für Menschen lesbar.
- %X: Die Zeit des letzten Zugriffs, Sekunden seit der Epoche.
- %y: Der Zeitpunkt der letzten Datenänderung, für Menschen lesbar.
- %Y: Die Zeit der letzten Datenänderung, Sekunden seit der Epoche.
- %z: Der Zeitpunkt der letzten Statusänderung, für Menschen lesbar.
- %Z: Der Zeitpunkt der letzten Statusänderung, Sekunden seit der Epoche.
Die „Epoche“ ist die Unix-Epoche, das am 01.01.1970 00:00:00 +0000 (UTC) stattfand.
Für Dateisysteme sind die Formatfolgen:
- %ein: Die Anzahl der kostenlosen Blöcke, die normalen (Nicht-Root-)Benutzern zur Verfügung stehen.
- %B: Die Gesamtzahl der Datenblöcke im Dateisystem.
- %C: Die Gesamtzahl der Inodes im Dateisystem.
- %D: Die Anzahl der freien Inodes im Dateisystem.
- %F: Die Anzahl der freien Blöcke im Dateisystem.
- %ich: Die Dateisystem-ID in hexadezimaler Form.
- %l: Die maximale Länge von Dateinamen.
- %n: Der Dateiname.
- %S: Die Blockgröße (die optimale Schreibgröße).
- %S: Die Größe der Dateisystemblöcke (für die Blockanzahl).
- %T: Der Dateisystemtyp in hexadezimaler Form.
- %T: Dateisystemtyp in menschenlesbarer Form.
Es gibt zwei Optionen, die Zeichenfolgen von Formatsequenzen akzeptieren. Diese sind --format
und --printf
. Der Unterschied zwischen ihnen ist --printf
interpretiert Escape-Sequenzen im C-Stil wie Newline n
und tab t
, und es fügt seiner Ausgabe nicht automatisch ein Zeilenumbruchzeichen hinzu.
Erstellen wir einen Formatstring und übergeben ihn an stat
. Die Formatsequenzen, die verwendet werden sollten, sind %n
für Dateiname, %s
für die Größe der Datei und %F
für den Dateityp. Wir werden die hinzufügen n
Escape-Sequenz bis zum Ende des Strings, um sicherzustellen, dass jede Datei in einer neuen Zeile behandelt wird. Unser Formatstring sieht so aus:
"File %n is %s bytes, and is a %Fn"
Wir geben das weiter an stat
Verwendung der --printf
Möglichkeit. Wir werden fragen stat
über eine Datei namens . berichten code.c
und eine Reihe von Dateien, die übereinstimmen ana.?
. Dies ist der vollständige Befehl. Beachten Sie das Gleichheitszeichen „=
» zwischen --printf
und die Formatzeichenfolge:
stat --printf="File %n is %s bytes, and is a %Fn" code.c ana/ana.?

Der Bericht für jede Datei wird in einer neuen Zeile aufgeführt, was wir angefordert haben. Der Dateiname, die Dateigröße und der Dateityp werden uns zur Verfügung gestellt.
Benutzerdefinierte Formate ermöglichen Ihnen den Zugriff auf noch mehr Datenelemente, als im Standard enthalten sind stat
Ausgang.
Feinkornkontrolle
Wie Sie sehen, gibt es enorme Möglichkeiten, die für Sie interessanten Datenelemente zu extrahieren. Sie können wahrscheinlich auch sehen, warum wir die Verwendung von Aliasnamen für die längeren und komplexeren Beschwörungen empfohlen haben.