Jak sledovat průběh příkazů Linuxu (s pv a progress)

Místo létání naslepo použijte ke sledování průběhu příkazu příkazy Linux pv a progress. Tyto nástroje vám poskytnou ukazatele průběhu pro příkazy, které obvykle žádné nemají. Uvidíte také odhadovaný čas do dokončení.

Pokud jste na dlouhém letu v letadle bez video obrazovek na opěradlech sedadel, není snadné zjistit, jak daleko jste na své cestě. Víš, kdy jsi vzlétl. Víte, jak dlouho má let trvat. Jak ale poznáte, zda jste na správné cestě, včas nebo se výrazně opožďujete? Pokud se nechcete dívat na film za letu, můžete obvykle přepnout obrazovku videa a zobrazit mapu s polohou vašeho letadla. Získáte také nějaké statistiky, jako je očekávaný čas příjezdu (ETA), což je skvělé.

Spuštění příkazu z okna terminálu může někdy vypadat jako let na dlouhou vzdálenost bez obrazovky videa. Nemáte nic, co by naznačovalo, zda je vše v pořádku nebo zda proces přestává fungovat, ani jak blízko je k dokončení. Blikající kurzor není příliš informativní.

Příkazy pv a progress vám poskytují nějaké statistiky a malou vizuální zpětnou vazbu. Můžete vidět, jak blízko je proces dokončení. To znamená, že získáte ETA pro vaše běžící procesy. Ve srovnání se zíráním na kurzor to vítězí.

Instalace pv

Musíte nainstalovat pv.

Chcete-li nainstalovat pv na Ubuntu, použijte tento příkaz:

sudo apt-get install pv

Chcete-li nainstalovat pv na Fedoru, použijte tento příkaz:

sudo dnf install pv

Chcete-li nainstalovat pv na Manjaro, použijte tento příkaz:

sudo pacman -Syu pv

Pomocí pv

pv znamená prohlížeč potrubí. Potrubí musí být někde zapojeno do příkazu. Zde je příklad, kdy propojujeme ISO obraz přes zip, abychom vytvořili komprimovaný zip soubor ISO.

Aby se příkazy dostatečně zpomalily, aby bylo možné pořídit snímek obrazovky, byly některé soubory v příkladech použitých v tomto článku uloženy na starém, pomalém externím USB s názvem 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 v okně terminálu” width=”646″ height=”77″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Informace, které nám pv poskytuje, můžete vidět na spodním řádku displeje.</p>
<p> <img loading=

Zleva doprava jsou zobrazené informace:

Dosud přenesená data.
Čas zatím uplynul.
Rychlost přenosu dat (propustnost).
Ukazatel průběhu a procento dokončeného obrázku.
Odhadovaný čas zbývající do dokončení (ETA).

Kopírování souboru s pv

Chcete-li zkopírovat soubor s výstupem z pv, použijte tento příkaz:

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

Při kopírování souboru dostáváme zprávu o průběhu.

Kopírování více souborů pomocí pv

Ke kopírování více souborů a složek pomocí pv musíme použít malý trik. K přesunutí souborů za nás používáme tar.

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

Část příkazu tar -c help-files/ dává příkazu tar vytvořit (-c) archiv souborů ve složce help-files. To je vedeno přes pv, takže dostáváme zobrazení průběhu. Poté je převeden zpět do tar pro poslední část příkazu. Archiv se před extrakcí rozbalí (-x) a adresář se změní (-C) na Dokumenty.

Takže soubory a složky, které jsou v souborech nápovědy, se zkopírují do složky Dokumenty se zobrazením průběhu.

Výstup je tentokrát trochu jiný.

Nedostáváme odhadovaný čas příjezdu. Ukazatel průběhu nyní zobrazuje pohybující se indikátor. Ukazuje, že proces je aktivní, ale neroste zleva doprava jako tradiční ukazatel průběhu. pv se omezuje na zobrazení informací, které může extrahovat z procesu, který je přenášen.

Použití pv a tar k vytvoření archivu

Kopírování souborů pomocí pv a tar nám nezanechá archivní soubor. Jakýsi „virtuální“ archiv je vytvořen pomocí tar, který je přiváděn přímo zpět do taru, aby se soubory extrahovaly. Pokud je naším cílem kopírovat soubory, je to splněno. Ale co když chceme vytvořit archivní soubor?

Stále můžeme použít tar k vytvoření archivního souboru a získání zprávy o průběhu z pv. Možnosti používané s tar jsou -c (vytvořit archiv), -z (komprimovat pomocí gzip) a -f (název souboru archivu).

Všimněte si, že jako název souboru používáme –, což způsobí použití tar stdouta zapsat jeho výstup do okna terminálu. Tento výstup nevidíme, protože je veden potrubím pv.

Skutečným názvem archivu bude název souboru, do kterého převedeme výstup z pv. V tomto případě je to „help-files.tgz“.

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

tar -czf - ./help-files/ |  pv > help-files.tgz v okně terminálu” width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Dostáváme stejné indikátory průběhu jako dříve a archivní soubor je vytvořen za nás.</p>
<p> < p><img loading=

Možnosti zobrazení pv

Existuje řada možností, které můžete použít s pv ke změně podrobností jeho zprávy.

Pokud použijete některou z těchto možností, všechny ostatní možnosti se vypnou. Pokud tedy chcete používat tři možnosti zobrazení, musíte tyto tři možnosti zadat.

Použití pv bez jakýchkoli voleb je stejné jako použití voleb -pterb.

-p: zobrazí procento dokončení. Toto je ukazatel průběhu a procento dokončení.
-t: zobrazení uplynulého času.
-e: zobrazí ETA.
-r: zobrazí rychlost přenosu dat.
-b: zobrazí počet bajtů (dosud přenesená data).
-n: zobrazí procento jako celé číslo. Tím se vytiskne procento dokončené jako celé číslo s každou novou aktualizací na nový řádek.

Zopakujeme poslední příkaz a předáme volbu -p (procento dokončeno) do pv.

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

tar -czf - ./help-files/ |  pv - p > help-files.tgz v okně terminálu” width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Tímto vypnete všechny ostatní možnosti zobrazení.  pv poskytuje pouze procento dokončeného prvku.</p>
<p>Protože pv nezíská procento dokončeného prvku z tar, je ukazatel průběhu nahrazen pohyblivým ukazatelem.  Neexistuje žádné procento.</p>
<p><img loading=

Použití pv s wc

Můžeme použít pv k přenosu textového souboru (nebo souborů) do wc. wc pak spočítá návraty vozíku, znaky a slova a pv nám poskytne zprávu o průběhu.

Zde přesměrováváme všechny soubory „.page“ v adresáři help-files do wc.

Po dokončení wc můžeme vidět počet návratů vozíku (řádků), znaků a slov ze všech souborů „.page“ ve složce help-files.

Instalace příkazu progress

Příkaz progress poskytuje stejný druh užitečné informace jako pv, ale funguje se specifickou sadou linuxových příkazů.

Chcete-li nainstalovat progress v Ubuntu, použijte tento příkaz:

sudo apt-get install progress

Chcete-li nainstalovat progress do Fedory, použijte tento příkaz:

sudo dnf install progress

Chcete-li nainstalovat progress v Manjaro, použijte tento příkaz:

sudo pacman -Syu progress

Příkazy progress Pracuje s

Zadáním progress do okna terminálu a stisknutím klávesy Enter získáte seznam příkazů, se kterými progress pracuje.

progress

Použití Progress With Pipes

Existují dvě techniky, které můžeme použít ke sledování průběhu příkazů. První je použití potrubí.

Příkaz tar je v seznamu podporovaných příkazů, které lze sledovat, takže použijme příkaz tar.

Možnosti, které použijeme, jsou standardní volby -c (vytvořit archiv), -z (komprimovat pomocí gzip) a -f (název souboru). Vytvoříme komprimovaný archiv všeho ve složce help-files a archiv se bude jmenovat „help.tgz“.

Zařazujeme to do průběhu a používáme volbu -m (monitor), takže průběh hlásí proces, dokud není dokončen.

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

V okně terminálu se zobrazí průběh příkazu tar při vytváření archivu.

Každý soubor je při zpracování uveden v seznamu s následujícími informacemi:

ID procesu.
Název procesu.
Procento dokončeno.
Zpracovaná data a celková velikost souboru.
Přenosová rychlost (propustnost).
Odhadovaný zbývající čas (ETA).

Možná vás překvapí, že se objeví druhý soubor dat. Tato první datová sada je pro tar. Druhý je pro gzip. tar volá gzip, aby provedl kompresi. Protože gzip je v seznamu podporovaných příkazů, zobrazuje se u něj hlášení o průběhu.

Použití Progress v režimu kontinuálního sledování

Postup můžete použít v režimu kontinuálního sledování v reálném čase pomocí volby -M (monitor).

V okně terminálu zadejte následující příkaz:

progress -M

progress bude hlásit, že nejsou spuštěny žádné příkazy pro sledování. Ale nebudete vráceni do příkazového řádku. progress čeká na spuštění příkazu, který může monitorovat. Poté o něm automaticky začne hlásit.

V jiném okně terminálu zadejte příkaz, který je v seznamu příkazů, které lze sledovat.

Použijeme kočku. Příkazy, které skončí příliš rychle, se nezaregistrují s postupem, takže vypíšeme obsah velmi dlouhého textového souboru.

cat words.page

V okně terminálu s průběhem uvidíte statistiky pro příkaz cat, jak se provádí a pracuje směrem k dokončení.

Když cat dokončí výpis, průběh souboru se vrátí do stavu čekání.

Pokaždé, když některý z příkazů, o kterých může hlásit, provede rozsáhlý úkol, pokrok jej bude automaticky sledovat a podávat o něm zprávy.

To je pěkné.

100% dokončeno

Odstraňte dohady a přemýšlejte o tom, jak si vede dlouhotrvající příkaz, a dejte si pauzu od rozjímání o kurzoru pomocí pv a pokroku.