Ibland när du arbetar med Linux-terminalen behöver du veta tidpunkten för utförandet av vissa kommandon, till exempel för att spåra problem. Det finns ett verktyg som heter time
för detta ändamål. Vi kommer att berätta hur Linux-tidskommandot
fungerar och vad dess syntax är. Sedan går vi vidare till beskrivningen av de tillgängliga alternativen. Och i slutet kommer vi att nämna några populära användningsscenarier.
Verktyget kör ett användardefinierat kommando och visar sedan information om dess exekveringstid. Syntaxen är ganska praktisk. Först måste du ange alternativen för tid
, sedan kommandot som ska köras och slutligen argumenten till det:
$ time [options] command_to_execute [arguments]
Låt oss titta på listan över tillgängliga alternativ:
-o
, --output
- spara data till den valda filen istället för standardutmatningen i terminalen. I det här fallet kommer gamla data i filen att skrivas över.-a
, --append
- lägger till ny information i filen i stället för att skriva över den gamla. Alternativet är endast användbart i kombination med -o
.-f
, --format
- välj ett specifikt utdataformat. Detaljer om formatering beskrivs i nästa avsnitt av den här artikeln.-p
, --profitably
- använder ett utdataformat som överensstämmer med POSIX 1003.2-standarden.-v
, --verbose
- ger detaljerad information om hur programmet körs.-V
, --version
- ger ut versionen av tidsverktyget
.Denna lista innehåller endast de grundläggande alternativen. Du kan få detaljerad information med kommandot:
$ man time
Som standard kan time
mata ut information i en form som inte är bekväm att läsa,
Det är önskvärt att ställa in utmatningsformateringsalternativ för det, som kommer att diskuteras nu. Det finns totalt tre av dem. Låt oss ta kommandot apt-get update
som ett exempel.
Alternativet -v
används för att mata ut detaljerad information:
$ sudo time -v apt-get update
Alternativet -p
behövs för att mata ut data i ett format som överensstämmer med POSIX 1003.2:
$ sudo time -p apt-get update
Dataraden för formatering innehåller vanligtvis resursspecifikatorer och vanlig text. Tecknet %
anger att tecknet som följer efter det ska behandlas som en resursspecifikator.
Tecknet används för att ange avgränsningstecknet. Det finns tre tillgängliga alternativ:
t
- tabb, n
- ny rad, \
- backslash. Om du anger något annat tecken efter kommer terminalen att visa ett frågetecken (
?
), vilket indikerar ett inmatningsfel.
Resten av texten i formatsträngen kopieras i sin helhet till utdatafältet. I det här fallet börjar tiden
alltid mata ut data från en ny rad efter informationen om utförandet av själva kommandot.
Låt oss titta på de tillgängliga resursspecificerarna:
%
- bokstavlig %, dvs. om du vill skriva ut ett procenttecken ska du ange %% i kommandot.C
- kommandonamn och använda argument.D
- genomsnittlig storlek på det odelade dataområdet. Den visas i kilobyte.E
- realtid för kommandokörning i det vanliga timformatet. Den visas som [Hours:]<imutes:seconds.
N
- antal större fel eller I/O-fel som inträffade under processens exekvering.I
- antal åtkomster till filsystemet.K
- medelvärde för minne som används för kod(text)
, initialiserade data(data)
ochstack (stack)
. Det visas i kilobyte.M
- maximal storlek på residentuppsättningen under processens exekvering i kilobyte.O
- antal avslutningar av filsystemet.P
- procentuell belastning av CPU (central processorenhet).R
- antal mindre fel.S
- tid i sekunder under vilken processorn användes av systemet på uppdrag av processen i supervisorläge(kernel
mode).U
- tid i sekunder under vilken processorn användes av processen direkt ianvändarläge
.W
- hur många gånger processen avlastades från RAM.Z
- systemets sidstorlek. Detta värde är en konstant, men varierar mellan olika system.c
- antal ofrivilliga kontextbyten under processens exekvering.e -
realtid för kommandokörning i det vanliga timformatet. Den visas i sekunder.k
- antal signaler som nått processen.p
- genomsnittlig storlek på processens odelade stack, i kilobyte.r
- antal mottagna socket-meddelanden.s
- antal skickade socket-meddelanden.t
- genomsnittlig storlek på processens resident set, i kilobyte.w
- antal frivilliga kontextbyten under processens exekveringx
- returkod för kommandot.Detta var alla de resursspecifikationer som användes när vi valde formatering för tid
. Låt oss nu gå vidare till scenarierna för hur kommandot används.
Låt oss titta på tre grundläggande exempel som är ganska vanligt förekommande: utmatning till terminalen, utmatning till en separat fil och utmatning med formatering.
Som exempel tar vi kommandot sleep, som gör en paus under en viss tid. Det blir ett mycket tydligt exempel, eftersom paustiden kommer att sammanfalla med kommandots exekveringstid i tid
:
$ time sleep 3
Tiden skrivs omedelbart i tre kolumner. Låt oss gå igenom var och en av dem:
verklig
- den totala tiden från början av processutförandet till dess slutförande.
användare
- den tid under vilken processen kördes ianvändarläge
.
sys
- tid under vilken processen var involverad i supervisorläge(kernel-läge)
.
Nästa användbara scenario är att mata ut den tid det tar att ladda ett webbsideshuvud via verktyget curl
. Låt oss ta vår webbplats som ett exempel:
$ time curl -I https://losst.ru
Vi bör nämna en situation där utförandet av kommandot sätter terminalfönstret i ett annat läge, till exempel när du kör nano-redigeraren för att ändra filen /home/root-user/script.txt
:
$ time nano /home/root-user/scripts/main_script.txt
När redigeraren är klar ser du den totala tid som du har arbetat med filen.
Nu vet du hur du kan se exekveringstiden för ett Linux-kommando.
Informationen om resultatet av tidskommandot kan sparas i en separat fil med hjälp av alternativet-o
. I det här fallet kommer de inte att visas i terminalfönstret. Låt oss ta ett exempel där vi extraherar innehållet i arkivet ~/data/data.tar.gz
med hjälp av verktyget tar
. Vi sparar information om exekveringstiden i en ny fil ~/data/data_data_time.txt
. Vi kommer också att lägga till alternativet-v
i kommandot för att få detaljerad information:
$ sudo time -v -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data
Filen kommer att ha följande innehåll.
Om du använder alternativet -o
ska du komma ihåg att den gamla informationen i utdatafilen skrivs över med den nya informationen. Detta är användbart när du skapar nya filer, men är inte lämpligt för loggning. Med det valfria alternativet -a ersätts överskrivningen av innehållet med att ny information läggs till:
$ sudo time -v -a -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data
Det ursprungliga alternativet att formatera data är inte lämpligt i alla fall. Som exempel tar vi det tidigare använda kommandot för att extrahera ett arkiv, men vi kommer inte att spara data i en fil. När vi utför det är vi intresserade av:
specificeraren%C
. specificerare%P
. specifier%e
.För att underlätta läsningen kommer varje objekt att visas på en separat rad med hjälp av separatorn n
. Samtidigt kommer de alla att undertecknas på ett förståeligt sätt.
Så här ser den slutliga versionen av kommandot ut:
sudo time -f "Command info:n%CnCPU usage: %PnExecution time: %e sec" tar -xvf ~/data/data.tar.gz -C ~/data
All text utom tecknen efter %
visas i sin helhet i terminalen. Detta är ett bekvämt sätt att markera