A Linux terminállal való munka során néha szükségünk van bizonyos parancsok végrehajtásának idejére, például a problémák felderítéséhez. Erre a célra létezik egy time
nevű segédprogram. Elmondjuk, hogyan működik a Linux time
parancs, és mi a szintaxisa. Ezután rátérünk a rendelkezésre álló opciók leírására. A végén pedig megemlítünk néhány népszerű felhasználási forgatókönyvet.
A segédprogram lefuttat egy felhasználó által definiált parancsot, majd megjeleníti a végrehajtási idejéről szóló információkat. Szintaxisa meglehetősen kényelmes. Először meg kell adnia az időre
vonatkozó opciókat, majd a végrehajtandó parancsot, végül pedig a hozzá tartozó argumentumokat:
$ time [options] command_to_execute [arguments]
Nézzük a rendelkezésre álló opciók listáját:
-o
, --output
- az adatok mentése a terminál standard kimenete helyett a kiválasztott fájlba. Ebben az esetben a fájlban lévő régi adatok felülíródnak.-a
, --append
- új adatok hozzáadása a fájlhoz a régi adatok felülírása helyett. Az opció csak a -o
kapcsolóval együtt használható.-f
, --format
- egy adott kimeneti formátum kiválasztása. A formázás részleteit a cikk következő szakasza ismerteti.-p
, --profitably
- a POSIX 1003.2 szabványnak megfelelő adatkimeneti formátum használata.-v
, --verbose
- részletes információk kiadása a program végrehajtásáról.-V
, --version
- a time
segédprogram verziójának kiadása.Ez a lista csak az alapvető opciókat tartalmazza. Részletes információkat a paranccsal kaphat:
$ man time
Alapértelmezés szerint a time
olyan formában adhat ki információkat, amely nem kényelmes olvasásra,
Kívánatos a kimeneti formázási opciókat beállítani számára, amelyeket most tárgyalunk. Ezekből összesen három van. Vegyük példának az apt-get update
parancsot.
A -v
opciót a részletes információk kiadására használjuk:
$ sudo time -v apt-get update
A -p
opcióra az adatok POSIX 1003.2 szabványnak megfelelő formátumban történő kiadásához van szükség:
$ sudo time -p apt-get update
A formázási adatsor jellemzően erőforrás-meghatározókat és egyszerű szöveget tartalmaz. A %
jel azt jelzi, hogy az azt követő karaktert erőforrás-meghatározóként kell kezelni.
A jel az elhatároló karakter megadására szolgál. Három lehetőség áll rendelkezésre:
t
- tabulátor, n
- új sor, \\
- backslash. Ha az után más karaktert ad meg, a terminál egy kérdőjelet (
?
) fog megjeleníteni, ami beviteli hibát jelez.
A formázó karakterláncban lévő szöveg többi része teljes egészében átmásolódik a kimeneti mezőbe. Ebben az esetben a time
mindig egy új sorból kezdi meg az adatok kiadását a parancs végrehajtásáról szóló információ után maga a parancs.
Nézzük meg a rendelkezésre álló erőforrás-specifikátorokat:
%
- szó szerinti %. azaz a százalékjel kimenetéhez a parancsban meg kell adni a %% -ot.C
- a parancs neve és a felhasznált argumentumok.D
- az osztatlan adatterület átlagos mérete. Kilobájtban jelenik meg.E
- a parancs végrehajtásának valós ideje a szokásos órai formátumban. Ez a következő formában jelenik meg: [Óra:]<perc:másodperc
.N
- a folyamat végrehajtása során bekövetkezett fő- vagy I/O-hibák száma.I
- a fájlrendszerhez való hozzáférések száma.K
- a kód(szöveg
), az inicializált adatok(data
) és averem (stack
) által használt memória átlagos értéke. Kilobájtban jelenik meg.M
- a folyamat végrehajtása során a rezidenskészlet maximális mérete kilobájtban.O
- a fájlrendszer kilépések száma.P
- a CPU (központi feldolgozó egység) terhelésének százalékos aránya.R
- a kisebb hibák száma.S
- az az idő másodpercben, amely alatt a CPU-t a rendszer a folyamat nevében supervisor módban(kernel
módban) használta.U
- az az idő másodpercben, amely alatt a CPU-t közvetlenül a folyamat használtafelhasználói
módban.W
- a folyamat hányszor került ki a RAM-ból.Z
- a rendszeroldalak mérete. Ez az érték állandó, de rendszerenként változik.c
- a folyamat végrehajtása közbeni önkéntelen kontextusváltások száma.e
- a parancsvégrehajtás valós ideje a szokásos órai formátumban. Másodpercekben jelenik meg.k
- a folyamatot elért jelek száma.p
- a folyamat nem megosztott veremének átlagos mérete kilobájtban.r
- a fogadott socket üzenetek száma.s
- az elküldött socket üzenetek száma.t
- a folyamat rezidenskészletének átlagos mérete kilobájtban.w
- a folyamat végrehajtása során önkéntes kontextusváltások száma.x
- a parancs visszatérési kódja.Ezek voltak az összes erőforrás-specifikátor, amelyet az idő
formázásának kiválasztásakor használtunk. Most térjünk át a parancs használatának forgatókönyveire.
Nézzünk három alapvető példát, amelyeket elég gyakran használnak: kimenet a terminálra, kimenet külön fájlba, és kimenet formázással.
Példaként a sleep parancsot vesszük, amely egy megadott időre szünetet tart. Ez egy nagyon egyértelmű példa lesz, mert a szünet ideje időben
egybeesik a parancs végrehajtásának idejével:
$ time sleep 3
Az időt rögtön három oszlopban írjuk ki. Nézzük végig az egyes oszlopokat:
real
- a folyamat végrehajtásának kezdetétől a befejezéséig eltelt teljes idő.
user
- az az idő, amely alatt a folyamatfelhasználói
módban futott.
sys
- az az idő, amely alatt a folyamat supervisor módban(kernel
módban) vett részt.
A következő hasznos forgatókönyv a curl
segédprogrammal egy weblap fejlécének betöltéséhez szükséges idő kiadása. Vegyük példának a weboldalunkat:
$ time curl -I https://losst.ru
Meg kell említenünk egy olyan helyzetet, amikor a parancs végrehajtása a terminálablakot más üzemmódba helyezi, például amikor a nano szerkesztőprogramot futtatjuk a /home/root-user/script.txt
fájl módosítására:
$ time nano /home/root-user/scripts/main_script.txt
A szerkesztő befejezése után megjelenik a fájlon végzett munka teljes időtartama.
Most már tudja, hogyan láthatja egy Linux-parancs végrehajtási idejét.
Az time parancs eredményéről szóló információkat az-o
opcióval egy külön fájlba menthetjük. Ebben az esetben nem jelennek meg a terminál ablakban. Vegyük példának a ~/data/data.tar.gz
archívum tartalmának a tar
segédprogrammal történő kicsomagolását. Mentse el a végrehajtási időre vonatkozó információkat egy új ~/data/data_data_data_time.txt
fájlba. A parancshoz hozzáadjuk a-v opciót
is, hogy részletes információkat kapjunk:
$ sudo time -v -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data
A fájl tartalma a következő lesz.
Ha a -o
opciót használjuk, ne feledjük, hogy a kimeneti fájlban lévő régi információt felülírja az új információval. Ez új fájlok létrehozásakor alkalmazható, de naplózásra nem alkalmas. Az opcionális -a opcióval a tartalom felülírása helyett új információt adunk hozzá:
$ sudo time -v -a -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data
Az adatok formázásának eredeti opciója nem minden esetben alkalmas. Példaként vegyük a korábban használt parancsot egy archívum kivonására, de az adatokat nem mentjük el egy fájlba. Végrehajtásakor érdekel bennünket:
specifikáló%C
. a specifikáló%P
. specifikáló%e
.A kényelmes érzékelés érdekében minden egyes elem külön sorban jelenik meg a n
elválasztójel segítségével. Ugyanakkor mindegyiket érthető módon írjuk alá.
Így néz ki a parancs végleges változata:
sudo time -f "Command info:n%CnCPU usage: %PnExecution time: %e sec" tar -xvf ~/data/data.tar.gz -C ~/data
A %
utáni karakterek kivételével minden szöveg teljes egészében megjelenik a terminálon. Ez egy kényelmes módja a jelölésnek