Makseviisid Abuse

Aja käsk Linuxis

18.03.2022, 01:39

Mõnikord on Linuxi terminaliga töötades vaja teada teatud käskude täitmise aega, näiteks probleemide tuvastamiseks. Selleks on olemas utiliit nimega time. Me räägime teile, kuidas Linuxi käsk time töötab ja milline on tema süntaks. Seejärel läheme edasi olemasolevate võimaluste kirjelduse juurde. Ja lõpus mainime mõned populaarsed kasutamisstsenaariumid.

Süntaks ja valikud

Utiliit käivitab kasutaja määratud käsu ja seejärel kuvab teavet selle täitmise aja kohta. Selle süntaks on üsna mugav. Kõigepealt tuleb määrata aja valikud, seejärel käivitatav käsk ja lõpuks selle argumendid:

$ time [options] command_to_execute [arguments]

Vaatleme olemasolevate valikute nimekirja:

  • -o, --output - salvestab andmed valitud faili, mitte terminali standardväljundisse. Sel juhul kirjutatakse failis olevad vanad andmed üle.
  • -a, --append - lisab faili uut teavet, selle asemel et vanu andmeid üle kirjutada. See valik on kasulik ainult koos -o valikuga.
  • -f, --format - valib konkreetse väljundformaadi. Formaatimise üksikasjad on kirjeldatud selle artikli järgmises osas.
  • -p, --profitably - kasutada POSIX 1003.2 standardile vastavat andmete väljastusformaati.
  • -v, --verbose - väljastab üksikasjalikku teavet programmi täitmise kohta.
  • -V, --version - väljastab ajaprogrammi versiooni.

See nimekiri sisaldab ainult põhilisi valikuid. Üksikasjalikku teavet saate käsuga:

$ man time

Väljundi vormindamise valikud

Vaikimisi võib time väljastada teavet kujul, mida ei ole mugav lugeda,

Soovitav on seada selle jaoks väljundi vormindamise valikud, millest nüüd juttu tuleb. Neid on kokku kolm. Võtame näiteks käsu apt-get update.

Valikuga -v väljastatakse üksikasjalik teave:

$ sudo time -v apt-get update

Optsioon -p on vajalik andmete väljastamiseks POSIX 1003.2 standardile vastavas formaadis:

$ sudo time -p apt-get update

Vormindusandmete rida sisaldab tavaliselt ressursside spetsifikaatoreid ja tavalist teksti. Märk % näitab, et sellele järgnevat märki tuleb käsitleda ressursispetsiifikaatorina.

Märk kasutatakse eraldusmärgi määramiseks. Võimalik on kolm võimalust: t - tabulaator, n - uus rida, \ - kaldkriips. Kui te määrate pärast mis tahes muud märki, näitab terminal küsimärki (?), mis näitab sisestusviga.

Ülejäänud tekst vormingusõnast kopeeritakse täielikult väljundi väljale. Sellisel juhul alustab time alati andmete väljastamist uuelt realt pärast käsu enda täitmise kohta käivat teavet.

Vaatleme olemasolevaid ressursi spetsifikaatoreid:

  • % - literaalne %. s.t. protsendimärgi väljastamiseks tuleb käsus määrata %%.
  • C - käsu nimi ja kasutatavad argumendid.
  • D - jagamata andmeala keskmine suurus. See kuvatakse kilobaitides.
  • E - käsu täitmise tegelik aeg tavalises tunniformaadis. See kuvatakse kujul [Hours:]<imutes:seconds.
  • N - protsessi täitmise ajal esinenud peamiste või I/O-vigade arv.
  • I - failisüsteemi ligipääsude arv.
  • K - koodile(tekst), initsialiseeritud andmetele(data) javirna (stack) kasutatud mälu keskmine väärtus. Seda näidatakse kilobaitides.
  • M - protsessi käivitamise ajal residentide kogumi maksimaalne suurus kilobaitides.
  • O - failisüsteemi väljumiste arv.
  • P - protsessori (keskseadme) koormuse protsent.
  • R - väikeste vigade arv.
  • S - aeg sekundites, mille jooksul kasutas süsteem protsessori nimel protsessoriga supervisor-režiimis(kernel-režiim) protsessori CPU-d.
  • U - aeg sekundites, mille jooksul protsess kasutas protsessori protsessorit otsekasutajarežiimis.
  • W - mitu korda laaditi protsess RAMist välja.
  • Z - süsteemi lehekülje suurus. See väärtus on konstant, kuid see varieerub süsteemiti.
  • c - tahtmatute kontekstivahetuste arv protsessi täitmise ajal.
  • e - käsu täitmise tegelik aeg tavalises tunniformaadis. Seda näidatakse sekundites.
  • k - protsessi jõudnud signaalide arv.
  • p - protsessi jagamata virna keskmine suurus kilobaitides.
  • r - vastuvõetud socket-teadete arv.
  • s - saadetud socket-teadete arv.
  • t - protsessi residentide kogumi keskmine suurus kilobaitides.
  • w - vabatahtlike kontekstivahetuste arv protsessi täitmise ajal.
  • x - käsu tagastuskood.

Need olid kõik ressursside spetsifikaatorid, mida kasutati aja vormingu valimisel. Nüüd liigume edasi käsu kasutamise stsenaariumide juurde.

LINUX käsu täitmise aeg

Vaatleme kolme põhilist näidet, mida kasutatakse üsna sageli: väljund terminali, väljund eraldi faili ja väljund koos vormindamisega.

Väljund täitmisaja väljastamine terminali

Näitena võtame käsu sleep, mis peatub määratud ajaks. See saab olema väga selge näide, sest pausi aeg langeb ajaliselt kokku käsu täitmise ajaga:

$ time sleep 3

Aeg kirjutatakse kohe kolme veergu. Käime igaühe läbi:

real - kogu aeg protsessi täitmise algusest kuni selle lõpetamiseni.

user - aeg, mille jooksul protsess käituskasutajarežiimis.

sys - aeg, mille jooksul protsess osales supervisor-režiimis(kernel-režiimis).

Järgmine kasulik stsenaarium on väljastada aeg, mis kulub veebilehe päise laadimiseks utiliidi curl abil. Võtame näiteks meie veebilehe:

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

Peaksime mainima olukorda, kus käsu täitmine paneb terminaliakna teise režiimi, näiteks kui te käivitate nano redaktori, et muuta faili /home/root-user/script.txt:

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

Pärast redaktori lõpetamist näete faili kallal töötatud koguaega.

Nüüd teate, kuidas näha Linuxi käsu täitmise aega.

Faili väljund

Teavet käsu time tulemuste kohta saab salvestada eraldi faili, kasutades valikut-o. Sellisel juhul ei kuvata neid terminaliaknas. Võtame näite ~/data/data.tar.gz arhiivi sisu ekstraheerimisest tar utiliidi abil. Salvestame teabe täitmise aja kohta uude faili ~/data/data_data_data_time.txt. Lisame käsule ka valiku-v, et saada üksikasjalikku teavet:

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

Faili sisu saab olema järgmine.

Kui kasutate valikut -o, pidage meeles, et see kirjutab väljundfaili vana teabe uue teabega üle. See on rakendatav uute failide loomisel, kuid ei sobi logimiseks. Valikulise valiku -a abil asendatakse sisu ülekirjutamine uue teabe lisamisega:

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

Väljund koos vormindamisega

Andmete vormindamise algne valik ei sobi kõigil juhtudel. Näitena võtame eelnevalt kasutatud käsu arhiivi väljavõtte tegemiseks, kuid me ei salvesta andmeid faili. Selle täitmisel oleme huvitatud:

  • Teave käsu enda ja antud valikute kohta - see spetsiifikaator%C.
  • protsessori koormus - spetsiifikaator%P.
  • Täitmisaeg sekundites - spetsiifikaator%e.

Mugavaks tajumiseks kuvatakse iga element eraldi real, kasutades eraldusmärk n. Samal ajal allkirjastatakse need kõik arusaadavalt.

Nii näeb välja käsu lõplik versioon:

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

Kogu tekst, välja arvatud märgid pärast %, kuvatakse terminalis täielikult. See on mugav viis märgistamiseks