# stat — Detaillierte Datei- und Dateisystem-Informationen

> Mit stat alle Metadaten einer Datei anzeigen — Größe, Rechte, Eigentümer, Zeitstempel und Inode, dazu Format-Strings und Dateisystem-Status.

Source: https://www.jpkc.com/db/cheatsheets/files-text/stat/

<!-- PROSE:intro -->
`stat` zeigt dir alle Metadaten einer Datei auf einen Blick – deutlich mehr als `ls -l`: exakte Größe in Bytes, Rechte sowohl symbolisch als auch oktal, Eigentümer und Gruppe, Inode-Nummer und die drei Zeitstempel für Zugriff (atime), Änderung (mtime) und Statuswechsel (ctime). Mit der Option `-c` und Format-Strings wie `%s`, `%a` oder `%U` baust du dir die Ausgabe genau so, wie du sie für Skripte brauchst. Wichtig: Die hier gezeigte Syntax gilt für das GNU-`stat` der coreutils unter Linux. Auf macOS und BSD heißt der Format-Schalter `-f` (statt `-c`) und verwendet völlig andere Platzhalter – dort ist `-f` außerdem nicht der Dateisystem-Status. Unter Linux blendest du mit `-f` den Dateisystem-Status statt der Datei-Infos ein.
<!-- PROSE:intro:end -->

## Grundlagen

`stat <datei>` — Zeigt alle verfügbaren Informationen über eine Datei.

```bash
stat index.html
```

`stat -f <dateisystem>` — Zeigt den Dateisystem-Status statt des Datei-Status.

```bash
stat -f /
```

`stat -L <symlink>` — Folgt Symlinks und zeigt Infos über die Zieldatei.

```bash
stat -L /usr/bin/python3
```

`stat <datei1> <datei2>` — Zeigt Informationen für mehrere Dateien.

```bash
stat *.conf
```

## Format-Strings — Datei-Infos

`stat -c '%s' <datei>` — Zeigt die Dateigröße in Bytes.

```bash
stat -c '%s' backup.tar.gz
```

`stat -c '%n %s' <datei>` — Zeigt Dateinamen und Größe.

```bash
stat -c '%n %s' *.log
```

`stat -c '%A' <datei>` — Zeigt menschenlesbare Rechte (z. B. -rwxr-xr-x).

```bash
stat -c '%A' script.sh
```

`stat -c '%a' <datei>` — Zeigt die Rechte als Oktalzahl (z. B. 755).

```bash
stat -c '%a' /etc/passwd
```

`stat -c '%U:%G' <datei>` — Zeigt Eigentümer- und Gruppennamen.

```bash
stat -c '%U:%G' /var/log/syslog
```

`stat -c '%F' <datei>` — Zeigt den Dateityp (reguläre Datei, Verzeichnis, Symlink usw.).

```bash
stat -c '%F' /dev/null
```

`stat -c '%i' <datei>` — Zeigt die Inode-Nummer.

```bash
stat -c '%i' myfile.txt
```

## Format-Strings — Zeitstempel

`stat -c '%y' <datei>` — Zeigt die letzte Änderungszeit (menschenlesbar).

```bash
stat -c '%y' config.yaml
```

`stat -c '%x' <datei>` — Zeigt die letzte Zugriffszeit.

```bash
stat -c '%x' data.csv
```

`stat -c '%z' <datei>` — Zeigt die letzte Statusänderungszeit (ctime).

```bash
stat -c '%z' /etc/hosts
```

`stat -c '%w' <datei>` — Zeigt die Erstellungszeit (Birth-Time), falls verfügbar.

```bash
stat -c '%w' readme.md
```

`stat -c '%Y' <datei>` — Zeigt die Änderungszeit als Unix-Zeitstempel (Sekunden seit Epoch).

```bash
stat -c '%Y' deploy.log
```

## Dateisystem-Infos

`stat -f -c '%T' <pfad>` — Zeigt den Dateisystem-Typ.

```bash
stat -f -c '%T' /
```

`stat -f -c '%b %S' <pfad>` — Zeigt die Gesamtzahl der Blöcke und die Blockgröße.

```bash
stat -f -c '%b %S' /home
```

`stat -f -c '%a' <pfad>` — Zeigt die für nicht-privilegierte Benutzer verfügbaren Blöcke.

```bash
stat -f -c '%a' /tmp
```

## Häufige Muster

`stat -c '%a %n' *` — Listet die Rechte aller Dateien im aktuellen Verzeichnis auf.

```bash
stat -c '%a %n' /etc/*.conf
```

`stat -c '%s %n' * | sort -n` — Listet Dateien nach Größe sortiert auf.

```bash
stat -c '%s %n' *.log | sort -n
```

`stat -c '%Y %n' * | sort -n | tail -5` — Zeigt die 5 zuletzt geänderten Dateien.

```bash
stat -c '%Y %n' /var/log/* | sort -n | tail -5
```

`stat -c '%U %n' * | grep -v root` — Findet Dateien, die nicht root gehören.

```bash
stat -c '%U %n' /usr/local/bin/* | grep -v root
```

<!-- PROSE:outro -->
## Fazit

`stat` ist dein Werkzeug, wenn `ls -l` nicht genug verrät: exakte Bytes, alle drei Zeitstempel und die Inode auf einen Blick. Seine wahre Stärke spielt es mit `-c` und Format-Strings aus – damit erzeugst du genau die Felder, die ein Skript weiterverarbeiten kann, etwa `stat -c '%s %n'` für eine nach Größe sortierbare Liste. Achte beim Portieren von Skripten auf die Plattform: GNU-`stat` nutzt `-c` mit den hier gezeigten Platzhaltern, macOS/BSD dagegen `-f` mit einer komplett anderen Format-Syntax – Skripte, die auf beiden laufen sollen, müssen das berücksichtigen (oder unter macOS `gstat` aus den coreutils verwenden). Für den schnellen Überblick bleibt `ls`, für den Inhalts-basierten Dateityp `file` und zum Ändern der Rechte `chmod`.

## Weiterführende Links

- [ubuntuusers-Wiki: stat](https://wiki.ubuntuusers.de/stat/) – deutschsprachige Einführung mit den wichtigsten Format-Platzhaltern
- [GNU Coreutils: stat invocation](https://www.gnu.org/software/coreutils/manual/html_node/stat-invocation.html) – offizielle Referenz aller Format-Strings (englisch)
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [ls](https://www.jpkc.com/db/cheatsheets/files-text/ls/) – Verzeichnisinhalte mit Rechten und Größe im Überblick
- [file](https://www.jpkc.com/db/cheatsheets/files-text/file/) – den Dateityp anhand des Inhalts bestimmen
- [chmod](https://www.jpkc.com/db/cheatsheets/files-text/chmod/) – Zugriffsrechte von Dateien ändern

