Em vez de operar no escuro, utilize os comandos pv e progress no Linux para acompanhar o desenvolvimento de suas tarefas. Essas ferramentas adicionam barras de progresso a comandos que normalmente não as possuem, além de fornecer uma estimativa do tempo restante para conclusão.
Imagine estar em um voo longo, sem telas de entretenimento. É difícil saber exatamente onde você está. Você sabe a hora da decolagem e a duração total do voo, mas como saber se está no caminho certo? A menos que você mude a tela para mostrar o mapa de voo, com a posição atual e o tempo estimado de chegada, você fica sem informações.
Executar comandos no terminal pode ser parecido com voar sem mapa. Sem nenhuma indicação se o processo está funcionando corretamente, travou ou quão perto está de finalizar. Um cursor piscando não oferece muita informação.
Os comandos pv e progress mudam isso, fornecendo dados e feedback visual. Você pode ver o progresso e ter uma estimativa de quando a tarefa será concluída. Isso é muito melhor do que olhar para um cursor.
Instalação do PV
O primeiro passo é instalar o pv.
Para instalar o pv no Ubuntu, utilize:
sudo apt-get install pv
Para instalar no Fedora, utilize:
sudo dnf install pv
Para instalar no Manjaro, use o comando:
sudo pacman -Syu pv
Utilizando o pv
pv significa “pipe viewer” (visualizador de pipe). O comando deve envolver o uso de pipes em algum ponto. Veja um exemplo de como usar para comprimir uma imagem ISO com zip:
Para que os comandos fossem lentos o suficiente para capturas de tela, alguns arquivos usados neste artigo foram armazenados em um antigo USB externo, chamado SILVERXHD.
pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso | zip > gparted.zip
As informações exibidas pelo pv aparecem na parte inferior da tela.
As informações exibidas, da esquerda para a direita, são:
Total de dados transferidos até o momento.
Tempo decorrido.
Velocidade de transferência de dados.
Barra de progresso e porcentagem concluída.
Tempo restante estimado (ETA).
Copiando um arquivo com pv
Para copiar um arquivo utilizando a saída do pv, use:
pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso > gparted.iso
O progresso da cópia é exibido na tela.
Copiando múltiplos arquivos com pv
Para copiar múltiplos arquivos e pastas com o pv, é necessário um truque. Utilizamos o tar para mover os arquivos.
tar -c help-files/ | pv | tar -x -C Documents/
O comando tar -c help-files/ instrui o tar a criar um arquivo com os conteúdos da pasta help-files. Essa saída é enviada para o pv para monitoramento do progresso. Em seguida, é enviada para o tar novamente. O arquivo é extraído (-x) e o diretório é alterado (-C) para Documents antes da extração.
Dessa forma, os arquivos e pastas dentro de help-files são copiados para a pasta Documents com uma indicação de progresso.
A saída é um pouco diferente desta vez.
Não recebemos uma ETA. A barra de progresso agora mostra um indicador em movimento, mostrando que o processo está ativo, mas não como uma barra de progresso tradicional. O pv mostra as informações que pode obter do processo.
Utilizando pv e tar para criar um arquivo
Copiar arquivos com pv e tar não cria um arquivo comprimido. O tar cria um tipo de arquivo “virtual”, que é alimentado diretamente no tar para extração. Isso funciona se o objetivo é copiar arquivos, mas e se o objetivo é criar um arquivo morto?
Ainda é possível usar o tar para criar um arquivo comprimido e obter um relatório de progresso do pv. Usamos as opções -c (criar arquivo), -z (comprimir com gzip) e -f (nome do arquivo).
Usamos – como o nome do arquivo para que o tar envie a saída para o stdout (saída padrão). Não vemos a saída pois ela é enviada para o pv.
O nome real do arquivo será o nome do arquivo para o qual enviamos a saída do pv. Neste exemplo, é “help-files.tgz”.
tar -czf - ./help-files/ | pv > help-files.tgz
Obtemos o mesmo indicador de progresso, e o arquivo é criado para nós.
Opções de exibição do pv
Existem diversas opções que podem ser usadas com o pv para personalizar os detalhes do relatório.
Ao usar qualquer uma dessas opções, as outras serão desativadas. É necessário especificar todas as opções que você deseja usar.
Utilizar o pv sem opções é o mesmo que usar as opções -pterb.
-p: exibe a porcentagem concluída (barra de progresso e porcentagem).
-t: exibe o tempo decorrido.
-e: exibe a ETA.
-r: exibe a taxa de transferência de dados.
-b: exibe o número de bytes transferidos.
-n: exibe a porcentagem como um número inteiro, com cada atualização em uma nova linha.
Vamos repetir o último comando, passando a opção -p (porcentagem concluída) para o pv.
tar -czf - ./help-files/ | pv -p > help-files.tgz
Isso desativa as outras opções de exibição, mostrando somente a porcentagem concluída.
Como o pv não recebe um valor de porcentagem concluída do tar, a barra de progresso é substituída por um indicador móvel, sem um valor percentual.
Usando o pv com wc
É possível enviar a saída de um arquivo de texto para o wc usando o pv. O wc contará linhas, caracteres e palavras, e o pv dará um relatório de progresso.
Neste caso, enviamos todos os arquivos “.page” da pasta help-files para o wc.
Após a conclusão do wc, a contagem de linhas, caracteres e palavras de todos os arquivos “.page” é mostrada na tela.
Instalação do comando progress
O comando progress oferece informações similares ao pv, mas funciona com um conjunto específico de comandos do Linux.
Para instalar no Ubuntu, use:
sudo apt-get install progress
Para instalar no Fedora, use:
sudo dnf install progress
Para instalar no Manjaro, use:
sudo pacman -Syu progress
Comandos compatíveis com progress
Digite progress em uma janela de terminal e pressione Enter para ver a lista de comandos que ele monitora.
progress
Usando progress com pipes
Existem duas formas de monitorar comandos com o progress. A primeira é com pipes.
O comando tar está na lista de comandos suportados, então vamos usá-lo.
Vamos criar um arquivo comprimido de tudo na pasta help-files, com o nome “help.tgz”, usando as opções -c (criar arquivo), -z (comprimir com gzip) e -f (nome do arquivo).
A saída é enviada para o progress, usando a opção -m (monitorar), para que ele continue relatando o progresso até a conclusão.
tar -czf help.tgz ./help-files/ | progress -m
O terminal mostrará o progresso do comando tar enquanto ele cria o arquivo.
Para cada arquivo processado, são exibidas as seguintes informações:
ID do processo.
Nome do processo.
Porcentagem concluída.
Dados processados e tamanho total do arquivo.
Taxa de dados (velocidade de transferência).
Tempo restante estimado (ETA).
Você pode se surpreender ao ver dois conjuntos de dados. O primeiro é para o tar e o segundo é para o gzip, que é chamado pelo tar para realizar a compressão. Como o gzip também está na lista de comandos monitorados, o progresso mostra relatórios sobre ele.
Usando progress em modo de monitoramento contínuo
O progress pode ser utilizado em um modo de monitoramento contínuo, em tempo real, utilizando a opção -M (monitor).
Digite o comando a seguir no terminal:
progress -M
O progress irá relatar que não há comandos em execução para monitorar, mas não voltará para a linha de comando. Ele ficará aguardando até que um comando que ele pode monitorar seja iniciado. Então ele começará a exibir informações automaticamente.
Em outro terminal, digite um comando que esteja na lista de monitoramento do progress.
Vamos usar o cat. Comandos que terminam muito rapidamente não serão registrados, portanto, vamos exibir o conteúdo de um arquivo de texto grande.
cat words.page
Na janela do terminal com o progress, serão mostradas as estatísticas do comando cat durante a sua execução.
Quando o cat terminar de exibir o conteúdo, o progress volta ao estado de espera.
Sempre que um dos comandos que ele monitora executar uma tarefa relevante, o progress irá monitorar e exibir informações automaticamente.
É bem útil!
100% concluído
Elimine as incertezas sobre o desempenho de seus comandos longos, e deixe de olhar para o cursor. Utilize o pv e o progress.