Pri práci s terminálom Linuxu niekedy potrebujete poznať čas vykonania určitých príkazov, napríklad na sledovanie problémov. Na tento účel existuje nástroj s názvom time
. Povieme si, ako príkaz time v Linuxe
funguje a aká je jeho syntax. Potom prejdeme k opisu dostupných možností. A na záver spomenieme niekoľko obľúbených scenárov použitia.
Nástroj spustí používateľom definovaný príkaz a potom zobrazí informácie o čase jeho vykonania. Jeho syntax je pomerne pohodlná. Najprv je potrebné zadať možnosti pre čas
, potom príkaz, ktorý sa má vykonať, a nakoniec argumenty k nemu:
$ time [options] command_to_execute [arguments]
Uveďme zoznam dostupných možností:
-o
, --output
- uloží údaje do vybraného súboru namiesto štandardného výstupu v termináli. V tomto prípade sa staré údaje v súbore prepíšu.-a
, --append
- pridanie nových informácií do súboru namiesto prepísania starých. Táto voľba je užitočná len v kombinácii s voľbou -o
.-f
, --formát
- výber konkrétneho výstupného formátu. Podrobnosti o formátovaní sú opísané v ďalšej časti tohto článku.-p
, --profitably
- použite výstupný formát údajov, aby bol v súlade so štandardom POSIX 1003.2.-v
, --verbose
- vypísať podrobné informácie o vykonávaní programu.-V
, --version
- vypíše verziu časového
nástroja.Tento zoznam obsahuje len základné možnosti. Podrobné informácie môžete získať pomocou príkazu:
$ man time
V predvolenom nastavení môže program time
vypisovať informácie vo forme, ktorá nie je pohodlná na čítanie,
Je žiaduce nastaviť preň možnosti formátovania výstupu, o ktorých bude teraz reč. Celkovo sú k dispozícii tri z nich. Ako príklad si zoberme príkaz apt-get update
.
Na výstup podrobných informácií sa používa voľba -v
:
$ sudo time -v apt-get update
Voľba -p
je potrebná na výstup údajov vo formáte kompatibilnom so štandardom POSIX 1003.2:
$ sudo time -p apt-get update
Formátovací riadok údajov zvyčajne obsahuje špecifikátory zdrojov a obyčajný text. Znak %
označuje, že znak, ktorý za ním nasleduje, by sa mal považovať za špecifikátor prostriedkov.
Znak sa používa na určenie znaku oddeľovača. K dispozícii sú tri možnosti:
t
- tabulátor, n
- nový riadok, \
- spätné lomítko. Ak za zadáte akýkoľvek iný znak, terminál zobrazí otáznik (
?
), ktorý indikuje chybu vstupu.
Zvyšok textu vo formátovacom reťazci sa kompletne skopíruje do výstupného poľa. V tomto prípade time
vždy začne vypisovať údaje z nového riadku po informácii o vykonaní samotného príkazu.
Uvažujme o dostupných špecifikátoroch zdrojov:
%%
.C
- názov príkazu a použité argumenty.D
- priemerná veľkosť nerozdelenej oblasti údajov. Zobrazuje sa v kilobajtoch.E
- skutočný čas vykonania príkazu v obvyklom hodinovom formáte. Zobrazuje sa ako [hodiny:]<minúty:sekundy
.N
- počet hlavných alebo I/O chýb, ktoré sa vyskytli počas vykonávania procesu.I
- počet prístupov k súborovému systému.K
- priemerná hodnota pamäte použitej pre kód(text)
, inicializované údaje(
dáta) azásobník (zásobník
). Zobrazuje sa v kilobajtoch.M
- maximálna veľkosť rezidentnej množiny počas vykonávania procesu v kilobajtoch.O
- počet výstupov súborového systému.P
- percento zaťaženia CPU (centrálnej procesorovej jednotky).R
- počet menších chýb.S
- čas v sekundách, počas ktorého systém využíval CPU v mene procesu v režime supervízora(režim jadra
).U
- čas v sekundách, počas ktorého proces využíval CPU priamo vpoužívateľskom
režime.W
- koľkokrát bol proces vyložený z pamäte RAM.Z
- veľkosť systémovej stránky. Táto hodnota je konštantná, ale v jednotlivých systémoch sa líši.C
- počet nedobrovoľných prepnutí kontextu počas vykonávania procesu.e
- skutočný čas vykonávania príkazu v obvyklom hodinovom formáte. Zobrazuje sa v sekundách.k
- počet signálov, ktoré dosiahol proces.p
- priemerná veľkosť nezdieľaného zásobníka procesu v kilobajtoch.r
- počet prijatých zásuvkových správ.s
- počet odoslaných zásuvkových správ.t
- priemerná veľkosť rezidentnej sady procesu, v kilobajtoch.w
- počet dobrovoľných prepnutí kontextu počas vykonávania procesux
- návratový kód príkazu.Toto boli všetky špecifikátory zdrojov použité pri výbere formátovania pre čas
. Teraz prejdime k scenárom použitia príkazu.
Pozrime sa na tri základné príklady, ktoré sa pomerne často používajú: výstup do terminálu, výstup do samostatného súboru a výstup s formátovaním.
Ako príklad si vezmeme príkaz sleep, ktorý pozastaví vykonávanie na určitý čas. Bude to veľmi prehľadný príklad, pretože čas pauzy sa bude časovo
zhodovať s časom vykonávania príkazu:
$ time sleep 3
Čas je zapísaný hneď v troch stĺpcoch. Prejdime si každý z nich:
real
- celkový čas od začiatku vykonávania procesu po jeho ukončenie.
User (používateľ)
- čas, počas ktorého proces prebiehal vpoužívateľskom
režime.
sys
- čas, počas ktorého bol proces zapojený do režimu supervízora(režim jadra
).
Ďalším užitočným scenárom je výstup času potrebného na načítanie hlavičky webovej stránky prostredníctvom nástroja curl
. Ako príklad si zoberme našu webovú stránku:
$ time curl -I https://losst.ru
Mali by sme spomenúť situáciu, keď vykonanie príkazu prepne okno terminálu do iného režimu, napríklad keď spustíte editor nano na úpravu súboru /home/root-user/script.txt
:
$ time nano /home/root-user/scripts/main_script.txt
Po skončení editora sa zobrazí celkový čas práce so súborom.
Teraz už viete, ako zistiť čas vykonávania príkazu systému Linux.
Informácie o výsledkoch príkazu time môžete uložiť do samostatného súboru pomocou voľby-o.
V tomto prípade sa nezobrazia v okne terminálu. Uveďme si príklad extrakcie obsahu archívu ~/data/data.tar.gz
pomocou nástroja tar
. Informácie o čase vykonania uložíme do nového súboru ~/data/data_data_time.txt.
Do príkazu pridáme aj možnosť-v,
aby sme získali podrobné informácie:
$ sudo time -v -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data
Súbor bude mať nasledujúci obsah.
Ak použijete voľbu -o
, nezabudnite, že prepíše staré informácie vo výstupnom súbore novými informáciami. Toto je použiteľné pri vytváraní nových súborov, ale nie je to vhodné na protokolovanie. S voliteľnou voľbou -a sa prepísanie obsahu nahradí pridaním nových informácií:
$ sudo time -v -a -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data
Pôvodná možnosť formátovania údajov nie je vhodná vo všetkých prípadoch. Ako príklad si zoberieme predtým použitý príkaz na extrakciu archívu, ale údaje nebudeme ukladať do súboru. Pri jeho spustení nás zaujímajú tieto údaje:
špecifikátor%C
. špecifikátor%P
. špecifikátor%e
.Pre pohodlné vnímanie sa každá položka zobrazí v samostatnom riadku pomocou oddeľovača n
. Zároveň budú všetky podpísané zrozumiteľným spôsobom.
Takto vyzerá konečná verzia príkazu:
sudo time -f "Command info:n%CnCPU usage: %PnExecution time: %e sec" tar -xvf ~/data/data.tar.gz -C ~/data
Všetok text okrem znakov za %
sa v termináli zobrazí celý. Toto je pohodlný spôsob označovania