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.