Kartais dirbant su "Linux" terminalu reikia žinoti tam tikrų komandų vykdymo laiką, pvz., norint susekti problemas. Šiam tikslui yra įrankis, vadinamas time
. Papasakosime, kaip veikia "Linux"
komanda time
ir kokia jos sintaksė. Tada pereisime prie galimų parinkčių aprašymo. O pabaigoje paminėsime keletą populiarių naudojimo scenarijų.
Įrankis paleidžia vartotojo nustatytą komandą ir tada parodo informaciją apie jos vykdymo laiką. Jos sintaksė gana patogi. Pirmiausia reikia nurodyti laiko
parinktis, tada komandą, kuri bus vykdoma, ir galiausiai jos argumentus:
$ time [options] command_to_execute [arguments]
Panagrinėkime galimų parinkčių sąrašą:
-o
, --output
- įrašyti duomenis į pasirinktą failą, o ne į standartinę terminalo išvestį. Šiuo atveju bus perrašyti senieji failo duomenys.-a
, --append
- pridėti naują informaciją prie failo, užuot perrašę senąją. Ši parinktis naudinga tik kartu su -o
.-f
, --format
- pasirinkite konkretų išvesties formatą. Išsamiau apie formatavimą aprašyta kitame šio straipsnio skyriuje.-p
, --profitably
- naudoti duomenų išvesties formatą, atitinkantį POSIX 1003.2 standartą.-v
, --verbose
- išvesti išsamią informaciją apie programos vykdymą.-V
, --version
- išveskite laiko
programos versiją.Šiame sąraše pateikiamos tik pagrindinės parinktys. Išsamią informaciją galite gauti naudodami komandą:
$ man time
Pagal numatytuosius nustatymus time
gali išvesti informaciją tokia forma, kuri nėra patogi skaityti,
Pageidautina nustatyti išvesties formatavimo parinktis, kurios bus aptartos dabar. Iš viso jų yra trys. Kaip pavyzdį paimkime komandą apt-get update
.
Parinktis -v
naudojama išsamiai informacijai išvesti:
$ sudo time -v apt-get update
Parinktis -p
reikalinga duomenims išvesti POSIX 1003.2 standartą atitinkančiu formatu:
$ sudo time -p apt-get update
Duomenų formato eilutėje paprastai būna išteklių žymenys ir paprastas tekstas. Ženklas %
rodo, kad po jo einantis simbolis turėtų būti laikomas išteklių specifikacija.
Ženklas naudojamas skiriamajam ženklui nurodyti. Galimos trys parinktys:
t
- skirtukas, n
- nauja eilutė, \
- atvirkštinis pasvirasis brūkšnys. Jei po nurodysite bet kokį kitą ženklą, terminalas parodys klausimo ženklą (
?
), kuris reiškia įvesties klaidą.
Likęs formato eilutės tekstas visiškai nukopijuojamas į išvesties lauką. Šiuo atveju time
visada pradeda išvesti duomenis iš naujos eilutės po informacijos apie pačios komandos vykdymą.
Panagrinėkime galimus išteklių žymeklius:
%%
.C
- komandos pavadinimas ir naudojami argumentai.D
- vidutinis nedalomos duomenų srities dydis. Jis rodomas kilobaitais.E
- tikrasis komandos vykdymo laikas įprastu valandos formatu. Jis rodomas kaip [valandos:]<imutės:sekundės
.N
- pagrindinių arba įvesties ir išvesties klaidų, įvykusių vykdant procesą, skaičius.I
- kreipimųsi į failų sistemą skaičius.K
- kodui(tekstas)
, inicializuotiems duomenims(duomenys)
irkaminui (stekas)
sunaudotos atminties vidutinė reikšmė. Ji rodoma kilobaitais.M
- didžiausias proceso vykdymo metu nustatyto rezidento dydis kilobaitais.O
- failų sistemos išėjimų skaičius.P
- centrinio procesoriaus (CPU) apkrovos procentinė dalis.R
- nedidelių klaidų skaičius.S
- laikas sekundėmis, per kurį sistema naudojo centrinį procesorių proceso vardu prižiūrėtojo režimu(branduolio
režimu).U
- laikas sekundėmis, per kurį procesas tiesiogiai naudojo centrinį procesoriųnaudotojo
režimu.W
- kiek kartų procesas buvo iškrautas iš operatyviosios atminties.Z
- sistemos puslapio dydis. Ši reikšmė yra pastovi, tačiau skirtingose sistemose ji skiriasi.c
- priverstinių konteksto perjungimų skaičius proceso vykdymo metu.e
- tikrasis komandos vykdymo laikas įprastu valandos formatu. Jis rodomas sekundėmis.k
- procesą pasiekusių signalų skaičius.p
- vidutinis proceso nesidalijamo kamino dydis, kilobaitais.r
- gautų lizdo pranešimų skaičius.s
- išsiųstų lizdo pranešimų skaičius.t
- vidutinis proceso rezidentų rinkinio dydis, kilobaitais.w
- savanoriškų konteksto perjungimų skaičius proceso vykdymo metu.x
- komandos grąžinimo kodas.Tai buvo visi išteklių rodikliai, naudoti pasirenkant laiko
formatavimą. Dabar pereikime prie komandos naudojimo scenarijų.
Panagrinėkime tris pagrindinius pavyzdžius, kurie gana dažnai naudojami: išvestis į terminalą, išvestis į atskirą failą ir išvestis su formatavimu.
Kaip pavyzdį paimsime komandą sleep, kuri sustabdo nurodytam laikui. Tai bus labai aiškus pavyzdys, nes pauzės laikas sutaps su komandos vykdymo laiku laike
:
$ time sleep 3
Laikas iš karto rašomas trijuose stulpeliuose. Peržvelkime kiekvieną iš jų:
realus
- bendras laikas nuo proceso vykdymo pradžios iki jo pabaigos.
vartotojas
- laikas, per kurį procesas buvo vykdomasvartotojo
režimu.
sys
- laikas, per kurį procesas dalyvavo prižiūrėtojo režime(branduolio
režime).
Kitas naudingas scenarijus - išvesti laiką, per kurį įkeliama tinklalapio antraštė naudojant curl
įrankį. Kaip pavyzdį paimkime mūsų svetainę:
$ time curl -I https://losst.ru
Reikėtų paminėti situaciją, kai įvykdžius komandą terminalo langas pereina į kitą režimą, pavyzdžiui, kai paleidžiate redaktorių nano, kad pakeistumėte failą /home/root-user/script.txt:
$ time nano /home/root-user/scripts/main_script.txt
Redaktoriui baigus darbą, matysite bendrą laiką, kurį dirbote su failu.
Dabar žinote, kaip matyti "Linux" komandos vykdymo laiką.
Informaciją apie komandos time rezultatus galima įrašyti į atskirą failą naudojant parinktį-o.
Tokiu atveju jie nebus rodomi terminalo lange. Panagrinėkime pavyzdį, kaip išgauti archyvo ~/data/data.tar.gz
turinį naudojant tar
įrankį. Įrašykime informaciją apie vykdymo laiką į naują failą ~/data/data_data_data_time.txt.
Taip pat prie komandos pridėsime parinktį-v
, kad gautume išsamią informaciją:
$ sudo time -v -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data
Failo turinys bus toks.
Jei naudosite parinktį -o
, nepamirškite, kad ji perrašo seną išvesties failo informaciją nauja informacija. Tai taikytina kuriant naujus failus, tačiau netinka registravimui. Naudojant pasirinktinę parinktį -a, turinio perrašymas pakeičiamas naujos informacijos pridėjimu:
$ sudo time -v -a -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data
Originali duomenų formatavimo parinktis tinka ne visais atvejais. Kaip pavyzdį paimsime anksčiau naudotą archyvo išskyrimo komandą, tačiau duomenų į failą neįrašysime. Ją vykdydami esame suinteresuoti:
žymuo%C
. specifikatorius%P
. specifikatorius%e
.Kad būtų patogiau suvokti, kiekvienas elementas bus rodomas atskiroje eilutėje naudojant skirtuką n
. Kartu visi jie bus pasirašyti suprantamai.
Štai kaip atrodo galutinis komandos variantas:
sudo time -f "Command info:n%CnCPU usage: %PnExecution time: %e sec" tar -xvf ~/data/data.tar.gz -C ~/data
Terminale rodomas visas tekstas, išskyrus simbolius po %
. Tai patogus būdas žymėti