Soms moet je bij het werken met de Linux terminal weten hoe laat bepaalde commando's zijn uitgevoerd, bijvoorbeeld om problemen op te sporen. Er is een hulpprogramma genaamd time
voor dit doel. We zullen je vertellen hoe het Linux time
commando werkt en wat de syntaxis ervan is. Daarna gaan we verder met de beschrijving van de beschikbare opties. En aan het eind noemen we enkele populaire gebruiksscenario's.
Het hulpprogramma voert een door de gebruiker gedefinieerd commando uit en geeft vervolgens informatie over de uitvoeringstijd weer. De syntaxis is erg handig. Eerst moet je de opties voor de tijd
opgeven, dan het commando dat uitgevoerd moet worden en als laatste de argumenten:
$ time [options] command_to_execute [arguments]
Laten we eens kijken naar de lijst met beschikbare opties:
-o
, --output
- gegevens opslaan in het geselecteerde bestand in plaats van de standaard uitvoer in de terminal. In dit geval worden de oude gegevens in het bestand overschreven.-a
, --append
- nieuwe informatie aan het bestand toevoegen in plaats van de oude te overschrijven. Deze optie is alleen nuttig in combinatie met -o
.-f
, --format
- selecteer een specifiek uitvoerformaat. Details over opmaak worden beschreven in de volgende sectie van dit artikel.-p
, --profitably
- gebruik een uitvoerformaat dat voldoet aan de POSIX 1003.2 standaard.-v
, --verbose
- uitvoer van gedetailleerde informatie over de uitvoering van het programma.-V
, --version
- uitvoer van de versie van het tijdprogramma
.Deze lijst bevat alleen de basisopties. Je kunt gedetailleerde informatie krijgen met het commando:
$ man time
Standaard kan time
informatie uitvoeren in een vorm die niet prettig is om te lezen,
Het is wenselijk om opties voor de uitvoeropmaak in te stellen, die nu besproken zullen worden. Er zijn er drie in totaal. Laten we het apt-get update
commando als voorbeeld nemen.
De -v
optie wordt gebruikt om gedetailleerde informatie uit te voeren:
$ sudo time -v apt-get update
De -p
optie is nodig om gegevens uit te voeren in een POSIX 1003.2 formaat:
$ sudo time -p apt-get update
De regel met opmaakgegevens bevat meestal resource-specificaties en platte tekst. Het %
teken geeft aan dat het volgende karakter behandeld moet worden als een resource specificatie.
Het scheidingsteken wordt gebruikt om het scheidingsteken te specificeren. Er zijn drie opties beschikbaar: t
- tab, n
- nieuwe regel, n
- backslash. Als je een ander karakter opgeeft na , dan zal de terminal een vraagteken (
?
) tonen, wat een invoerfout aangeeft.
De rest van de tekst in de format string wordt volledig gekopieerd naar het uitvoerveld. In dit geval begint Time
altijd met het uitvoeren van gegevens vanaf een nieuwe regel na de informatie over de uitvoering van het commando zelf.
Laten we eens kijken naar de beschikbare bronspecificaties:
%
- letterlijke %. Als je een procentteken wilt uitvoeren, moet je %% opgeven in het commando.C
- commandonaam en gebruikte argumenten.D
- gemiddelde grootte van het ongedeelde gegevensgebied. Dit wordt weergegeven in kilobytes.E
- werkelijke tijd van de uitvoering van het commando in het gebruikelijke uurformaat. Dit wordt weergegeven als [Uren:]<imuten:seconden
.N
- aantal grote of I/O-fouten die zijn opgetreden tijdens de uitvoering van het proces.I
- aantal bestandssysteemtoegangen.K
- gemiddelde waarde van het geheugen dat wordt gebruikt voor code(tekst
), geïnitialiseerde gegevens(data
) enstack (stapel
). Het wordt weergegeven in kilobytes.M
- maximale grootte van de resident set tijdens procesuitvoering in kilobytes.O
- aantal exits van bestandssystemen.P
- percentage CPU-belasting (centrale verwerkingseenheid).R
- aantal kleine fouten.S
- tijd in seconden gedurende welke de CPU gebruikt werd door het systeem namens het proces in supervisormodus(kernelmodus
).U
- tijd in seconden waarin de CPU door het proces direct ingebruikersmodus
is gebruikt.W
- hoe vaak het proces uit het RAM is gehaald.Z
- grootte van de systeempagina. Deze waarde is een constante, maar varieert tussen systemen.c
- aantal onvrijwillige contextwisselingen tijdens het uitvoeren van het proces.e
- werkelijke tijd van het uitvoeren van het commando in het gebruikelijke uurformaat. Het wordt weergegeven in seconden.k
- aantal signalen dat het proces heeft bereikt.p
- gemiddelde grootte van de niet gedeelde stack van het proces, in kilobytes.r
- aantal ontvangen socketberichten.s
- aantal verzonden socketberichten.t
- gemiddelde grootte van de resident set van het proces, in kilobytes.w
- aantal vrijwillige contextwisselingen tijdens de uitvoering van het proces.x
- retourcode voor het commando.Dit waren alle bronspecificaties die gebruikt werden bij het kiezen van de opmaak voor tijd
. Laten we nu verder gaan met de scenario's voor het gebruik van het commando.
Laten we eens kijken naar drie basisvoorbeelden die vaak worden gebruikt: uitvoer naar de terminal, uitvoer naar een apart bestand en uitvoer met opmaak.
Als voorbeeld nemen we het sleep commando, dat pauzeert voor een bepaalde tijd. Het zal een heel duidelijk voorbeeld zijn, omdat de pauzetijd in tijd
samenvalt met de uitvoeringstijd van het commando:
$ time sleep 3
De tijd wordt onmiddellijk in drie kolommen geschreven. Laten we ze allemaal doorlopen:
real
- de totale tijd vanaf het begin van de uitvoering van het proces tot de voltooiing ervan.
user
- de tijd gedurende welke het proces ingebruikersmodus
draaide.
sys
- de tijd gedurende welke het proces in supervisormodus(kernelmodus
) draaide.
Het volgende nuttige scenario is het uitvoeren van de tijd die nodig is om de header van een webpagina te laden via het hulpprogramma curl
. Laten we onze website als voorbeeld nemen:
$ time curl -I https://losst.ru
We moeten een situatie noemen waarbij het uitvoeren van het commando het terminalvenster in een andere modus zet, zoals wanneer je de nano-editor uitvoert om het bestand /home/root-user/script.txt
te wijzigen:
$ time nano /home/root-user/scripts/main_script.txt
Nadat de editor klaar is, zie je de totale tijd dat je aan het bestand hebt gewerkt.
Nu weet je hoe je de uitvoeringstijd van een Linux commando kunt zien.
De informatie over de resultaten van het tijdcommando kan worden opgeslagen in een apart bestand met de optie-o
. In dit geval worden ze niet weergegeven in het terminalvenster. Laten we het voorbeeld nemen van het uitpakken van de inhoud van het archief ~/data/data.tar.gz
met het hulpprogramma tar
. Laten we informatie over de uitvoeringstijd opslaan in een nieuw bestand ~/data/data_data_time.txt.
We zullen ook de optie-v
aan het commando toevoegen om gedetailleerde informatie te krijgen:
$ sudo time -v -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data
Het bestand zal de volgende inhoud hebben.
Als je de optie -o
gebruikt, vergeet dan niet dat deze de oude informatie in het uitvoerbestand overschrijft met de nieuwe informatie. Dit is van toepassing bij het aanmaken van nieuwe bestanden, maar is niet geschikt voor loggen. Met de optionele -a optie wordt het overschrijven van de inhoud vervangen door het toevoegen van nieuwe informatie:
$ sudo time -v -a -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data
De oorspronkelijke optie om gegevens te formatteren is niet in alle gevallen geschikt. Als voorbeeld nemen we het eerder gebruikte commando om een archief uit te pakken, maar we slaan de gegevens niet op in een bestand. Bij het uitvoeren zijn we geïnteresseerd in:
specificatie%C
. specificatie%P
. specificatie%e
.Voor het gemak wordt elk item op een aparte regel weergegeven met behulp van het scheidingsteken n
. Tegelijkertijd worden ze allemaal op een begrijpelijke manier ondertekend.
De uiteindelijke versie van het commando ziet er als volgt uit:
sudo time -f "Command info:n%CnCPU usage: %PnExecution time: %e sec" tar -xvf ~/data/data.tar.gz -C ~/data
Alle tekst behalve de tekens na %
wordt volledig weergegeven in de terminal. Dit is een handige manier om