Hur man övervakar framstegen för Linux-kommandon (med pv och framsteg)

Istället för att flyga blind, använd Linux pv och progress-kommandon för att spåra ett kommandos framsteg. Dessa verktyg ger dig förloppsindikatorer för kommandon som normalt inte har några. Du kommer också att se en beräknad tid tills det är klart.

Om du är på en långdistansflygning på ett flygplan utan videoskärmar i ryggstöden är det inte lätt att veta hur långt genom din resa du är. Du vet när du lyfte. Du vet hur lång tid flygningen förväntas ta. Men hur vet du om du är på rätt spår, i tid eller långt efter schemat? Om du inte vill se filmen under flygning kan du vanligtvis byta videoskärm för att visa en karta med ditt flygplans position på den. Du får också lite statistik, som en förväntad ankomsttid (ETA), vilket är jättebra.

Att starta ett kommando från terminalfönstret kan ibland kännas som en långdistansflygning utan videoskärm. Du har ingenting att ge någon indikation på om allt är bra eller om processen har hängt sig, inte heller hur nära den är slutförd. En blinkande markör är inte särskilt informativ.

Kommandona pv och progress ger dig lite statistik och lite visuell feedback. Du kan se hur nära processen är att slutföra. Det betyder att du får en ETA för dina pågående processer. Jämfört med att stirra på en markör, vinner det helt enkelt.

Installerar pv

Du måste installera pv.

För att installera pv på Ubuntu använd detta kommando:

sudo apt-get install pv

För att installera pv på Fedora använd detta kommando:

sudo dnf install pv

För att installera pv på Manjaro använd detta kommando:

sudo pacman -Syu pv

Använder pv

pv står för rörvisare. Piping måste vara inblandad i kommandot någonstans. Här är ett exempel där vi överför en ISO-bild genom zip för att göra en komprimerad zip-fil av ISO.

För att sakta ner kommandona tillräckligt för att en skärmdump skulle kunna tas, lagrades några av filerna i exemplen som används för den här artikeln på en gammal, långsam, extern USB som heter SILVERXHD.

pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso | zip > gparted.zip

pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso |  zip > gparted.zip i ett terminalfönster” width=”646″ height=”77″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Informationen pv ger oss kan ses längst ner på displayen.</p>
<p> <img loading=

Från vänster till höger är informationen som visas:

Uppgifterna som har överförts hittills.
Tiden har gått så långt.
Dataöverföringshastigheten (genomströmning).
En förloppsindikator och en procentuell slutförd siffra.
Den beräknade tiden som återstår innan färdigställandet (ETA).

Kopiera en fil med pv

För att kopiera en fil med utdata från pv, använd detta kommando:

pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso > gparted.iso

Vi får en lägesrapport allt eftersom filen kopieras.

Kopiera flera filer med pv

För att kopiera flera filer och mappar med pv måste vi använda ett litet knep. Vi använder tar för att flytta filerna åt oss.

tar -c help-files/ | pv | tar -x -C Documents/

Tar -c help-files/-delen av kommandot instruerar tar att skapa (-c) ett arkiv av filerna i hjälpfilsmappen. Detta leds genom pv så att vi får en visning av framstegen. Den leds sedan tillbaka till tar för den sista delen av kommandot. Arkivet extraheras (-x) och katalogen ändras (-C) till Dokument innan extraheringen.

Så, filerna och mapparna som finns i hjälpfilerna kopieras till mappen Dokument, med en förloppsvisning.

Utgången är något annorlunda den här gången.

Vi får ingen ETA. Förloppsindikatorn visar nu en rörlig indikator. Det visar att processen är aktiv, men den växer inte från vänster till höger som en traditionell förloppsindikator. pv är begränsad till att visa den information som den kan extrahera från processen som överförs.

Använda pv och tar för att skapa ett arkiv

Att kopiera filer med pv och tar lämnar oss inte med en arkivfil. Ett slags ”virtuellt” arkiv skapas av tar, som matas tillbaka direkt till tar för att extrahera filerna. Om vårt mål är att kopiera filer, är det uppnått. Men vad händer om vi vill skapa en arkivfil?

Vi kan fortfarande använda tar för att skapa en arkivfil och få en lägesrapport från pv. Alternativen som används med tar är -c (skapa arkiv), -z (komprimera med gzip) och -f (arkivets filnamn).

Observera att vi använder – som filnamnet, vilket gör att tar används stdout, och för att skriva dess utdata till terminalfönstret. Vi ser inte den utgången eftersom den leds genom pv.

Det faktiska namnet på arkivet kommer att vara filnamnet som vi skickar utdata från pv till. I det här fallet är det ”help-files.tgz”.

tar -czf - ./help-files/ | pv > help-files.tgz

tar -czf - ./help-files/ |  pv > help-files.tgz i ett terminalfönster” width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Vi får samma förloppsindikatorer som tidigare, och arkivfilen skapas åt oss.</p>
<p> p><img loading=

Pv-visningsalternativen

Det finns ett antal alternativ som du kan använda med pv för att ändra detaljerna i rapporten.

Om du använder något av dessa alternativ stängs alla andra alternativ av. Så om du vill ha tre av visningsalternativen i bruk, måste du ange dessa tre alternativ.

Att använda pv utan några alternativ är detsamma som att använda -pterb-alternativen.

-p: visa procentsatsen färdig. Detta är förloppsindikatorn och den procentuella siffran.
-t: visa förfluten tid.
-e: visa ETA.
-r: visa dataöverföringshastigheten.
-b: visa byte-antalet (data som har överförts hittills).
-n: visa procenttalet som ett heltal. Detta skriver ut procentsatsen som slutförts som ett heltal, med varje ny uppdatering på en ny rad.

Låt oss upprepa det sista kommandot och skicka alternativet -p (procent slutfört) till pv.

tar -czf - ./help-files/ | pv - p > help-files.tgz

tar -czf - ./help-files/ |  pv - p > help-files.tgz i ett terminalfönster” width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Detta stänger av alla andra visningsalternativ.  pv tillhandahåller endast andelen färdigställda procentenheter.</p>
<p>Eftersom pv inte får en procentsats som slutförts från tar, ersätts förloppsindikatorn med en rörlig indikator.  Det finns ingen procentsats.</p>
<p><img loading=

Använder pv med wc

Vi kan använda pv för att överföra en textfil (eller filer) till wc. wc kommer sedan att räkna vagnreturerna, tecken och ord och pv kommer att ge oss en lägesrapport.

Här överför vi alla ”.page”-filer i hjälpfilkatalogen till wc.

När wc är klar kan vi se vårt antal vagnreturer (rader), tecken och ord från alla ”.page”-filer i hjälpfilsmappen.

Installerar kommandot progress

Framstegskommandot ger samma sorts användbar information som pv, men det fungerar med en specifik uppsättning Linux-kommandon.

För att installera progress i Ubuntu, använd det här kommandot:

sudo apt-get install progress

För att installera framsteg i Fedora, använd detta kommando:

sudo dnf install progress

För att installera progress i Manjaro, använd det här kommandot:

sudo pacman -Syu progress

Kommandoförloppet fungerar med

Om du skriver framsteg i ett terminalfönster och trycker på Enter får du en lista över de kommandon som framsteg fungerar med.

progress

Använda framsteg med rör

Det finns två tekniker vi kan använda för att övervaka kommandon med framsteg. Den första är att använda rör.

Tar-kommandot finns i listan över stödda kommandon som framsteg kan övervaka, så låt oss använda tar.

Alternativen vi kommer att använda är standardalternativen -c (skapa arkiv), -z (komprimera med gzip) och -f (filnamn). Vi kommer att skapa ett komprimerat arkiv med allt i hjälpfilsmappen, och arkivet kommer att heta ”help.tgz”.

Vi förvandlar det till utvecklingen och använder alternativet -m (monitor) så att framstegen fortsätter att rapportera om processen tills den har slutförts.

tar -czf help.tgz ./help-files/ | progress -m

Terminalfönstret visar förloppet för tar-kommandot när det skapar arkivet.

När varje fil bearbetas listas den med följande information:

Process-ID.
Processens namn.
Procent slutförd.
Bearbetade data och filens totala storlek.
Datahastighet (genomströmning).
Beräknad återstående tid (ETA).

Du kanske blir förvånad över att se en andra datamängd dyka upp. Denna första datamängd är för tjära. Den andra är för gzip. tar anropar gzip för att utföra komprimeringen. Eftersom gzip finns i listan över kommandon som stöds, rapporterar framsteg om det.

Använda framsteg i läget för kontinuerlig övervakning

Du kan använda framsteg i ett kontinuerligt övervakningsläge i realtid genom att använda alternativet -M (monitor).

Skriv följande kommando i ett terminalfönster:

progress -M

framsteg kommer att rapportera att det inte finns några kommandon som körs för den att övervaka. Men du kommer inte tillbaka till kommandoraden. förloppet väntar tills ett kommando som den kan övervaka startar. Det kommer då automatiskt att börja rapportera om det.

I ett annat terminalfönster skriver du ett kommando som finns i listan över kommandon som framsteg kan övervaka.

Vi ska använda katt. Kommandon som är över för snabbt kommer inte att registreras med framsteg, så vi listar innehållet i en mycket lång textfil.

cat words.page

I terminalfönstret med framsteg i det kommer du att se statistik för cat-kommandot när det körs och arbetar mot slutförandet.

När katten är klar med listningen återgår filförloppet till sitt vänteläge.

Varje gång ett av kommandona som den kan rapportera om utför en betydande uppgift, kommer framstegen automatiskt att övervaka det och rapportera om det.

Det är ganska snyggt.

100 % klar

Ta bort gissningarna när du undrar hur det går för ett långvarigt kommando, och ta en paus från att betrakta din markör med pv och progress .