Como fazer cópias entre 2 hosts com o scp

Se você acessa pelo menos um servidor remoto via SSH, provavelmente terá utilidade para um comando de cópia, que permite trocar arquivos entre um host e outro — também através de uma conexão segura.
É isto que o comando scp faz: copia arquivos entre hosts, dentro de uma rede — com o uso do ssh, para transferência segura dos dados.
Durante o processo, o scp irá pedir a mesma senha que vocẽ usa para se autenticar via ssh — uma vez que ambos fazem parte do mesmo conjunto de ferramentas.

O comando scp, tal como o cp, irá sobrescrever arquivos no destino.
Portanto certifique-se de estar digitando a coisa certa e mantenha seus backups em dia.

Para este post, vou usar exemplos simples, em cima dos quais, você poderá construir procedimentos mais complexos, posteriormente.
Recentemente, configurei o .bashrc de uma máquina remota, para apresentar um prompt da linha comando personalizado — o que me ajuda a saber exatamente aonde estou realizando algum procedimento.
Como eu gostaria que a máquina local também tivesse um prompt customizado, pensei em usar o scp para copiar o arquivo .bashrc de lá para cá.
Tendo o nome do host remoto (tatooine, no meu caso) e sua respectiva senha, proceda assim:


scp justincase@tatooine:.bashrc ./

The authenticity of host 'tatooine (192.168.5.4)' can't be established.
RSA key fingerprint is 20:96:8d:4e:1c:d6:d5:40:e3:83:0a:f9:30:04:50:30.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'tatooine,192.168.5.4' (RSA) to the list of known hosts.
justincase@tatooine's password: 
.bashrc                                                                                           100%    0     0.0KB/s   00:00    

Na primeira conexão, as ferramentas ssh pedem confirmação (yes/no) — após o quê, a adicionam à lista de hosts conhecidos.
Você pode usar a opção ‘-r’ para copiar um diretório recursivamente, também:


scp -r justincase@tatooine:temporario/ temp/

justincase@tatooine's password:
error.log                    100% 5627     5.5KB/s   00:00     
error.log.0                  100% 6534     6.4KB/s   00:00     
error.log.2017-05-31.gz      100% 2086     2.0KB/s   00:00     
error.log.2017-06-01.gz      100% 1553     1.5KB/s   00:01     
error.log.2017-06-02.gz      100%  744     0.7KB/s   00:00     
error.log.2017-06-03         100% 7960     7.8KB/s   00:00     
error.log.2017-06-04         100% 6534     6.4KB/s   00:00     

Para copiar (ou subir) um arquivo local para um endereço remoto, use o seguinte exemplo:


scp -l 14 -C Downloads/piwigo-netinstall.php justincase@tatooine:~/

justincase@tatooine's password:
piwigo-netinstall.php                                                                      100%   15KB  14.9KB/s   00:00

No exemplo, acima, adicionei estas 2 opções:

  • -l 14 — que limita a banda em 14 Kbps. O que pode ajudar a não sobrecarregar a sua rede. Neste caso, como o arquivo tem 15 Kb, não houve diferença perceptível.
  • -C — aplica compressão ao(s) arquivo(s), em trânsito. Novamente, o comando é irrelevante para este caso (mas serve como exemplo), em virtude do tamanho ínfimo do arquivo copiado.

E se eu quiser copiar o mesmo arquivo entre dois hosts remotos — tatooine e coruscant?
A maneira mais simples de realizar este trabalho é copiando o arquivo objeto da transferência temporariamente para a máquina local — fazendo-a funcionar como intermediária da transação.
Veja como:


scp -3 jcase@tatooine:~/logs.txt jcase@coruscant:~/logs.txt


jcase@tatooine's password: jcase@coruscant's password:

Para realizar a cópia, o scp vai precisar que você forneça as senhas de cada um dos hosts.

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Como copiar arquivos aleatoriamente no Linux

Copiar ou mover uma quantidade de arquivos, de um diretório no seu sistema, para outro, em ordem aleatória, tem suas utilidades.
Se você tem uma pequena caixa de som, com entrada USB ou cartão SD e quer ouvir suas músicas em ordem aleatória, misturadas ao acaso, mas não tem o botão random ou shuffle no aparelho — a solução é garantir que as músicas já estejam em ordem aleatória no seu dispositivo de armazenamento.
Este problema é interessante e possui várias formas de ser resolvido, no GNU/Linux.
Vamos conhecer algumas.
Antes de começar, contudo, recomendo copiar todas as músicas que você pretende envolver no processo para um outro diretório e fazer a operação a partir dele. Se algo der errado, as chances de perder arquivos é menor.

Use o comando shuf no Linux

Se você tem o aplicativo shuf (shuffle, quer dizer embaralhar) instalado, pode resolver o problema com uma linha de comando simples.
No exemplo abaixo, as músicas estão todas juntas em uma pasta chamada ‘origem’. Serão copiadas para a pasta ‘destino’.

shuf -zen200 origem/* | xargs -0 mv -t destino

Explicando o comando shuf -zen200 — com seus 3 parâmetros:

  • -z — finaliza cada linha (da lista de arquivos que vai ser criada na memória) com um 0 byte
  • -e — trata cada argumento como uma nova linha input
  • -n200 — determina a quantidade de linhas a ser processada. Altere o valor para quantidade de arquivos presente no seu diretório

O utilitário xargs cria e executa a linha de comando a partir da saída fornecida pelo shuf.
De acordo com o manual do xargs, a opção ‘-0’ indica que os itens terminam com um caractere null (sem valor), em vez de espaços em branco e que os (eventuais) caracteres especiais (que compõem os nomes dos arquivos) não devem ser tratados como especiais e devem ser entendidos literalmente.
Por último, a opção ‘-t’, do comando mv, indica que o nome que o segue é nome de diretório e não nome de arquivo comum.
Se você quiser ver a ação acontendo, use ‘-vt’, assim:

shuf -zen200 origem/* | xargs -0 mv -vt destino

Outra alteração que você pode fazer é substituir o comando mv (mover) por cp (copiar):

shuf -zen200 origem/* | xargs -0 cp -vt destino

Para ver os arquivos copiados, no destino, use o comando ls -tlr — com estes parâmetros, o comando ls mostra os arquivos na ordem em que foram gravados.

Lista de arquivos mp3
Clique para ver detalhes.

Use o comando find para listar, embaralhar e copiar arquivos de um diretório para outro

Uma solução equivalente envolve o comando find.
Um pouco mais complexa, porém mais flexível é voltada para usuários mais avançados.
Com esta opção é possível entrar recursivamente nos diretórios em busca de arquivos e transferi-los para dentro de outro diretório ou dispositivo de armazenamento, “totalmente desorganizados”, do jeito que eu quero.
Veja como funciona:

find origem -type f -print0 | sort -Rz | cut -d $'\0' -f-200 | xargs -0 cp -nvt destino

Se você quiser entender melhor o comando find, leia alguns artigos que contém exemplos dele.

Como renomear os arquivos aletoriamente

O que resta saber, agora, é se o seu mp3 player “físico” toca os arquivos na ordem em que se encontram na mídia de armazenamento ou se os toca em ordem alfabética (ou qualquer outra).
No meu caso, os arquivos são tocados na ordem em que foram gravados.
Se este não for o seu caso e se seus arquivos seguem o padrão de ter em seus nomes a identificação do cantor/banda etc. tudo o que fizemos até aqui, provavelmente terá sido inútil.
O meu player (velhinho) não exibe no visor o nome do arquivo que está tocando.
Esta característica torna os nomes dos arquivos irrelevantes, quando conecto uma mídia de armazenamento nele.
Portanto, se eu renomear todos os meus arquivos mp3 aleatoriamente, vou obter o mesmo resultado: tocá-los aleatoriamente.
A linha de comando, que segue, altera os nomes de arquivos usando o sha1sum, para gerar códigos aleatórios.
Recomendo copiar seus arquivos para um diretório temporário antes de executar o próximo comando — uma vez que ele impossibilitará saber “quem é quem” no diretório, depois que alterar todos os nomes (veja o resultado, na imagem abaixo).
nomes de arquivos aleatórios
Entre no diretório contendo seus arquivos e execute o seguinte:

for fname in *.mp3; do mv -v "$fname" $(echo "$fname" | sha1sum | cut -f1 -d' ').mp3; done

Agora copie os arquivos pro pendrive ou cartão SD e veja se funcionou!

Referência: http://unix.stackexchange.com/questions/38335/best-method-to-collect-a-random-sample-from-a-collection-of-files

Como acessar seus arquivos no servidor FTP com net2ftp

O net2ftp é um webapp cliente FTP que possibilita às pessoas acessar os arquivos no servidor, do navegador, sem a necessidade de instalar qualquer aplicativo extra.
Se você acessar o site oficial do net2ftp, vai ver um formulário, pedindo o endereço do servidor FTP que você deseja acessar, nome de usuário e senha — você pode acessar qualquer servidor do mundo, desde você tenha uma conta lá.
Captura de tela do net2ftp
A idéia, aqui, é que você instale o software do net2ftp (Ei! É grátis!) no seu próprio servidor FTP, em casa ou na empresa, para tornar o acesso mais rápido.
Qualquer dispositivo que possa navegar na Internet (tablet, smartphone, smartTV, PlayStation etc.) poderá acessar os arquivos do seu servidor.
Do lado do servidor, você precisa de:

  • Um servidor web Apache.
  • Um servidor FTP pronto e rodando.
  • Um pouco mais do que 7.5 Mb de espaço em disco.
  • MySQL é opcional — só é necessário pra quem tem o interesse em fazer logging de atividades e estabelecer limites diários de downloads a usuários.

Ao final deste texto, há alguns links para artigos que podem te ensinar a instalar fácil um servidor Apache e FTP, caso você ainda não tenha um.

Como baixar e instalar o net2ftp

O aplicativo é escrito em PHP e usa (opcionalmente) banco de dados MySQL.
De código aberto, você pode fazer o download completo a partir do site oficial:
http://www.net2ftp.com/homepage/download.html
Feito o download (da versão completa Full), descompacte o arquivo:

unzip net2ftp_v1.0.zip

“Tecnicamente”, você não instala o net2ftp, uma vez que o conjunto de scripts que compõem a solução, já vem pronto para funcionar — basta pôr tudo no lugar certo e dar permissão de acesso às pessoas.
Após descomprimir o arquivo ZIP baixado, entre no novo diretório criado.

cd net2ftp_v1.05/

Se você pretende copiar e colar os comandos acima, certifique-se antes se o nome e a versão presentes no seu sistema correspondem ao que se encontra descrito aqui.



Em seguida, copia o conteúdo da pasta files_to_upload para dentro do diretório, no seu servidor Apache, em que o net2ftp será executado. No meu caso, é o seguinte:

sudo cp -rv files_to_upload/ /var/www/html/net2ftp

Se você quer fazer upload para um servidor remoto, veja como usar o comando wput, para isto.
Altere as permissões da pasta temp:

sudo chmod 777 /var/home/www/html/net2ftp/temp/

Depois de copiados os arquivos, basta acessar o net2ftp:

http://192.168.254.20/net2ftp/

Tela inicial do net2ftp
Clique para ampliar.

Uma vez logado ao servidor FTP, através do cliente web, net2ftp, é possível baixar e enviar arquivos ao servidor.
visão do net2ftp de dentro do navegador.
Clique para ampliar.

Esta instalação já pode ser acessada de qualquer dispositivo da sua casa, que tenha um navegador básico: smartphone, tablet, smart TV etc.

O comando wput em 5 exemplos

O comando wput é uma versão do wget — só que ele faz o contrário: em vez de downloads, o wput faz uploads de arquivos pro servidor FTP, com a mesma eficiência e simplicidade. Se você já usa o wget para agilizar os seus downloads, vale a pena conhecer e usar o wput para fazer os seus uploads.
feat rede network-grayEu incluo o wput entre as ferramentas essenciais para quem trabalha com atualização de páginas na Internet — seja webdesigner ou programador web.
O wput é um cliente robusto para conexões FTP. Trabalha sem a necessidade de interação do usuário e pode rodar em background. Pode subir de um simples arquivo a diretórios inteiros pro servidor.
Se você tem problemas com a estabilidade de suas conexões, o wput foi feito pra você — ele tem suporte a retomada de downloads (resuming), ou seja, ele continua o trabalho, de onde parou.
Você pode, ainda, restringir a taxa de transferência dos arquivos, para evitar sobrecarga na sua rede. Ele é um excelente aplicativo para estar dentro de um script que transfira seus backups de um servidor a outro.

Como usar o wput

A sintaxe do comando é simples e intuitiva. Você deve informar os arquivos ou diretórios que serão enviados, nome do usuário ftp, sua senha, endereço do servidor e o diretório que irá receber os arquivos. Veja um exemplo da sintaxe:

wput arquivos_de_origem ftp://nome_de_usario:senha_de_usuario@meuservidor.com.br/diretorio_destino/

Vamos supor que eu deseje enviar os arquivos da pasta /var/www/html/ para a pasta /public_html, pro servidor fordlandau.net. Veja como fica:

wput /var/www/html/ ftp://a1308311:Grujz437@fordlandau.net/public_html/

Note que no exemplo acima, o nome do usuário é a1308311 e sua senha é Grujz437.
Faça um teste, para ver como funciona para você, alterando os nomes para aqueles que se adequam à sua situação.

Verbosidade

Embora eu use o wput para atualizar sites e transferir arquivos de backup, nem sempre sinto necessidade de conferir o que está sendo feito o tempo todo.
Deixar uma janela, em um canto da tela, em um dos monitores, mostrando o upload é uma boa opção. Neste caso, gosto de usar o parâmetro --less-verbose, desta forma:

wput --less-verbose * ftp://a1308311:Grujz437@fordlandau.net/public_html/

Use os coringas

Note que o *, no exemplo anterior, significa “todos os arquivos dentro do diretório atual”.
Você pode usar livremente os coringas. Se quiser subir apenas os arquivos PHP, use *.php.
O comando admite a flexibilidade de transferir vários tipos de arquivos, assim:

wput *.php *.html *.css ./includes/*.php ftp://a1308311:Grujz437@fordlandau.net/public_html/

Pra quem já está acostumado a usar coringas, é simples assim.

Faça a transferência com mais discrição

Se você não deseja obter qualquer atualização visual do andamento dos uploads, pode usar a opção --quiet e, ainda pode jogar o comando “pros bastidores”, com a opção &, do Linux, ao final da linha de comando. Veja como:

wput --quiet * ftp://a1308311:Grujz437@fordlandau.net/public_html/ &

O wput tem uma opção melhor do que esta, com a opção --background — que joga a execução “pros fundos” e grava os resultados no arquivo de log ./wputlog, onde você pode verificar o que ocorreu (ou está ocorrendo) durante a transferência. Veja um exemplo:

wput --background * ftp://a1308311:Grujz437@fordlandau.net/public_html/

A qualquer momento você pode ler o arquivo de log da transferência:

less ./wputlog

Como retomar uploads incompletos

Você pode interromper o envio de arquivos a qualquer momento — basta teclar Ctrl + C — e retomar o trabalho no ponto em que ele parou, mais tarde.
O resuming é o comportamento padrão do wput. Contudo, se quiser, você pode pedir para ele começar o trabalho todo de novo. A opção --reupload faz a transferência dos dados, mesmo que já tenham sido transferidos:

wput --reupload --less-verbose * ftp://a1308311:Grujz437@fordlandau.net/public_html/

Limite o uso de banda nos uploads

Para evitar “incomodar” outros usuários e aplicativos na rede, você pode limitar o consumo de banda do wput com a opção de comando --limit-rate.
Se você quiser limitar o uso da banda para 14 mil bytes, pode usar o comando assim: --limit-rate=14K. Veja um exemplo:

wput --limit-rate=15K --reupload --less-verbose * ftp://a1308311:Grujz437@fordlandau.net/public_html/

É importante frisar que o controle do uso da banda é feito pela média do uso. Ou seja, se você estabelecer um limite de 5K e, por conta da lentidão na rede, o wput só conseguir usar 2K, assim que lhe for possível, ele vai usar mais do que o limite de 5K, até restabelecer a média de 5K.
Portanto, não se espante com uma provável oscilação nestes números.

Parâmetros mais comuns de uso do wput

Agora que você já sabe usar o wput, caso precise, pode voltar a esta página e ir direto pra tabela abaixo, onde vou dar uma explicação geral e rápida sobre as opções do comando.

Opção longa Opção curta Descrição
–less-verbose -nv reduz “um pouco” o output do comando, mantendo o usuário informado do básico
–quiet -q desliga a verbosidade do comando. A opção contrária é o --verbose ou -v
–background -b opera “nos bastidores” e guarda as informações, por padrão, no arquivo ./wputlog
–limit-rate -l as duas opções divergem ligeiramente no uso: --limit-rate=tx ou -l tx — em que tx é o valor da taxa acompanhado da unidade, que pode ser K (KiB) ou M (MiB)
–reupload -u ignora a presença dos arquivos já transferidos e os reescreve. Refaz o upload. O padrão do wput, é a retomada no ponto em que parou na última vez e ignorar os arquivos que já foram transferidos e não sofreram alterações
–tries -t em conexões instáveis, com constantes quedas, você pode especificar um número de tentativas para cada transferência malsucedida. O padrão do aplicativo é -1, ou seja, número ilimitado de tentativas

conclusão

Para concluir, eu gostaria de fazer uma nota rápida sobre optar ou não pelo uso da versão “longa” ou curta ao escrever o comando.
Para usar um exemplo, a opção curta de --less-verbose é -nv — ambas fazem a mesma coisa.
O uso da opção curta serve para nos poupar tempo, no dia a dia. Dentro de scripts, contudo, tenha em mente que você pode levar meses ou anos para querer alterar seus códigos. É por isto que usamos comentários nos nossos scripts. O uso da versão mais longa ajuda a entender melhor o código que você escreveu meses atrás.
No final das contas, o uso das versões mais longas tornam a linha de comando autoexplicativa, poupando seus scripts de linhas e linhas de comentários.
Por fim, recomendo dar uma olhada na página do manual do comando: man wput — onde mais informações podem ser encontradas.
Como sempre, sinta-se à vontade para comentar e, se achar que o texto lhe foi útil, compartilhe o conhecimento com outras pessoas.
Divirta-se! 😉

Copie arquivos com o rsync

Vou mostrar, com alguns exemplos práticos, como o uso do rsync pode ajudar a manter o conteúdo de 2 diretórios (pastas) separados sincronizado – mesmo que estejam em computadores diferentes.
Comando rsync copia arquivos
O comando rsync faz transferências de arquivos entre máquinas, de maneira simplificada e automática e… você nem precisa ter privilégios administrativos para isto.

Alguns dos recursos do Rsync

  • é eficiente para copiar e sincronizar arquivos entre computadores remotos
  • comparado com outros programas, é mais rápido do que o scp – o rsync usa um protocolo que lhe permite atualizar apenas os arquivos que sofreram mudanças
  • consome menos banda, uma vez que só trabalha em cima das atualizações necessárias e usa compressão para transferir dados

Instalação do rsync

Até onde sei, o comando vem instalado por padrão nas várias distro Linux.
Usuários Windows podem fazer o download do rsync aqui.
Usuários do Redhat ou do SuSE, podem instalar o rsync com o seguinte comando:

sudo yum install rsync

Usuários Debian e Ubuntu, podem usar o apt-get:

sudo apt-get install rsync

Sintaxe do comando rsync

Basicamente, você vai rodar o rsync com algumas opções, indicar a origem e o destino da sincronização:

rsync options #origem #destino

Daqui pra frente veremos outros exemplos práticos com o comando rsync.

Como sincronizar dois diretórios locais com o rsync

Vamos usar estes dois como exemplo:

  • /home/Documentos, como origem e
  • /home/backup/Documentos, como destino.

Vou mostrar como copiar a sincronizar recursivamente os diretórios:

rsync -vhr /home/Documentos /home/backup

o comando vai criar, se não houver, uma pasta chamada /home/backup/Documentos e copiar para dentro dela todo o conteúdo da outra pasta. Ao final do processo deverá retornar um relatório semelhante a este:

sent 707.32M bytes  received 2.35K bytes  2.92M bytes/sec
total size is 827.60M  speedup is 1.17

Ao repetir o comando, o rsync irá comparar os arquivos em busca de diferenças, por que ele só irá atualizar os arquivos que foram modificados.

OPÇÕES COMUNS DO RSYNC
  • -v — ativa a verbosidade do comando, pra você poder acompanhar o que está acontecendo durante sua execução;
  • -r — ativa a recursividade, ou seja, copia subdiretórios também;
  • -h — human readable exibe as informações da execução do comando em um formato mais legível, convertendo valores de bytes para mega ou gigabytes onde for necessário para reduzir os tamanhos dos números e tornar o texto mais fácil de ler;
  • -z — comprime os dados, antes de transferir;
  • -a — liga o modo archive que permite a cópia recursiva de arquivos, preservando links simbólicos, permissões de arquivos e timestamps.

Como copiar e sincronizar um arquivo local via rsync

Neste exemplo, vamos sincronizar um único arquivo, em um computador local, entre dois diretórios diferentes:

rsync -zvh Docs/mysql_storage.html /backup/Docs/mysql_storage.html

obtendo como resultado:

mysql_storage.html
sent 1.68K bytes  received 31 bytes  3.43K bytes/sec
total size is 3.38K  speedup is 1.97

Como sincronizar um diretório local com um remoto via SSH

Chegamos a um dos pontos fortes do rsync.
No exemplo que segue, vou copiar os arquivos do diretório /home, no servidor remoto remoto.com.br para um diretório local /backup. O nome de usuário, no exemplo, é justincase:

rsync -avz -e ssh justincase@remoto.com.br:/home /backup

Faça o teste com os seus próprios valores e veja se funciona.