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

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

Prompt de terminal Linux em um laptop

Em vez de ficar cego, use o Linux pv e progress comandos para acompanhar o progresso de um comando. Esses utilitários oferecem barras de progresso para comandos que normalmente não possuem nenhum. Você verá um tempo estimado até a conclusão também.

Se você estiver em um voo de longo curso em uma aeronavesem telas de vídeo nas costas do banco, não é fácil saber até que ponto você está na sua jornada. Você sabe quando decolou. Você sabe quanto tempo o vôo deve levar. Mas como você sabe se está no caminho certo, no prazo ou muito atrasado? Se você não quiser assistir ao filme a bordo, geralmente pode mudar a tela do seu vídeo para mostrar um mapa com a posição da sua aeronave. Você também recebe algumas estatísticas, como uma hora prevista de chegada (ETA), o que é ótimo.

Iniciar um comando a partir da janela do terminal podeàs vezes parece um voo de longo curso sem uma tela de vídeo. Você não tem nada para dar qualquer indicação se tudo está bem ou se o processo foi interrompido, nem o quão perto está da conclusão. Um cursor piscante não é muito informativo.

o pv e progress comandos fornecem algumas estatísticas e um poucofeedback visual. Você pode ver o quão perto o processo está para ser concluído. Isso significa que você recebe um ETA para seus processos em execução. Comparado com o olhar fixo em um cursor, isso ganha as mãos para baixo.

Instalando PV

Você deve instalar pv.

Para instalar pv no Ubuntu, use este comando:

sudo apt-get install pv

sudo apt-get install pv em uma janela de terminal

Para instalar pv no Fedora use este comando:

sudo dnf install pv

sudo dnf install pv em uma janela do terminal

Para instalar pv no Manjaro, use este comando:

sudo pacman -Syu pv

sudo pacman -Syu pv em uma janela de terminal

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 transmitindo uma imagem ISO através zip para criar um arquivo zip compactado da ISO.

Para diminuir a velocidade dos comandos o suficiente para que uma captura de tela possa ser capturada, alguns dos arquivos dos exemplos usados ​​neste 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 do terminal

A informação pv nos dá pode ser visto na linha inferior da tela.

saída pv para criar um arquivo zip em uma janela do terminal

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

  • Os dados transferidos até o momento.
  • O tempo passou até agora.
  • 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

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 à medida que o arquivo é copiado.

copiando um arquivo com pv em uma janela do terminal te

Copiando vários arquivos com pv

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

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

arquivos de ajuda tar -c / | pv tar -x -C Documents / em uma janela de terminal

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

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

copiando arquivos com pv e tar em uma janela de terminal

A saída é um pouco diferente desta vez.

Nós não temos um ETA. A barra de progresso agora exibe um indicador em movimento. Isso mostra que o processo está ativo, mas não cresce da esquerda para a direita como uma barra de progresso tradicional. pv limita-se a exibir as informações que podem ser extraídas do processo que está sendo canalizado.

Usando pv e tar para criar um arquivo

Copiando arquivos com pv e tar não nos deixa com um arquivo morto. Uma espécie de arquivo "virtual" é criada por tar, que é alimentado diretamente de volta tar para extrair os arquivos. Se nosso objetivo é copiar arquivos, isso é realizado. Mas e se quisermos criar um arquivo morto?

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

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

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

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

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

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

saída de alcatrão e PV em uma janela de terminal

RELACIONADOS: 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 do seu relatório.

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

Usando pv sem nenhuma opção é o mesmo que usar o -pterb opções

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

Vamos repetir o último comando e passar 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. pv fornece apenas o elemento de porcentagem concluída.

Porque pv não obtém uma porcentagem concluída de tar, a barra de progresso é substituída por um indicador em movimento. Não há percentual.

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

Usando pv com wc

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

Aqui estamos direcionando todos os arquivos ".page" no diretório de arquivos de ajuda para wc.

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

Quando wc Ao concluir, 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 progress

o progress O comando 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 progress

sudo apt-get install progresso em uma janela de terminal

Para instalar progress no Fedora, use este comando:

sudo dnf install progress

sudo dnf instala progresso em uma viúva terminal

Para instalar progress no Manjaro, use este comando:

sudo pacman -Syu progress

sudo pacman -Syu progride em uma janela de terminal

O progresso dos comandos trabalha com

Digitando progress em uma janela do terminal e pressionar Enter, fornecerá uma lista dos comandos que progress funciona com.

progress

saída do comando progress em uma janela do terminal

Usando o progresso com tubulações

Existem duas técnicas que podemos usar para monitorar comandos com progress. O primeiro é usar canos.

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

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

Estamos colocando isso em progress e usando o -m opção (monitor) para progress mantém relatórios sobre o processo até sua conclusão.

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

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

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

comando de progresso que monitora o 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. tar chamadas gzip para executar a compactação. Porque gzip está na lista de comandos suportados, progress relatórios sobre isso.

Usando o progresso no modo de monitor contínuo

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

Digite o seguinte comando em uma janela de terminal:

progress -M

progress -M em uma janela de terminal

progress relatará que não há comandos em execução para monitorar. Mas você não retornou à linha de comando. progress aguarda até que um comando que ele possa monitorar seja iniciado. Ele começará automaticamente a relatar sobre ele.

progresso aguardando o início de um comando em uma janela do terminal

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 terminados com muita rapidez não serão registrados progress, então listaremos o conteúdo de um arquivo de texto muito longo.

cat words.page

cat words.page em uma janela do terminal

Na janela do terminal com progress nele, você verá estatísticas para o cat comando enquanto ele executa e trabalha para a conclusão.

relatórios de progresso no gato em uma janela do terminal

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

Cada vez que um dos comandos sobre os quais ele pode relatar realiza uma tarefa considerável, progress irá monitorá-lo automaticamente e informar sobre ele.

Isso é bem legal.

100% concluído

Evite adivinhar o que está acontecendo com um comando de longa duração e faça uma pausa em contemplar o cursor com pv e progress .