Jak korzystać z polecenia stat w systemie Linux
Opublikowany: 2022-01-29 Polecenie stat
Linux pokazuje znacznie więcej szczegółów niż ls
. Zajrzyj za zasłonę dzięki temu informacyjnemu i konfigurowalnemu narzędziu. Pokażemy Ci, jak z niego korzystać.
stat Zabiera Cię za kulisy
Polecenie ls
jest świetne w tym, co robi — i robi dużo — ale w przypadku Linuksa wydaje się, że zawsze jest sposób, aby zajrzeć głębiej i zobaczyć, co kryje się pod powierzchnią. A często nie chodzi tylko o uniesienie krawędzi dywanu. Możesz rozerwać deski podłogowe, a następnie wykopać dziurę. Linuksa można obrać jak cebulę.
ls
pokaże Ci wiele informacji o pliku, na przykład jakie uprawnienia są dla niego ustawione, jak duży jest i czy jest to plik, czy dowiązanie symboliczne. Aby wyświetlić te informacje, ls
odczytuje je ze struktury systemu plików zwanej i-węzłem.
Każdy plik i katalog ma i-węzeł. I-węzeł przechowuje metadane dotyczące pliku, takie jak system plików, który blokuje, oraz znaczniki daty powiązane z plikiem. I-węzeł jest jak karta biblioteczna dla pliku. Ale ls
pokaże ci tylko niektóre informacje. Aby wszystko zobaczyć, musimy użyć komendy stat
.
Podobnie jak ls
, polecenie stat
ma wiele opcji. To czyni go doskonałym kandydatem do używania aliasów. Po odkryciu określonego zestawu opcji, które sprawiają, że stat
daje pożądane dane wyjściowe, zapakuj go w alias lub funkcję powłoki. Dzięki temu jest znacznie wygodniejszy w użyciu i nie musisz pamiętać skomplikowanego zestawu opcji wiersza poleceń.
POWIĄZANE: Jak używać polecenia ls do wyświetlania plików i katalogów w systemie Linux?
Szybkie porównanie
Użyjmy ls
, aby dać nam długą listę (opcja -l
) z rozmiarami plików czytelnymi dla człowieka (opcja -h
):
ls -lh ana.h
Informacje, które dostarcza ls od lewej do prawej to:
- Pierwszym znakiem jest myślnik „-”, który mówi nam, że plik jest zwykłym plikiem, a nie gniazdem, dowiązaniem symbolicznym lub innym typem obiektu.
- Właściciel, grupa i inne uprawnienia są wymienione w formacie ósemkowym.
- Liczba twardych linków prowadzących do tego pliku. W tym przypadku iw większości przypadków będzie to jeden.
- Właścicielem pliku jest Dave.
- Właścicielem grupy jest Dave.
- Rozmiar pliku to 802 bajty.
- Ostatnia modyfikacja pliku miała miejsce w piątek 13 grudnia 2015 r.
- Nazwa pliku to
ana.c
.
Przyjrzyjmy się stat
:
stat ana.h
Informacje, które otrzymujemy od stat
to:
- Plik : nazwa pliku. Zwykle jest taka sama jak nazwa, którą przekazaliśmy do
stat
w wierszu poleceń, ale może być inna, jeśli patrzymy na dowiązanie symboliczne. - Rozmiar : Rozmiar pliku w bajtach.
- Bloki : Liczba bloków systemu plików wymaganych przez plik do zapisania na dysku twardym.
- IO Block : Rozmiar bloku systemu plików.
- Typ pliku : typ obiektu, który opisują metadane. Najpopularniejszymi typami są pliki i katalogi, ale mogą to być również łącza, gniazda lub nazwane potoki.
- Urządzenie : Numer urządzenia w postaci szesnastkowej i dziesiętnej. Jest to identyfikator dysku twardego, na którym przechowywany jest plik.
- I- węzeł : Numer i-węzła. To znaczy numer identyfikacyjny tego i-węzła. Numer i-węzła i numer urządzenia razem jednoznacznie identyfikują plik.
- Linki : ta liczba wskazuje, ile twardych linków wskazuje na ten plik. Każde łącze twarde ma swój własny węzeł. Innym sposobem myślenia o tej liczbie jest to, ile i-węzłów wskazuje na ten jeden plik. Za każdym razem, gdy łącze stałe jest tworzone lub usuwane, liczba ta będzie zwiększana lub zmniejszana. Gdy osiągnie zero, sam plik został usunięty, a i-węzeł został usunięty. Jeśli używasz
stat
w katalogu, ta liczba reprezentuje liczbę plików w katalogu, w tym „.” wpis dla bieżącego katalogu i wpis „..” dla katalogu nadrzędnego. - Dostęp : Uprawnienia do plików są wyświetlane w formacie ósemkowym i tradycyjnym
rwx
(odczyt, zapis, wykonanie). - Uid : identyfikator użytkownika i nazwa konta właściciela.
- Gid : Identyfikator grupy i nazwa konta właściciela.
- Dostęp : znacznik czasu dostępu. Nie tak proste, jak mogłoby się wydawać. Nowoczesne dystrybucje Linuksa używają schematu o nazwie
relatime
, który próbuje zoptymalizować zapisy dysku twardego wymagane do aktualizacji czasu dostępu. Mówiąc najprościej, czas dostępu jest aktualizowany, jeśli jest starszy niż zmodyfikowany czas. - Modyfikuj : sygnatura czasowa modyfikacji. Jest to czas ostatniej modyfikacji zawartości pliku. (Szczęściem było, że zawartość tego pliku została ostatnio zmieniona cztery lata temu.)
- Zmień : znacznik czasu zmiany. Jest to czas ostatniej zmiany atrybutów lub zawartości pliku. Jeśli zmodyfikujesz plik, ustawiając nowe uprawnienia do pliku, znacznik czasu zmiany zostanie zaktualizowany (ponieważ atrybuty pliku uległy zmianie), ale zmodyfikowany znacznik czasu nie zostanie zaktualizowany (ponieważ zawartość pliku nie została zmieniona).
- Narodziny : Zarezerwowane, aby pokazać oryginalną datę utworzenia pliku, ale nie jest to zaimplementowane w systemie Linux.
Zrozumienie znaczników czasu
Sygnatury czasowe są zależne od strefy czasowej. -0500
na końcu każdego wiersza wskazuje, że ten plik został utworzony na komputerze w strefie czasowej uniwersalnego czasu koordynowanego (UTC), czyli o pięć godzin przed strefą czasową bieżącego komputera. Więc ten komputer jest pięć godzin za komputerem, który utworzył ten plik. W rzeczywistości plik został utworzony na komputerze ze strefą czasową w Wielkiej Brytanii, a my patrzymy na niego tutaj na komputerze w strefie czasowej US Eastern Standard.
Znaczniki czasu modyfikacji i zmiany mogą powodować zamieszanie, ponieważ dla niewtajemniczonych ich nazwy brzmią tak, jakby oznaczały to samo.
Użyjmy chmod
do zmodyfikowania uprawnień do pliku o nazwie ana.c
. Zamierzamy sprawić, by każdy mógł do niego zapisywać. Nie wpłynie to na zawartość pliku, ale wpłynie na atrybuty pliku.
chmod +w ana.c
A następnie użyjemy stat
, aby spojrzeć na sygnatury czasowe:
stat ana.c
Znacznik czasu zmiany został zaktualizowany, ale zmodyfikowany nie.
Zmodyfikowany znacznik czasu zostanie zaktualizowany tylko wtedy, gdy zmieni się zawartość pliku. Sygnatura czasowa zmiany jest aktualizowana zarówno w przypadku zmian treści, jak i zmian atrybutów.
Używanie Stat z wieloma plikami
Aby mieć raport statystyczny dotyczący kilku plików naraz, przekaż nazwy plików do stat
w wierszu poleceń:
stat ana.h ana.o
Aby użyć stat
na zestawie plików, użyj dopasowania do wzorca. Znak zapytania „?” reprezentuje dowolny pojedynczy znak, a gwiazdka „*” reprezentuje dowolny ciąg znaków. Możemy powiedzieć stat
, aby zgłaszał dowolny plik o nazwie „ana” z rozszerzeniem jednoliterowym, za pomocą tego polecenia:
stat ana.?
Używanie statystyk do raportowania o systemach plików
stat
może raportować stan systemów plików, a także stan plików. Opcja -f
(system plików) nakazuje stat
raportowanie o systemie plików, w którym znajduje się plik. Zauważ, że zamiast nazwy pliku możemy przekazać do stat
katalog taki jak „/”.
stat -f ana.c
stat
informacji daje nam to:
- Plik : nazwa pliku.
- ID : identyfikator systemu plików w notacji szesnastkowej.
- Namelen : Maksymalna dozwolona długość nazw plików.
- Typ : typ systemu plików.
- Rozmiar bloku : ilość danych żądana żądań odczytu w celu uzyskania optymalnych szybkości przesyłania danych.
- Podstawowy rozmiar bloku : Rozmiar każdego bloku systemu plików.
Bloki:
- Total : Całkowita liczba wszystkich bloków w systemie plików.
- Wolne : Liczba wolnych bloków w systemie plików.
- Dostępne : liczba bezpłatnych bloków dostępnych dla zwykłych użytkowników (innych niż root).
i-węzły:
- Total : Całkowita liczba i-węzłów w systemie plików.
- Wolny : Liczba wolnych i-węzłów w systemie plików.
Wyłuskiwanie linków symbolicznych
Jeśli użyjesz stat
na pliku, który w rzeczywistości jest dowiązaniem symbolicznym, zgłosi on dowiązanie. Jeśli chcesz, aby stat
raportowały plik, na który wskazuje łącze, użyj opcji -L
(dereference). Plik code.c
jest dowiązaniem symbolicznym do ana.c
. Spójrzmy na to bez opcji -L
:
kod stat.c
Nazwa pliku pokazuje code.c
wskazujący na ( ->
) ana.c
. Rozmiar pliku to tylko 11 bajtów. Nie ma bloków poświęconych przechowywaniu tego linku. Typ pliku jest wymieniony jako dowiązanie symboliczne.
Najwyraźniej nie patrzymy tutaj na rzeczywisty plik. Zróbmy to jeszcze raz i dodajmy opcję -L
:
stat -L kod.c
To pokazuje teraz szczegóły pliku wskazywanego przez dowiązanie symboliczne. Pamiętaj jednak, że nazwa pliku nadal jest podana jako code.c
. To jest nazwa łącza, a nie pliku docelowego. Dzieje się tak, ponieważ jest to nazwa, którą przekazaliśmy do stat
w wierszu poleceń.
Łagodny raport
Opcja -t
(zwięzła) powoduje, że stat
dostarcza skondensowane podsumowanie:
stat -t ana.c
Nie ma żadnych wskazówek. Aby nadać temu sens — dopóki nie zapamiętasz sekwencji pól — musisz powiązać te dane wyjściowe z pełnymi danymi wyjściowymi stat
.
Niestandardowe formaty wyjściowe
Lepszym sposobem uzyskania innego zestawu danych ze stat
jest użycie formatu niestandardowego. Istnieje długa lista tokenów zwanych sekwencjami formatu. Każdy z nich reprezentuje element danych. Wybierz te, które chcesz uwzględnić w danych wyjściowych i utwórz ciąg formatu. Kiedy stat
i przekażemy do niego ciąg formatujący, dane wyjściowe będą zawierały tylko żądane elementy danych.
Istnieją różne zestawy sekwencji formatów dla plików i systemów plików. Lista plików to:
- %a : prawa dostępu w liczbie ósemkowej.
- %A : Prawa dostępu w formie czytelnej dla człowieka (
rwx
). - %b : Liczba przydzielonych bloków.
- %B : Rozmiar w bajtach każdego bloku.
- %d : Numer urządzenia w postaci dziesiętnej.
- %D : Numer urządzenia w szesnastkach.
- %f : tryb surowy w szesnastkach.
- %F Typ pliku.
- %g : identyfikator grupy właściciela.
- %G : Nazwa grupy właściciela.
- %h : Liczba twardych łączy.
- %i : Numer i-węzła.
- %m : Punkt montowania.
- %n : nazwa pliku.
- %N : Cytowana nazwa pliku, z wyłuskaną nazwą pliku, jeśli jest to dowiązanie symboliczne.
- %o : wskazówka dotycząca optymalnego rozmiaru transferu we/wy.
- %s : Całkowity rozmiar w bajtach.
- %t : Główny typ urządzenia w szesnastkach, dla plików specjalnych urządzeń znakowych/blokowych.
- %T : Typ podrzędnego urządzenia w szesnastkach, dla plików specjalnych urządzeń znakowych/blokowych.
- %u : Identyfikator użytkownika właściciela.
- %U : nazwa użytkownika właściciela.
- %w : czas narodzin pliku, czytelny dla człowieka lub łącznik „-”, jeśli jest nieznany.
- %W : Czas narodzin pliku, sekundy od Epoki; 0 jeśli nieznany.
- %x : Czas ostatniego dostępu, czytelny dla człowieka.
- %X : Czas ostatniego dostępu, sekundy od Epoki.
- %y : Czas ostatniej modyfikacji danych, czytelny dla człowieka.
- %Y : Czas ostatniej modyfikacji danych, sekundy od Epoki.
- %z : Czas ostatniej zmiany statusu, czytelny dla człowieka.
- %Z : Czas ostatniej zmiany statusu, sekundy od Epoki.
„Epoką” jest Epoka Uniksa, która miała miejsce 1970-01-01 00:00:00 +0000 (UTC).
W przypadku systemów plików sekwencje formatujące to:
- %a : Liczba wolnych bloków dostępnych dla zwykłych użytkowników (innych niż root).
- %b : Całkowita liczba bloków danych w systemie plików.
- %c : Całkowita liczba i-węzłów w systemie plików.
- %d : liczba wolnych i-węzłów w systemie plików.
- %f : Liczba wolnych bloków w systemie plików.
- %i : Identyfikator systemu plików w postaci szesnastkowej.
- %l : maksymalna długość nazw plików.
- %n : nazwa pliku.
- %s : Rozmiar bloku (optymalny rozmiar zapisu).
- %S : Rozmiar bloków systemu plików (dla liczby bloków).
- %t : szesnastkowy typ systemu plików.
- %T : typ systemu plików w formie czytelnej dla człowieka.
Istnieją dwie opcje, które akceptują ciągi sekwencji formatu. Są to --format
i --printf
. Różnica między nimi polega na tym, że --printf
interpretuje sekwencje specjalne w stylu C, takie jak nowy wiersz \n
i tab \t
, i nie dodaje automatycznie znaku nowego wiersza do swoich danych wyjściowych.
Stwórzmy ciąg formatujący i przekażmy go do stat
. Sekwencje formatów, które będą używane, to %n
jako nazwa pliku, %s
jako rozmiar pliku i %F
jako typ pliku. Dodamy sekwencję ucieczki \n
na końcu łańcucha, aby upewnić się, że każdy plik jest obsługiwany w nowym wierszu. Nasz ciąg formatu wygląda tak:
"Plik %n ma %s bajtów i jest %F\n"
Przekażemy to stat
za pomocą opcji --printf
. Poprosimy stat
o zgłoszenie pliku o nazwie code.c
zestawu plików pasujących do a ana.?
. To jest pełne polecenie. Zwróć uwagę na znak równości „ =
” między --printf
a ciągiem formatu:
stat --printf="Plik %n ma %s bajtów i jest kodem %F\n".c ana/ana.?
Raport dla każdego pliku jest wymieniony w nowej linii, o co prosiliśmy. Nazwa pliku, rozmiar pliku i typ pliku są dla nas dostarczane.
Niestandardowe formaty zapewniają dostęp do jeszcze większej liczby elementów danych, niż zawiera standardowe dane wyjściowe stat
.
Drobna kontrola ziarna
Jak widać, istnieje ogromne możliwości wyodrębnienia poszczególnych elementów danych, które Cię interesują. Prawdopodobnie możesz również zobaczyć, dlaczego zalecamy używanie aliasów w przypadku dłuższych i bardziej złożonych zaklęć.
Polecenia Linuksa | ||
Pliki | tar · pv · kot · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · dysk testowy · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · ogon · stat · ls · fstab · echo · mniej · chgrp · chown · rev · wygląd · stringi · typ · zmiana nazwy · zip · rozpakuj · montuj · umount · zainstaluj · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · konwertuj · rclone · shred · srm | |
Procesy | alias · ekran · top · ładne · renice · postęp · strace · systemd · tmux · chsh · historia · w · wsad · free · co · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · ściana · tak · kill · sen · sudo · su · czas · groupadd · usermod · grupy · lshw · zamknij · restart · halt · poweroff · passwd · lscpu · crontab · data · bg · fg | |
Sieć | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
POWIĄZANE: Najlepsze laptopy z systemem Linux dla programistów i entuzjastów