Att veta hur långt ett kommando har kommit i sin process kan vara svårt. Med verktygen pv och progress kan du enkelt övervaka processer och få information som vanligtvis inte är tillgänglig.
Tänk dig en lång flygresa utan skärmar. Du vet avgångstiden och den beräknade flygtiden, men hur vet du om du är i tid eller efter schemat? På flygplan kan man ofta se en karta som visar flygplanets position och en beräknad ankomsttid (ETA). Dessa uppgifter är mycket användbara.
Ibland kan kommandon i terminalfönstret kännas som dessa flygresor utan skärmar. Det finns ingen indikation på om allt går bra, om processen har fastnat eller hur långt det är kvar. En blinkande markör är inte mycket till hjälp.
Med kommandona pv och progress får du statistik och visuell feedback. Du ser hur långt processen har kommit, vilket innebär att du får en ETA för dina processer. Detta är betydligt bättre än att stirra på en blinkande markör.
Installation av pv
Innan du kan använda pv måste du först installera det.
På Ubuntu installerar du pv med följande kommando:
sudo apt-get install pv
Använd detta kommando för att installera pv på Fedora:
sudo dnf install pv
För att installera pv på Manjaro, kör detta kommando:
sudo pacman -Syu pv
Hur man använder pv
pv står för pipe viewer. Det betyder att ”piping” måste användas i kommandot. I exemplet nedan skickar vi en ISO-fil genom zip för att skapa en komprimerad zip-fil av ISO-filen.
För att sänka hastigheten på kommandona tillräckligt för att kunna ta skärmdumpar, lagrades några av filerna i exemplen som användes i den här artikeln på en gammal, långsam, extern USB-enhet som kallas SILVERXHD.
pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso | zip > gparted.zip
Informationen som visas från vänster till höger:
Den totala data som överförts hittills.
Den tid som har gått.
Dataöverföringshastigheten.
En förloppsindikator och den procentuella färdigställandegraden.
Den beräknade återstående tiden (ETA).
Kopiera en fil med pv
Om du vill kopiera en fil och få output från pv, kan du använda detta kommando:
pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso > gparted.iso
Vi får en lägesrapport under tiden filen kopieras.
Kopiera flera filer med pv
För att kopiera flera filer och mappar med pv behöver vi använda ett litet trick. Vi använder tar för att hjälpa 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 mappen help-files. Detta skickas genom pv, vilket ger oss en vy av förloppet. Därefter skickas det tillbaka till tar för den sista delen av kommandot. Arkivet extraheras (-x) och katalogen ändras (-C) till Documents innan extraheringen.
Så filerna och mapparna i mappen help-files kopieras till mappen Documents, med en förloppsvy.
Resultatet är något annorlunda den här gången.
Vi får ingen ETA. Förloppsindikatorn visar nu en rörlig indikator som visar att processen är igång, men den expanderar inte från vänster till höger som en traditionell förloppsindikator. pv kan bara visa den information som den kan hämta från den aktuella överföringsprocessen.
Använda pv och tar för att skapa ett arkiv
Att kopiera filer med pv och tar skapar inte en arkivfil. Ett ”virtuellt” arkiv skapas av tar, och det skickas direkt tillbaka till tar för att extrahera filerna. Om vårt mål är att kopiera filer, då är det klart. 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 förloppsrapport 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 filnamn, vilket gör att tar använder stdout, och för att skriva utdata till terminalfönstret. Den här utmatningen visas inte, eftersom den dirigeras genom pv.
Det faktiska namnet på arkivet kommer att vara namnet på filen dit utdata från pv skickas. I det här fallet är det ”help-files.tgz”.
tar -czf - ./help-files/ | pv > help-files.tgz
Visningsalternativ för pv
Det finns ett antal alternativ som du kan använda med pv för att ändra detaljerna i rapporten.
När du använder något av dessa alternativ kommer alla andra alternativ att inaktiveras. Så om du vill använda tre av visningsalternativen måste du ange dem alla.
Att använda pv utan alternativ är samma som att använda alternativen -pterb.
-p: visar den procentuella färdigställandegraden. Detta är förloppsindikatorn och den procentuella siffran.
-t: visar den förflutna tiden.
-e: visar ETA.
-r: visar dataöverföringshastigheten.
-b: visar antalet byte (den data som har överförts hittills).
-n: visar procenttalet som ett heltal. Detta visar den procentuella färdigställandegraden som ett heltal, där varje uppdatering skrivs på en ny rad.
Låt oss upprepa det sista kommandot och skicka alternativet -p (procent färdig) till pv.
tar -czf - ./help-files/ | pv - p > help-files.tgz
Använda pv med wc
Vi kan använda pv för att skicka en textfil (eller filer) till wc. wc räknar sedan vagnreturer, tecken och ord, och pv ger oss en lägesrapport.
Här skickar vi alla ”.page”-filer i katalogen help-files till wc.
När wc är klar kan vi se hur många vagnreturer (rader), tecken och ord som finns i alla ”.page”-filer i mappen help-files.
Installation av kommandot progress
Kommandot progress ger liknande användbar information som pv, men det fungerar med en specifik uppsättning Linux-kommandon.
Använd följande kommando för att installera progress i Ubuntu:
sudo apt-get install progress
Om du vill installera progress i Fedora använder du det här kommandot:
sudo dnf install progress
Installera progress i Manjaro med följande kommando:
sudo pacman -Syu progress
Vilka kommandon fungerar med progress
Om du skriver progress i ett terminalfönster och trycker på Enter kommer du att se en lista över de kommandon som progress kan användas med.
progress
Använda progress med ”pipes”
Det finns två tekniker för att övervaka kommandon med progress. Den första är att använda pipes.
Kommandot tar finns med i listan över kommandon som progress kan övervaka. Så vi använder tar.
Vi kommer att använda standardalternativen -c (skapa arkiv), -z (komprimera med gzip) och -f (filnamn). Vi kommer att skapa ett komprimerat arkiv av allt i mappen help-files och arkivet kommer att heta ”help.tgz”.
Vi skickar det till progress och använder alternativet -m (övervaka) så att progress fortsätter att rapportera om processen tills den är klar.
tar -czf help.tgz ./help-files/ | progress -m
Terminalfönstret visar hur långt tar-kommandot har kommit i skapandet av arkivet.
När varje fil bearbetas listas den med följande information:
Process-ID.
Processens namn.
Procent slutförd.
Bearbetad data och filens totala storlek.
Datahastighet (genomströmning).
Beräknad återstående tid (ETA).
Du kanske blir förvånad över att se ytterligare en datamängd dyka upp. Den första datamängden är för tar. Den andra är för gzip. tar anropar gzip för att utföra komprimeringen. Eftersom gzip finns med i listan över kommandon som stöds, kommer progress också att rapportera om det.
Använda progress i läget för kontinuerlig övervakning
Du kan använda progress i ett läge för kontinuerlig övervakning i realtid med alternativet -M (monitor).
Skriv in följande kommando i ett terminalfönster:
progress -M
progress kommer att rapportera att det inte finns några kommandon att övervaka. Men du kommer inte att komma tillbaka till kommandoraden. progress väntar tills ett kommando som den kan övervaka startas. När det händer kommer den automatiskt att börja rapportera om det.
I ett annat terminalfönster skriver du ett kommando som finns i listan över kommandon som progress kan övervaka.
Vi kommer att använda cat. Kommandon som avslutas för snabbt kommer inte att registreras med progress, så vi listar innehållet i en mycket lång textfil.
cat words.page
I terminalfönstret med progress kommer du att se statistik för cat-kommandot medan det körs och arbetar mot sin avslutning.
När cat är klar med utskriften återgår progress till vänteläge.
Varje gång ett av kommandona som den kan rapportera om utför en betydande uppgift, kommer progress automatiskt att övervaka det och rapportera om det.
Det är ganska praktiskt.
100 % klar
Sluta gissa när du undrar hur det går för ett tidskrävande kommando. Ta en paus från att stirra på din markör och använd pv och progress istället.