Linux / Befehl stat: Detaillierte Dateimetadaten anzeigen
stat ist ein Befehl, der detaillierte Informationen über die Größe, Berechtigungen, den Eigentümer, die Inode, die Anzahl der Hardlinks, die zugewiesenen Blöcke und verschiedene Zeitstempel einer Datei oder eines Verzeichnisses anzeigt. Er ermöglicht es, mehr Metadaten zu überprüfen als ls -l und ist auch für Shell-Skripte nützlich, da man nur die gewünschten Felder in einem konsistenten Format ausgeben kann.
In diesem Artikel erklären wir, wie man die Standardausgabe von GNU Coreutils' stat liest, die Unterschiede zwischen atime/mtime/ctime/Birth, symbolischen Links, Dateisysteminformationen und wie man --format verwendet.
Ergänzende Befehle und Anwendungsfälle finden Sie in Liste der häufig verwendeten Befehle in Linux.
Was ist der Befehl stat?
stat ruft die vom Dateisystem verwalteten Statusinformationen ab, also Metadaten, und nicht den Inhalt der Datei. Sie müssen lediglich die Datei oder das Verzeichnis als Argument angeben, das Sie überprüfen möchten.
stat report.txt stat /etc stat /usr/bin/bash
Es hat einen anderen Zweck als der Befehl file, der die Datei direkt liest, um ihren Inhalt zu analysieren. file errät das Format, während stat Dateisysteminformationen wie Größe, Berechtigungen, Eigentum, Zeitstempel und Inode anzeigt.
Grundlegende Syntax und Verwendung
stat [option] file...
Sie können nicht nur eine einzelne Datei, sondern auch mehrere Pfade auf einmal angeben.
stat file1.txt file2.txt stat src tests stat "annual report.pdf"
Für Dateinamen, die mit einem Bindestrich beginnen, geben Sie diese nach -- an, damit sie nicht fälschlicherweise als Optionen interpretiert werden.
stat -- -sample.txt
Sie können die Version von GNU stat und die unterstützten Optionen mit dem folgenden Befehl überprüfen.
stat --version stat --help info '(coreutils) stat invocation'
Wie man die grundlegende Ausgabe liest
Wenn Sie stat auf eine reguläre Datei ausführen, sehen Sie Informationen, die den folgenden ähnlich sind. Die tatsächlichen Werte und einige Felder können je nach Dateisystem und Betriebssystem variieren.
File: report.txt Size: 4096 Blocks: 8 IO Block: 4096 regular file Device: 8,1 Inode: 1234567 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user) Access: 2026-09-21 10:15:30.000000000 +0900 Modify: 2026-09-21 10:14:02.000000000 +0900 Change: 2026-09-21 10:14:02.000000000 +0900 Birth: 2026-09-20 19:42:11.000000000 +0900
Jeder Punkt hat die folgende Bedeutung.
| Artikel | Bedeutung |
|---|---|
File |
Der Name der abgefragten Datei oder des Verzeichnisses. |
Size |
Die logische Größe der Datei, normalerweise in Bytes angezeigt. |
Blocks |
Die Anzahl der der Datei zugewiesenen Blöcke. Sparse-Dateien oder komprimierte Dateisysteme können einen großen Unterschied zwischen der logischen Größe und der tatsächlichen Zuweisung aufweisen. |
IO Block |
Empfohlene Blockgrößeninformationen für effiziente Ein-/Ausgabe. |
Device |
Die Zahl, die das Gerät identifiziert, zu dem die Datei gehört. |
Inode |
Dies ist die Inode-Nummer, die die Dateimetadaten innerhalb des Dateisystems identifiziert. |
Links |
Die Anzahl der Hardlinks, die auf dieselbe Inode zeigen. |
Access |
Zeigt Berechtigungen und Dateityp in oktaler und symbolischer Form an. |
Uid, Gid |
Die numerische ID und der Name des Besitzerbenutzers und der Gruppe. |
Access, Modify, Change, Birth |
Zeitstempel bezüglich Zugriff, Inhaltsänderung, Statusänderung und Erstellung. |
Unterschied zwischen ls -l und stat
| Vergleichspunkte | ls -l |
stat |
|---|---|---|
| Hauptzweck | Mehrere Dateien schnell in Listenform vergleichen. | Detaillierte Metadaten der angegebenen Datei überprüfen. |
| Grundlegende Zeit | Zeigt hauptsächlich die Änderungszeit kurz an. | Zeigt Zugriffs-, Änderungs-, Statusänderungs- und Erstellungszeiten getrennt an. |
| inode und Blöcke | Sie müssen Optionen hinzufügen, um einige Informationen zu sehen. | Zeigt Inode, Anzahl der Links, zugewiesene Blöcke usw. in der Standardausgabe an. |
| Skriptausgabe | Das Parsen von menschenlesbaren Listen kann je nach Umgebung instabil sein. | Sie können die benötigten Felder direkt mit --format angeben. |
| Dateisysteminformationen | Nicht direkt bereitgestellt. | Verwenden Sie -f, um den Status des Dateisystems anzuzeigen, in dem sich die Datei befindet. |
Beim Durchsuchen von Namen, Größen und Berechtigungen mehrerer Dateien ist ls -l praktisch, und wenn Sie genaue Felder einer einzelnen Datei oder Werte für die Automatisierung benötigen, ist stat geeignet.
Verstehen der Dateigröße und zugewiesenen Blöcke
Überprüfung der logischen Größe
Die Standardausgabe Size ist die Gesamtanzahl der Bytes, die die Datei darstellt. Um nur den benötigten Wert auszugeben, verwenden Sie %s.
stat -c '%s' disk.img stat -c '%n: %s bytes' file1 file2
Die Size eines Verzeichnisses ist nicht die Summe aller darin enthaltenen Dateien. Es ist die Größe des Verzeichnisses selbst, das die Verzeichniseinträge speichert. Um die Gesamtnutzung des Inhalts zu überprüfen, verwenden Sie du.
Berechnung des zugewiesenen Speicherplatzes
%b gibt die Anzahl der zugewiesenen Blöcke aus, und %B gibt die Größe in Bytes eines einzelnen Blocks aus.
stat -c 'size=%s blocks=%b block-size=%B' disk.img
Die ungefähr zugewiesene Byteanzahl kann mit %b × %B berechnet werden. Sparse-Dateien können tatsächlich wesentlich weniger zugewiesenen Speicherplatz haben als die logische Größe, und mit Funktionen wie Dateisystemkompression oder gemeinsam genutzten Blöcken ist es schwierig, den physischen Speicherverbrauch allein anhand dieses Wertes zu bestimmen.
Überprüfen von Berechtigungen und Eigentum
Ausgabe von oktalen Berechtigungen und symbolischen Berechtigungen
%a gibt oktale Berechtigungen aus, und %A gibt menschenlesbare Berechtigungen einschließlich des Dateityps aus.
stat -c '%a %A %n' script.sh
Die Ausgabe kann in folgender Form erfolgen.
755 -rwxr-xr-x script.sh
Anzeige von Besitzer und Gruppe
%U und %G zeigen den Benutzernamen und den Gruppennamen an, während %u und %g die numerische UID und GID anzeigen.
stat -c 'owner=%U(%u) group=%G(%g)' report.txt
In Umgebungen, in denen der Name zu einer numerischen ID nicht gefunden werden kann, kann das Namensfeld unterschiedlich angezeigt werden.
Überprüfung von Inode und harten Links
Anzeige der Inode-Nummer
%i zeigt die Inode-Nummer an, die die Datei innerhalb des Dateisystems identifiziert.
stat -c '%i %n' report.txt
Inode-Nummern sind über Dateisystemgrenzen hinweg nicht global eindeutig. Um zu vergleichen, ob Dateien dieselben sind, müssen Sie die Geräteinformationen zusammen mit der Inode berücksichtigen.
Überprüfung der Anzahl der harten Links
%h ist die Anzahl der Hardlinks, die auf diesen Inode zeigen.
stat -c 'inode=%i links=%h name=%n' original.txt copy-link.txt
Wenn das Gerät und der Inode von zwei Pfaden identisch sind, könnten sie Hardlinks sein, die auf dieselben Dateidaten zeigen. Symbolische Links haben separate Inodes, daher werden sie nicht auf die gleiche Weise beurteilt.
Unterschiede zwischen atime, mtime, ctime und Birth
Die Zeitstempel-Namen sind ähnlich, aber die Ereignisse, die sie aufzeichnen, sind unterschiedlich. Insbesondere ist es wichtig, ctime nicht mit der Erstellungszeit zu verwechseln.
| Zeit | Bedeutung | Beispiele, die geändert werden können |
|---|---|---|
atime |
Die letzte Zugriffszeit der Dateidaten. | Dateilesen. Je nach Mount-Optionen und Cache-Politik wird sie jedoch möglicherweise nicht bei jedem Zugriff aktualisiert. |
mtime |
Die letzte Zeit, zu der der Dateiinhalt geändert wurde. | Dateidaten schreiben oder die Inhaltslänge ändern. |
ctime |
Die letzte Zeit, zu der die Inode-Statusinformationen geändert wurden. | Änderungen bei Berechtigungen, Eigentümer, Anzahl der Links, Namensänderungen usw. Nicht die Erstellungszeit. |
Birth |
Die Zeit, zu der die Datei erstellt wurde. | Beim Erstellen einmal aufgezeichnet, falls unterstützt, und ändert sich nicht bei normalen Statusänderungen. |
Menschlich lesbare Zeit ausgeben
%x, %y, %z und %w geben atime, mtime, ctime und Birth jeweils in einem menschenlesbaren Format aus.
stat -c 'atime=%x mtime=%y ctime=%z birth=%w' report.txt
Bei Dateisystemen, die Birth nicht unterstützen oder dessen Wert nicht ermitteln können, kann %w als Bindestrich angezeigt werden.
Ausgabe in Sekunden seit der Epoche
Großbuchstaben %X, %Y, %Z, %W geben die jeweiligen Zeiten in Sekunden seit der Unix-Epoche aus.
stat -c 'atime=%X mtime=%Y ctime=%Z birth=%W' report.txt
Wenn Birth unbekannt ist, gibt %W 0 aus. Während der Epochenwert praktisch für Sortierung oder numerischen Vergleich ist, sollten die Unterschiede in der Zeitgenauigkeit, die von Dateisystemen und Betriebssystemen bereitgestellt werden, berücksichtigt werden.
Überprüfung von Symbolic-Link-Informationen
Anzeigen der Metadaten des Links selbst
Standardmäßig folgt GNU stat keinen symbolischen Links und untersucht stattdessen den Link selbst.
stat current.log stat -c '%N | inode=%i | type=%F' current.log
%N kann den Dateinamen in Anführungszeichen zusammen mit seinem Ziel für Links anzeigen.
Ziel-Metadaten mit -L anzeigen
Die Verwendung von -L oder --dereference überprüft den Status des tatsächlichen Ziels, auf das der Link zeigt.
stat -L current.log stat -L -c '%n | inode=%i | type=%F | size=%s' current.log
Kaputte symbolische Links können das Ziel nicht überprüfen, daher führt die Verwendung von -L zu einem Fehler.
Nur die gewünschten Felder drucken
Verwendung von -c und --format
-c oder --format gibt die Ergebnisse im angegebenen Format aus und fügt für jede Datei einen Zeilenumbruch hinzu.
stat -c '%n %s %a %U:%G' file1 file2 stat --format='name=%n type=%F inode=%i' report.txt
Es ist sicher, die Formatzeichenfolge in einfache Anführungszeichen zu setzen, damit die Shell sie nicht interpretiert.
Mehrere Zeilen mit --printf zusammensetzen
--printf interpretiert Backslash-Escape-Sequenzen, fügt jedoch keine automatischen Zeilenumbrüche hinzu. Fügen Sie \n direkt dort ein, wo es notwendig ist.
stat --printf='name=%n\nsize=%s\nmode=%a\n' report.txt
Beim Verarbeiten mehrerer Dateien sollte die Formatzeichenfolge auch Trennzeichen zwischen den Dateien enthalten.
Häufig verwendete Formatbezeichner
| Bezeichner | Ausgabeinhalt |
|---|---|
%n |
Der Dateiname. |
%N |
Der zitierte Dateiname, und wenn es sich um einen symbolischen Link handelt, kann er auch Informationen über das Ziel enthalten. |
%F |
Der Dateityp, wie eine reguläre Datei, ein Verzeichnis oder ein symbolischer Link. |
%s |
Dies ist die Gesamtgröße (in Bytes). |
%b |
Dies ist die Anzahl der zugewiesenen Blöcke. |
%B |
Dies ist die Bytegröße eines von %b dargestellten Blocks. |
%a |
Oktale Berechtigungen. |
%A |
Symbolische Berechtigungen einschließlich Dateityp. |
%u, %g |
Die numerische UID und GID des Eigentümers. |
%U, %G |
Der Benutzername und Gruppenname des Eigentümers. |
%i |
Die Inode-Nummer. |
%h |
Anzahl der Hardlinks. |
%m |
Der Einhängepunkt, zu dem die Datei gehört. |
%x, %X |
Zeige die letzte Zugriffszeit in einem menschenlesbaren Format oder als Epoch-Sekunden an. |
%y, %Y |
Zeige die letzte Inhaltsänderungszeit in einem menschenlesbaren Format oder als Epoch-Sekunden an. |
%z, %Z |
Zeige die letzte Statusänderungszeit in einem menschenlesbaren Format oder als Epoch-Sekunden an. |
%w, %W |
Zeige die Erstellungszeit in einem menschenlesbaren Format oder als Epoch-Sekunden an; wenn unbekannt, einen Bindestrich oder 0 anzeigen. |
%C |
Zeigt den SELinux-Sicherheitskontext in unterstützten Umgebungen an. |
Dateisysteminformationen überprüfen
Dateisystemstatus mit -f anzeigen
Die Verwendung von -f oder --file-system zeigt Informationen über das Dateisystem an, in dem sich der Pfad befindet, und nicht über die Datei selbst.
stat -f / stat --file-system /home
Sie können den Dateisystemtyp, die Gesamtblöcke, verfügbare Blöcke, die Anzahl der Inodes und die maximale Dateinamenlänge überprüfen.
Verwendung von Dateisystem-Formatbezeichnern
Im -f-Modus ist die Bedeutung anders als die Spezifizierer für Dateien. Zum Beispiel zeigt %T den für Menschen lesbaren Dateisystemtyp an, %b stellt die Gesamtzahl der Datenblöcke dar und %a zeigt die Anzahl der für normale Benutzer verfügbaren Blöcke.
stat -f -c 'type=%T total=%b available=%a block-size=%S' /
Um die für Menschen lesbare Festplattennutzung zu vergleichen, könnte df -h bequemer sein, und um nur die für die Automatisierung erforderlichen Dateisystemfelder zu extrahieren, ist stat -f -c nützlich.
Remote-Dateisysteme und Cache-Richtlinien
In unterstützten Versionen von GNU Coreutils können Sie die Cache-Verwendungsmethode angeben, wenn Sie remote Dateisystemattribute mit --cached=MODE abrufen.
| Modi | Aktion |
|---|---|
default |
Ob Cache verwendet wird, bleibt der Standardrichtlinie des Dateisystems überlassen. |
always |
Verwenden Sie nach Möglichkeit zwischengespeicherte Attribute. Es kann schnell sein, ist aber möglicherweise nicht aktuell. |
never – Nicht auf zwischengespeicherte Werte verlassen |
Versuchen Sie, sich nach Möglichkeit mit den neuesten Attributen zu synchronisieren. Die Latenz beim Remotezugriff kann zunehmen. |
stat --cached=never /mnt/remote/report.txt
Das tatsächliche Garantielevel hängt von entfernten Dateisystemen wie NFS und den Einbindungseinstellungen ab. Prüfen Sie, ob die installierte Version diese Option mit stat --help unterstützt.
Beispiele zur Verwendung von Shell-Skripten
Verzweigen basierend auf der Dateigröße
path='archive.tar' size=$(stat -c '%s' -- "$path") || exit 1 if [ "$size" -gt 104857600 ]; then printf '%s\n' 'The file is larger than 100 MiB.' fi
In Umgebungen, in denen Dateien zwischen der Überprüfung und der Nutzung geändert werden können, gehen Sie nicht davon aus, dass einmal überprüfte Metadaten bis zu nachfolgenden Operationen gleich bleiben.
Vergleichen Sie die Änderungszeiten numerisch
left_mtime=$(stat -c '%Y' -- file-a) right_mtime=$(stat -c '%Y' -- file-b) if [ "$left_mtime" -gt "$right_mtime" ]; then printf '%s\n' 'file-a was modified more recently.' fi
Sich ausschließlich auf einen einzelnen Zeitstempel für Sicherungs- oder Bereitstellungsentscheidungen zu verlassen, kann aufgrund von Uhrzeitunterschieden, wiederhergestellten Zeitstempeln oder gleichzeitigen Änderungen Probleme verursachen. Falls nötig, sollten auch Prüfsummen oder Versionsinformationen verwendet werden.
Häufig verwendete stat-Befehle
| Befehl | Zweck |
|---|---|
stat file |
Zeigt detaillierte Metadaten der Datei an. |
stat -L link |
Zeigt Informationen über das Ziel an, auf das der symbolische Link verweist. |
stat -c '%s' file |
Gibt die Dateigröße in Bytes aus. |
stat -c '%a %n' file |
Zeigt die oktalen Berechtigungen und den Dateinamen an. |
stat -c '%U:%G' file |
Zeigt den Besitzer (Benutzer) und die Gruppe an. |
stat -c '%i %h %n' file |
Zeigt die Inode, die Anzahl der Hardlinks und den Dateinamen an. |
stat -c '%y' file |
Zeigt die letzte Änderungszeit des Inhalts an. |
stat -c '%Y' file |
Gibt die letzte Änderungszeit in Epoch-Sekunden aus. |
stat -f path |
Zeigt Informationen über das Dateisystem, das den angegebenen Pfad enthält, an. |
stat -t file |
Gibt in einem kompakten, einzeiligen Format mit festen Feldern aus. |
Vorsichtsmaßnahmen bei der Verwendung
ctime ist nicht die Erstellungszeit
ctime ist die Änderungszeit, also der Zeitpunkt, zu dem die Statusinformationen der Datei geändert wurden. Es ist keine Abkürzung für Erstellungszeit, und die Erstellungszeit kann in einem separaten Birth-Feld angegeben werden.
Birth und atime sind nicht immer die erwarteten Werte.
Die Erstellungszeit wird möglicherweise je nach Dateisystem, Kernel und Einhänge-Methode nicht unterstützt. atime wird möglicherweise auch nicht jedes Mal sofort aktualisiert, wenn eine Datei gelesen wird, aufgrund von Einhänge-Richtlinien wie noatime oder relatime und Caching.
Parsen Sie den Ausgabetext nicht direkt.
Die Standardausgabe ist in einem für Menschen lesbaren Format und kann je nach Betriebssystem, Coreutils-Version und Gebietsschema variieren. Für Automatisierung wählen Sie nur die benötigten Felder mit -c aus, und beachten Sie, dass Dateinamen Leerzeichen oder Zeilenumbrüche enthalten können.
FAQ
Wie kann ich nur die oktalen Berechtigungen einer Datei überprüfen?
Verwenden Sie stat -c '%a' filename. Wenn Sie auch den Dateinamen benötigen, verwenden Sie stat -c '%a %n' filename.
Was ist der Unterschied zwischen mtime und ctime?
mtime ist die Zeit, zu der der Inhalt der Datei zuletzt geändert wurde, und ctime ist die Zeit, zu der der Inode-Status, wie Berechtigungen, Besitz und Linkanzahl, zuletzt geändert wurde. ctime ist nicht die Erstellungszeit der Datei.
Warum wird bei Birth ein Bindestrich angezeigt?
Es liegt daran, dass das verwendete Dateisystem oder Betriebssystem die Erstellungszeit nicht bereitstellt oder stat diesen Wert nicht erhalten konnte. In diesem Fall gibt %w einen Bindestrich aus, und %W gibt 0 aus.
Ist die Größe eines Verzeichnisses die Gesamtgröße aller darin enthaltenen Dateien?
Nein. Es ist die Speichergröße der Metadaten des Verzeichnisses selbst. Um den gesamten von Dateien im Verzeichnis belegten Speicherplatz zu prüfen, verwenden Sie du -sh directory.
Weitere Angaben zu Syntax, Implementierung und Verfügbarkeit finden Sie unter Offizielle GNU Coreutils stat-Dokumentation, GNU Coreutils Beschreibung der Dateizeiten und GNU Coreutils Offizielles Handbuch.




