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.
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
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.
Tarkastellaan kolmea perusesimerkkiä, joita käytetään melko yleisesti: tulostus päätelaitteeseen, tulostus erilliseen tiedostoon ja tulostus muotoilun kanssa.
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.
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
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:
määrite%C
. spesifikaattori%P
. 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ä