Quando estamos executando comandos no Linux que podem demorar, como um backup, uma cópia, comprimir um arquivo e mover dados de um lado para o outro, pode ser muito útil saber quanto tempo esse processo tomou, qual é o consumo em MiB/s, ou até uma barra de progresso para entender quanto falta para ele finalizar.

Vamos aprender então a usar o comando PV.

Definição

PV – Pipe Viewer – é uma ferramenta baseada em terminal para monitorar o andamento dos dados por meio de um pipeline. Ele pode ser inserido em qualquer pipeline entre dois processos para dar uma indicação visual de quão rápido os dados estão passando, quanto tempo demorou, quão perto está de sua conclusão e uma estimativa do prazo para terminar.

Essa é a definição literal da ferramenta descrita pelo seu autor Andrew Wood. Uma lista completa dos seus comandos e outras informações sobre licenças podem ser encontradas diretamente em seus man pages.

Visualmente ela apresenta:

  • O tempo consumido
  • A porcentagem decorrida e uma barra de progresso
  • Taxa de transferência
  • Total de dados transferidos
  • ETA (estimated time of arrival): tempo estimado

Instalando o comando

Por padrão, ele não vem instalado na maioria dos sistemas.

Fedora, CentOS e RHEL

sudo yum install pv

Debian, Ubuntu e derivados

sudo apt-get install pv

Usando o PV

Utilizaremos o PV com outros programas, pois não é possível monitorar um processo já em execução. Ele será colocado em um pipeline entre dois processos.

Veja um exemplo da sintaxe do comando:

pv arquivo
pv opcoes arquivo
pv arquivo > resultado.txt
pv opcoes | comando > arquivo.txt
comando | pv  | comando2

Confira algumas opções do PV, que são divididas em quatro categorias: "display switches", "output modifiers", "data transfer modifiers" e "general options". Vejamos duas delas.

Display Switches

  • Ativar a barra de progresso: -p
  • Ver o tempo consumido: -t
  • Ver o tempo estimado: -e
  • Calcular a velocidade de transferência: -r
  • Total de bytes transferidos: -b
  • Exibir em porcentagem o progresso: -n

Output Modifiers

  • Aguardar até que a transferência inicie para exibir o progresso: -W
  • Para presumir corretamente o total de bytes transferidos ao calcular o ETA: -s TAMANHO
  • Especificar intervalo de atualização em segundos: -i SEGUNDOS

Use o -v e -h para versão e ajuda do comando.

Exemplos de uso do comando PV

Quando nenhuma opção é definida, o comando PV por padrão roda com os parâmetros: -p -t -e -r -b.

Para o nosso exemplo, vamos criar um arquivo de 1G:

dd if=/dev/zero of=arquivo bs=1M count=1000

Agora copiaremos o "arquivo" para o /tmp/. Rode o comando abaixo:

pv arquivo > /tmp/arquivo

Utilizaremos o comando tar para monitorar o progresso de um backup.

tar -czf - arquivo | (pv -p --timer --rate --bytes > arquivo.tgz)

Por último, usaremos o PV e o dialog, que é uma ferramenta de terminal, para criar uma caixa de diálogo com uma barra de progresso.

tar -czf - arquivo | (pv -n > arquivo.tgz) 2>&1 | dialog --gauge "Progresso" 10 70

Conclusão

Esta ferramenta é muito útil no console quando você utiliza com outros comandos que não são capazes de monitorar o progresso de uma operação.

Espero que o artigo tenha sido útil para você. Alguma ideia para o uso do comando PV ou ocorreu algum erro ao usá-lo? Conte para nós.