Como transferir arquivos entre dois computadores utilizando os comandos nc e pv

Esse artigo irá explicar como você pode transferir arquivos entre dois computadores Linux utilizando os comandos nc (networking utility) and pv (pipe viewer).
Antes de começar vou explicar o que são esses comandos:

 

nc significa netcat e é frequentemente utilizado como uma ferramenta para debugar e investigar problemas de rede. É utilizado também para criar conexões de rede usando os protocolo TCP ou UDP, port scanning, tranferência de arquivos etc. Esse comando foi criado para ser dependente de ambientes back-end e especialmente usado em programas e scripts, pois o mesmo pode gerar quase qualquer tipo de conexão de rede e tem um grande número de features incluídas.

 

pv é o acrônimo de Pipe Viewer. É uma ferramente de terminal para monitorar o progresso de dados sendo enviados por pipeline (|). Ele permite que o usuário possa visualizar o progresso dos dados com uma barra de progresso, mostra tempo restante, porcentagem completa, média de processamento atual, total de dado tranferido e tempo estimado para completar o processo.

 

Como monitorar o progresso de dados utilizando o comando pv (Pipe Viewer)

Como exeplo, estaremos utilizando duas supostas máquinas com Linux onde as mesmas utilizarão os seguintes IPs:

Máquina A com IP : 192.168.0.1
Máquina B com IP : 192.168.0.2

Obs: Recomendo não utilizar o comando netcat para enviar e receber dados por uma rede pública, como a mesma não utiliza logins ou autenticação, o único requerimento é o IP do client e o número da porta e o dado a ser enviado pela rede não estar segura, portanto é sempre recomendado para usuários Linux utilizarem uma rede local protegida.

 

Situações onde segurança da informação é mais importante é recomendado sempre utilizar os comandos rsync ou scp via SSH.

Agora vamos começar com um exemplo fácil utilizando os comandos desse artigo, mas antes de realizarmos, as ferramentas devem estar instaladas no sistema.
Rode os seguintes comandos se não estiverem instaladas:

# yum install netcat pv        [Sistemas baseados em RedHat ]
# dnf install netcat pv        [Sistemas baseados em Fedora versão 22+]
# apt-get install netcat pv    [No Debian e seus derivados]

 

Como transferir arquivos entre duas máquinas Linux?

Vamos assumir que você queira enviar um arquivo grande chamado CentOS-7-x86_64-DVD-1503.iso de um computador A para o B pela rede. O modo mais rápido para conseguir seria utilizando o comando nc (utilitário de rede para enviar arquivos por uma rede TCP), pv para monitorar o progresso do dado enviado e o tar para comprimir o arquivo e melhorar a velocidade da transferência.

 

Ná máquina Linux A

Primeiro logue na máquina ‘A’ com o IP 192.168.0.1 e execute o seguinte comando:

# tar -zcf – CentOS-7-x86_64-DVD-1503.iso | pv | nc -l -p 5555 -q 5

Deixe me explicar as opções utilizadas no comando acima:

tar -zcf = tar é um comando utilizado para comprimir e descomprimir arquivos e o argumento -c cria um arquivo .tar, -f significa o tipo de arquivo (file) e -z filtra o arquivo através do comando gzip.
CentOS-7-x86_64-DVD-1503.iso = É o arquivo especificado para ser enviado pela rede. Pode ser arquivo ou caminho de um diretório.
pv = Pipe Viewer para monitorar o progresso dos dados.
nc -l -p 5555 -q 5 = Ferramenta de rede usada para enviar e receber dados por TCP. O argumento -l é utilizado para escutar por uma conexão esperada, -p 555 especifica a porta fonte para usar e -q 5 espera o número em segundos e então sai.

 

Na máquina Linux B

Agora logue na máquina ‘B’ com o endereço de IP 192.168.0.2 e execute o seguinte comando.

# nc 192.168 generic nolvadex.0.1 5555 | pv | tar -zxf –

Como pode perceber, o arquivo é transferido para o computador B, e assim você poderá visualizar o quão rápida a operação de transferência é realizada.
Existem várias maneiras de utilizar o comando nc e pv, e esse é somente um exemplo.