Mokėjimo būdai Abuse

Laiko komanda "Linux

18.03.2022, 01:39

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ų.

Sintaksė ir parinktys

Į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

Išvesties formatavimo parinktys

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:

  • T. y. norėdami išvesti procento ženklą, komandoje nurodykite%%.
  • 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ų.

LINUX komandos vykdymo laikas

Panagrinėkime tris pagrindinius pavyzdžius, kurie gana dažnai naudojami: išvestis į terminalą, išvestis į atskirą failą ir išvestis su formatavimu.

Vykdymo laiko išvedimas į terminalą

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ą.

Failo išvestis

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

Išvestis su formatavimu

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:

  • informacija apie pačią komandą ir pateiktas parinktis - tai žymuo%C.
  • Procesoriaus apkrova - specifikatorius%P.
  • Bendras vykdymo laikas sekundėmis - 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