Betalningsmetoder Abuse

Tidskommando i Linux

18.03.2022, 01:39

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.

Syntax och alternativ

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

Alternativ för formatering av utdata

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 exekvering
  • x - 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.

LINUX-kommandots exekveringstid

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.

Utmatning av körtiden till terminalen

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.

Filens utdata

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

Utmatning med formatering

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:

  • Information om själva kommandot och de givna alternativen - detta är specificeraren%C.
  • CPU-belastning - specificerare%P.
  • Total exekveringstid i sekunder - 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