Estrategias de copias de seguridad de directorios

ShellBeginner
Practicar Ahora

Introducción

Imagine que toma una foto cada día de una planta que está creciendo. Si llama plant.jpg a todas las fotos, la nueva reemplazará constantemente a la anterior y perderá el historial. Para conservarlas todas, debe llamarlas plant_2023-01-01.jpg, plant_2023-01-02.jpg, etc.

Con las copias de seguridad del sistema ocurre el mismo problema. Si siempre escribe en el mismo nombre de archivo, cada nueva copia puede sobrescribir la anterior y borrar el historial de recuperación.

En este laboratorio, aprenderá a automatizar este proceso de asignación de nombres. Las copias de seguridad con marcas de tiempo son una práctica muy habitual en entornos reales, porque los archivos de copia de seguridad solo son útiles si puede saber cuándo se crearon y conservar varias generaciones.

Aprenderá a:

  1. Pedirle a Linux la fecha actual con un formato específico.
  2. Guardar esa fecha en una «caja» (variable).
  3. Usar esa fecha para crear un archivo de copia de seguridad único con marca de tiempo.

Obtener la fecha actual

En este paso, aprenderá a usar el comando date para dar formato a la fecha actual. Este es el primer elemento de nuestro nombre de archivo dinámico.

El comando estándar date muestra la fecha y la hora actuales en un formato largo y detallado. Sin embargo, para los nombres de archivo normalmente queremos un formato limpio y ordenable, como YYYY-MM-DD. Linux permite personalizar la salida mediante el símbolo + seguido de un código de formato. El código %F es un atajo práctico para la «fecha completa» (año-mes-día).

Este formato no solo es estético. También resulta útil en la práctica, porque los nombres de archivo ordenados alfabéticamente quedan ordenados cronológicamente cuando se usa YYYY-MM-DD.

Primero, compruebe que se encuentra en la carpeta del proyecto:

cd ~/project

Ahora, pídale al sistema la fecha con el formato que preferimos:

date +%F

Debería ver una salida similar a 2023-10-27, pero con la fecha real de hoy.

Para usar este resultado en un nombre de archivo, necesitamos capturarlo. Podemos hacerlo mediante la sustitución de comandos. Imagínelo como colocar un comando dentro de una burbuja $(...). El shell ejecuta primero el comando que está dentro de la burbuja, obtiene el resultado y reemplaza la burbuja por ese texto.

La sustitución de comandos es una de las ideas fundamentales del shell que permite conectar el uso sencillo de la línea de comandos con la automatización. Hace posible convertir la salida de un comando en datos para otro comando.

Vamos a guardar esta fecha en una variable. Una variable es simplemente una caja de almacenamiento con nombre. Crearemos una caja llamada current_date y pondremos dentro la salida de nuestro comando.

current_date=$(date +%F)

Importante: Observe que NO hay espacios alrededor del signo =. Esta es una regla estricta del shell. variable = value fallará; variable=value funciona.

Ahora, consulte el contenido de nuestra caja para asegurarse de que la fecha está allí. Usamos el comando echo con el signo $ delante del nombre de la variable para «abrir» la caja:

echo $current_date

Si se muestra la fecha de hoy, significa que ha capturado correctamente la fecha.

Crear un archivo de copia de seguridad

Ahora que tenemos la fecha almacenada en una variable, podemos usarla para crear un archivo de copia de seguridad con un nombre descriptivo.

Hemos preparado un archivo llamado project_plan.txt en su directorio. Compruebe que está allí:

ls -l project_plan.txt

Nuestro objetivo es crear una copia de este archivo llamada project_plan_YYYY-MM-DD.bak. De este modo, la copia queda «marcada» con la fecha actual.

Usaremos el comando estándar cp (copiar). Sin embargo, en lugar de escribir la fecha manualmente, dejaremos que el shell la inserte mediante nuestra variable $current_date.

Ejecute el siguiente comando:

cp project_plan.txt "project_plan_$current_date.bak"

El shell ve $current_date dentro de las comillas dobles y lo reemplaza inmediatamente por la fecha real almacenada en la variable (por ejemplo, 2023-10-27) antes de ejecutar el comando de copia.

Esto se denomina expansión de variables. El shell expande las variables antes de iniciar realmente el comando cp. Por eso el comando parece dinámico, aunque cp no entiende las variables del shell.

Consejo práctico: Puede omitir el paso de la variable y hacerlo todo en una sola línea. Esto es muy habitual en los scripts de automatización. Puede colocar directamente la burbuja de comandos $(...) en el comando cp:

cp project_plan.txt "project_plan_$(date +%F).bak"

Esto le indica al shell: «Ejecute el comando date, pegue el resultado aquí y después ejecute el comando de copia». Ambos métodos producen exactamente el mismo resultado.

Verificar la copia de seguridad

Confirmemos que todo ha funcionado. Ahora deberíamos ver dos archivos: el original y la copia con marca de tiempo.

Muestre los archivos del directorio:

ls -l

Debería ver algo parecido a esto:

-rw-rw-r-- 1 labex labex 65 Oct 27 10:00 project_plan.txt
-rw-rw-r-- 1 labex labex 65 Oct 27 10:05 project_plan_2023-10-27.bak

Observe que el archivo nuevo incluye la fecha en su nombre.

Por último, asegúrese de que el contenido se ha conservado correctamente. Puede usar el comando cat para leer el archivo nuevo. Como quizá no quiera volver a escribir la fecha completa, puede reutilizar la sustitución de comandos:

cat project_plan_$(date +%F).bak

Debería ver el texto original:

Phase 1: Initialization
Phase 2: Development
Phase 3: Deployment

¡Éxito! Ha creado una copia de seguridad perfecta con marca de tiempo. Si ejecutara este mismo comando mañana, se crearía un archivo nuevo con la fecha de mañana, y su historial se conservaría de forma segura y ordenada.

Este sencillo hábito de asignar nombres resulta sorprendentemente útil a gran escala. Muchos sistemas de rotación de copias de seguridad comienzan exactamente con esta idea: codificar el tiempo en el nombre del archivo para conservar varias generaciones en lugar de sobrescribir la copia más reciente.

Resumen

¡Enhorabuena! Ha dominado una habilidad clave de automatización.

En este laboratorio, ha aprendido:

  • Dar formato a la fecha: usar date +%F para obtener una cadena de fecha adecuada para un equipo.
  • Sustitución de comandos: usar $(...) para pasar el resultado de un comando a otro.
  • Asignación de nombres dinámicos: crear archivos cuyos nombres se basan en la fecha actual.

Este sencillo recurso es la base de las estrategias profesionales de copias de seguridad. Ahora puede evitar que sus archivos se sobrescriban accidentalmente.