scp direção da cópia: o que é fonte, o que é alvo?

2

a sinopse do homem para scp é:

scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1 ... [[user@]host2:]file2

O que é fonte, o que é alvo? Eu sempre estou me perguntando em que direção a cópia acontece. Como isso é definido?

    
por robsch 05.07.2016 / 09:31

2 respostas

6

Os comandos Unix quase sempre (com muito poucas exceções) têm origem antes do destino. E a maioria permite múltiplas fontes antes do alvo final, se faz sentido fazê-lo.

Isso inclui scp .

Alguns comandos (como as versões GNU de cp e mv ) têm uma opção (por exemplo, -t ou --target-directory=DIRECTORY ) que permite colocar o alvo em primeiro lugar - mas o padrão é o padrão "fonte (s) antes do alvo" . Isso é útil principalmente para que você possa ter o destino antes da origem ao usar algo como find ... -exec cp -t target/ {} + , ou então evite usar -I {} com xargs (que é muito mais lento, faz com que xargs bifurque um comando por arg, ao invés de caber tantos quanto puder em cada linha de comando), por exemplo ... | xargs -0r mv -t target/ em vez de ... | xargs -0r -I {} mv {} target/

Sem uma opção de anulação explícita, como mencionado acima, "alvo antes da fonte" é quase inédito - tão raro que você tem o direito de pensar "Huh? WTF?" se você alguma vez encontrar.

Se você precisar scp de vários arquivos em várias máquinas de uma só vez, faça isso em um loop for assim:

for h in host1 host2 host3... ; do
  scp file1 file2 file3... "user@$h:/path/"
done

Ou use pdcp do Shell Distribuído Paralelo . pdsh é empacotado para a maioria das distribuições do Linux.

por exemplo,

pdcp -w host1,host2,host3 file1 file2 file3 /path/to/target/

Esse é um exemplo muito simples, pdsh tem um arquivo de configuração que você pode usar para definir hosts e grupos de hosts com nomes de grupos arbitrários (por exemplo, all , webservers , dbservers , gpunodes ou qualquer outra ). Você pode usá-los nos comandos pdsh ou pdcp :

pdsh -g all 'uname -a ; uptime'
pdcp -g webservers index.html /var/www/

Diferente do loop for acima, ele não executa comandos nem copia os arquivos sequencialmente, um host de cada vez. Ele executa vários comandos em paralelo, com limites razoáveis baseados no número de núcleos de CPU que sua máquina possui.

    
por 05.07.2016 / 09:39
2

Com o comando scp , você pode especificar a origem (o arquivo ou diretório a ser copiado) e o destino (o local no qual copiar o arquivo ou diretório). A sintaxe para scp é:

Se você estiver no computador a partir do qual deseja enviar o arquivo para um computador remoto:

scp /file/to/send username@remote:/where/to/put

Aqui, o remote pode ser um FQDN ou um endereço IP.

Por outro lado, se você estiver no computador que deseja receber o arquivo de um computador remoto:

scp username@remote:/file/to/send /where/to/put
    
por 05.07.2016 / 09:35

Tags