Maksutavat Abuse

Aika-komento Linuxissa

18.03.2022, 01:39

Joskus Linux-päätteellä työskennellessäsi sinun on tiedettävä tiettyjen komentojen suoritusaika, esimerkiksi ongelmien selvittämiseksi. Tätä tarkoitusta varten on olemassa apuohjelma nimeltä time. Kerromme, miten Linuxin time-komento toimii ja mikä on sen syntaksi. Sitten siirrymme kuvaamaan käytettävissä olevia vaihtoehtoja. Ja lopuksi mainitsemme joitakin suosittuja käyttökohteita.

Syntaksi ja vaihtoehdot

Apuohjelma suorittaa käyttäjän määrittelemän komennon ja näyttää sitten tiedot sen suoritusajasta. Sen syntaksi on varsin kätevä. Ensin on määritettävä aika-asetukset, sitten suoritettava komento ja lopuksi sen argumentit:

$ time [options] command_to_execute [arguments]

Tarkastellaan käytettävissä olevien vaihtoehtojen luetteloa:

  • -o, --output - tallentaa tiedot valittuun tiedostoon päätelaitteen vakiotulosteen sijasta. Tällöin tiedostossa olevat vanhat tiedot korvataan.
  • -a, --append - lisää uutta tietoa tiedostoon sen sijaan, että vanha tieto korvattaisiin. Vaihtoehto on käyttökelpoinen vain yhdessä -o:n kanssa.
  • -f, --format - valitsee tietyn tulostusmuodon. Muotoilun yksityiskohdat kuvataan tämän artikkelin seuraavassa osassa.
  • -p, --profitably - käyttää POSIX 1003.2 -standardin mukaista datan tulostusformaattia.
  • -v, --verbose - tulostaa yksityiskohtaisia tietoja ohjelman suorituksesta.
  • -V, --version - tulostaa aika-apuohjelman version.

Tämä luettelo sisältää vain perusasetukset. Yksityiskohtaiset tiedot saat komennolla:

$ man time

Tulostuksen muotoiluvaihtoehdot

Oletusarvoisesti time voi tulostaa tietoja muodossa, jota ei ole mukava lukea,

On suotavaa asettaa sille tulostuksen muotoiluasetukset, joista keskustellaan nyt. Niitä on yhteensä kolme. Otetaan esimerkkinä apt-get update-komento.

-v-vaihtoehtoa käytetään yksityiskohtaisten tietojen tulostamiseen:

$ sudo time -v apt-get update

-p-vaihtoehtoa tarvitaan tietojen tulostamiseen POSIX 1003.2 -standardin mukaisessa muodossa:

$ sudo time -p apt-get update

Muotoilutietorivi sisältää tyypillisesti resurssimääritteitä ja tavallista tekstiä. % -merkki osoittaa, että sitä seuraavaa merkkiä on käsiteltävä resurssin määrittäjänä.

Merkkiä käytetään rajausmerkin määrittämiseen. Käytettävissä on kolme vaihtoehtoa: t - tabulaattori, n - uusi rivi, \\ - backslash. Jos määrität jonkin muun merkin :n jälkeen, päätelaite näyttää kysymysmerkin (?), mikä merkitsee syöttövirhettä.

Muotoilujonon loppuosa tekstistä kopioidaan kokonaan tulostuskenttään. Tällöin time aloittaa tietojen antamisen aina uudelta riviltä itse komennon suoritusta koskevan tiedon jälkeen.

Tarkastellaan käytettävissä olevia resurssien määrittelijöitä:

  • % - kirjaimellinen %. eli jos haluat tulostaa prosenttimerkin, sinun on määritettävä komennossa %%.
  • C - komennon nimi ja käytetyt argumentit.
  • D - jakamattoman data-alueen keskimääräinen koko. Se näytetään kilotavuina.
  • E - komennon suorittamisen todellinen aika tavanomaisessa tuntiformaatissa. Se näytetään muodossa [Hours:]<imutes:seconds.
  • N - prosessin suorituksen aikana esiintyneiden pää- tai I/O-virheiden lukumäärä.
  • I - tiedostojärjestelmän käyttökertojen määrä.
  • K - koodiin(teksti), alustettuun dataan(data) japinoon (stack) käytetyn muistin keskiarvo. Se näytetään kilotavuina.
  • M - prosessin suorituksen aikana asetetun asukkaan enimmäiskoko kilotavuina.
  • O - tiedostojärjestelmän poistumisten määrä.
  • P - CPU:n (keskusyksikön) kuormituksen prosenttiosuus.
  • R - pienten virheiden määrä.
  • S - aika sekunteina, jonka aikana järjestelmä käytti suorittimen prosessia prosessin puolesta supervisor-tilassa(ytimen tilassa).
  • U - aika sekunteina, jonka aikana prosessi käytti prosessia suoraankäyttäjätilassa.
  • W - kuinka monta kertaa prosessi purettiin RAM-muistista.
  • Z - järjestelmän sivukoko. Tämä arvo on vakio, mutta se vaihtelee järjestelmien välillä.
  • c - tahattomien kontekstinvaihtojen määrä prosessin suorituksen aikana.
  • e - komennon suorituksen reaaliaika tavanomaisessa tuntiformaatissa. Se näytetään sekunteina.
  • k - prosessin saavuttamien signaalien määrä.
  • p - prosessin jakamattoman pinon keskimääräinen koko kilotavuina.
  • r - vastaanotettujen socket-viestien määrä.
  • s - lähetettyjen socket-viestien määrä.
  • t - prosessin asukasjoukon keskimääräinen koko kilotavuina.
  • w - vapaaehtoisten kontekstinvaihtojen määrä prosessin suorituksen aikana.
  • x - komennon paluukoodi.

Nämä olivat kaikki resurssien määritteet, joita käytettiin valittaessa ajan muotoilua. Siirrytään nyt komennon käyttöskenaarioihin.

LINUX-komennon suoritusaika

Tarkastellaan kolmea perusesimerkkiä, joita käytetään melko yleisesti: tulostus päätelaitteeseen, tulostus erilliseen tiedostoon ja tulostus muotoilun kanssa.

Suoritusajan tulostaminen terminaaliin

Otetaan esimerkkinä sleep-komento, joka pitää tauon määritellyksi ajaksi. Esimerkistä tulee hyvin selkeä, koska taukoaika osuu ajallisesti yhteen komennon suoritusajan kanssa:

$ time sleep 3

Aika kirjoitetaan heti kolmeen sarakkeeseen. Käydään läpi kukin niistä:

real - kokonaisaika prosessin suorituksen alkamisesta sen päättymiseen.

user - aika, jonka aikana prosessi suoritettiinkäyttäjätilassa.

sys - aika, jonka aikana prosessi oli mukana supervisor-tilassa(ytimen tilassa).

Seuraava hyödyllinen skenaario on tulostaa aika, joka kuluu verkkosivun otsikon lataamiseen curl-apuohjelman avulla. Otetaan esimerkkinä verkkosivumme:

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

Mainittakoon tilanne, jossa komennon suorittaminen siirtää terminaali-ikkunan eri tilaan, kuten esimerkiksi silloin, kun käytät nanoeditoria muuttaaksesi tiedostoa /home/root-user/script.txt:

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

Kun editori on valmis, näet tiedoston kanssa työskentelyyn käytetyn kokonaisajan.

Nyt tiedät, miten näet Linux-komennon suoritusajan.

Tiedoston tulostus

Tiedot time-komennon tuloksista voidaan tallentaa erilliseen tiedostoon käyttämällä valintaa-o. Tällöin niitä ei näytetä terminaali-ikkunassa. Otetaan esimerkki ~/data/data.tar.gz-arkiston sisällön purkamisesta tar-apuohjelmalla. Tallennetaan tiedot suoritusajasta uuteen tiedostoon ~/data/data_data_data_time.txt. Lisäämme komentoon myös-v-vaihtoehdon saadaksemme yksityiskohtaisia tietoja:

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

Tiedoston sisältö on seuraava.

Jos käytät -o-vaihtoehtoa, muista, että se korvaa tulostustiedoston vanhat tiedot uusilla tiedoilla. Tämä soveltuu uusia tiedostoja luotaessa, mutta ei sovellu lokitiedostoihin. Valinnaisella -a-vaihtoehdolla sisällön ylikirjoittaminen korvataan lisäämällä uutta tietoa:

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

Tulostus muotoilulla

Alkuperäinen vaihtoehto tietojen muotoilusta ei sovellu kaikissa tapauksissa. Otetaan esimerkkinä aiemmin käytetty komento arkiston purkamiseen, mutta tietoja ei tallenneta tiedostoon. Suorittaessamme sitä olemme kiinnostuneita:

  • Tiedot itse komennosta ja annetuista vaihtoehdoista - tämä on määrite%C.
  • suorittimen kuormitus - spesifikaattori%P.
  • Suoritusaika sekunteina - spesifikaattori%e.

Mukavan hahmotettavuuden vuoksi kukin kohta näytetään erillisellä rivillä käyttäen erotinmerkkiä n. Samalla ne kaikki allekirjoitetaan ymmärrettävällä tavalla.

Komennon lopullinen versio näyttää seuraavalta:

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

Kaikki teksti lukuun ottamatta %:n jälkeisiä merkkejä näytetään kokonaan terminaalissa. Tämä on kätevä tapa merkitä