Guia de tecnologias

Monitorar progresso de cópias e transferências no Linux com pv e progress

7 min read Linux Atualizado 07 Oct 2025
pv vs progress: barras de progresso no terminal
pv vs progress: barras de progresso no terminal

Por que isso importa

Copiar arquivos grandes pelo terminal pode parecer que “parou” mesmo quando o sistema está trabalhando. Em interfaces gráficas vemos uma barra de progresso; no terminal, pv e progress servem para preencher essa lacuna. Eles mostram tempo decorrido, taxa de transferência, total movido e ETA, tornando operações longas previsíveis e menos estressantes.

Importante: todos os comandos e exemplos foram testados em distribuições Debian/Ubuntu. Preserve privilégios e paths originais ao executar exemplos.

Sumário rápido

  • pv: monitora dados que passam por um pipe. Requer inserir pv na cadeia de comandos. Útil em pipes, compressão e redirecionamentos.
  • progress: monitora processos já em execução (especialmente utilitários do coreutils como cp, mv, dd, tar). Não exige modificar o comando original.

pv: monitorando fluxos via pipe

O utilitário pv (pipe viewer) monitora o fluxo de dados através de um pipe. Ele mostra informações como tempo decorrido, barra de progresso, taxa atual, total transferido e ETA. A ideia é simples: coloque pv entre dois processos e ele passará os bytes adiante enquanto imprime o progresso no stderr.

Instalação (Debian/Ubuntu):

sudo apt-get install pv

Exemplo básico — copiar arquivos e comprimir com gzip enquanto vê o progresso:

pv -p /media/himanshu/1AC2-A8E3/Maldives-2016/* | gzip > ./Desktop/trip-pictures.gz

Explicação rápida dos switches úteis do pv:

  • -p : mostra apenas a barra de progresso
  • -t : mostra o tempo decorrido
  • -e : mostra ETA (tempo estimado restante)
  • -r : mostra a taxa de transferência atual
  • -L : limita a taxa (ex: -L 5m = ~5 MiB/s)
  • -s : informa o tamanho total (útil para porcentagem correta quando pv não consegue inferir)
  • -W ou –wait : aguarda o primeiro byte antes de calcular ETA (útil com processos que demoram a iniciar)

Exemplo para limitar largura de banda a 5 MiB/s (útil para não saturar uma USB lenta):

pv -L 5m /media/himanshu/1AC2-A8E3/Maldives-2016/* | gzip > ./Desktop/trip-pictures.gz

Exemplo com dd para ver progresso de cópia de bloco:

dd if=/dev/sdb | pv -s 16G | dd of=/dev/sdc

No exemplo acima você pode passar -s com o tamanho esperado para obter porcentagem.

Quando usar pv

  • Pode editar o comando que inicia a transferência.
  • Excelente para pipelines (tar | pv | gzip, pv | ssh user@host ‘cat > file’).

Quando pv pode falhar ou ser limitado

  • Se você não puder alterar o comando em execução (por exemplo, já iniciou cp interativo), pv não ajuda.
  • Em operações extremamente bufferizadas (alguns caches), a progressão pode parecer irregular.

progress: monitorando processos já ativos (coreutils)

O Progress (antigo cv) detecta operações de ferramentas comuns do sistema (cp, mv, dd, gzip/gunzip, tar, cat, etc.) e mostra barras e estimativas sem precisar reexecutar o comando. É uma boa opção quando você não quer ou não pode modificar o comando que iniciou a transferência.

Pré‑requisito (ncurses) e instalação (Debian/Ubuntu):

sudo apt-get install libncurses5-dev

Clonar e instalar (do repositório oficial):

git clone https://github.com/Xfennec/progress.git
cd progress
make
sudo make install

A execução simples mostra todas as atividades monitoráveis:

Saída do comando Progress mostrando progresso de várias operações no terminal

Opções úteis do progress:

  • -m, –monitor : repete enquanto houver processos monitorados
  • -M, –monitor-continuously : monitora continuamente (similar ao watch)
  • -c, –command cmd : monitore somente por nome de comando (pode repetir)
  • -p, –pid id : monitore só esses PIDs (pode repetir)
  • -i, –ignore-file file : ignore operações sobre este arquivo

Quando usar progress

  • Você já executou um cp/mv/dd/tar e quer ver o progresso sem reexecutar.
  • Cenários de diagnóstico onde quer ver múltiplos processos em uma visão tipo top.

Limitações do progress

  • Focado em utilitários comuns; programas proprietários ou customizados podem não aparecer.
  • Em alguns casos, nomes de arquivos sensíveis podem ficar visíveis — veja a seção de privacidade abaixo.

Alternativas e abordagens complementares

  • rsync –progress ou rsync –info=progress2: para transferências locais ou remotas com reinício e verificação de integridade. Excelente para sincronizar diretórios grandes.
  • scp/ssh combinados com pv: enviar um arquivo com pv através de ssh preservando a progressão:
pv bigfile | ssh user@host 'cat > /dest/bigfile'
  • dd status=progress: versões recentes do dd (coreutils) suportam status=progress para ver progresso sem pv.

  • Ferramentas gráficas (Nautilus, Dolphin) quando tiver ambiente gráfico.

Mini‑metodologia: escolher a ferramenta certa

  1. Posso editar o comando original?
    • Sim: prefira pv (insira no pipe).
    • Não: use progress.
  2. Preciso de reinício/consistência e rede?
    • Sim: prefira rsync com –progress/–info=progress2.
  3. Preciso limitar banda?
    • Use pv -L ou tc/ionice para controlar impacto.

Mermaid: fluxo decisório simples

flowchart TD
  A[Precisa ver progresso?] --> B{Pode alterar o comando?}
  B -- Sim --> C[Usar pv no pipe]
  B -- Não --> D[Usar progress]
  C --> E{É rede/remoto?}
  E -- Sim --> F[Usar pv | ssh ou rsync --progress]
  E -- Não --> G[pv com -s/-L conforme necessário]
  D --> H{Comando é coreutils suportado?}
  H -- Sim --> I[progress -m]
  H -- Não --> J[Ver logs ou reiniciar com pv]

Cheklist por função

  • Usuario comum / Desktop

    • Prefiro GUI? Use gerenciador de arquivos.
    • Linha de comando: rsync –progress para pastas.
    • Para um único arquivo via terminal: pv | gzip ou pv | ssh.
  • Desenvolvedor / Power user

    • Se puder ajustar pipeline, adicione pv e -s quando possível.
    • Para testes de desempenho, combine pv -r -b com medidas de I/O.
  • Administrador / Sysadmin

    • Use progress para monitorar múltiplos processos de transferência em servidores sem alterar comandos existentes.
    • Combine pv/rsync com ionice/tc para priorização.

Snippets e atalho (cheat sheet)

  • Instalação rápida:
sudo apt-get install pv
  • Copiar pasta e mostrar só a barra:
tar cf - /path/to/dir | pv -p -s 4G | tar xf - -C /dest
  • Cópia pela rede com limite de banda:
pv -L 2m bigfile | ssh user@host 'cat > /dest/bigfile'
  • Monitorar processos já em execução (modo contínuo):
progress -M
  • Monitorar apenas um PID:
progress -p 12345

Testes e critérios de aceitação (simples)

  • Caso de teste 1: copiar arquivo de 5 GiB localmente com pv + gzip

    • Critério: aparece barra de progresso, taxa e ETA condizentes com velocidade observada.
  • Caso de teste 2: iniciar cp de múltiplos arquivos grandes e rodar progress

    • Critério: progress lista o cp e mostra taxa/ETA para cada operação detectada.
  • Caso de teste 3: transferir via ssh com pv

    • Critério: transferência ocorre e pv exibe taxa conforme bytes transmitidos.

Quando nenhuma das opções ajuda (contraexemplos)

  • Processos proprietários ou binários que não usam chamadas de I/O padrão podem não ser detectados.
  • Operações que ficam bloqueadas por locks de sistema de arquivos não terão progresso real até o desbloqueio.
  • Em sistemas com problemas de /proc (singularidades do kernel ou containers muito restritos), progress pode falhar em listar processos.

Privacidade e segurança

  • progress pode expor nomes de arquivos e caminhos ao exibir operações. Em ambientes sensíveis, avalie o risco de expor metadados.
  • Evite executar git clone/install de fontes não confiáveis. Use repositórios oficiais ou pacotes mantidos pela sua distro quando possível.

Glossário (1 linha cada)

  • pv: utilitário que visualiza dados que passam por um pipe (pipe viewer).
  • progress: monitor que detecta progressos de utilitários do sistema sem alterar o comando.
  • ETA: tempo estimado restante (Estimated Time of Arrival).
  • rsync: ferramenta para sincronização/transferência eficiente de arquivos.

Resumo final

pv e progress resolvem a mesma dor — saber quanto falta em operações longas —, mas de modos distintos: pv exige inserir-se no pipeline; progress observa processos em execução. Escolha pv quando puder alterar o comando e precisar de controle fino (limitar taxa, passar -s); escolha progress quando o processo já estiver rodando ou quando não quiser reiniciá‑lo. Para sincronizações remotas e reinício confiável, prefira rsync.

Principais ações recomendadas:

  • Instale pv para pipelines interativos e scripts.
  • Instale progress para monitoramento em servidores sem reiniciar processos.
  • Use rsync quando precisar de robustez, reinício e verificação de integridade.

Extras:

  • TL;DR: pv para pipes, progress para processos ativos. rsync para sincronização confiável.

Notas finais: mantenha permissões corretas ao rodar comandos como sudo e revise os caminhos usados nos exemplos antes de executar.

Autor
Edição

Materiais semelhantes

Corrigir reconexão do WhatsApp no iPhone
Tutoriais

Corrigir reconexão do WhatsApp no iPhone

Melhorar qualidade de vídeo no Windows
Windows

Melhorar qualidade de vídeo no Windows

Reparar fotos desfocadas — método rápido
Fotografia

Reparar fotos desfocadas — método rápido

Corrigir perda de pacotes em Fall Guys
Jogos

Corrigir perda de pacotes em Fall Guys

Editor de blog com Word 2010
Tutoriais

Editor de blog com Word 2010

pv vs progress: barras de progresso no terminal
Linux

pv vs progress: barras de progresso no terminal