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

Instalar e usar Podman no Debian 11
Containers

Instalar e usar Podman no Debian 11

Apt‑pinning no Debian: guia prático
Administração de sistemas

Apt‑pinning no Debian: guia prático

Injete FSR 4 com OptiScaler em qualquer jogo
Tecnologia

Injete FSR 4 com OptiScaler em qualquer jogo

DansGuardian e Squid com NTLM no Debian Etch
Infraestrutura

DansGuardian e Squid com NTLM no Debian Etch

Corrigir erro de instalação no Android
Android

Corrigir erro de instalação no Android

KNetAttach: Pastas de Rede remota no KDE
KDE

KNetAttach: Pastas de Rede remota no KDE