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

Místo toho, abyste pracovali „naslepo“, využijte nástroje jako pv a progress v Linuxu pro sledování průběhu vašich příkazů. Tyto nástroje vám poskytnou vizuální zpětnou vazbu o tom, jak se vaše příkazy provádějí, a to i u těch, které obvykle žádnou zpětnou vazbu nenabízejí. Dokonce získáte i odhadovaný čas dokončení.

Představte si dlouhý let bez obrazovky s informacemi o letu. Víte, kdy jste vzlétli a jak dlouho má let trvat, ale nemáte žádný přehled o tom, jestli jste na správné trase, zda máte zpoždění nebo naopak. Obvykle, pokud nechcete sledovat film, můžete přepnout na mapu a sledovat aktuální polohu letadla, včetně statistik jako je odhadovaný čas příletu (ETA). Je to užitečné a uklidňující, že?

Spuštění příkazu v terminálu může být občas podobné letu bez obrazovky. Nemáte žádnou informaci, zda vše probíhá hladce, jestli proces nezamrzl nebo jak blízko je ke konci. Blikající kurzor v tomto ohledu moc neřekne.

Právě zde přichází na řadu pv a progress. Poskytují vám vizuální zpětnou vazbu a statistiky o prováděných procesech. Můžete vidět, jak daleko proces je a dokonce získat i odhadovaný čas do jeho dokončení. Oproti sledování jen blikajícího kurzoru je to velký skok vpřed.

Instalace pv

Nejdříve je třeba nainstalovat nástroj pv.

Pro instalaci na Ubuntu použijte následující příkaz:

sudo apt-get install pv

Pro instalaci na Fedoru použijte tento příkaz:

sudo dnf install pv

Pro instalaci na Manjaro použijte tento příkaz:

sudo pacman -Syu pv

Použití pv

pv, neboli „pipe viewer“ (prohlížeč roury), potřebuje být zapojen do nějakého příkazu. Ukažme si to na příkladu, kdy komprimujeme ISO obraz pomocí zipu.

Pro názornost byly soubory pro demonstraci v tomto článku uloženy na starém a pomalém externím USB disku s názvem SILVERXHD.

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

Zleva doprava vidíme:

Dosud přenesená data.
Uplynulý čas.
Aktuální rychlost přenosu.
Ukazatel průběhu a procento dokončení.
Odhadovaný čas zbývající do dokončení (ETA).

Kopírování souborů s pv

Pro kopírování souboru 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 takto zobrazenu zprávu o průběhu.

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

Pro kopírování více souborů a adresářů s využitím pv, musíme použít malý trik. Pro přesun souborů použijeme nástroj tar.

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

Část příkazu tar -c help-files/ říká nástroji tar, aby vytvořil archiv souborů v adresáři help-files. Tento výstup je předán přes pv, díky čemuž získáme zobrazení průběhu. Poté je výstup předán zpět do tar, kde se archiv rozbalí (-x) a adresář se změní (-C) na Documents.

Takže soubory a adresáře z help-files se zkopírují do Documents za současného zobrazování průběhu.

Výstup se malinko liší. Nezískáme odhadovaný čas dokončení. Místo toho vidíme pohyblivý ukazatel průběhu, který signalizuje, že proces běží, ale nedoplňuje se postupně zleva doprava jako tradiční ukazatel. Je to způsobeno tím, že pv je limitován informacemi, které může získat z daného procesu.

Použití pv a tar pro tvorbu archivu

Kopírování souborů pomocí pv a tar nám nevytvoří archivní soubor. Vytvoří se pouze jakýsi „virtuální“ archiv, který se hned předá do tar k extrakci souborů. Pokud je naším cílem kopírovat soubory, je to v pořádku. Ale co když chceme skutečný archivní soubor?

I tak můžeme použít tar pro tvorbu archivu a pv pro zobrazení průběhu. Možnosti, které s tar použijeme, jsou -c (vytvořit archiv), -z (komprimovat pomocí gzip) a -f (název archivního souboru).

Všimněte si, že jako název souboru používáme -. To způsobí, že tar použije standardní výstup (stdout) a zapíše výstup do okna terminálu. Tento výstup neuvidíme, protože ho předáváme do pv.

Skutečný název archivu bude název souboru, do kterého předáme výstup z pv. V tomto případě to bude help-files.tgz.

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

Možnosti zobrazení pv

pv nabízí řadu možností pro úpravu zobrazení zprávy o průběhu.

Pokud použijete některou z těchto možností, všechny ostatní se vypnou. Pokud tedy chcete použít více možností najednou, musíte je všechny zadat.

Použití pv bez jakýchkoliv voleb je ekvivalentní použití voleb -pterb.

-p: Zobrazí procento dokončení. Jedná se o ukazatel a procento dokončení.
-t: Zobrazí uplynulý čas.
-e: Zobrazí odhadovaný čas do dokončení (ETA).
-r: Zobrazí rychlost přenosu dat.
-b: Zobrazí počet přenesených bajtů (celková velikost).
-n: Zobrazí procento jako celé číslo. Vytiskne procento dokončení jako celé číslo s každou novou aktualizací na nový řádek.

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

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

Použití pv s wc

Můžeme použít pv pro předání textového souboru (nebo souborů) do nástroje wc. wc spočítá počty řádků, znaků a slov, a pv nám k tomu poskytne zobrazení průběhu.

Zde přesměrujeme všechny soubory s příponou .page v adresáři help-files do wc.

pv help-files/*.page | wc

Po dokončení wc uvidíme počty řádků, znaků a slov ze všech souborů .page v adresáři help-files.

Instalace příkazu progress

Příkaz progress poskytuje stejný typ užitečných informací jako pv, ale funguje s vybranou sadou linuxových příkazů.

Pro instalaci na Ubuntu použijte tento příkaz:

sudo apt-get install progress

Pro instalaci na Fedoru použijte tento příkaz:

sudo dnf install progress

Pro instalaci na Manjaro použijte tento příkaz:

sudo pacman -Syu progress

Se kterými příkazy progress pracuje

Po zadání příkazu progress do terminálu a stisknutí klávesy Enter se zobrazí seznam příkazů, se kterými progress pracuje.

progress

Použití progress s rourami

Existují dvě techniky, které můžeme použít pro sledování průběhu. První z nich je použití rour.

Příkaz tar je v seznamu podporovaných příkazů, proto jej využijeme.

Použijeme standardní možnosti -c (vytvořit archiv), -z (komprimovat pomocí gzip) a -f (název souboru). Vytvoříme tedy komprimovaný archiv všeho z adresáře help-files a archiv se bude jmenovat help.tgz.

Výstup předáme do progress s volbou -m (monitor), která zajistí, že progress bude sledovat proces až do jeho dokončení.

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

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

Každý soubor je uveden během zpracování a zobrazuje se u něj následující informace:

ID procesu.
Název procesu.
Procento dokončení.
Zpracovaná data a celková velikost souboru.
Rychlost přenosu dat (propustnost).
Odhadovaný zbývající čas (ETA).

Možná vás překvapí, že se zobrazují dvě datové sady. První je pro tar. Druhá je pro gzip. tar volá gzip, aby provedl kompresi. Jelikož je gzip v seznamu podporovaných příkazů, progress zobrazuje informace i o něm.

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

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

Zadejte do terminálu následující příkaz:

progress -M

progress zobrazí informaci, že nejsou spuštěny žádné příkazy ke sledování. Ale nebudete vráceni do příkazového řádku. progress čeká na spuštění monitorovaného příkazu. Jakmile je takový příkaz spuštěn, začne automaticky podávat zprávy.

V jiném terminálovém okně zadejte příkaz, který se nachází v seznamu monitorovatelných příkazů.

Použijeme příkaz cat. Příkazy, které skončí příliš rychle, progress nezaregistruje, proto vypíšeme obsah velmi dlouhého textového souboru.

cat words.page

V terminálovém okně s progress uvidíte statistiky příkazu cat během jeho provádění.

Po dokončení výpisu příkazem cat se progress vrátí do stavu čekání.

Pokaždé, když některý z monitorovatelných příkazů vykonává časově náročnější úlohu, progress ho automaticky začne sledovat a podávat o něm zprávy.

To je praktické.

Závěrem

Zbavte se dohadů a spekulací o tom, jak dlouho bude trvat provádění vašich příkazů. Využijte nástroje pv a progress a odpočiňte si od hypnotického sledování blikajícího kurzoru.