Transferência de Arquivos no Red Hat Enterprise Linux

Red Hat Enterprise LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você ganhará experiência prática na gestão e transferência eficiente e segura de arquivos em um sistema RHEL. Você aprenderá a criar, listar e extrair arquivos de arquivos tar, incluindo arquivos compactados, essenciais para o empacotamento e backup de dados.

Além disso, este laboratório guiará você na transferência segura de arquivos usando sftp para transferências interativas de arquivos e rsync para sincronização de arquivos robusta e eficiente, garantindo a integridade e segurança dos dados durante as operações de rede.

Criar e Listar Arquivos de Arquivo tar

Neste passo, você aprenderá a criar e listar arquivos tar. A ferramenta tar é uma poderosa ferramenta de linha de comando usada para arquivar arquivos e diretórios. É comumente utilizada para backups e transferência de arquivos.

O comando tar requer uma opção de ação para especificar a operação que deve executar. As opções de ação comuns incluem:

  • -c ou --create: Cria um novo arquivo de archive.
  • -t ou --list: Lista o conteúdo de um arquivo de archive.
  • -x ou --extract: Extrai arquivos de um arquivo de archive.

Além disso, tar frequentemente utiliza opções gerais para modificar seu comportamento:

  • -v ou --verbose: Exibe os arquivos sendo processados durante a criação ou extração do arquivo de archive.
  • -f ou --file: Especifica o nome do arquivo de archive. Esta opção deve ser seguida pelo nome do arquivo de archive.

Vamos começar criando alguns arquivos de exemplo que arquivaremos. Navegue até o diretório ~/project, que é o seu diretório de trabalho padrão.

cd ~/project

Agora, crie um novo diretório chamado my_files e alguns arquivos de texto de exemplo dentro dele.

mkdir my_files
echo "Este é o conteúdo do arquivo1." > my_files/file1.txt
echo "Este é o conteúdo do arquivo2." > my_files/file2.txt
echo "Este é o conteúdo do arquivo3." > my_files/file3.txt
ls my_files

Você deve ver os três arquivos listados:

file1.txt  file2.txt  file3.txt

Agora, vamos criar um arquivo de archive tar do diretório my_files. Chamaremos o arquivo de archive de my_archive.tar.

tar -cvf my_archive.tar my_files

A saída mostrará os arquivos sendo adicionados ao arquivo de archive:

my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt

Você pode verificar se o arquivo de archive my_archive.tar foi criado em seu diretório atual:

ls

Você deve ver my_archive.tar listado junto com my_files:

my_archive.tar  my_files

Em seguida, vamos listar o conteúdo do arquivo my_archive.tar usando as opções -t (listar) e -f (arquivo).

tar -tf my_archive.tar

A saída mostrará o conteúdo do arquivo de archive:

my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt

Se você quiser ver informações mais detalhadas, como permissões de arquivos, propriedade e tamanho, você pode adicionar a opção -v (verbose):

tar -tvf my_archive.tar

A saída será semelhante a esta, fornecendo mais detalhes sobre cada item arquivado:

drwxr-xr-x labex/labex        0 2023-10-27 10:00 my_files/
-rw-r--r-- labex/labex       22 2023-10-27 10:00 my_files/file1.txt
-rw-r--r-- labex/labex       22 2023-10-27 10:00 my_files/file2.txt
-rw-r--r-- labex/labex       22 2023-10-27 10:00 my_files/file3.txt

Observe que o tar, por padrão, remove a barra inicial / dos caminhos absolutos ao arquivar. Esta é uma medida de segurança para evitar a sobrescrição acidental de arquivos do sistema ao extrair arquivos de archive. Por exemplo, se você arquivasse /etc/hosts, ele seria armazenado como etc/hosts dentro do arquivo tar. Isso permite que você o extraia para um novo local sem afetar o arquivo original /etc/hosts.

Extrair Arquivos de Arquivos tar

Neste passo, você aprenderá como extrair arquivos de um arquivo tar. Extrair arquivos é o processo de recuperar o conteúdo arquivado e colocá-lo de volta no sistema de arquivos.

A opção principal para extrair arquivos é -x ou --extract. Você também normalmente usará -f para especificar o arquivo de archive e -v para saída detalhada, para ver quais arquivos estão sendo extraídos.

Antes de extrair, é uma boa prática extrair arquivos de archive em um diretório vazio para evitar sobrescrever arquivos existentes ou misturá-los com outros conteúdos. Vamos criar um novo diretório chamado extracted_files em seu diretório ~/project.

cd ~/project
mkdir extracted_files

Agora, navegue para o diretório extracted_files. Isso garante que o conteúdo do arquivo de archive será extraído aqui.

cd extracted_files

Agora, vamos extrair o conteúdo de my_archive.tar (que está localizado no diretório pai, ~/project) para o diretório extracted_files atual.

tar -xvf ../my_archive.tar

A saída mostrará os arquivos sendo extraídos:

my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt

Após a extração, você pode listar o conteúdo do diretório atual (~/project/extracted_files) para verificar se o diretório my_files e seu conteúdo foram extraídos com sucesso.

ls

Você deve ver o diretório my_files:

my_files

Agora, vamos verificar o conteúdo do diretório my_files dentro de extracted_files:

ls my_files

Você deve ver os arquivos originais:

file1.txt  file2.txt  file3.txt

Você também pode visualizar o conteúdo de um dos arquivos extraídos para confirmar sua integridade:

cat my_files/file1.txt

A saída deve ser:

This is file1 content.

Ao extrair arquivos, o comando tar usa o umask atual para definir as permissões dos arquivos extraídos. No entanto, se você quiser preservar as permissões de arquivo originais como estavam no arquivo de archive, você pode usar a opção -p ou --preserve-permissions. Isso é particularmente útil ao lidar com scripts executáveis ou arquivos de configuração onde permissões específicas são cruciais. Para o usuário root, esta opção geralmente está habilitada por padrão. Para usuários regulares, é uma boa prática incluí-la se a preservação de permissões for importante.

Para este laboratório, não demonstraremos explicitamente a opção -p, pois o comportamento padrão é suficiente para nossos arquivos de texto. No entanto, mantenha esta opção em mente para casos de uso futuros.

Criar Arquivos tar Compactados

Neste passo, você aprenderá a criar arquivos tar compactados. Embora o tar em si apenas agrupe arquivos, ele pode integrar-se a utilitários de compactação como gzip, bzip2 e xz para criar arquivos de archive menores. Isso é crucial para economizar espaço em disco e reduzir os tempos de transferência.

O comando tar fornece opções específicas para diferentes algoritmos de compactação:

  • -z ou --gzip: Usa a compactação gzip, resultando em um sufixo .tar.gz ou .tgz. Este é o método de compactação mais comum e rápido.
  • -j ou --bzip2: Usa a compactação bzip2, resultando em um sufixo .tar.bz2 ou .tbz. Geralmente oferece melhor compactação que o gzip, mas é mais lento.
  • -J ou --xz: Usa a compactação xz, resultando em um sufixo .tar.xz ou .txz. Oferece a melhor taxa de compactação entre os três, mas é o mais lento.
  • -a ou --auto-compress: Permite que o tar determine automaticamente o algoritmo de compactação com base no sufixo do arquivo de archive (por exemplo, .tar.gz implica gzip). Esta é uma opção conveniente.

Vamos começar garantindo que você esteja no diretório ~/project.

cd ~/project

Primeiro, criaremos um arquivo de archive compactado gzip do diretório my_files. Chamaremos-lhe my_archive.tar.gz.

tar -czvf my_archive.tar.gz my_files

A saída mostrará os arquivos sendo adicionados e compactados:

my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt

Você pode verificar a criação do arquivo de archive compactado:

ls -lh my_archive.tar.gz

As opções -lh para ls fornecem um tamanho legível por humanos. Você verá uma saída semelhante a esta, mostrando o tamanho do arquivo:

-rw-r--r-- 1 labex labex 180 Out 27 10:00 my_archive.tar.gz

(Observação: o tamanho exato pode variar ligeiramente dependendo do sistema e do conteúdo, mas será um tamanho pequeno para estes pequenos arquivos de texto.)

Agora, vamos tentar criar um arquivo de archive compactado xz, que geralmente oferece melhor compactação. Chamaremos-lhe my_archive.tar.xz.

tar -cJvf my_archive.tar.xz my_files

Novamente, a saída mostrará os arquivos sendo processados:

my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt

Verifique o tamanho do arquivo de archive xz:

ls -lh my_archive.tar.xz

Você pode notar que my_archive.tar.xz é ligeiramente menor que my_archive.tar.gz, demonstrando a melhor taxa de compactação do xz.

-rw-r--r-- 1 labex labex 168 Out 27 10:00 my_archive.tar.xz

Para extrair um arquivo de archive tar compactado, o tar é inteligente o suficiente para frequentemente detectar automaticamente o tipo de compactação ao usar a opção -x. No entanto, é boa prática usar explicitamente a opção de descompactação correspondente (-z, -j ou -J) ou a opção -a (auto-compactação).

Vamos tentar extrair my_archive.tar.gz para um novo diretório chamado extracted_gz.

mkdir extracted_gz
tar -xzvf my_archive.tar.gz -C extracted_gz

A opção -C (mudar de diretório) informa ao tar para extrair os arquivos para o diretório especificado. Esta é uma opção muito útil para evitar encher o seu diretório atual.

Verifique o conteúdo de extracted_gz:

ls extracted_gz/my_files

Você deve ver:

file1.txt  file2.txt  file3.txt

Transferir Arquivos com Segurança usando sftp

Neste passo, você aprenderá como transferir arquivos de forma segura entre sistemas usando sftp (Secure File Transfer Program). sftp é um programa de transferência de arquivos interativo que usa SSH (Secure Shell) para comunicação segura, fornecendo criptografia e autenticação. Faz parte do conjunto OpenSSH.

Neste laboratório, simularemos um sistema remoto usando o usuário labex no mesmo host como um usuário "remoto". Isso nos permite praticar os comandos sftp sem precisar de uma máquina virtual separada.

Primeiro, certifique-se de que está no diretório ~/project.

cd ~/project

Vamos criar um arquivo que "carregaremos" para o diretório inicial do usuário remoto simulado.

echo "Este arquivo será carregado via sftp." > local_file.txt

Agora, inicie uma sessão sftp para o usuário labex no localhost.

sftp labex@localhost

Você será solicitado a inserir a senha para labex@localhost. Digite labex.

A autenticidade do host 'localhost (127.0.0.1)' não pode ser estabelecida.
A impressão digital da chave ED25519 é SHA256:....
Tem certeza que deseja continuar a conexão (sim/não/[fingerprint])? sim
Aviso: 'localhost' (ED25519) adicionado permanentemente à lista de hosts conhecidos.
Senha de 'labex@localhost': labex
Conectado ao localhost.
sftp>

Você agora está no prompt interativo sftp.

Dentro do prompt sftp, você pode usar vários comandos semelhantes a um shell regular.

  • pwd: Mostra o diretório de trabalho atual no sistema remoto.
  • lpwd: Mostra o diretório de trabalho atual no seu sistema local.
  • ls: Lista arquivos no sistema remoto.
  • lls: Lista arquivos no sistema local.

Vamos testá-los:

sftp> pwd
Diretório de trabalho remoto: /home/labex
sftp> lpwd
Diretório de trabalho local: /home/labex/project
sftp> ls

(O comando ls mostrará o conteúdo de /home/labex no lado remoto, que é o seu próprio diretório inicial.)

Agora, vamos "carregar" local_file.txt do seu diretório local ~/project para o diretório inicial do usuário remoto labex (/home/labex). Use o comando put.

sftp> put local_file.txt
Carregando local_file.txt para /home/labex/local_file.txt
local_file.txt                               100%   32     0.0KB/s   00:00
sftp>

Você pode verificar se o arquivo foi carregado listando o diretório remoto:

sftp> ls

Você deve ver local_file.txt listado entre os arquivos em /home/labex.

Em seguida, vamos "baixar" um arquivo do sistema remoto. Vamos baixar o arquivo .bashrc do diretório inicial do usuário remoto labex para o seu diretório local ~/project. Use o comando get.

sftp> get .bashrc
Recuperando /home/labex/.bashrc para .bashrc
/home/labex/.bashrc                          100%  193     0.2KB/s   00:00
sftp>

Você pode verificar o download listando seu diretório local:

sftp> lls

Você deve ver .bashrc listado no seu diretório local ~/project.

Para sair da sessão sftp, use o comando exit ou bye.

sftp> exit

Você retornará ao seu prompt de shell regular.

Sincronizar Arquivos com Segurança usando rsync

Neste passo, você aprenderá a sincronizar arquivos entre sistemas usando o comando rsync. rsync é uma ferramenta poderosa e versátil para copiar e sincronizar arquivos e diretórios, local e remotamente. Sua principal vantagem é a capacidade de transferir apenas as diferenças entre os arquivos, tornando-o altamente eficiente para atualizações. Assim como sftp, rsync pode usar SSH para transferências seguras e criptografadas.

As opções mais comuns para rsync incluem:

  • -a ou --archive: Esta é uma combinação de várias opções (-rlptgoD) que preserva a maioria dos atributos de arquivo (recursivo, links, permissões, horários, grupo, proprietário, arquivos de dispositivo). É frequentemente referida como "modo de arquivo" e é altamente recomendada para a maioria das tarefas de sincronização.
  • -v ou --verbose: Aumenta a verbosidade, mostrando mais detalhes sobre a transferência.
  • -z ou --compress: Comprime os dados do arquivo durante a transferência, o que pode acelerar as transferências em links lentos.
  • -h ou --human-readable: Exibe os números em um formato legível por humanos.
  • -n ou --dry-run: Executa uma execução de teste sem fazer nenhuma alteração. Isso é extremamente útil para verificar o que rsync fará antes de executar o comando.

Vamos começar garantindo que você esteja no diretório ~/project.

cd ~/project

Vamos simular um cenário de sincronização criando um diretório de origem e um diretório de destino.

Crie um diretório de origem source_dir com alguns arquivos:

mkdir source_dir
echo "Conteúdo do arquivoA" > source_dir/fileA.txt
echo "Conteúdo do arquivoB" > source_dir/fileB.txt
mkdir source_dir/subdir
echo "Conteúdo do subarquivo1" > source_dir/subdir/subfile1.txt

Crie um diretório de destino vazio dest_dir:

mkdir dest_dir

Agora, vamos executar uma execução de teste para ver o que rsync faria ao sincronizar source_dir com dest_dir. Usaremos as opções -avh para modo de arquivo, saída detalhada e tamanhos legíveis por humanos, juntamente com -n para a execução de teste.

rsync -avhn source_dir/ dest_dir/

Observação Importante sobre Barras Inclinadas ao Final:

  • source_dir/: A barra inclinada ao final significa "copiar o conteúdo de source_dir".
  • source_dir: Sem barra inclinada ao final significa "copiar source_dir em si para o destino".

A saída da execução de teste mostrará os arquivos que seriam transferidos:

enviando lista de arquivos incremental
./
fileA.txt
fileB.txt
subdir/
subdir/subfile1.txt

enviados 186 bytes  recebidos 12 bytes  396.00 bytes/seg
tamanho total é 66  aceleração é 0.33 (EXECUÇÃO DE TESTE)

Note o (EXECUÇÃO DE TESTE) no final, indicando que nenhuma alteração real foi feita.

Agora, vamos executar a sincronização real. Remova a opção -n.

rsync -avh source_dir/ dest_dir/

A saída será semelhante à execução de teste, mas sem a tag (EXECUÇÃO DE TESTE):

enviando lista de arquivos incremental
./
fileA.txt
fileB.txt
subdir/
subdir/subfile1.txt

enviados 186 bytes  recebidos 12 bytes  396.00 bytes/seg
tamanho total é 66  aceleração é 0.33

Verifique se os arquivos foram copiados para dest_dir:

ls -R dest_dir

Você deve ver:

dest_dir:
fileA.txt  fileB.txt  subdir

dest_dir/subdir:
subfile1.txt

Agora, vamos modificar um arquivo em source_dir e adicionar um novo arquivo para ver a eficiência do rsync.

echo "Conteúdo atualizado para arquivoA" > source_dir/fileA.txt
echo "Novo conteúdo de arquivo" > source_dir/new_file.txt

Execute outra execução de teste para ver o que rsync transferirá desta vez:

rsync -avhn source_dir/ dest_dir/

A saída mostrará apenas os arquivos alterados e novos:

enviando lista de arquivos incremental
./
fileA.txt
new_file.txt

enviados 128 bytes  recebidos 12 bytes  280.00 bytes/seg
tamanho total é 100  aceleração é 0.71 (EXECUÇÃO DE TESTE)

Isso demonstra a capacidade do rsync de transferir apenas as diferenças.

Agora, execute a sincronização real novamente:

rsync -avh source_dir/ dest_dir/

Verifique novamente o conteúdo de dest_dir:

ls -R dest_dir
cat dest_dir/fileA.txt
cat dest_dir/new_file.txt

Você deve ver new_file.txt em dest_dir e fileA.txt deve conter "Conteúdo atualizado para arquivoA".

Resumo

Neste laboratório, adquirimos experiência prática na gestão e transferência de arquivos em sistemas RHEL utilizando ferramentas essenciais de linha de comando. Começamos dominando a utilidade tar, aprendendo a criar, listar e extrair arquivos de arquivos, incluindo a criação de arquivos compactados tar.gz para armazenamento e transferência eficientes.

Posteriormente, exploramos métodos de transferência de arquivos seguros. Utilizamos sftp para transferências de arquivos interativas e seguras entre sistemas, compreendendo suas capacidades para carregar e baixar arquivos. Finalmente, aprofundamo-nos em rsync, uma ferramenta poderosa para sincronizar arquivos e diretórios, destacando sua eficiência no gerenciamento de atualizações incrementais e garantindo a consistência de dados em diferentes locais.