Przejdź do głównej zawartości

stat


  • stat – narzędzie do odczytu i prezentacji informacji o plikach oraz (z przełącznikiem -f) o systemie plików.
  • Pokazuje m.in. rozmiar, prawa dostępu, właściciela, numery inode, czasy dostępu/modyfikacji/zmiany oraz typ pliku. W trybie -f zwraca typ systemu plików, rozmiary bloków, liczbę bloków i węzłów inode.
  • Dostępne w większości dystrybucji Linuksa (GNU coreutils). Na systemach BSD/macOS stat istnieje, ale ma inny zestaw opcji i składnię.

Okno terminala
stat [opcje] PLIK...
stat -f [opcje] PLIK...
  • Wariant standardowy: informacje o plikach.
  • Wariant -f: informacje o systemie plików zawierającym wskazany plik/katalog.
  • Wspólne przełączniki globalne: --help, --version.

ParametrOpis
PLIK...Jedna lub więcej ścieżek do plików/katalogów.
-c, --format=FORMATWłasny format wyjścia (automatycznie dodaje \n). Używane dla informacji o plikach.
--printf=FORMATJak --format, ale interpretuje sekwencje \\ i nie dodaje końcowego \n – przydatne w skryptach.
-f, --file-systemZwraca informacje o systemie plików (zamiast o plikach).
-t, --terseZwięzła, jednowierszowa forma wyjścia.
-L, --dereferenceŚledź dowiązania symboliczne (działa na plik docelowy).
--helpWyświetl pomoc.
--versionPodaj wersję programu.

Najczęściej używane znaczniki formatu (tryb pliku, stat -c/--format):

  • %n – nazwa; %s – rozmiar (B); %F – typ pliku; %i – inode; %h – liczba dowiązań.
  • %a – prawa w ósemkach; %A – prawa w zapisie symbolicznym; %U/%G – właściciel/grupa; %u/%g – UID/GID.
  • Czasy: %x (atime), %y (mtime), %z (ctime – zmiana metadanych), %w (czas utworzenia; może być - jeśli niedostępny); odpowiadające epoki: %X, %Y, %Z, %W.
  • Kontekst bezpieczeństwa (jeśli dostępny): %C.

Znaczniki formatu dla trybu systemu plików (stat -f -c ...):

  • %T – typ systemu plików (czytelnie), %t – typ w hex.
  • %S – fundamentalny rozmiar bloku; %s – rozmiar „optymalnego” bloku I/O.
  • %b – łączna liczba bloków; %f – wolne bloki; %a – bloki dostępne dla nie-roota; %l – maks. długość nazwy.

Okno terminala
# 1) Podstawowe informacje o pliku
stat plik.log

Wyjście zawiera m.in. rozmiar, typ, prawa, właściciela, czasy dostępu/modyfikacji oraz inode.

Okno terminala
# 2) Własny format – jedna linia na plik
stat -c '%n: %s B, %A (%a), %U:%G, mtime=%y' plik.log

Zwraca nazwę, rozmiar, prawa w dwóch formatach, właściciela/grupę i czas modyfikacji.

Okno terminala
# 3) Czasy w sekundach epoki (przydatne do porównań w skryptach)
stat -c '%n %X %Y %Z' plik.log

Drukuje czasy atime/mtime/ctime jako liczby całkowite (epoch).

Okno terminala
# 4) Informacje o systemie plików zawierającym bieżący katalog
stat -f -c 'fs=%n type=%T block=%S total=%b free=%f avail=%a' .

Pokazuje typ FS, rozmiar bloku i statystyki bloków.

Okno terminala
# 5) Terse: zwięzła forma – jedna linia, stała kolejność pól
stat -t plik.log

Przydatne do szybkiego parsowania przez inne narzędzia.

Okno terminala
# 6) Wypisanie tylko czasu utworzenia (jeśli wspierany przez FS/jądro)
stat -c '%w %n' plik.log # '-' gdy atrybut nieobsługiwany

  • GNU vs BSD/macOS: składnia i znaczniki formatów różnią się; przykłady powyżej dotyczą GNU coreutils (typowe w Linuksie). Na macOS/BSD wiele opcji (-c, --printf) nie istnieje.
  • Uprawnienia: do większości metadanych wystarczy prawo odczytu elementów ścieżki (i „execute” na katalogach do przejścia). Zawartość pliku nie jest czytana.
  • Czas utworzenia: %w/%W może być niedostępne (-) w zależności od systemu plików (np. starsze ext4, część sieciowych FS) i wersji jądra.
  • --format vs --printf: --printf nie dodaje końcowego \n i interpretuje sekwencje \\n, \\t itd.; --format zawsze kończy nową linią.
  • Dowiązania symboliczne: użyj -L, aby raportować metadane obiektu docelowego zamiast samego linku.

Błąd / KomunikatPrzyczynaRozwiązanie
stat: cannot stat 'plik': No such file or directoryNieistniejąca ścieżka lub literówka.Sprawdź nazwę/ścieżkę; używaj cudzysłowów przy spacji: stat "Moje pliki/raport.txt".
stat: invalid option -- 'c' (lub inne)Używasz składni GNU na systemie BSD/macOS.Sprawdź man stat na danej maszynie; dostosuj opcje do wariantu systemu.
Nieoczekiwane - dla %w/%WSystem plików/jądro nie przechowuje czasu utworzenia.Skorzystaj z %y (mtime) lub innego FS; nie zakładaj istnienia birth time.
Permission denied przy dostępie do ścieżkiBrak uprawnień do przejścia przez katalog lub odczytu metadanych urządzenia spec.Uruchom jako użytkownik z odpowiednimi prawami lub dodaj uprawnienia do ścieżki; ewentualnie użyj sudo.
Puste/? dla %CBrak wsparcia kontekstu bezpieczeństwa (np. SELinux) lub niezaładowany moduł.Włącz/Skonfiguruj SELinux/SMACK/AppArmor; sprawdź dokumentację bezpieczeństwa systemu.