Ubuntu scp e rsync

Com o SSH funcionando, copiar arquivos entre máquinas é um comando só. O scp é o jeito rápido de mandar ou buscar um arquivo. O rsync é o jeito inteligente: copia só o que mudou, retoma cópias interrompidas e é a base de quase todo backup no Linux.

Você vai aprender
  • Como escrever o "de onde" e o "para onde" quando um dos lados é outra máquina.
  • Enviar e buscar arquivos e pastas com scp.
  • Sincronizar pastas com rsync e a regra da barra no final da origem.
  • Usar --dry-run antes de qualquer --delete, para não apagar o que não devia.

Esta aula supõe que você já entra no servidor com ssh ana@192.168.0.50 (veja SSH). Os dois comandos usam o SSH por baixo: se o ssh funciona, eles também funcionam, com as mesmas chaves e os mesmos apelidos do ~/.ssh/config.


Como escrever um caminho remoto

Os dois comandos seguem a ideia do cp: origem primeiro, destino depois. A novidade é que qualquer um dos lados pode estar em outra máquina. Um caminho remoto tem três partes:

ana
O usuário no servidor (pode ser omitido se for igual ao seu).
@192.168.0.50
A máquina. Pode ser um apelido do ~/.ssh/config, como servidor.
:/home/ana/backup
Os dois-pontos separam a máquina do caminho dentro dela. Sem nada depois dos dois-pontos, vale a pasta pessoal.
EscritaSignifica
relatorio.pdfArquivo na pasta atual, nesta máquina
servidor:relatorio.pdfArquivo na pasta pessoal, no servidor
servidor:/var/www/A pasta /var/www no servidor
servidor:A pasta pessoal no servidor
Esqueceu os dois-pontos?

scp foto.jpg servidor (sem :) não envia nada: cria uma cópia local chamada servidor. Sempre termine o nome da máquina com :.


scp: copiar como o cp, mas entre máquinas

scp vem de secure copy, "cópia segura".

Enviar um arquivo (notebook → servidor)

scp
O programa.
relatorio.pdf
Origem: um arquivo do notebook.
ana@192.168.0.50:/home/ana/
Destino: uma pasta no servidor.
$ scp relatorio.pdf ana@192.168.0.50:/home/ana/
relatorio.pdf                                 100% 2355KB  11.2MB/s   00:00     « nome, progresso, tamanho, velocidade, tempo

Buscar um arquivo (servidor → notebook)

Basta inverter a ordem. O . no final significa "aqui, na pasta atual":

$ scp servidor:/var/log/nginx/access.log .
access.log                                    100%  842KB   9.8MB/s   00:00
$ ls
access.log

Pastas inteiras: -r

Como no cp, pastas exigem -r (recursivo):

$ scp -r ~/Documentos/projetos/site servidor:/home/ana/
index.html                                    100%   13     4.1KB/s   00:00
style.css                                     100%   22     8.0KB/s   00:00

Outra porta: -P maiúsculo

Atenção a esta pegadinha: no ssh a porta é -p (minúsculo); no scp é -P (maiúsculo), porque o -p do scp preserva datas e permissões.

$ scp -P 2222 backup.tar.gz deploy@203.0.113.10:

Opções do scp

OpçãoFaz
-rCopia pastas
-P PORTAPorta do SSH (maiúsculo!)
-pPreserva datas e permissões
-CComprime durante o envio (ajuda em conexões lentas)
-i CHAVEUsa uma chave específica
-qSilencioso, sem barra de progresso

rsync: copiar só o que mudou

O scp sempre copia tudo de novo. O rsync (de remote sync, "sincronização remota") compara origem e destino e envia só as diferenças. Na segunda vez que você sincroniza uma pasta de 10 GB onde só um arquivo mudou, ele envia só aquele arquivo.

rsync
O programa.
-a
archive: recursivo e preserva datas, permissões e links. Use quase sempre.
-v
verbose: lista cada arquivo enviado.
-h
Tamanhos legíveis (K, M, G).
fotos/
Origem. A barra final importa (veja a próxima seção).
servidor:backup/fotos/
Destino.
$ rsync -avh fotos/ servidor:backup/fotos/
sending incremental file list
praia.jpg
2026/
2026/festa.jpg

sent 4,13M bytes  received 70 bytes  2,75M bytes/sec
total size is 4,13M  speedup is 1,00
$ rsync -avh fotos/ servidor:backup/fotos/        « rodando de novo, sem mudanças
sending incremental file list

sent 125 bytes  received 12 bytes  274,00 bytes/sec
total size is 4,13M  speedup is 30.153,12        « nada foi enviado: tudo já estava igual

sent e received são os bytes que passaram pela rede. O speedup diz quantas vezes o rsync foi mais eficiente do que copiar tudo de novo.

O rsync também funciona entre duas pastas da mesma máquina, como um cp mais esperto, ótimo para copiar para um HD externo (veja Backup).


A barra no final da origem

Esta é a regra que mais confunde no rsync. Compare, lado a lado, as duas formas copiando a pasta fotos para dentro de backup:

ComandoLê-seResultado no destino
rsync -av fotos backup/"copie a pasta fotos para dentro de backup"backup/fotos/praia.jpg
rsync -av fotos/ backup/"copie o conteúdo de fotos para dentro de backup"backup/praia.jpg
$ rsync -av fotos backup/
sending incremental file list
fotos/                                       « a própria pasta foi criada no destino
fotos/praia.jpg
fotos/2026/
fotos/2026/festa.jpg
…
$ rsync -av fotos/ backup/
sending incremental file list
praia.jpg                                    « só o conteúdo, sem a pasta fotos
2026/
2026/festa.jpg
…
Para não errar

Escreva a pasta com o mesmo nome dos dois lados e com barra nos dois: rsync -av fotos/ backup/fotos/. Assim o resultado é sempre o esperado. A barra no destino não muda o comportamento; só a da origem.


Espelhar: --delete e --dry-run

Sem opções extras, o rsync só acrescenta e atualiza: o que você apagou na origem continua no destino. Para que o destino fique idêntico (um espelho), use --delete: ele apaga no destino o que não existe mais na origem.

Sempre teste com --dry-run antes

Combinado com o erro da barra, o --delete pode apagar um backup inteiro. A opção --dry-run (ou -n) simula tudo e mostra o que seria feito, sem mexer em nada.

Veja o que aconteceria se a Ana usasse --delete depois de ter feito o primeiro rsync da seção anterior, aquele sem barra:

$ rsync -avn --delete fotos/ backup/
sending incremental file list
deleting fotos/2026/festa.jpg                « apagaria a cópia anterior inteira!
deleting fotos/2026/
deleting fotos/praia.jpg
deleting fotos/
deleting velho.jpg                           « e este arquivo, que só existia no backup

sent 139 bytes  received 101 bytes  480,00 bytes/sec
total size is 4  speedup is 0,02 (DRY RUN)    « DRY RUN: nada foi feito de verdade

Graças ao -n, nada foi apagado. A Ana percebe o problema e corrige o destino para backup/fotos/ antes de rodar sem o -n.

  1. Simule: rsync -avn --delete origem/ destino/

  2. Leia cada linha deleting. Se aparecer algo que você quer manter, pare e corrija.

  3. Rode de verdade, tirando só o n: rsync -av --delete origem/ destino/


Arquivos grandes e conexões ruins

Para arquivos grandes, -P junta duas coisas: --progress (barra de progresso por arquivo) e --partial (guarda o pedaço já enviado se a conexão cair). Rodando o mesmo comando de novo, a cópia continua de onde parou:

$ rsync -ahP ubuntu-26.04-desktop-amd64.iso servidor:isos/
sending incremental file list
ubuntu-26.04-desktop-amd64.iso
          2,31G  36%   11,42MB/s    0:05:59      « parte enviada, porcentagem, velocidade, tempo restante

Outras opções úteis:

OpçãoFazExemplo
-zComprime durante o enviorsync -avz logs/ servidor:logs/
--excludeIgnora arquivos ou pastasrsync -av --exclude '*.tmp' --exclude 'cache/' a/ b/
-e "ssh -p 2222"Usa outra porta do SSHrsync -av -e "ssh -p 2222" a/ vps:a/
--bwlimit=5MLimita a velocidade, para não travar a redersync -av --bwlimit=5M a/ servidor:a/

Formas diferentes de copiar entre máquinas

FormaExemploMelhor quando…
scpscp foto.jpg servidor:Um arquivo ou uma pasta pequena, uma vez só
rsyncrsync -av pasta/ servidor:pasta/Pastas grandes, cópias repetidas, backups
rsync -Prsync -ahP grande.iso servidor:Arquivo enorme ou conexão que cai
sftpsftp servidor, depois get e putVocê quer navegar no servidor antes de escolher o que baixar
Arquivos (GNOME)"Outros locais" → sftp://ana@192.168.0.50Prefere arrastar e soltar com o mouse

Quando não funciona

"scp: Connection closed" ou "Could not resolve hostname"
$ scp relatorio.pdf servidro:
ssh: Could not resolve hostname servidro: Name or service not known
scp: Connection closed

O que aconteceu: o scp não conseguiu abrir a conexão SSH. A primeira linha diz o motivo real; aqui, um erro de digitação no nome.

Como resolver: teste primeiro com ssh servidor. Se o ssh não entra, o scp também não vai entrar; resolva com a aula de SSH.

Os arquivos foram para o lugar errado

O que aconteceu: faltou ou sobrou a barra no final da origem do rsync, e a pasta foi criada um nível acima ou abaixo do esperado.

Como resolver: confira no destino com ssh servidor ls -R backup | head, apague a cópia errada e rode de novo com a origem e o destino terminando em barra.

rsync: change_dir … failed: No such file or directory
$ rsync -av fotso/ backup/
sending incremental file list
rsync: [sender] change_dir "/home/ana/fotso" failed: No such file or directory (2)
…
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1356) [sender=3.4.1]

O que aconteceu: a origem não existe; aqui, "fotso" em vez de "fotos". O código 23 indica que parte da transferência falhou. As mensagens do rsync aparecem em inglês.

Permission denied ao gravar no servidor

O que aconteceu: o usuário do SSH não pode escrever na pasta de destino (por exemplo, /var/www, que é do root).

Como resolver: envie para a sua pasta pessoal no servidor e, lá dentro, mova com sudo mv. Ou ajuste o dono da pasta de destino (veja chown, chgrp, umask).


Referência rápida

TarefaComando
Enviar arquivoscp arq servidor:destino/
Buscar arquivoscp servidor:caminho/arq .
Enviar pastascp -r pasta servidor:
Sincronizar pastarsync -avh pasta/ servidor:pasta/
Simularrsync -avhn --delete pasta/ servidor:pasta/
Espelhar (apaga extras)rsync -avh --delete pasta/ servidor:pasta/
Arquivo grande, retomávelrsync -ahP arq servidor:
Ignorar arquivosrsync -av --exclude 'node_modules/' a/ b/

Exercícios

1. Buscar do servidor

Complete para trazer /etc/hostname do servidor para a pasta atual:

scp servidor:/etc/hostname

2. Porta no scp

Complete para enviar usando a porta 2222 do SSH:

scp app.tar.gz deploy@203.0.113.10:

3. Simular antes de apagar

Complete para simular um espelhamento com --delete:

rsync -av --delete fotos/ servidor:fotos/

4. Depois de rsync -av docs/ backup/, onde fica o arquivo docs/a.txt?

5. Qual é a vantagem principal do rsync sobre o scp num backup diário?


Resumo

  • Caminho remoto: usuario@maquina:caminho; os dois-pontos são obrigatórios.
  • scp: rápido para uma cópia; -r para pastas; porta com -P maiúsculo.
  • rsync -avh copia só o que mudou; -P retoma; -z comprime; --exclude ignora.
  • Barra na origem = copiar o conteúdo; sem barra = copiar a pasta.
  • Antes de --delete, sempre -n (--dry-run) e leia cada deleting.