Jak používat příkaz stat v systému Linux

Příkaz Linux stat vám ukáže mnohem více podrobností než ls. Nahlédněte za oponu s tímto informativním a konfigurovatelným nástrojem. Ukážeme vám, jak jej používat.

stat vás vezme do zákulisí

Příkaz ls je skvělý v tom, co dělá – a dělá toho hodně –, ale s Linuxem se zdá, že vždy existuje způsob, jak jít hlouběji a vidět, co se skrývá pod povrchem. A často to není jen případ zvednutí okraje koberce. Podlahová prkna můžete roztrhat a pak vykopat díru. Linux můžete loupat jako cibuli.

ls vám ukáže spoustu informací o souboru, například jaká oprávnění jsou u něj nastavena, jak je velký a zda se jedná o soubor nebo symbolický odkaz. Pro zobrazení těchto informací je ls přečte z a struktura souborového systému nazývaná inode.

Každý soubor a adresář má inode. Inod drží metadata o souboru, jako například, které bloky souborového systému zabírá, a datová razítka spojená se souborem. Inode je jako karta knihovny pro soubor. Ale ukážu vám jen některé informace. Abychom viděli vše, musíme použít příkaz stat.

Stejně jako ls má příkaz stat mnoho možností. Díky tomu je skvělým kandidátem pro použití aliasů. Jakmile objevíte konkrétní sadu voleb, díky nimž vám stat poskytne požadovaný výstup, zabalte jej do aliasu nebo funkce shellu. Díky tomu je použití mnohem pohodlnější a nemusíte si pamatovat tajemnou sadu možností příkazového řádku.

Rychlé srovnání

Použijme ls, abychom dostali dlouhý seznam (volba -l) s velikostí souborů čitelnou pro člověka (volba -h):

ls -lh ana.h

Zleva doprava informace, které poskytuje, jsou:

Úplně prvním znakem je pomlčka „-“ a to nám říká, že soubor je běžný soubor a ne soket, symbolický odkaz nebo jiný typ objektu.
Vlastník, skupina a další oprávnění jsou uvedena v osmičkovém formátu.
Počet pevných odkazů směřujících na tento soubor. V tomto případě a ve většině případů to bude jeden.
Vlastníkem souboru je dave.
Vlastníkem skupiny je dave.
Velikost souboru je 802 bajtů.
Soubor byl naposledy upraven v pátek 13. prosince 2015.
Název souboru je ana.c.

Podívejme se na statistiku:

stat ana.h

Informace, které získáváme ze statistik, jsou:

Soubor: Název souboru. Obvykle je to stejné jako jméno, které jsme předali stat na příkazovém řádku, ale může se lišit, pokud se díváme na symbolický odkaz.
Velikost: Velikost souboru v bajtech.
Bloky: Počet bloků souborového systému, které soubor vyžaduje, aby mohl být uložen na pevný disk.
IO Block: Velikost bloku souborového systému.
Typ souboru: Typ objektu, který metadata popisují. Nejběžnějšími typy jsou soubory a adresáře, ale mohou to být také odkazy, sokety nebo pojmenované kanály.
Zařízení: Číslo zařízení v hexadecimální a desítkové. Toto je ID pevného disku, na kterém je soubor uložen.
Inode: Číslo inodu. Tedy identifikační číslo tohoto inodu. Číslo inodu a číslo zařízení společně jednoznačně identifikují soubor.
Odkazy: Toto číslo udává, kolik pevných odkazů odkazuje na tento soubor. Každý pevný odkaz má svůj vlastní inode. Takže další způsob, jak přemýšlet o tomto čísle, je, kolik inodů ukazuje na tento jeden soubor. Pokaždé, když je pevný odkaz vytvořen nebo odstraněn, bude toto číslo upraveno nahoru nebo dolů. Když dosáhne nuly, samotný soubor byl odstraněn a inode je odstraněn. Pokud použijete statistiku pro adresář, toto číslo představuje počet souborů v adresáři, včetně „.“ záznam pro aktuální adresář a záznam „..“ pro nadřazený adresář.
Přístup: Oprávnění souborů jsou zobrazena v osmičkovém a tradičním rwx (formáty čtení, zápisu, spouštění).
Uid: ID uživatele a název účtu vlastníka.
Gid: ID skupiny a název účtu vlastníka.
Přístup: Časové razítko přístupu. Ne tak přímočaré, jak by se mohlo zdát. Moderní distribuce Linuxu používají schéma zvané relatime, které se o to pokouší optimalizovat zápisy na pevný disk potřebné k aktualizaci přístupové doby. Jednoduše řečeno, čas přístupu se aktualizuje, pokud je starší než čas změny.
Upravit: Časové razítko změny. Toto je čas, kdy byl obsah souboru naposledy upraven. (Shodou okolností byl obsah tohoto souboru naposledy změněn před čtyřmi lety.)
Změna: Časové razítko změny. Toto je čas, kdy byly naposledy změněny atributy nebo obsah souboru. Pokud upravíte soubor nastavením nových oprávnění k souboru, časové razítko změny bude aktualizováno (protože se změnily atributy souboru), ale upravené časové razítko nebude aktualizováno (protože obsah souboru nebyl změněn).
Narození: Vyhrazeno pro zobrazení původního data vytvoření souboru, ale to není implementováno v Linuxu.

  Jak nainstalovat Flowblade Video Editor pro Linux

Pochopení časových razítek

Časová razítka jsou citlivá na časové pásmo. -0500 na konci každého řádku ukazuje, že tento soubor byl vytvořen na počítači v a Koordinovaný světový čas (UTC) časové pásmo, které je pět hodin před časovým pásmem aktuálního počítače. Tento počítač je tedy pět hodin za počítačem, který vytvořil tento soubor. Ve skutečnosti byl soubor vytvořen na počítači s časovým pásmem Spojeného království a my se na něj díváme zde na počítači v časovém pásmu východního standardu USA.

Časová razítka úprav a změn mohou způsobit zmatek, protože pro nezasvěcené jejich názvy zní, jako by znamenaly totéž.

Použijme chmod k úpravě oprávnění k souboru s názvem ana.c. Uděláme to tak, aby to mohl psát každý. To neovlivní obsah souboru, ale ovlivní atributy souboru.

chmod +w ana.c

A pak použijeme stat, abychom se podívali na časová razítka:

stat ana.c

Časové razítko změny bylo aktualizováno, ale upravené nikoli.

Upravené časové razítko bude aktualizováno pouze v případě, že se změní obsah souboru. Časové razítko změny se aktualizuje pro změny obsahu i změny atributů.

Použití Stat s více soubory

Chcete-li mít statistickou zprávu o několika souborech najednou, předejte názvy souborů statistickým údajům na příkazovém řádku:

stat ana.h ana.o

Chcete-li použít statistiku pro sadu souborů, použijte porovnávání vzorů. Otazník „?“ představuje libovolný jednotlivý znak a hvězdička „*“ představuje libovolný řetězec znaků. Můžeme říct statu, aby hlásil jakýkoli soubor s názvem „ana“ s jednopísmennou příponou, pomocí tohoto příkazu:

stat ana.?

Použití statistik k vytváření sestav o souborových systémech

stat může hlásit stav souborových systémů a také stav souborů. Volba -f (souborový systém) říká statu, aby hlásil souborový systém, na kterém je soubor umístěn. Všimněte si, že místo názvu souboru můžeme také předat adresář jako „/“.

stat -f ana.c

Informace, které nám poskytuje statistika, jsou:

  Jak vytvořit zástupce nabídky aplikací v systému Linux

Soubor: Název souboru.
ID: ID systému souborů v hexadecimálním zápisu.
Namelen: Maximální přípustná délka pro názvy souborů.
Typ: Typ souborového systému.
Velikost bloku: Množství dat, na které se mají požadovat požadavky na čtení pro optimální přenosové rychlosti dat.
Základní velikost bloku: Velikost každého bloku souborového systému.

Bloky:

Celkem: Celkový počet všech bloků v souborovém systému.
Free: Počet volných bloků v souborovém systému.
Dostupné: Počet volných bloků dostupných běžným (nerootovým) uživatelům.

Inody:

Celkem: Celkový počet inodů v souborovém systému.
Free: Počet volných inodů v souborovém systému.

Dereferencování symbolických odkazů

Pokud použijete statistiku pro soubor, který je ve skutečnosti symbolickým odkazem, bude odkaz hlásit. Pokud chcete, aby statistika hlásila soubor, na který odkaz odkazuje, použijte volbu -L (dereference). Soubor code.c je symbolický odkaz na ana.c . Podívejme se na to bez možnosti -L:

stat code.c

Název souboru ukazuje code.c ukazující na ( -> ) ana.c. Velikost souboru je pouze 11 bajtů. Ukládání tohoto odkazu je věnováno nula bloků. Typ souboru je uveden jako symbolický odkaz.

Je zřejmé, že se zde nedíváme na skutečný soubor. Udělejme to znovu a přidejte možnost -L:

stat -L code.c

Nyní se zobrazují podrobnosti o souboru, na který ukazuje symbolický odkaz. Všimněte si však, že název souboru je stále uveden jako code.c. Toto je název odkazu, nikoli cílový soubor. To se děje, protože toto je jméno, které jsme předali stat na příkazovém řádku.

Stručná zpráva

Volba -t (stručná) způsobí, že stat poskytne zkrácený souhrn:

stat -t ana.c

Nejsou uvedeny žádné stopy. Abyste tomu rozuměli – dokud si nezapamatujete sekvenci pole – musíte tento výstup porovnat s úplným statistickým výstupem.

Vlastní výstupní formáty

Lepším způsobem, jak získat jinou sadu dat ze statistik, je použít vlastní formát. Existuje dlouhý seznam tokenů nazývaných sekvence formátů. Každý z nich představuje datový prvek. Vyberte ty, které chcete zahrnout do výstupu, a vytvořte formátovací řetězec. Když zavoláme stat a předáme mu formátovací řetězec, výstup bude obsahovat pouze datové prvky, které jsme požadovali.

Existují různé sady formátových sekvencí pro soubory a souborové systémy. Seznam souborů je:

%a: Přístupová práva v osmičkové soustavě.
%A: Přístupová práva ve formě čitelné pro člověka (rwx).
%b: Počet přidělených bloků.
%B: Velikost každého bloku v bajtech.
%d: Číslo zařízení v desítkové soustavě.
%D: Číslo zařízení v hex.
%f: Surový režim v hex.
%F Typ souboru.
%g: ID skupiny vlastníka.
%G: Název skupiny vlastníka.
%h: Počet pevných odkazů.
%i: Číslo inodu.
%m: Bod připojení.
%n: Název souboru.
%N: Název souboru v uvozovkách s dereferencovaným názvem souboru, pokud se jedná o symbolický odkaz.
%o: Tip na optimální velikost I/O přenosu.
%s: Celková velikost v bajtech.
%t: Hlavní typ zařízení v hex, pro speciální soubory znakových/blokových zařízení.
%T: Vedlejší typ zařízení v hex, pro speciální soubory znakového/blokového zařízení.
%u: ID uživatele vlastníka.
%U: Uživatelské jméno vlastníka.
%w: Čas narození souboru, čitelný pro člověka nebo spojovník „-“, pokud není znám.
%W: Čas narození souboru, sekundy od epochy; 0, pokud není známo.
%x: Čas posledního přístupu, čitelný člověkem.
%X: Čas posledního přístupu, sekundy od epochy.
%y: Čas poslední úpravy dat, čitelný člověkem.
%Y: Čas poslední úpravy dat, sekundy od epochy.
%z: Čas poslední změny stavu, čitelný člověkem.
%Z: Čas poslední změny stavu, sekundy od epochy.

  Jak nainstalovat prohlížeč Vivaldi na Linux

„Epochou“ je Unixová epocha, který se konal dne 1970-01-01 00:00:00 +0000 (UTC).

Pro souborové systémy jsou sekvence formátů:

%a: Počet volných bloků dostupných běžným uživatelům (bez oprávnění root).
%b: Celkový počet bloků dat v souborovém systému.
%c: Celkový počet inodů v souborovém systému.
%d: Počet volných inodů v souborovém systému.
%f: Počet volných bloků v souborovém systému.
%i: ID systému souborů v šestnáctkové soustavě.
%l: Maximální délka názvů souborů.
%n: Název souboru.
%s: Velikost bloku (optimální velikost zápisu).
%S: Velikost bloků souborového systému (pro počet bloků).
%t: Typ systému souborů v šestnáctkové soustavě.
%T: typ systému souborů ve formě čitelné pro člověka.

Existují dvě možnosti, které přijímají řetězce formátovacích sekvencí. Jsou to –format a –printf. Rozdíl mezi nimi je –printf interprets Únikové sekvence ve stylu C jako je nový řádek n a tabulátor t a do svého výstupu automaticky nepřidává znak nového řádku.

Vytvořme formátovací řetězec a předáme jej do stat. Sekvence formátů, které se budou používat, jsou %n pro název souboru, %s pro velikost souboru a %F pro typ souboru. Přidáme n escape sekvenci na konec řetězce, abychom se ujistili, že každý soubor bude zpracován na novém řádku. Náš formátovací řetězec vypadá takto:

"File %n is %s bytes, and is a %Fn"

Toto předáme do statu pomocí volby –printf. Požádáme stat, aby podal zprávu o souboru s názvem code.c a sadě souborů, které odpovídají a.?. Toto je úplný příkaz. Všimněte si rovnítka „=“ mezi –printf a formátovacím řetězcem:

stat --printf="File %n is %s bytes, and is a %Fn" code.c ana/ana.?

stat --printf=

Zpráva pro každý soubor je uvedena na novém řádku, což jsme požadovali. Poskytujeme název souboru, velikost souboru a typ souboru.

Vlastní formáty vám umožňují přístup k ještě většímu množství datových prvků, než je zahrnuto ve standardním výstupu statistik.

Jemná regulace zrna

Jak vidíte, existuje obrovský prostor pro extrakci konkrétních datových prvků, které vás zajímají. Pravděpodobně také vidíte, proč doporučujeme používat aliasy pro delší a složitější zaříkávání.