Transferir Archivos en Red Hat Enterprise Linux

Red Hat Enterprise LinuxBeginner
Practicar Ahora

Introducción

En este laboratorio, obtendrás experiencia práctica en la gestión y transferencia de archivos de forma eficiente y segura en un sistema RHEL. Aprenderás a crear, listar y extraer archivos de archivos tar, incluyendo archivos comprimidos, esenciales para el empaquetado y respaldo de datos.

Además, este laboratorio te guiará a través de la transferencia segura de archivos utilizando sftp para transferencias interactivas de archivos y rsync para una sincronización de archivos robusta y eficiente, asegurando la integridad y seguridad de los datos durante las operaciones de red.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 94%. Ha recibido una tasa de reseñas positivas del 99% por parte de los estudiantes.

Crear y Listar Archivos de Archivo tar

En este paso, aprenderás a crear y listar archivos tar. La utilidad tar es una herramienta de línea de comandos potente utilizada para archivar archivos y directorios. Se usa comúnmente para copias de seguridad y transferencia de archivos.

El comando tar requiere una opción de acción para especificar la operación que debe realizar. Las opciones de acción comunes incluyen:

  • -c o --create: Crea un nuevo archivo de archivo.
  • -t o --list: Lista el contenido de un archivo de archivo.
  • -x o --extract: Extrae archivos de un archivo de archivo.

Además, tar a menudo utiliza opciones generales para modificar su comportamiento:

  • -v o --verbose: Muestra los archivos que se están procesando durante el archivado o la extracción.
  • -f o --file: Especifica el nombre del archivo de archivo. Esta opción debe ir seguida del nombre del archivo de archivo.

Comencemos creando algunos archivos de muestra que archivaremos. Navega a tu directorio ~/project, que es tu directorio de trabajo predeterminado.

cd ~/project

Ahora, crea un nuevo directorio llamado my_files y algunos archivos de texto de muestra dentro de él.

mkdir my_files
echo "Este es el contenido del archivo1." > my_files/file1.txt
echo "Este es el contenido del archivo2." > my_files/file2.txt
echo "Este es el contenido del archivo3." > my_files/file3.txt
ls my_files

Debes ver los tres archivos listados:

file1.txt  file2.txt  file3.txt

Ahora, creemos un archivo tar del directorio my_files. Llamaremos al archivo my_archive.tar.

tar -cvf my_archive.tar my_files

La salida mostrará los archivos que se están agregando al archivo:

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

Puedes verificar que el archivo de archivo my_archive.tar se ha creado en tu directorio actual:

ls

Debes ver my_archive.tar listado junto con my_files:

my_archive.tar  my_files

A continuación, listemos el contenido del archivo my_archive.tar usando las opciones -t (listar) y -f (archivo).

tar -tf my_archive.tar

La salida mostrará el contenido del archivo:

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

Si deseas ver información más detallada, como permisos de archivo, propietario y tamaño, puedes agregar la opción -v (verbose):

tar -tvf my_archive.tar

La salida será similar a esta, proporcionando más detalles sobre cada elemento archivado:

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

Observa que tar, de forma predeterminada, elimina el prefijo / de las rutas absolutas al archivar. Esta es una medida de seguridad para evitar la sobrescritura accidental de archivos del sistema al extraer archivos. Por ejemplo, si archivaras /etc/hosts, se almacenaría como etc/hosts dentro del archivo tar. Esto te permite extraerlo a una nueva ubicación sin afectar el archivo original /etc/hosts.

Extraer Archivos de Archivos tar

En este paso, aprenderás a extraer archivos de un archivo tar. Extraer archivos es el proceso de tomar el contenido archivado y colocarlo de nuevo en el sistema de archivos.

La opción principal para extraer archivos es -x o --extract. También usarás generalmente -f para especificar el archivo de archivo y -v para una salida detallada para ver qué archivos se están extrayendo.

Antes de extraer, es una buena práctica extraer archivos a un directorio vacío para evitar sobrescribir archivos existentes o mezclarlos con otro contenido. Creemos un nuevo directorio llamado extracted_files en tu directorio ~/project.

cd ~/project
mkdir extracted_files

Ahora, navega al directorio extracted_files. Esto asegura que el contenido del archivo se extraerá aquí.

cd extracted_files

Ahora, extraigamos el contenido de my_archive.tar (que se encuentra en el directorio padre, ~/project) en el directorio extracted_files actual.

tar -xvf ../my_archive.tar

La salida mostrará los archivos que se están extrayendo:

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

Después de la extracción, puedes listar el contenido del directorio actual (~/project/extracted_files) para verificar que el directorio my_files y su contenido se hayan extraído correctamente.

ls

Debes ver el directorio my_files:

my_files

Ahora, revisemos el contenido del directorio my_files dentro de extracted_files:

ls my_files

Debes ver los archivos originales:

file1.txt  file2.txt  file3.txt

También puedes ver el contenido de uno de los archivos extraídos para confirmar su integridad:

cat my_files/file1.txt

La salida debería ser:

This is file1 content.

Al extraer archivos, el comando tar utiliza el umask actual para establecer los permisos de los archivos extraídos. Sin embargo, si deseas preservar los permisos de archivo originales tal como estaban en el archivo, puedes usar la opción -p o --preserve-permissions. Esto es particularmente útil al trabajar con scripts ejecutables o archivos de configuración donde los permisos específicos son cruciales. Para el usuario root, esta opción suele estar habilitada de forma predeterminada. Para usuarios regulares, es buena práctica incluirla si la preservación de permisos es importante.

Para este laboratorio, no demostraremos explícitamente la opción -p, ya que el comportamiento predeterminado es suficiente para nuestros archivos de texto. Sin embargo, ten en cuenta esta opción para futuros casos de uso.

Crear Archivos de Archivo tar comprimidos

En este paso, aprenderás a crear archivos tar comprimidos. Si bien tar solo agrupa archivos, puede integrarse con utilidades de compresión como gzip, bzip2 y xz para crear archivos de archivo más pequeños. Esto es crucial para ahorrar espacio en el disco y reducir los tiempos de transferencia.

El comando tar proporciona opciones específicas para diferentes algoritmos de compresión:

  • -z o --gzip: Utiliza la compresión gzip, resultando en un sufijo .tar.gz o .tgz. Este es el método de compresión más común y rápido.
  • -j o --bzip2: Utiliza la compresión bzip2, resultando en un sufijo .tar.bz2 o .tbz. Generalmente ofrece una mejor compresión que gzip pero es más lento.
  • -J o --xz: Utiliza la compresión xz, resultando en un sufijo .tar.xz o .txz. Ofrece la mejor relación de compresión entre los tres pero es el más lento.
  • -a o --auto-compress: Permite a tar determinar automáticamente el algoritmo de compresión basado en el sufijo del archivo (por ejemplo, .tar.gz implica gzip). Esta es una opción conveniente.

Comencemos asegurándonos de estar en tu directorio ~/project.

cd ~/project

Primero, crearemos un archivo comprimido gzip del directorio my_files. Lo llamaremos my_archive.tar.gz.

tar -czvf my_archive.tar.gz my_files

La salida mostrará los archivos que se están agregando y comprimiendo:

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

Puedes verificar la creación del archivo de archivo comprimido:

ls -lh my_archive.tar.gz

Las opciones -lh para ls proporcionan un tamaño legible por humanos. Verás una salida similar a esta, mostrando el tamaño del archivo:

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

(Nota: El tamaño exacto puede variar ligeramente según el sistema y el contenido, pero será un tamaño pequeño para estos archivos de texto pequeños).

Ahora, intentemos crear un archivo comprimido xz, que generalmente ofrece una mejor compresión. Lo llamaremos my_archive.tar.xz.

tar -cJvf my_archive.tar.xz my_files

Nuevamente, la salida mostrará los archivos que se están procesando:

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

Revisa el tamaño del archivo xz:

ls -lh my_archive.tar.xz

Puedes notar que my_archive.tar.xz es ligeramente más pequeño que my_archive.tar.gz, lo que demuestra la mejor relación de compresión de xz.

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

Para extraer un archivo tar comprimido, tar es lo suficientemente inteligente como para detectar a menudo el tipo de compresión automáticamente al usar la opción -x. Sin embargo, es buena práctica usar explícitamente la opción de descompresión correspondiente (-z, -j o -J) o la opción -a (compresión automática).

Intentemos extraer my_archive.tar.gz en un nuevo directorio llamado extracted_gz.

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

La opción -C (cambiar de directorio) le indica a tar que extraiga los archivos en el directorio especificado. Esta es una opción muy útil para evitar desordenar tu directorio actual.

Verifica el contenido de extracted_gz:

ls extracted_gz/my_files

Debes ver:

file1.txt  file2.txt  file3.txt

Transferir Archivos de Forma Segura con sftp

En este paso, aprenderás a transferir archivos de forma segura entre sistemas utilizando sftp (Secure File Transfer Program). sftp es un programa interactivo de transferencia de archivos que utiliza SSH (Secure Shell) para una comunicación segura, proporcionando cifrado y autenticación. Forma parte del conjunto OpenSSH.

Para este laboratorio, simularemos un sistema remoto utilizando el usuario labex en el mismo host como un usuario "remoto". Esto nos permite practicar los comandos sftp sin necesidad de una máquina virtual separada.

Primero, asegúrate de estar en tu directorio ~/project.

cd ~/project

Creemos un archivo que "subiremos" al directorio de inicio del usuario remoto simulado.

echo "Este archivo se cargará a través de sftp." > local_file.txt

Ahora, inicia una sesión sftp para el usuario labex en localhost.

sftp labex@localhost

Se te pedirá la contraseña para labex@localhost. Introduce labex.

La autenticidad del host 'localhost (127.0.0.1)' no se puede establecer.
Huella digital de la clave ED25519 es SHA256:....
¿Estás seguro de que quieres continuar la conexión (sí/no/[huella digital])? sí
Advertencia: 'localhost' (ED25519) se añadió permanentemente a la lista de hosts conocidos.
Contraseña de 'labex@localhost': labex
Conectado a localhost.
sftp>

Ahora estás en el indicador interactivo sftp.

Dentro del indicador sftp, puedes usar varios comandos similares a un shell normal.

  • pwd: Muestra el directorio de trabajo actual en el sistema remoto.
  • lpwd: Muestra el directorio de trabajo actual en tu sistema local.
  • ls: Lista los archivos en el sistema remoto.
  • lls: Lista los archivos en el sistema local.

Probemos:

sftp> pwd
Directorio de trabajo remoto: /home/labex
sftp> lpwd
Directorio de trabajo local: /home/labex/project
sftp> ls

(El comando ls mostrará el contenido de /home/labex en el lado remoto, que es tu propio directorio de inicio).

Ahora, "subamos" local_file.txt desde tu directorio local ~/project al directorio de inicio del usuario remoto labex (/home/labex). Usa el comando put.

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

Puedes verificar que el archivo se subió listando el directorio remoto:

sftp> ls

Debes ver local_file.txt listado entre los archivos en /home/labex.

A continuación, "descarguemos" un archivo del sistema remoto. Descargaremos el archivo .bashrc del directorio de inicio del usuario remoto labex a tu directorio local ~/project. Usa el comando get.

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

Puedes verificar la descarga listando tu directorio local:

sftp> lls

Debes ver .bashrc listado en tu directorio local ~/project.

Para salir de la sesión sftp, usa el comando exit o bye.

sftp> exit

Volverás a tu indicador de shell normal.

Sincronizar Archivos de Forma Segura con rsync

En este paso, aprenderás a sincronizar archivos entre sistemas utilizando el comando rsync. rsync es una herramienta potente y versátil para copiar y sincronizar archivos y directorios, tanto local como remotamente. Su principal ventaja es la capacidad de transferir solo las diferencias entre archivos, lo que la hace altamente eficiente para actualizaciones. Al igual que sftp, rsync puede utilizar SSH para transferencias seguras y cifradas.

Las opciones más comunes para rsync incluyen:

  • -a o --archive: Esta es una combinación de varias opciones (-rlptgoD) que preserva la mayoría de los atributos de los archivos (recursivo, enlaces, permisos, fechas, grupo, propietario, archivos de dispositivo). A menudo se la conoce como "modo de archivo" y se recomienda encarecidamente para la mayoría de las tareas de sincronización.
  • -v o --verbose: Aumenta la verbosidad, mostrando más detalles sobre la transferencia.
  • -z o --compress: Comprime los datos del archivo durante la transferencia, lo que puede acelerar las transferencias a través de enlaces lentos.
  • -h o --human-readable: Muestra los números en un formato legible por humanos.
  • -n o --dry-run: Realiza una prueba de funcionamiento sin realizar ningún cambio. Esto es extremadamente útil para verificar qué hará rsync antes de ejecutar realmente el comando.

Comencemos asegurándonos de estar en tu directorio ~/project.

cd ~/project

Simularemos un escenario de sincronización creando un directorio de origen y un directorio de destino.

Crea un directorio de origen source_dir con algunos archivos:

mkdir source_dir
echo "Contenido del archivoA" > source_dir/fileA.txt
echo "Contenido del archivoB" > source_dir/fileB.txt
mkdir source_dir/subdir
echo "Contenido del archivo subfile1" > source_dir/subdir/subfile1.txt

Crea un directorio de destino vacío dest_dir:

mkdir dest_dir

Ahora, realicemos una prueba de funcionamiento para ver qué haría rsync al sincronizar source_dir con dest_dir. Usaremos las opciones -avh para el modo de archivo, salida detallada y tamaños legibles por humanos, junto con -n para la prueba de funcionamiento.

rsync -avhn source_dir/ dest_dir/

Nota importante sobre las barras inclinadas finales:

  • source_dir/: La barra inclinada final significa "copiar el contenido de source_dir".
  • source_dir: Sin barra inclinada final significa "copiar source_dir en sí mismo al destino".

La salida de la prueba de funcionamiento te mostrará los archivos que se transferirían:

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

enviados 186 bytes  recibidos 12 bytes  396.00 bytes/seg
tamaño total es 66  aceleración es 0.33 (PRUEBA DE FUNCIONAMIENTO)

Observa (PRUEBA DE FUNCIONAMIENTO) al final, indicando que no se realizaron cambios reales.

Ahora, realicemos la sincronización real. Elimina la opción -n.

rsync -avh source_dir/ dest_dir/

La salida será similar a la prueba de funcionamiento, pero sin la etiqueta (PRUEBA DE FUNCIONAMIENTO):

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

enviados 186 bytes  recibidos 12 bytes  396.00 bytes/seg
tamaño total es 66  aceleración es 0.33

Verifica que los archivos se hayan copiado a dest_dir:

ls -R dest_dir

Debes ver:

dest_dir:
fileA.txt  fileB.txt  subdir

dest_dir/subdir:
subfile1.txt

Ahora, modifiquemos un archivo en source_dir y agreguemos un nuevo archivo para ver la eficiencia de rsync.

echo "Contenido actualizado para fileA" > source_dir/fileA.txt
echo "Contenido del nuevo archivo" > source_dir/new_file.txt

Realiza otra prueba de funcionamiento para ver qué transferirá rsync esta vez:

rsync -avhn source_dir/ dest_dir/

La salida mostrará solo los archivos modificados y nuevos:

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

enviados 128 bytes  recibidos 12 bytes  280.00 bytes/sec
tamaño total es 100  aceleración es 0.71 (PRUEBA DE FUNCIONAMIENTO)

Esto demuestra la capacidad de rsync de transferir solo las diferencias.

Ahora, realiza la sincronización real de nuevo:

rsync -avh source_dir/ dest_dir/

Verifica el contenido de dest_dir de nuevo:

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

Debes ver new_file.txt en dest_dir y fileA.txt debe contener "Contenido actualizado para fileA".

Resumen

En este laboratorio, adquirimos experiencia práctica en la gestión y transferencia de archivos en sistemas RHEL utilizando herramientas esenciales de línea de comandos. Comenzamos dominando la utilidad tar, aprendiendo a crear, listar y extraer archivos de archivos, incluyendo la creación de archivos comprimidos tar.gz para un almacenamiento y transferencia eficientes.

Posteriormente, exploramos métodos de transferencia de archivos seguros. Utilizamos sftp para transferencias de archivos interactivas y seguras entre sistemas, comprendiendo sus capacidades para subir y descargar archivos. Finalmente, profundizamos en rsync, una herramienta potente para sincronizar archivos y directorios, destacando su eficiencia en la gestión de actualizaciones incrementales y la garantía de la consistencia de los datos en diferentes ubicaciones.