stat

Wyświetla szczegółowe informacje o pliku lub systemie plików (rozmiar, prawa, znaczniki czasu).

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. %s rozmiar, %n nazwa), 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.