Overvåk Linux-kommandoer: Få ETA med pv og progress!

I stedet for å være usikker på hvor langt en kommando er kommet, kan du bruke Linux-verktøyene `pv` og `progress` for å få innsikt i fremdriften. Disse verktøyene gir deg visuell tilbakemelding og fremdriftsindikatorer, selv for kommandoer som normalt ikke viser noen informasjon om status. Du får også en estimert tid til ferdigstillelse, noe som er svært nyttig.

Tenk deg en lang flytur uten skjermer i seteryggene. Du vet når du startet, og du vet hvor lang tid turen er planlagt å ta. Men hvor langt har du egentlig kommet? Er du i rute, foran eller etter skjema? I et fly kan du ofte se et kart over flyets posisjon og få annen nyttig statistikk, som forventet ankomsttid. Dette er informasjon som gjør reisen mer oversiktlig.

Å kjøre en kommando i terminalen kan noen ganger føles litt som denne flyturen uten skjerm. Du har ingen anelse om prosessen går som den skal, om den har hengt seg opp, eller hvor langt den er kommet. En blinkende markør gir svært lite informasjon.

Heldigvis finnes det løsninger. Med `pv` og `progress` kan du få statistikk og visuell tilbakemelding. Du kan se hvor nærme prosessen er å fullføre, og få en estimert ankomsttid (ETA) for dine prosesser. Dette er en stor forbedring fra å bare stirre på en blinkende markør.

Installere pv

Før du kan bruke `pv`, må du installere det. Du kan gjøre det enkelt ved å bruke følgende kommandoer, avhengig av din Linux-distribusjon:

For Ubuntu:

sudo apt-get install pv

For Fedora:

sudo dnf install pv

For Manjaro:

sudo pacman -Syu pv

Bruke pv

Navnet `pv` står for «pipe viewer». Det betyr at `pv` er designet for å jobbe med kommandoer som involverer piping. Her er et eksempel der vi bruker `pv` for å overføre en ISO-fil gjennom `zip` for å lage en komprimert ZIP-fil:

For å kunne vise fremdriften i et skjermbilde, ble noen av filene som ble brukt i eksemplene lagret på en treg, ekstern USB-disk kalt SILVERXHD.

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

Informasjonen som `pv` gir, vises på den nederste linjen i terminalvinduet. Her er hva de ulike delene betyr, fra venstre til høyre:

  • Mengde data som er overført så langt.
  • Tiden som har gått.
  • Dataoverføringshastigheten (gjennomstrømning).
  • En fremdriftslinje og prosentvis fullført-indikator.
  • Estimert tid til ferdigstillelse (ETA).

Kopiere en fil med pv

For å kopiere en fil med `pv` og se fremdriftsinformasjon, kan du bruke følgende kommando:

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

Du vil nå se en fremdriftsrapport mens filen kopieres.

Kopiere flere filer med pv

For å kopiere flere filer og mapper med `pv`, må vi bruke et lite triks. Vi bruker `tar` for å håndtere filoverføringen.

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

Kommandoen `tar -c help-files/` forteller `tar` å lage et arkiv av filene i mappen `help-files`. Dette resultatet sendes gjennom `pv` for å vise fremdriften, og deretter sendes tilbake til `tar` som pakker ut filene i `Documents`-mappen. Med andre ord, filene og mappene i `help-files` kopieres til `Documents`-mappen mens vi ser fremdriften.

Utdataene er litt annerledes denne gangen. Vi får ikke en ETA, og fremdriftslinjen viser en bevegelig indikator som viser at prosessen er aktiv, men ikke en tradisjonell fremdriftslinje. `pv` er begrenset av informasjonen den kan hente fra den underliggende prosessen.

Bruke pv og tar for å lage et arkiv

Når vi kopierer filer med `pv` og `tar`, lager vi ikke en faktisk arkivfil, men et «virtuelt» arkiv som `tar` lager og umiddelbart pakker ut igjen. Men hva om vi ønsker å lage en arkivfil? Vi kan bruke `tar` til å lage en arkivfil og samtidig få en fremdriftsrapport fra `pv`.

Vi bruker følgende `tar`-alternativer: `-c` (lag arkiv), `-z` (komprimer med gzip) og `-f` (filnavn). Merk at vi bruker `-` som filnavn, noe som får `tar` til å bruke stdout (standard output). Utdataene vises ikke direkte i terminalen, da de sendes gjennom `pv`. Det faktiske navnet på arkivfilen kommer fra navnet på filen vi sender utdataene fra `pv` til. I dette tilfellet er det `help-files.tgz`.

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

Vi ser de samme fremdriftsindikatorene som før, og arkivfilen lages for oss.

Visningsalternativer for pv

Du kan bruke flere alternativer med `pv` for å endre rapportens detaljer. Hvis du bruker noen av disse alternativene, vil alle de andre alternativene slås av. Så hvis du vil bruke tre visningsalternativer samtidig, må du spesifisere alle tre.

Å bruke `pv` uten noen alternativer er det samme som å bruke alternativene `-pterb`.

  • `-p`: Vis prosentandel fullført. Dette er fremdriftslinjen og prosentandelen som er fullført.
  • `-t`: Vis medgått tid.
  • `-e`: Vis ETA.
  • `-r`: Vis dataoverføringshastigheten.
  • `-b`: Vis byte-telleren (data overført så langt).
  • `-n`: Vis prosentandelen som et heltall. Dette skriver ut prosentandelen som et heltall, med hver ny oppdatering på en ny linje.

La oss prøve den samme kommandoen som sist, men med `-p` alternativet til `pv`:

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

Dette slår av alle andre visningsalternativer, og `pv` viser kun fremdriftslinjen. Fordi `pv` ikke får en prosentvis fullført verdi fra `tar`, erstattes fremdriftslinjen med en bevegelig indikator, og ingen prosentandel vises.

Bruke pv med wc

Vi kan bruke `pv` til å overføre en tekstfil (eller filer) til `wc`. `wc` vil telle vognretur, tegn og ord, og `pv` gir oss en fremdriftsrapport.

Her sender vi alle filer som slutter med `.page` i `help-files`-mappen til `wc`:

Når `wc` er ferdig, ser vi antall linjer, tegn og ord fra alle `.page`-filene i `help-files`-mappen.

Installere progress-kommandoen

`progress` gir samme type nyttig informasjon som `pv`, men fungerer med et spesifikt sett av Linux-kommandoer. For å installere `progress`, bruk følgende kommandoer, avhengig av din distribusjon:

For Ubuntu:

sudo apt-get install progress

For Fedora:

sudo dnf install progress

For Manjaro:

sudo pacman -Syu progress

Kommandoer som progress fungerer med

Hvis du skriver inn `progress` i et terminalvindu og trykker Enter, får du en liste over kommandoer som `progress` fungerer med.

progress

Bruke progress med rør

Det er to måter å bruke `progress` på for å overvåke kommandoer. Den første er å bruke piping.

`tar`-kommandoen er i listen over kommandoer som `progress` kan overvåke, så la oss bruke `tar` for å lage et komprimert arkiv av alle filene i `help-files`-mappen. Arkivet får navnet `help.tgz`.

Vi sender dette resultatet til `progress` med `-m` (monitor) alternativet, slik at `progress` fortsetter å rapportere om prosessen til den er fullført.

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

Terminalvinduet vil vise fremdriften for `tar`-kommandoen mens den lager arkivet.

For hver fil som behandles, vises følgende informasjon:

  • Prosess-ID.
  • Prosessnavn.
  • Prosent fullført.
  • Data behandlet og total størrelse på filen.
  • Datahastighet (gjennomstrømning).
  • Estimert tid igjen (ETA).

Du vil kanskje legge merke til to datasett. Det første er for `tar`, og det andre er for `gzip`. `tar` kaller `gzip` for å utføre komprimeringen. Fordi `gzip` er i listen over støttede kommandoer, rapporterer `progress` om den.

Bruke progress i kontinuerlig overvåkingsmodus

Du kan bruke `progress` i en kontinuerlig overvåkingsmodus i sanntid ved å bruke `-M` (monitor) alternativet:

progress -M

`progress` vil rapportere at ingen kommandoer kjører, men vil ikke returnere deg til kommandolinjen. Den vil vente til en kommando den kan overvåke starter, og deretter automatisk begynne å rapportere om den.

I et annet terminalvindu kan du nå skrive en kommando som er i listen over kommandoer som `progress` kan overvåke.

Vi skal bruke `cat`. Kommandoer som går for raskt blir ikke registrert av `progress`, så vi viser innholdet i en lang tekstfil.

cat words.page

I terminalvinduet med `progress` vil du se statistikk for `cat`-kommandoen mens den utføres.

Når `cat` er ferdig, går `progress` tilbake til ventemodus. Hver gang en av kommandoene den kan rapportere om utfører en betydelig oppgave, vil `progress` automatisk overvåke den og rapportere om den. Det er ganske praktisk.

100% fullført

Med `pv` og `progress` slipper du å gjette deg til hvor langt en langvarig kommando har kommet, og du kan ta en pause fra å stirre på en blinkende markør.