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

Prompt de terminal Linux em um laptop
Fatmawati Achmad Zaenuri / Shutterstock.com

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

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

Iniciar um comando a partir da janela do terminal pode às vezes parecer um vôo 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 o quão perto de sua conclusão está. Um cursor piscando não é muito informativo.

Os comandos pve progressfornecem 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 vence com facilidade.

Instalando PV

Você deve instalar pv.

Para instalar pvno Ubuntu, use este comando:

sudo apt-get install pv

sudo apt-get install pv em uma janela de terminal

Para instalar pvno Fedora, use este comando:

sudo dnf install PV

sudo dnf instalar pv em uma janela de terminal

Para instalar pvno Manjaro, use este comando:

sudo pacman -Syu pv

sudo pacman -Syu pv em uma janela de terminal

Usando pv

pvsignifica 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 zippara fazer um arquivo zip compactado do ISO.

Recomendado:  Como adicionar dados à tela Hoje do aplicativo de saúde no iPhone

Para tornar os comandos mais lentos 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 externo antigo e lento chamado 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 em uma janela de terminal

As informações fornecidas pvpodem ser vistas na linha inferior do visor.

Saída pv para criar um arquivo zip em uma janela de terminal

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

  • Os dados foram transferidos até agora.
  • O tempo passou até agora.
  • A taxa de transferência de dados (throughput).
  • Uma barra de progresso e uma figura de 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

pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso |  gparted.iso em uma janela de terminal

Recebemos um relatório de progresso conforme 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 pv, precisamos usar um pequeno truque. Usamos tar para mover os arquivos para nós.

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

tar -c help-files / |  pv |  tar -x -C Documentos / em uma janela de terminal

A tar -c help-files/parte do comando instrui tara criar ( -c) um arquivo dos arquivos na pasta de arquivos de ajuda. Isso é canalizado pv para que tenhamos uma exibição do progresso. Em seguida, é canalizado de volta 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 do andamento.

copiando arquivos com pv e tar em uma janela de terminal

A saída é um pouco diferente desta vez.

Não recebemos um ETA. A barra de progresso agora exibe um indicador móvel. Mostra que o processo está ativo, mas não cresce da esquerda para a direita como uma barra de progresso tradicional. pvlimita-se 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 pve tarnão nos deixa com um arquivo morto. Uma espécie de arquivo “virtual” é criado por tar, que é alimentado de volta tarpara extrair os arquivos. Se nosso objetivo é copiar arquivos, está feito. Mas e se quisermos criar um arquivo morto?

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

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

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

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

tar -czf - ./help-files/ |  pv> help-files.tgz em uma janela de terminal

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

Recomendado:  Como limpar a porta de carregamento do seu iPhone

saída de tar e pv em uma janela de terminal

As opções de exibição pv

Existem várias opções que você pode usar pvpara 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 pvsem nenhuma opção é o mesmo que usar as -pterbopções.

  • -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é agora).
  • -n : exibe a porcentagem como um número 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

tar -czf - ./help-files/ |  pv - p> help-files.tgz em uma janela de terminal

Isso desativa todas as outras opções de exibição. pvfornece apenas o elemento de porcentagem concluído.

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

saída de PV e tar em uma janela de terminal

Usando pv com wc

Podemos usar pvpara enviar um arquivo de texto (ou arquivos) para wc. wcentão contará os retornos de carro, caracteres e palavras e pvnos dará um relatório de progresso.

Aqui estamos canalizando todos os arquivos “.page” do diretório de arquivos de ajuda para o wc.

pv ./help-files/*.page |  wc em uma janela de terminal

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

saída de PV e WC em uma janela de terminal

Instalando o Comando de progresso

O progresscomando dá o mesmo tipo de informações úteis como pv, mas funciona com um conjunto específico de comandos Linux.

Para instalar progressno Ubuntu, use este comando:

sudo apt-get install progresso

sudo apt-get install progresso em uma janela de terminal

Para instalar progressno Fedora, use este comando:

progresso da instalação do sudo dnf

sudo dnf instalar progresso em uma viúva de terminal

Para instalar progressno Manjaro, use este comando:

sudo pacman -Syu progress

sudo pacman -Syu progress em uma janela de terminal

O progresso de comandos funciona com

Digitar progressem uma janela de terminal e pressionar Enter fornecerá uma lista dos comandos com os quais progressfunciona.

progresso

saída do comando de progresso em uma janela de terminal

Usando Progress With Pipes

Existem duas técnicas que podemos usar para monitorar os comandos progress. A primeira é usar canos.

Recomendado:  Como usar o PayPal com iPhone e Mac App Store da Apple

O tarcomando está na lista de comandos suportados que progresspodem 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 progresse usando a -mopção (monitorar), portanto, progress continuamos relatando o processo até que ele seja concluído.

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

tar -czf help.tgz ./help-files/ |  progress -m em uma janela de terminal

A janela do terminal mostrará o progresso do tarcomando à medida que cria o arquivo.

comando de progresso monitorando tar em uma janela de terminal

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

  • O ID 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. tarchamadas gzippara realizar a compressão. Porque gzipestá na lista de comandos suportados, progressrelatórios sobre ele.

Usando o progresso no modo de monitoramento contínuo

Você pode usar progressem 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

progresso -M em uma janela de terminal

progressirá relatar que não há comandos em execução para monitorar. Mas você não voltou para a linha de comando. progress espera até que um comando que possa monitorar seja iniciado. Em seguida, ele começará a gerar relatórios sobre ele automaticamente.

progresso à espera de um comando para iniciar em uma janela de terminal

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

Nós vamos usar cat. Os comandos que terminam muito rapidamente não serão registrados com progress, portanto, listaremos o conteúdo de um arquivo de texto muito longo.

cat words.page

cat words.page em uma janela de terminal

Na janela do terminal com progressele, você verá as estatísticas do catcomando conforme ele é executado e funciona até a conclusão.

relatório de progresso do gato em uma janela de terminal

Ao catterminar a listagem, o arquivo  progressretorna ao estado de espera.

Cada vez que um dos comandos sobre os quais ele pode relatar executa uma tarefa considerável, progressele o monitora e relata automaticamente.

Isso é muito legal.

100% concluído

Elimine as suposições de se perguntar como está o desempenho de um comando de longa duração e pare de contemplar o cursor com pve progress.