Każdy plik i folder w systemie plików ma tak zwaną strukturę Inode, w której przechowywane są metadane tego obiektu. Przechowuje właściciela, grupę właścicieli, czas modyfikacji, utworzenia i dostępu do pliku, a także inne informacje. Można to zobaczyć nie tylko za pomocą narzędzi do debugowania systemu plików. Niektóre informacje są wyświetlane przez narzędzie ls
, ale jeśli potrzebujesz więcej, możesz użyć polecenia stat
. Następnie powiemy ci, jak używać tego polecenia w systemie Linux.
Składnia polecenia jest prosta. Wymaga przekazania opcji i ścieżki do pliku, dla którego chcesz zobaczyć informacje:
$ stat [options] /path/to/file
Przekazywanie opcji nie jest konieczne i nie ma ich zbyt wiele:
-L, dereference
- pokazuje informacje o pliku zamiast dowiązania symbolicznego;
-f, --file-system
- pokazuje informacje o systemie plików, w którym znajduje się plik;
-c, --format
- pozwala określić format wyjściowy zamiast standardowego, każdy plik jest wyprowadzany z nowej linii;
--printf
- podobne do --format
, tylko dla nowej linii należy użyć ;
-t, --terse
- pokazuje informacje w bardzo krótkiej formie, w jednym wierszu;
--version
- pokazuje wersję narzędzia.
Zobaczmy kilka przykładów użycia. Aby zobaczyć informacje o pliku, wystarczy uruchomić program bez opcji, przekazując mu ścieżkę do pliku, na przykład /etc/passwd
:
$ stat /etc/passwd
Wyjście programu:
File
- ścieżka do pliku, dla którego wyświetlane są informacje;
Size
- rozmiar pliku w bajtach;
IO
Block - rozmiar bloku systemu plików w bajtach;
Blocks
- liczba bloków systemu plików zajmowanych przez plik;
Device
- identyfikator urządzenia, na przykład dysku twardego, na którym zapisany jest plik;
Inode - unikalny numer Inode tego pliku;
Links
- liczba twardych linków do tego pliku;
Access
- prawadostępu
do pliku;
Uid
- identyfikator i nazwa użytkownika-właściciela pliku;
Gid
- identyfikator i nazwa grupy plików;
Access
- czas ostatniego dostępu do pliku;
Modify
- czas ostatniej modyfikacji zawartości pliku;
Changed
- czas ostatniej zmiany atrybutów lub zawartości pliku;
Created(Birth
) - zarezerwowane do wyświetlania oryginalnej daty utworzenia pliku, ale jeszcze nie zaimplementowane.
Musimy powiedzieć nieco więcej o formacie czasu. Na przykład czas ostatniego dostępu do pliku to 2020-12-02 18:25:01.043831739 +0200. Czas ten jest wyświetlany z uwzględnieniem strefy czasowej. Liczby +0200 wskazują, że strefa czasowa na komputerze, który utworzył lub zmodyfikował ten plik, jest o dwie godziny większa niż UTC, czyli Europa/Kijów w czasie zimowym.
Jeśli spróbujesz przekazać narzędziu dowiązanie symboliczne, pokaże ono tylko informacje z Inode samego dowiązania:
$ stat /etc/passwdlin
Aby zobaczyć informacje o pliku wskazywanym przez link, należy użyć opcji -L
:
$ stat -L /etc/passwdlink
Można przekazać więcej niż jeden plik:
$ stat /etc/passwd /etc/group
Aby sformatować dane wyjściowe, można użyć następujących sekwencji znaków:
%A
- prawa dostępu;
%b
- liczba zajętych bloków;
%F
- typ pliku;
%g
- identyfikator grupy plików;
%G
- nazwa grupy plików;
%i
- identyfikator węzła;
%n
- nazwa pliku;
%s
- rozmiar pliku;
%u
- identyfikator właściciela pliku;
%U
- nazwa właściciela pliku;
%x
- czas ostatniego dostępu;
%y
- czas ostatniej modyfikacji zawartości;
%z
- czas ostatniej modyfikacji zawartości lub atrybutów.
Nie są to wszystkie możliwe sekwencje, więcej można znaleźć w pomocy narzędzia:
$ man stat
Na przykład, wyświetlmy tylko nazwę pliku i czas ostatniej modyfikacji jego zawartości:
$ stat --printf "File %n has been modified %y " /etc/passwd /etc/group
Jeśli chcesz zobaczyć informacje o systemie plików, w którym znajduje się plik, powinieneś użyć opcji -f
:
$ stat -f /etc/passwd
Zobaczmy, co oznaczają pola wyświetlane przez narzędzie:
File
- nazwa pliku;
Typ
- typ systemu plików;
ID
- identyfikator systemu plików;
Name length(Namelen
) - maksymalna długość nazwy w systemie plików;
Rozmiarbloku
- ilość danych w żądaniu odczytu lub zapisu dla optymalnej prędkości;
Podstawowy
rozmiar bloku - fizyczny rozmiar bloku w systemie plików.
Następnie podawana jest całkowita liczba bloków w systemie i liczba wolnych bloków.