stat to narzędzie z pakietu GNU coreutils, które pokazuje pełną metrykę pliku: rozmiar w bajtach, liczbę zajętych bloków, typ, prawa dostępu (i numerycznie, i symbolicznie), właściciela, grupę, numer i-węzła oraz trzy znaczniki czasu — Access, Modify i Change. To odpowiednik systemowego wywołania stat() w formie czytelnej dla człowieka. Sięgasz po nią, gdy ls -l pokazuje za mało: chcesz znać dokładny czas zmiany co do nanosekundy, numer i-węzła albo sprawdzić, na jakim systemie plików faktycznie leży dany katalog.
Składnia i najważniejsze opcje
Podstawowa forma to stat [OPCJE] PLIK... — możesz podać wiele plików naraz.
-c FORMAT,--format=FORMAT— wypisuje tylko wybrane pola wg własnego szablonu (np.%srozmiar,%nnazwa), dodaje znak nowej linii po każdym pliku.--printf=FORMAT— jak wyżej, ale bez automatycznego przejścia do nowej linii; interpretuje sekwencje jak\n,\t.-f,--file-system— zamiast statusu pliku pokazuje status systemu plików, na którym plik się znajduje.-L,--dereference— podąża za dowiązaniem symbolicznym i pokazuje dane pliku docelowego, a nie samego linku.-t,--terse— skrócony, jednowierszowy wynik bez opisów; wygodny do parsowania w skryptach.--help— wypisuje pełną listę sekwencji formatujących (jest ich sporo, warto zajrzeć).
Przykłady użycia
stat plik.txt— pełny raport: rozmiar, prawa, właściciel, i-węzeł i wszystkie trzy znaczniki czasu.stat -c '%s' plik.txt— wypisuje wyłącznie rozmiar pliku w bajtach, idealne do podstawienia w skrypcie.stat -c '%A %U %n' *.log— dla każdego pliku pokazuje prawa symbolicznie, właściciela i nazwę w jednej linii.stat -f /home— pokazuje system plików pod/home: typ, rozmiar bloków oraz liczbę wolnych i-węzłów.stat -L link_do_pliku— zamiast informacji o samym dowiązaniu wyświetla dane pliku, na który ono wskazuje.
Częste błędy i pułapki
Największa pułapka to przenośność: GNU stat (Linux) i BSD stat (macOS) mają zupełnie inne flagi. Na macOS format podajesz przez -f, a nie -c — a -f w GNU oznacza system plików. Skrypt napisany pod Linuksa potrafi się wysypać na Macu i odwrotnie, więc nie zakładaj, że działa wszędzie.
Druga rzecz: domyślnie stat na dowiązaniu symbolicznym pokazuje sam link, nie cel. Jeśli chcesz dane pliku docelowego, dołóż -L. Trzecia: nie myl pola Modify (zmiana treści pliku) z Change (zmiana metadanych, np. praw czy właściciela) — to dwie różne daty, które łatwo pomylić przy debugowaniu.
Powiązane komendy: ls, file, du, find, touch, df.