Způsoby platby Abuse

Příkaz Time v systému Linux

18.03.2022, 01:39

Někdy při práci s terminálem Linuxu potřebujete znát čas provedení určitých příkazů, například pro dohledání problémů. K tomuto účelu slouží nástroj zvaný time. Povíme si, jak příkaz time v Linuxu funguje a jaká je jeho syntaxe. Poté přejdeme k popisu dostupných možností. A na závěr zmíníme některé oblíbené scénáře použití.

Syntaxe a možnosti

Nástroj spustí uživatelem definovaný příkaz a poté zobrazí informace o čase jeho provedení. Její syntaxe je poměrně pohodlná. Nejprve je třeba zadat volby pro čas, pak příkaz, který se má provést, a nakonec argumenty k němu:

$ time [options] command_to_execute [arguments]

Uveďme si seznam dostupných možností:

  • -o, --output - uloží data do vybraného souboru místo standardního výstupu v terminálu. V tomto případě budou stará data v souboru přepsána.
  • -a, --append - přidá do souboru nové informace místo přepsání starých. Tato volba je užitečná pouze v kombinaci s volbou -o.
  • -f, --formát - vybere konkrétní výstupní formát. Podrobnosti o formátování jsou popsány v další části tohoto článku.
  • -p, --profitably - použije výstupní formát dat tak, aby odpovídal standardu POSIX 1003.2.
  • -v, --verbose - vypisuje podrobné informace o provádění programu.
  • -V, --version - vypisuje verzi časového nástroje.

Tento seznam obsahuje pouze základní volby. Podrobné informace můžete získat pomocí příkazu:

$ man time

Možnosti formátování výstupu

Ve výchozím nastavení může time vypisovat informace ve formě, která není pohodlná pro čtení,

Je žádoucí nastavit pro něj možnosti formátování výstupu, o kterých bude nyní řeč. K dispozici jsou celkem tři z nich. Jako příklad si uveďme příkaz apt-get update.

Volba -v slouží k vypsání podrobných informací:

$ sudo time -v apt-get update

Volba -p je potřebná pro výstup dat ve formátu kompatibilním se standardem POSIX 1003.2:

$ sudo time -p apt-get update

Formátovací datový řádek obvykle obsahuje specifikátory prostředků a prostý text. Znak % označuje, že znak, který za ním následuje, by měl být považován za specifikátor prostředků.

Znak se používá k určení znaku oddělovače. K dispozici jsou tři možnosti: t - tabulátor, n - nový řádek, \ - zpětné lomítko. Pokud za zadáte jakýkoli jiný znak, terminál zobrazí otazník (?), což znamená chybu při zadávání.

Zbytek textu ve formátovacím řetězci se kompletně zkopíruje do výstupního pole. V tomto případě začne time vždy vypisovat data z nového řádku za informací o provedení samotného příkazu.

Uvažujme o dostupných specifikátorech zdrojů:

  • Tj. pro vypsání znaku procenta je třeba v příkazu zadat%%.
  • C - název příkazu a použité argumenty.
  • D - průměrná velikost nerozdělené datové oblasti. Zobrazuje se v kilobajtech.
  • E - skutečný čas provedení příkazu v obvyklém hodinovém formátu. Zobrazuje se jako [Hodiny:]<minuty:sekundy.
  • N - počet hlavních nebo vstupně-výstupních chyb, které se vyskytly během provádění procesu.
  • I - počet přístupů k souborovému systému.
  • K - průměrná hodnota paměti použité pro kód(text), inicializovaná data(data) azásobník (zásobník). Zobrazuje se v kilobajtech.
  • M - maximální velikost rezidentní sady během provádění procesu v kilobytech.
  • O - počet ukončení souborového systému.
  • P - procento zatížení procesoru (centrální procesorové jednotky).
  • R - počet drobných chyb.
  • S - doba v sekundách, po kterou byl procesor využíván systémem jménem procesu v režimu supervizora(režim jádra).
  • U - čas v sekundách, během kterého byl procesor využíván procesem přímo vuživatelském režimu.
  • W - kolikrát byl proces vyložen z paměti RAM.
  • Z - velikost systémové stránky. Tato hodnota je konstantní, ale v různých systémech se liší.
  • C - počet nedobrovolných přepnutí kontextu během provádění procesu.
  • e - skutečný čas provádění příkazu v obvyklém hodinovém formátu. Zobrazuje se v sekundách.
  • k - počet signálů, které dosáhly procesu.
  • p - průměrná velikost nesdíleného zásobníku procesu v kilobajtech.
  • r - počet přijatých zásuvkových zpráv.
  • s - počet odeslaných zásuvkových zpráv.
  • t - průměrná velikost rezidentní sady procesu, v kilobajtech.
  • w - počet dobrovolných přepnutí kontextu během provádění procesu.
  • x - návratový kód příkazu.

To byly všechny specifikátory zdrojů použité při volbě formátování pro čas. Nyní přejděme ke scénářům použití příkazu.

Čas provedení příkazu v systému LINUX

Podívejme se na tři základní příklady, které se používají zcela běžně: výstup do terminálu, výstup do samostatného souboru a výstup s formátováním.

Výstup času spuštění do terminálu

Jako příklad si vezmeme příkaz sleep, který se pozastaví na určitou dobu. Bude to velmi názorný příklad, protože doba pauzy se bude časově shodovat s dobou provádění příkazu:

$ time sleep 3

Čas je zapsán hned ve třech sloupcích. Projděme si každý z nich:

real - celkový čas od zahájení provádění procesu do jeho ukončení.

Uživatelský - doba, po kterou proces běžel vuživatelském režimu.

sys - doba, během níž byl proces zapojen do režimu supervizora (režimujádra).

Dalším užitečným scénářem je vypsání času potřebného k načtení hlavičky webové stránky pomocí nástroje curl. Vezměme si jako příklad naši webovou stránku:

$ time curl -I https://losst.ru

Měli bychom se zmínit o situaci, kdy spuštění příkazu uvede okno terminálu do jiného režimu, například když spustíte editor nano, abyste upravili soubor /home/root-user/script.txt:

$ time nano /home/root-user/scripts/main_script.txt

Po dokončení editoru se zobrazí celkový čas, po který jste na souboru pracovali.

Nyní již víte, jak zjistit dobu provádění příkazů systému Linux.

Výstup souboru

Informace o výsledcích příkazu time můžete uložit do samostatného souboru pomocí volby-o. V tomto případě se nezobrazí v okně terminálu. Uveďme si příklad extrakce obsahu archivu ~/data/data.tar.gz pomocí nástroje tar. Informace o čase provedení uložíme do nového souboru ~/data/data_data_time.txt. K příkazu přidáme také volbu-v, abychom získali podrobné informace:

$ sudo time -v -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data

Soubor bude mít následující obsah.

Pokud použijete volbu -o, nezapomeňte, že přepíše staré informace ve výstupním souboru novými informacemi. To je použitelné při vytváření nových souborů, ale není to vhodné pro protokolování. Při použití nepovinné volby -a je přepsání obsahu nahrazeno přidáním nových informací:

$ sudo time -v -a -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data

Výstup s formátováním

Původní volba formátování dat není vhodná ve všech případech. Jako příklad si vezmeme dříve použitý příkaz pro extrakci archivu, ale data nebudeme ukládat do souboru. Při jeho spuštění nás zajímá:

  • Informace o samotném příkazu a zadaných volbách - jedná se o specifikátor%C.
  • Zatížení procesoru - specifikátor%P.
  • Celková doba provádění v sekundách - specifikátor%e.

Pro pohodlné vnímání bude každá položka zobrazena na samostatném řádku pomocí oddělovače n. Zároveň budou všechny srozumitelně podepsány.

Takto vypadá konečná verze příkazu:

sudo time -f "Command info:n%CnCPU usage: %PnExecution time: %e sec" tar -xvf ~/data/data.tar.gz -C ~/data

Všechny texty kromě znaků za % se v terminálu zobrazí v plném rozsahu. Jedná se o pohodlný způsob značení