Como monitorar o progresso dos comandos do Linux (com pv e progresso)

Publicados: 2022-01-29
Prompt de terminal Linux em um laptop
Fatmawati Achmad Zaenuri/Shutterstock.com

Em vez de voar às cegas, use os comandos Linux pv e progress para rastrear o progresso de um comando. Esses utilitários fornecerão barras de progresso para comandos que normalmente não possuem nenhuma. Você também verá um tempo estimado até a conclusão.

Se você estiver em um voo de longo curso em uma aeronave sem telas de vídeo nos encostos dos assentos, não é fácil saber a que distância você está durante a viagem. Você sabe quando você decolou. Você sabe quanto tempo o voo deve demorar. Mas como você sabe se está no caminho certo, no prazo ou muito atrasado? Se você não quiser assistir ao filme durante o voo, geralmente pode alternar a tela do vídeo para mostrar um mapa com a posição de sua aeronave. Você também obtém algumas estatísticas, como uma hora prevista de chegada (ETA), o que é ótimo.

Iniciar um comando a partir da janela do terminal às vezes pode parecer um voo de longa distância sem uma tela de vídeo. Você não tem nada para dar qualquer indicação se tudo está bem ou se o processo travou, nem quão perto da conclusão está. Um cursor piscando não é muito informativo.

Os comandos pv e progress fornecem algumas estatísticas e um pequeno feedback visual. Você pode ver o quão perto o processo está para ser concluído. Isso significa que você obtém um ETA para seus processos em execução. Comparado com olhar para um cursor, isso ganha sem dúvida.

Instalando pv

Você deve instalar pv .

Para instalar o pv no Ubuntu use este comando:

 sudo apt-get install pv 

Para instalar pv no Fedora use este comando:

 sudo dnf instalar pv 

Para instalar pv no Manjaro use este comando:

 sudo pacman -Syu pv 

Usando pv

pv significa visualizador de tubos. A tubulação deve estar envolvida no comando em algum lugar. Aqui está um exemplo em que estamos canalizando uma imagem ISO através do zip para criar um arquivo zip compactado do ISO.

Propaganda

Para diminuir a velocidade dos comandos o suficiente para que uma captura de tela pudesse ser feita, alguns dos arquivos nos exemplos usados ​​para este artigo foram armazenados em um USB antigo e lento chamado SILVERXHD.

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

A informação que o pv nos dá pode ser vista na linha inferior do display.

Da esquerda para a direita, as informações exibidas são:

  • Os dados transferidos até agora.
  • O tempo passou longe.
  • A taxa de transferência de dados (taxa de transferência).
  • Uma barra de progresso e uma porcentagem concluída.
  • O tempo estimado restante antes da conclusão (ETA).

Copiando um arquivo com pv

Para copiar um arquivo com saída de pv , use este comando:

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

Recebemos um relatório de progresso à medida que o arquivo é copiado.

copiando um arquivo com pv em uma janela de terminal te

Copiando vários arquivos com pv

Para copiar vários arquivos e pastas com pv , precisamos usar um pequeno truque. Usamos tar para mover os arquivos para nós.

 tar -c arquivos de ajuda/ | pv | tar -x -C Documentos/ 

Propaganda

A parte tar -c help-files/ do comando instrui o tar a criar ( -c ) um arquivo dos arquivos na pasta help-files. Isso é canalizado através do pv para que tenhamos uma exibição do progresso. Ele é então canalizado de volta para o tar para a última parte do comando. O arquivo é extraído ( -x ) e o diretório é alterado ( -C ) para Documentos antes da extração.

Assim, os arquivos e pastas que estão nos arquivos de ajuda são copiados para a pasta Documentos, com uma exibição de progresso.

A saída é um pouco diferente desta vez.

Não recebemos um ETA. A barra de progresso agora exibe um indicador em movimento. Mostra que o processo está ativo, mas não cresce da esquerda para a direita como uma barra de progresso tradicional. pv está limitado a exibir as informações que pode extrair do processo que está sendo canalizado.

Usando pv e tar para criar um arquivo

Copiar arquivos com pv e tar não nos deixa com um arquivo. Uma espécie de arquivo “virtual” é criado pelo tar , que é alimentado diretamente no tar para extrair os arquivos. Se nosso objetivo é copiar arquivos, isso está feito. Mas e se quisermos criar um arquivo compactado?

Ainda podemos usar o tar para criar um arquivo e obter um relatório de progresso do pv . As opções usadas com tar são -c (criar arquivo), -z (compactar com gzip) e -f (nome do arquivo do arquivo).

Observe que estamos usando - como o nome do arquivo, o que faz com que o tar use stdout e grave sua saída na janela do terminal. Não vemos essa saída porque ela é canalizada através de pv .

Propaganda

O nome real do arquivo será o nome do arquivo para o qual canalizamos a saída do pv . Neste caso, é “help-files.tgz”.

 tar -czf - ./help-files/ | pv > arquivos de ajuda.tgz 

Obtemos os mesmos indicadores de progresso de antes e o arquivo é criado para nós.

RELACIONADO: Como compactar e extrair arquivos usando o comando tar no Linux

As opções de exibição pv

Existem várias opções que você pode usar com pv para alterar os detalhes de seu relatório.

Se você usar qualquer uma dessas opções, todas as outras opções serão desativadas. Portanto, se você quiser ter três das opções de exibição em uso, precisará especificar essas três opções.

Usar pv sem nenhuma opção é o mesmo que usar as opções -pterb .

  • -p : exibe a porcentagem concluída. Esta é a barra de progresso e a porcentagem concluída.
  • -t : exibe o tempo decorrido.
  • -e : exibe o ETA .
  • -r : exibe a taxa de transferência de dados.
  • -b : exibe a contagem de bytes (dados transferidos até o momento).
  • -n : exibe a porcentagem como um inteiro . Isso imprime a porcentagem concluída como um número inteiro, com cada nova atualização em uma nova linha.

Vamos repetir o último comando e passar a opção -p (porcentagem concluída) para pv .

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

Propaganda

Isso desativa todas as outras opções de exibição. pv fornece apenas o elemento de porcentagem concluída.

Como pv não obtém uma porcentagem concluída de tar , a barra de progresso é substituída por um indicador móvel. Não há valor percentual.

Usando pv Com wc

Podemos usar pv para canalizar um arquivo de texto (ou arquivos) para wc . wc então contará os retornos de carro, caracteres e palavras e pv nos dará um relatório de progresso.

Aqui estamos canalizando todos os arquivos “.page” no diretório help-files para wc .

Quando o wc concluído, podemos ver nossa contagem de retornos de carro (linhas), caracteres e palavras de todos os arquivos “.page” na pasta de arquivos de ajuda.

Instalando o comando progress

O comando progress fornece o mesmo tipo de informação útil que pv , mas funciona com um conjunto específico de comandos do Linux.

Para instalar progress no Ubuntu, use este comando:

 sudo apt-get install progresso 

Para instalar progress no Fedora, use este comando:

 progresso da instalação sudo dnf 

sudo dnf install progresso em uma janela de terminal

Para instalar progress no Manjaro, use este comando:

 sudo pacman -Syu progresso 

O progresso dos comandos trabalha com

Digitar progress em uma janela de terminal e pressionar Enter fornecerá uma lista dos comandos com os quais o progress funciona.

 progresso 

Usando o Progress com Pipes

Existem duas técnicas que podemos usar para monitorar comandos com progress . A primeira é usar tubos.

O comando tar está na lista de comandos suportados que o progress pode monitorar, então vamos usar tar .

As opções que usaremos são as opções padrão -c (criar arquivo), -z (compactar com gzip) e -f (nome do arquivo). Vamos criar um arquivo compactado de tudo na pasta de arquivos de ajuda, e o arquivo será nomeado “help.tgz”.

Estamos canalizando isso para o progress e usando a opção -m (monitor) para que o progress continue relatando o processo até que ele seja concluído.

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

A janela do terminal mostrará o progresso do comando tar enquanto cria o arquivo.

Propaganda

À medida que cada arquivo é processado, ele é listado com as seguintes informações:

  • A identificação do processo.
  • O nome do processo.
  • Porcentagem concluída.
  • Dados processados ​​e tamanho total do arquivo.
  • Taxa de dados (taxa de transferência).
  • Tempo restante estimado (ETA).

Você pode se surpreender ao ver um segundo conjunto de dados aparecer. Este primeiro conjunto de dados é para tar . O segundo é para gzip . tar chama o gzip para realizar a compactação. Como o gzip está na lista de comandos suportados, progress informa sobre ele.

Usando o Progresso no Modo de Monitoramento Contínuo

Você pode usar progress em um modo de monitor contínuo em tempo real usando a opção -M (monitor).

Digite o seguinte comando em uma janela de terminal:

 progresso -M 

progress informará que não há comandos em execução para monitorar. Mas você não retorna à linha de comando. progress espera até que um comando que ele possa monitorar seja iniciado. Em seguida, ele começará a relatar automaticamente.

Em outra janela do terminal, digite um comando que esteja na lista de comandos que o progresso pode monitorar.

Nós vamos usar cat . Comandos que terminam muito rápido não serão registrados com progress , então listaremos o conteúdo de um arquivo de texto muito longo.

 palavras de gato.page 

Propaganda

Na janela do terminal com progress , você verá estatísticas para o comando cat enquanto ele é executado e trabalha para ser concluído.

Quando cat termina de listar o progress do arquivo retorna ao seu estado de espera.

Cada vez que um dos comandos sobre os quais ele pode reportar executa uma tarefa considerável, o progress irá monitorá-lo automaticamente e reportá-lo.

Isso é muito legal.

100% concluído

Elimine as suposições de se perguntar como um comando de longa duração está se saindo e faça uma pausa ao contemplar seu cursor com pv e progress .

RELACIONADO: Melhores laptops Linux para desenvolvedores e entusiastas