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ę.
Składnia
Dział zatytułowany „Składnia”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
.
Parametry
Dział zatytułowany „Parametry”Parametr | Opis |
---|---|
PLIK... | Jedna lub więcej ścieżek do plików/katalogów. |
-c, --format=FORMAT | Własny format wyjścia (automatycznie dodaje \n ). Używane dla informacji o plikach. |
--printf=FORMAT | Jak --format , ale interpretuje sekwencje \\ i nie dodaje końcowego \n – przydatne w skryptach. |
-f, --file-system | Zwraca informacje o systemie plików (zamiast o plikach). |
-t, --terse | Zwięzła, jednowierszowa forma wyjścia. |
-L, --dereference | Śledź dowiązania symboliczne (działa na plik docelowy). |
--help | Wyświetl pomoc. |
--version | Podaj 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.
Przykłady użycia
Dział zatytułowany „Przykłady użycia”# 1) Podstawowe informacje o plikustat plik.log
Wyjście zawiera m.in. rozmiar, typ, prawa, właściciela, czasy dostępu/modyfikacji oraz inode.
# 2) Własny format – jedna linia na plikstat -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.
# 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).
# 4) Informacje o systemie plików zawierającym bieżący katalogstat -f -c 'fs=%n type=%T block=%S total=%b free=%f avail=%a' .
Pokazuje typ FS, rozmiar bloku i statystyki bloków.
# 5) Terse: zwięzła forma – jedna linia, stała kolejność pólstat -t plik.log
Przydatne do szybkiego parsowania przez inne narzędzia.
# 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.
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ż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 /%W | System 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żki | Brak 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 %C | Brak wsparcia kontekstu bezpieczeństwa (np. SELinux) lub niezaładowany moduł. | Włącz/Skonfiguruj SELinux/SMACK/AppArmor; sprawdź dokumentację bezpieczeństwa systemu. |
Linki i źródła
Dział zatytułowany „Linki i źródła”- man stat – oficjalna dokumentacja.
- GNU coreutils – „stat invocation” – opis opcji i formatów.
- GNU coreutils – znaczniki formatu
--format
/--printf
– pełna lista konwersji.