stat
stat służy do odczytu metadanych plików oraz informacji o systemie plików. Pozwala sprawdzić m.in. prawa dostępu, właściciela i grupę, rozmiar (w bajtach/blokach), typ pliku, numery i-węzłów, a także czasy: ostatniego dostępu (atime), modyfikacji (mtime) i zmiany metadanych (ctime). Typowe konteksty to diagnostyka uprawnień, analiza wydajności I/O, skrypty CI/CD i backupy.
Dostępność: GNU/Linux (GNU coreutils), większość dystrybucji (Debian/Ubuntu, Fedora, Arch, openSUSE), a także wariant BSD/macOS (składnia i formatery różnią się – patrz Uwagi).
Składnia
Dział zatytułowany „Składnia”stat [OPCJE] [ŚCIEŻKA...]
-
Warianty wywołania:
- Interaktywnie:
stat plik.txt
- Skryptowo z formatowaniem:
stat -c "FORMAT" plik
- Informacje o systemie plików zawierającym ścieżkę:
stat -f ścieżka/plik
- Interaktywnie:
-
Wspólne przełączniki (GNU):
-c/--format
,--printf
,-f
,-L
,-t
,--help
,--version
.
Parametry
Dział zatytułowany „Parametry”Parametr | Opis |
---|---|
ŚCIEŻKA | Plik, katalog, dowiązanie symboliczne lub inny obiekt do zbadania. Akceptuje wiele ścieżek. |
-c, --format=FMT | Zwraca dane wg łańcucha formatu (np. %s – rozmiar, %a – prawa w ósemkowym). Zakończone znakiem nowej linii automatycznie. |
--printf=FMT | Jak --format , ale nie dodaje automatycznego \n ; obsługuje sekwencje \n , \t , itp. |
-f, --file-system | Zamiast metadanych pliku – informacje o systemie plików (rozmiar bloków, liczba i-węzłów, typ FS). |
-L, --dereference | Podąża za dowiązaniem symbolicznym (stat docelowego pliku). Bez tego statuje samo dowiązanie. |
-t, --terse | Zwięzły, jednowierszowy wynik (pola oddzielone spacją). |
--help | Krótka pomoc. |
--version | Wersja programu. |
Wybrane pola formatu (GNU -c/--printf
):
Spec | Znaczenie |
---|---|
%n | Nazwa pliku |
%F | Ludzki typ obiektu (np. “regular file”, “directory”) |
%s | Rozmiar w bajtach |
%b | Liczba przydzielonych bloków |
%a | Uprawnienia w ósemkowym (bez typu) |
%A | Uprawnienia symbolicznie (np. -rwxr-x--- ) |
%u /%U | UID / nazwa właściciela |
%g /%G | GID / nazwa grupy |
%i | Numer i-węzła |
%h | Liczba dowiązań |
%W /%w | Czas utworzenia (epoch / czytelny; może być -1 /- ) |
%X /%x | atime (epoch / czytelny) |
%Y /%y | mtime (epoch / czytelny) |
%Z /%z | ctime (epoch / czytelny) |
Przykłady użycia
Dział zatytułowany „Przykłady użycia”# 1) Podstawowe informacje o plikustat README.md# Efekt: pełny blok informacji (typ, rozmiar, prawa, właściciel, czasy) w formacie czytelnym.
# 2) Zwięzły jednowierszowy wynikstat -t README.md# Efekt: pola w jednej linii, przydatne do szybkiego parsowania.
# 3) Format przyjazny skryptom: rozmiar i nazwastat -c '%s %n' *# Efekt: dla każdego pliku: "<rozmiar_bajtów> <nazwa>" – idealne do sortowania wg rozmiaru.
# 4) Uprawnienia ósemkowo i symboliczniestat --printf '%a %A %n\n' /etc/passwd# Efekt: np. "644 -rw-r--r-- /etc/passwd".
# 5) Podążanie za symlinkiem (vs. badanie samego linku)stat -L link_do_pliku # bada cel linkustat link_do_pliku # bada samo dowiązanie
# 6) Informacje o systemie plików, na którym leży ścieżkastat -f /# Efekt: typ FS, rozmiar bloku, wolne i całkowite i-węzły/bloki.
# 7) Pobranie znacznika czasu mtime w sekundach od epokistat -c '%Y' plik.bin# Efekt: liczba całkowita – łatwa do porównania w skryptach.
- GNU vs. BSD/macOS: W systemach BSD/macOS
stat
ma inną składnię formatowania (np.stat -f "%z %N" plik
dla rozmiaru i nazwy). Skrypty oparte na-c/--printf
są nieprzenośne. - Uprawnienia: Odczyt metadanych wymaga praw dostępu do katalogu/ścieżki; brak dostępu skutkuje komunikatem „Permission denied”.
- Czasy plików:
ctime
to zmiana metadanych, nie „czas utworzenia”. Czas tworzenia bywa dostępny jako%w/%W
, ale może być niewspierany (-
). - Symlinki: Domyślnie badany jest sam link; użyj
-L
, aby statować cel. - Locale/format: Wynik „ludzki” może zależeć od locale. Do stabilnego parsowania używaj
--format
/--printf
.
Najczęściej spotykane błędy i jak je naprawić
Dział zatytułowany „Najczęściej spotykane błędy i jak je naprawić”Błąd / Komunikat | Przyczyna | Rozwiązanie |
---|---|---|
stat: cannot stat 'plik': No such file or directory | Nieistniejąca ścieżka lub literówka. | Sprawdź nazwę/ścieżkę, użyj autouzupełniania TAB , ls /find do weryfikacji. |
stat: cannot read symbolic link ... | Uszkodzony symlink (brak celu). | Zweryfikuj link ls -l ; odtwórz cel lub usuń symlink. |
Permission denied | Brak praw do katalogu/obiektu lub brak x na katalogu. | Uruchom z odpowiednimi uprawnieniami, sprawdź prawa chmod , własność chown , ewentualnie sudo . |
„Unknown option” w macOS/BSD dla -c/--printf | Różnice implementacyjne. | Użyj odpowiedników BSD: stat -f z odpowiednimi znacznikami (np. %z – rozmiar, %Sp – prawa symboliczne). |
Puste ctime /birth time | System plików nie przechowuje danego pola. | Wybierz inne pole (mtime) lub FS wspierający czasy tworzenia (np. ext4, APFS). |
Linki i źródła
Dział zatytułowany „Linki i źródła”- man stat (GNU coreutils) – oficjalna dokumentacja.
- man7: stat(1) – strona podręcznika.
- BSD/macOS stat(1) – różnice w składni i formatach.