Capítulo 10. Gestión de información

Tabla de contenidos

10.1. Compartición, copia y archivo
10.1.1. Herramientas de repositorios y compresión
10.1.2. Herramientas de sincronización y copia
10.1.3. Formas de archivado
10.1.4. Formas de copia
10.1.5. Formas de selección de archivos
10.1.6. Medios de archivo
10.1.7. Dispositivos de almacenamiento extraíbles
10.1.8. Selección del sistema de archivos para compartir datos
10.1.9. Compartir información a través de la red
10.2. Respaldo y recuperación
10.2.1. Política de respaldo y recuperación
10.2.2. Suites de utilidades de copias de seguridad
10.2.3. Consejos para copias de seguridad
10.2.3.1. Copia de seguridad de la GUI
10.2.3.2. Montar la copia de seguridad activada por el acto
10.2.3.3. Copia de seguridad activada por acción del temporizador
10.3. Infraestructura de seguridad de la información
10.3.1. Gestión de claves con GnuPG
10.3.2. Usando GnuPG en archivos
10.3.3. Uso de Mutt con GnuPG
10.3.4. Utilizando Vim con GnuPG
10.3.5. El resumen MD5
10.3.6. Llavero de contraseña
10.4. Herramientas para mezclar código fuente
10.4.1. extrae las diferencias entre dos archivos fuente
10.4.2. Mezcla actualizaciones del archivos de código fuente
10.4.3. Integración interactiva
10.5. Git
10.5.1. Configuración del cliente Git
10.5.2. Comandos Git básicos
10.5.3. Consejos para Git
10.5.4. Algunas referencias sobre Git
10.5.5. Otros sistemas de control de versiones

Se describen las herramientas y operaciones para la gestión de información en formato binarios y texto.

[Aviso] Aviso

El acceso de escritura sin coordinación a los dispositivos disponibles y a los archivos desde varios procesos no debe realizarse sin evitar la condición de carrera. Para evitarla se puede utilizar el mecanismo de bloqueo del archivo (file locking) flock(1).

La seguridad de la información y el control de su compartición tiene varios aspectos.

  • La creación de un repositorio de información

  • El acceso al almacenamiento remoto

  • La duplicación

  • El seguimiento del histórico de modificaciones

  • Las facilidades de la compartición de la información

  • Evitar el acceso no autorizado a archivos

  • La detección de modificaciones no autorizadas de archivos

Esto se puede llevar a cabo por la combinación de algunas herramientas.

  • Herramientas de repositorios y compresión

  • Herramientas de sincronización y copia

  • Sistemas de archivos en red

  • Medios de almacenamiento extraíbles

  • El intérprete de órdenes seguro

  • El sistema de autenticación

  • Herramientas de sistemas de control de versiones

  • Herramientas de criptográficas de cifrado y resumen

Aquí esta un resumen de las herramientas de repositorio y compresión disponibles en un sistema Debian.

Tabla 10.1. Relación de las herramientas de repositorios y compresión

paquete popularidad tamaño extensión orden comentario
tar V:902, I:999 3077 .tar tar(1) herramienta estándar del archivo (predeterminada)
cpio V:440, I:998 1199 .cpio cpio(1) Archivador estilo Unix System V, utilizado con find(1)
binutils V:172, I:629 144 .ar ar(1) archivador para la creación de bibliotecas estáticas
fastjar V:1, I:13 183 .jar fastjar(1) archivador para Java (similar a zip)
pax V:8, I:14 170 .pax pax(1) nuevo archivador estándar POSIX, comprometido entre tar y cpio
gzip V:876, I:999 252 .gz gzip(1), zcat(1), … Utilidad de compresión GNU LZ77 (estándar de facto)
bzip2 V:166, I:970 112 .bz2 bzip2(1), bzcat(1), … La utilidad de compresión por ordenamiento de bloques Burrows-Wheeler tiene el índice de compresión mayor que gzip(1) (más lento que gzip con una sintaxis similar)
lzma V:1, I:16 149 .lzma lzma(1) Utilidad de compresión LZMA con mayor ratio de compresión que gzip(1) (obsoleto)
xz-utils V:360, I:980 1203 .xz xz(1), xzdec(1), … La utilidad de compresión XZ tiene un índice de compresión mayor que bzip2(1) (más lento que gzip pero más rápido que bzip2; es el sustituyo del la utilidad de compresión LZMA)
zstd V:193, I:481 2158 .zstd zstd(1), zstdcat(1), … Utilidad de compresión rápida sin pérdidas Zstandard
p7zip V:20, I:463 8 .7z 7zr(1), p7zip(1) 7-Zip archivador de archivos con alto índice de compresión (compresión LZMA).
p7zip-full V:110, I:480 12 .7z 7z(1), 7za(1) 7-Zip archivador de archivos con alto ratio de compresión (compresión LZMA y otros).
lzop V:15, I:142 164 .lzo lzop(1) La utilidad de compresión LZO tiene una velocidad de compresión y descompresión más alta que gzip(1) (menor índice de compresión que gzip con una sintaxis parecida)
zip V:48, I:380 616 .zip zip(1) InfoZIP: herramienta de archivo y compresión DOS
unzip V:105, I:771 379 .zip unzip(1) InfoZIP: herramienta de desarchivo y descompresión DOS

[Aviso] Aviso

No asigne la variable «$TAPE» a menos que sepa sus consecuencias. Esta cambia el comportamiento tar(1).

Aquí hay un resumen de las herramientas de copia y respaldo disponibles en el sistema Debian.


La copia de archivos con rsync(8) aporta muchas más funcionalidades que otros.

  • el algoritmo de transferencia delta envía únicamente las diferencias entre los archivos de origen y los archivos que hay en el destino

  • el algoritmo de comprobación rápido (quick check algorithm) (por omisión) busca los archivos que han cambiado su tamaño o su fecha de última modificación

  • las opciones «--exclude» y «--exclude-from» son parecidas a las de tar(1)

  • la sintáxis de «una barra «/« en el directorio origen« evita la creación de un nivel de directorios adicional en el destino

[Sugerencia] Sugerencia

Las herramientas de sistemas de control de versiones (VCS) en Tabla 10.14, “Lista de otras herramientas del sistema del control de las versiones” pueden operar como herramientas de sincronización y copia en múltiples sentidos.

Aquí hay diferentes maneras de copiar el contenido completo de un directorio «./source» utilizando diferentes herramientas.

rsync(8):

# cd ./source; rsync -aHAXSv . /dest
# cd ./source; rsync -aHAXSv . [email protected]:/dest

Puede utilizar la sintaxis de «barra «/« en el directorio origen«.

# rsync -aHAXSv ./source/ /dest
# rsync -aHAXSv ./source/ [email protected]:/dest

Otra forma es como se muestra.

# cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . /dest
# cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . [email protected]:/dest

cp(1) de GNU y scp(1) de openSSH:

# cd ./source; cp -a . /dest
# cd ./source; scp -pr . [email protected]:/dest

GNU tar(1):

# (cd ./source && tar cf - . ) | (cd /dest && tar xvfp - )
# (cd ./source && tar cf - . ) | ssh [email protected] '(cd /dest && tar xvfp - )'

cpio(1):

# cd ./source; find . -print0 | cpio -pvdm --null --sparse /dest

Puede sustituir «.» por «foo» para todos los ejemplos que contienen «.» para copiar archivos desde el directorio «./origen/foo» al directorio «/destino/foo».

Puede sustituir «.» por la ruta absoluta «/ruta/al/origen/foo» para todos los ejemplos que contienen «.» para eliminar «cd ./source;». La copia de estos archivos a diferentes ubicaciones depende de las herramientas utilizadas como se muestra.

  • «/destino/foo»: rsync(8), GNU cp(1) y scp(1)

  • «/destino/ruta/al/origen/foo»: GNU tar(1) y cpio(1)

[Sugerencia] Sugerencia

Rsync(8) y GNU cp(1) tiene la opción «-u» para no tener en cuenta los archivos que son más nuevos que los recibidos.

La orden find(1) se utiliza para la selección de archivos en combinación con las órdenes de archivado y copia (consulte Sección 10.1.3, “Formas de archivado” y Sección 10.1.4, “Formas de copia”) o por xargs(1) (ver Sección 9.4.9, “Repetición de una orden sobre archivos”). Esto se puede mejorar con la utilización de los parámetros de la orden.

La sintaxis básica de find(1) se puede resumir en lo que se muestra.

  • los parámetros condicionales son evaluados de izquierda a derecha

  • Esta evaluación se para una vez que se ha determinado la salida.

  • El «OR lógico« (que se escribe «-o» entre condiciones) tiene menor precedencia que el «AND lógico« (que se escribe «-a» o vacio entre condiciones).

  • El «NOT lógico« (que se escribe «!» antes de la condición) tiene mayor precedencia que el «AND lógico«.

  • La expresión «-prune» devuelve siempre un TRUE lógico y, si es un directorio, la búsqueda del archivos se detiene al llegar a este punto.

  • La expresión «-name» encaja con los nombres de archivos con el mismo tipo de expresiones regulares que se usan en el intérprete de órdenes (glob) (ver Sección 1.5.6, “Expansión de un patrón en el intérprete de órdenes”) pero también encaja su «.» inicial con metacaracteres como «*» y «?». (Nueva funcionalidad de POSIX)

  • La expresión «-regex» encaja con rutas absolutas al estilo de emacs BRE (ver Sección 1.6.2, “Expresiones regulares”) por defecto.

  • La expresión «-size» encaja con los archivos en base a su tamaño (el valor precedido de «+» para mayor y precedido de «-» para menor)

  • La expresión «-newer» encaja con archivos más recientes que el que consta como parámetro.

  • La expresión «-print0» devuelve siempre un VERDADERO lógico e imprime el nombre de archivo completo (finalizado con un null) por la salida estándar..

La orden find(1) se utiliza frecuentemente con el estilo que se muestra a continuación.

# find /path/to \
    -xdev -regextype posix-extended \
    -type f -regex ".*\.cpio|.*~" -prune -o \
    -type d -regex ".*/\.git" -prune -o \
    -type f -size +99M -prune -o \
    -type f -newer /path/to/timestamp -print0

Lo que se traduce en las acciones siguientes.

  1. Busca todo los archivos que comienzan con «/ruta/a»

  2. Limita la búsqueda globalmente al comienzo de su sistema de archivos y en su lugar utiliza ERE (ver Sección 1.6.2, “Expresiones regulares”)

  3. Excluye los archivos que encajan con las expresiones regulares «.*\.cpio» o «.*~» de la búsqueda sin procesarlos

  4. Excluye los directorios que encajan con la expresión regular de «.*/\.git» de la búsqueda sin procesarlas

  5. Excluye los archivos cuyo tamaño es mayor de 99 Megabytes (en bytes 1048576 ) de la búsqueda sin procesarla

  6. Imprime los nombres de los archivos que cumplen los criterios de búsqueda anteriores y son más nuevos que «/path/to/timestamp»

Por favor, tenga el cuenta la forma en que se utiliza «-prune -o»para excluir los archivos en los ejemplos anteriores.

[Nota] Nota

Para sistemas no Debian tipo Unix, algunas opciones de find(1) pueden no estar disponibles. En ese caso, por favor, considere ajustar los métodos de encaje y sustituya «-print0» con «-print». Puede que también necesite ajustar las órdenes parecidas.

Cuando elija los medios de almacenamiento de información para el archivo de información importante, debe tener cuidado con sus limitaciones. Para el respaldo de pequeñas cantidades de información personal, yo utilizo CD-R y DVD-R de una compañía conocida y los almaceno en un lugar fresco, sin luz, seco y limpio. (El medio de archivo en cinta parece una opción común en entornos profesionales).

[Nota] Nota

Un lugar resistente al fuego tiene sentido para documentos en papel. La mayor parte de los medios de almacenamiento de información tienen menor tolerancia a la temperatura que el papel. Yo normalmente mantengo almacenadas varias copias cifradas en diferentes ubicaciones seguras.

Tiempo de vida optimista de los medios de archivo (la mayor parte proveniente de los proveedores del medio).

  • Más de 100 años: papel libre de ácido con tinta

  • 100 años : almacenamiento óptico (CD/DVD, CD/DVD-R)

  • 30 años: almacenamiento magnético (cinta, disquete)

  • 20 años: almacenamiento óptico con cambio de fase (CD-RW)

Esto no tiene en cuenta los errores mecánicos debido al manejo etc.

Ciclo de escritura de medios de archivos optimista visto en internet (proveniente de la información aportada por el vendedor).

  • Más de 250,000 ciclos : discos duros

  • Más de 10,000 ciclos : memoria flash

  • 1,000 ciclos : CD/DVD-RW

  • 1 ciclo : CD/DVD-R, papel

[Atención] Atención

Los datos que vida de los medios de almacenamiento y de los ciclos de escritura que hemos comentado no se deben tener en cuenta para la toma de decisiones sobre almacenamiento de datos críticos. Por favor, consulte la información especifica del producto que proporciona el fabricante.

[Sugerencia] Sugerencia

Ya que los CD/DVD-R y el papel tienen únicamente un ciclo de escritura, impide de informa intrínseca la pérdida de datos por sobreescritura. ¡Esto es una ventaja!

[Sugerencia] Sugerencia

Si necesita copias de respaldo rápidas, frecuentes y de grandes cantidades de información, un disco duro en un equipo remoto con una conexión de red rápida, puede ser la única opción real.

[Sugerencia] Sugerencia

Si usas medios regrabables para tus copias de seguridad, usa un sistema de archivos como btrfs o zfs que admite solo la lectura de las instantáneas pueden ser una buena idea.

Los dispositivos de almacenamiento extraíbles pueden ser cualquiera de los siguientes.

Se pueden conectar de las siguientes maneras.

Los entornos de escritorio modernos como GNOME y KDE pueden montar automáticamente estos dispositivos extraíbles sin su entrada correspondiente en «/etc/fstab».

  • El paquete udisks2 proporciona un daemon (servicio) y utilidades asociadas para montar y desmontar estos dispositivos.

  • D-bus crea los actos para iniciar automáticamente dicho proceso.

  • PolicyKit aporta los permisos necesarios.

[Sugerencia] Sugerencia

Los dispositivos que se montan de forma automática pueden tener la opción de montaje «uhelper=» que lo utiliza umount(8).

[Sugerencia] Sugerencia

En los entornos de escritorio modernos el automontaje ocurre únicamente cuando el dispositivo no posee una entrada en «/etc/fstab».

El punto de montaje en el entorno de escritorio moderno se elige como "/media/username/disk_label" que se puede personalizar de la siguiente manera.

  • mlabel(1) para el sistema de archivos FAT

  • genisoimage(1) con la opción «-V» para el sistema de archivos ISO9660

  • tune2fs(1) con la opción «-L» para los sistemas de archivos ext2/ext3/ext4

[Sugerencia] Sugerencia

Puede que necesite proporcionar el tipo de codificación como una opción a la hora del montaje (ver Sección 8.1.3, “Codificación del nombre de archivo”).

[Sugerencia] Sugerencia

Si utiliza el menú del interfaz gráfico de usuario para desmontar un sistema de archivos puede eliminar su nodo de dispositivo generado dinámicamente como «/dev/sdc». Si quiere mantener el node del dispositivo, desmóntelo con la orden umount(8) desde el cursor del intérprete de órdenes.

Cuando comparte información con otro sistema por medio de un dispositivo de almacenamiento extraíble, podría formatearlo en un sistema de archivos que tenga soporte en ambos sistemas. Aquí esta una relación de posibles candidatos.

Tabla 10.3. Relación de posibles sistemas de archivos para dispositivos de almacenamiento extraíbles con sus casos de uso normales

nombre del sistema de archivos escenario típico de uso
FAT12 compartición de información entre diferentes plataformas mediante disquete (<32MiB)
FAT16 compartición de información entre plataformas con el uso de dispositivos como pequeños discos duros (<2GiB)
FAT32 compartición de información entre plaaformas mediante dispositivos como un gran disco duro (<8TiB, soportados por MS Windows95 OSR2 y posteriores)
exFAT Intercambio de datos multiplataforma en dispositivos de disco duro grandes (<512TiB, compatible con Windows XP, Mac OS X Snow Leopard 10.6.5 y Linux kernel versión 5.4 y superior)
NTFS compartición de información entre plataformas mediante un dispositivo como un gran disco duro (soporte nativo en MS Windows NT y versiones posteriores y soportado porNTFS-3G por medio de FUSE en Linux)
ISO9660 compartición de información entre plataformas de datos no volátiles en CD-R y DVD+/-R
UDF escritura incremental de información en CD-R y DVD+/+R (nuevo)
MINIX almacenamiento de información en archivos unix eficiente en disquete
ext2 almacenamiento de información en dispositivos como discos duro para sistemas Linux antiguos
ext3 almacenamiento de información en dispositivos como discos duro para sistemas Linux antiguos
ext4 compartición de datos en un dispositivo como un disco duro para sistemas Linux actuales
btrfs uso compartido de datos en el disco duro como dispositivo con sistemas Linux actuales con instantáneas de solo lectura

[Sugerencia] Sugerencia

Consulte Sección 9.9.1, “Cifrado de discos externos con dm-crypt/LUKS” para la compartición de información entre plataformas utilizando cifrado a nivel de dispositivo.

El sistema de archivos FAT esta soportado por casi todos los sistemas operativos modernos y es bastante útil para el intercambio de información por medio de un disco duro externo.

Cuando se formatea un disco duro externo con el sistemas de archivos FAT para compartir información entre diferentes plataformas, lo siguiente podrían ser las opciones más seguras.

Cuando se utiliza el sistema de archivos FAT o ISO9660 para compartir los datos, los siguientes son los problemas de seguridad a los que se debe prestar atención.

  • El archivo de archivos se recomienda utilizar primero tar(1), o cpio(1) par mantener los nombres de archivos largos, los enlaces blandos, los permisos originales de Unix y la información del propietario.

  • Para protegerlo de las limitaciones de tamaño divida el archivo en trozos menores de 2GiB con la orden split(1).

  • Cifre el archivo para asegurar que no existirán accesos no autorizados.

[Nota] Nota

En sistemas de archivos FAT debido a su diseño, el tamaño máximo de un archivo es (2^32 - 1) bytes = (4GiB - 1 byte). Para algunas aplicaciones antiguas en SSOO de 32 bits, el tamaño máximo de archivo es todavía menor (2^31 - 1) bytes = (2GiB - 1 byte). Debian no tiene este último problema.

[Nota] Nota

La propia compañía Microsoft no recomienda el uso de FAT para dispositivos o particiones menores de 200 MB. Microsoft resalta en su «Visión de conjunto de los sistemas de archivos FAT, HPFS y NTFS« su uso ineficiente del espacio de disco. Sin duda en Linux habitualmente usaremos el sistema de archivos ext4.

[Sugerencia] Sugerencia

Para más información acerca de sistemas de archivos y su uso, por favor lea «Cómo Sistemas de Archivos«.

Todos sabemos que los equipos fallan algunas veces o los errores humanos producen daños en el sistema o la información. Las operaciones de copia de seguridad y respaldo son una parte esencial de la administración de sistemas. Todos los errores posible ocurrirán alguna vez.

[Sugerencia] Sugerencia

Mantenga su sistema de respaldo simple y cree copias de seguridad con frecuencia. El hecho de tener copias de seguridad de la información es más importante que la forma en las que las realice.

Existen tres factores que determinan la directriz de copia de seguridad y recuperación real.

  1. Saber lo qué hay que respaldar y recuperar.

  2. Saber como respaldar y recuperar datos.

    • Seguridad de la información almacenada: protegerlo de la sobreescritura y del fallo del sistema

    • Frecuencia de respaldo: planificación del respaldo

    • Redundancia de respaldo: copias de la información

    • Proceso a prueba de fallos: una única y sencilla orden para crear la copia de respaldo

  3. Evaluación de riesgos y costes implícitos.

    • Peligro de pérdida de datos

      • Los datos deben estar al menos en diferentes particiones del disco, preferiblemente en diferentes discos y máquinas para resistir la corrupción del sistema de archivos. Los datos importantes se almacenan mejor en un sistema de archivos de solo lectura. [4]

    • Riesgo de violación de datos

      • Datos de identidad confidenciales, como "/etc/ssh/ssh_host_*_key", "~/.gnupg/*", "~/.ssh/*", "~/.local/share/keyrings/*", "/etc/passwd", "/etc/shadow", "popularity-contest.conf", "/etc/ppp/pap-secrets", y "/etc/exim4/passwd.client" se debe hacer una copia de seguridad cifrada. [5] (Ver Sección 9.9, “Trucos para cifrar información”.)

      • Nunca codifique la contraseña de inicio de sesión del sistema ni la frase de contraseña de descifrado en ningún script, incluso en cualquier sistema confiable. (Ver Sección 10.3.6, “Llavero de contraseña”.)

    • Modo de error en la recuperación y sus posibilidades

      • El hardware (especialmente el disco duro) se romperá

      • El sistema de archivos puede estar dañado y los datos que contiene pueden perderse

      • No se puede confiar en los sistemas de almacenamiento remoto para las brechas de seguridad

      • La protección de la contraseña débil puede verse fácilmente comprometida

      • El sistema de permisos de los archivos puede estar comprometido

    • Uso de recursos para el respaldo: humanos, hardware, software, …

      • Copia de seguridad automática programada con cron job o systemd timer job

[Sugerencia] Sugerencia

Puede recuperar la información de configuración debconf con «debconf-set-selections debconf-selections» y la selección de información de dpkg con «dpkg --set-selection <dpkg-selections.list».

[Nota] Nota

No respalde el contenido de los pseudo sistemas de archivos ubicados en /proc, /sys, /tmp y /run (consulte Sección 1.2.12, “procfs y sysfs” y Sección 1.2.13, “tmpfs”). A menos que sepa exactamente que está haciendo, estas ubicaciones contienen grandes cantidades de información poco relevantes.

[Nota] Nota

Puede que quiera parar algunos demonios como MTA (ver Sección 6.2.4, “Agente de transporte de correo (Mail transport agent, MTA)”) mientras respalda su información.

He aquí una relación de las suites de copias de seguridad más importantes en un sistema Debian.

Tabla 10.5. Relación de suites de utilidades de copias de respaldo

paquete popularidad tamaño descripción
bacula-common V:8, I:10 2305 Bacula: copia de respaldo en red, recuperación y verificación - archivos de apoyo comunes
bacula-client V:0, I:2 178 Bacula: copia de seguridad en red, recuperación y verificación - metapaquete cliente
bacula-console V:0, I:3 112 Bacula: copia de seguridad en red, recuperación y verificación - consola de texto
bacula-server I:0 178 Bacula: copia de seguridad en red, recuperación y verificación - metapaquete del servidor
amanda-common V:0, I:2 9897 Amanda: Archivador Automático de Discos en Red Avanzado Maryland (Bibliotecas)
amanda-client V:0, I:2 1092 Amanda: Archivador Automático de Discos en Red Avanzado Maryland (Cliente)
amanda-server V:0, I:0 1077 Amanda: Archivador Automático de Discos en Red Avanzado Maryland (Servidor)
backuppc V:2, I:2 3178 BackupPC sistema de copia de respaldo de PCs( basado en disco) de alto rendimiento y ámbito empresarial
duplicity V:30, I:50 1973 respaldo incremental (remoto)
deja-dup V:28, I:44 4992 Interfaz gráfica de usuario para duplicity
borgbackup V:11, I:20 3301 copia de seguridad deduplicada (remota)
borgmatic V:2, I:3 509 ayudante borgbackup
rdiff-backup V:4, I:10 1203 respaldo incremental (remoto)
restic V:2, I:6 21385 respaldo incremental (remoto)
backupninja V:2, I:3 360 sistema meta-backup extensible y ligero
flexbackup V:0, I:0 243 respaldo incremental (remoto)
slbackup V:0, I:0 151 respaldo incremental (remoto)
backup-manager V:0, I:1 566 herramienta de copia de seguridad en línea de órdenes
backup2l V:0, I:0 115 herramienta para medios externos para su copia/restauración con bajo mantenimiento (basado en discos)

Las herramientas de copias de seguridad están especializadas en diferentes aspectos.

  • Mondo Rescue es un sistema de copias de seguridad centrado en realizar la restauración completa de un sistema rápidamente desde una copia en CD/DVD etc. sin seguir el proceso normal de instalación del sistema.

  • Bacula, Amanda, y BackupPC son suites de utilidades de copia de respaldo con funcionalidad completa centradas en la copias de seguridad regulares a través de la red.

  • Duplicity, y Borg son utilidades de copia de seguridad más sencillas para estaciones de trabajo típicas.

Para una estación de trabajo personal, las utilidades completas de la suite de copia de seguridad diseñadas para el entorno de servidor pueden no servir bien. Al mismo tiempo, las utilidades de copia de seguridad existentes para estaciones de trabajo pueden presentar algunas deficiencias.

He aquí algunos consejos para facilitar las copias de seguridad con el mínimo esfuerzo por parte del usuario. Estas técnicas pueden utilizarse con cualquier utilidad de copia de seguridad.

Con propósito demostrativo, vamos a suponer que el usuario principal y el nombre de grupo es pingüino y crear un ejemplo de script de copia de seguridad e instantánea "/usr/local/bin/bkss.sh" como:

#!/bin/sh -e
SRC="$1" # source data path
DSTFS="$2" # backup destination filesystem path
DSTSV="$3" # backup destination subvolume name
DSTSS="${DSTFS}/${DSTSV}-snapshot" # snapshot destination path
if [ "$(stat -f -c %T "$DSTFS")" != "btrfs" ]; then
  echo "E: $DESTFS needs to be formatted to btrfs" >&2 ; exit 1
fi
MSGID=$(notify-send -p "bkup.sh $DSTSV" "in progress ...")
if [ ! -d "$DSTFS/$DSTSV" ]; then
  btrfs subvolume create "$DSTFS/$DSTSV"
  mkdir -p "$DSTSS"
fi
rsync -aHxS --delete --mkpath "${SRC}/" "${DSTFS}/${DSTSV}"
btrfs subvolume snapshot -r "${DSTFS}/${DSTSV}" ${DSTSS}/$(date -u --iso=min)
notify-send -r "$MSGID" "bkup.sh $DSTSV" "finished!"

Aquí, sólo se utiliza la herramienta básica rsync(1) para facilitar la copia de seguridad del sistema y el espacio de almacenamiento lo utiliza eficientemente Btrfs.

[Sugerencia] Sugerencia

Para su información: Este autor utiliza su propio script de shell similar "bss: Btrfs Subvolume Snapshot Utility" para su estación de trabajo.

A continuación se muestra un ejemplo para configurar la copia de seguridad con un solo clic de GUI.

Por cada clic en la GUI, se realiza una copia de seguridad de sus datos desde "~/Documents" a un dispositivo de almacenamiento USB y se crea una instantánea de sólo lectura.

A continuación se muestra un ejemplo de configuración para la copia de seguridad automática activada por el hecho de montar.

Para cada acto de montar, se realiza una copia de seguridad de los datos desde "~/Documents" a un dispositivo de almacenamiento USB y se crea una instantánea de sólo lectura.

Aquí, los nombres de las unidades de montaje systemd que systemd tiene actualmente en memoria se pueden pedir al gestor de servicios del usuario que llama con "systemctl --user list-units --type=mount".

A continuación se muestra un ejemplo de configuración para la copia de seguridad automática activada por la acción del temporizador.

  • Prepara un dispositivo de almacenamiento USB que se utilizará para la copia de seguridad como en Sección 10.2.3.1, “Copia de seguridad de la GUI”.

  • Crear un archivo de unidad de temporizador systemd "~/.config/systemd/user/snap-Documents.timer" como:

    [Unit]
    Description=Run btrfs subvolume snapshot on timer
    Documentation=man:btrfs(1)
    
    [Timer]
    OnStartupSec=30
    OnUnitInactiveSec=900
    
    [Install]
    WantedBy=timers.target
    
  • Crear un archivo de unidad de servicio systemd "~/.config/systemd/user/snap-Documents.service" como:

    [Unit]
    Description=Run btrfs subvolume snapshot
    Documentation=man:btrfs(1)
    
    [Service]
    Type=oneshot
    Nice=15
    ExecStart=/usr/local/bin/bkss.sh %h/Documents /media/%u/BKUP Documents
    IOSchedulingClass=idle
    CPUSchedulingPolicy=idle
    StandardOutput=append:%h/.cache/systemd-snap.log
    StandardError=append:%h/.cache/systemd-snap.log
    
  • Habilite esta configuración de unidad systemd con lo siguiente:

     $ systemctl --user enable snap-Documents.timer
    

Para cada acción del temporizador, se realiza una copia de seguridad de sus datos desde "~/Documents" a un dispositivo de almacenamiento USB y se crea una instantánea de sólo lectura.

Aquí, los nombres de las unidades de usuario del temporizador systemd que systemd tiene actualmente en memoria se pueden pedir al gestor de servicios del usuario llamante con "systemctl --user list-units --type=timer".

Para el sistema de escritorio moderno, este enfoque systemd puede ofrecer un control más fino que los tradicionales de Unix usando at(1), cron(8), o anacron(8).

La infraestructura de seguridad de la información es una combinación de herramientas de cifrado de datos, herramientas de resúmenes de mensajes y herramientas de firma.


Ver Sección 9.9, “Trucos para cifrar información” en dm-crypt y fscrypt que implementan una infraestructura de cifrado automático de datos a través de módulos del núcleo de Linux.

He aquí las órdenes GNU Privacy Guard para la gestión básica de claves.


Aquí esta el significado de un código seguro.


Lo siguiente carga mi clave «1DD8D791» a un popular servidor de claves «hkp://keys.gnupg.net».

$ gpg --keyserver hkp://keys.gnupg.net --send-keys 1DD8D791

Un buen servidor de claves por defecto configurado en «~/.gnupg/gpg.conf» (o su ubicación antigua «~/.gnupg/options») contiene lo siguiente.

keyserver hkp://keys.gnupg.net

Lo siguiente obtiene las claves desconocidas del servidor de claves.

$ gpg --list-sigs --with-colons | grep '^sig.*\[User ID not found\]' |\
          cut -d ':' -f 5| sort | uniq | xargs gpg --recv-keys

Existió un error en el Servidor de Claves Públicas OpenPGP (pre versión 0.9.6) el cual corrompía las claves con más de dos subclaves. El nuevo paquete gnupg (>1.2.1-2) pueden gestionar estas subclaves corruptas. Consulte gpg(1) bajo la opción «--repair-pks-subkey-bug».

Aquí están los ejemplos de utilización de las órdenes GNU Privacy Guard sobre archivos.


md5sum(1) proporciona la funcionalidad de hacer resúmenes de un archivo utilizando el método descrito en rfc1321 y verificar cada archivo con él.

$ md5sum foo bar >baz.md5
$ cat baz.md5
d3b07384d113edec49eaa6238ad5ff00  foo
c157a79031e1c40f85931829bc5fc552  bar
$ md5sum -c baz.md5
foo: OK
bar: OK
[Nota] Nota

La computación de la suma MD5 es menos intensiva en CPU que la de firma criptográfica de GNU Privacy Guard (GnuPG). Normalmente, solo los archivos resumen de alto nivel están firmados criptologicamente para asegurar la integridad de la información.

Existen múltiples herramientas para el código fuente. Las siguientes órdenes llamaron mi atención.

Tabla 10.10. Relación de las herramientas para mezclar código fuente

paquete popularidad tamaño orden descripción
patch V:97, I:700 248 patch(1) aplica un archivo diff al original
vim V:95, I:369 3743 vimdiff(1) compare dos archivos en vim uno contra otro
imediff V:0, I:0 200 imediff(1) herramienta interactiva de fusión 2/3 a pantalla completa
meld V:7, I:30 3536 meld(1) compara y mezcla archivos (GTK)
wiggle V:0, I:0 175 wiggle(1) aplica parches rechazados
diffutils V:862, I:996 1735 diff(1) compara archivos línea a línea
diffutils V:862, I:996 1735 diff3(1) compara y mezcla tres archivos línea a línea
quilt V:2, I:22 871 quilt(1) gestiona un conjunto de parches
wdiff V:7, I:51 648 wdiff(1) muestra las palabras diferentes en dos archivos de textos
diffstat V:13, I:121 74 diffstat(1) produce un histograma de los cambios de diff
patchutils V:16, I:119 232 combinediff(1) crea un parche acumulativo con dos parches incrementales
patchutils V:16, I:119 232 dehtmldiff(1) extrae un diff de un página HTML
patchutils V:16, I:119 232 filterdiff(1) extrae o excluye diffs de un archivo diff
patchutils V:16, I:119 232 fixcvsdiff(1) repara archivos diff creados por CVS que son malinterpretados por patch(1)
patchutils V:16, I:119 232 flipdiff(1) intercambia el orden de dos parches
patchutils V:16, I:119 232 grepdiff(1) muestra que archivos son modificados por un parche de acuerdo a una expresión regular
patchutils V:16, I:119 232 interdiff(1) muestra las diferencias entre dos archivos diff unificados
patchutils V:16, I:119 232 lsdiff(1) muestra los archivos modificados por un parche
patchutils V:16, I:119 232 recountdiff(1) recalcula las cuentas y desplazamientos en un contexto diff unificado
patchutils V:16, I:119 232 rediff(1) repara los desplazamientos y cuentas en un diff editado de forma manual
patchutils V:16, I:119 232 splitdiff(1) selecciona parches incrementales
patchutils V:16, I:119 232 unwrapdiff(1) deshace los parches que han sido mezclados
dirdiff V:0, I:1 167 dirdiff(1) muestra las diferencias y mezcla los cambios entre árboles de directorio
docdiff V:0, I:0 553 docdiff(1) compara dos archivos palabra a palabra / carácter a carácter
makepatch V:0, I:0 100 makepatch(1) genera archivos de parches extendidos
makepatch V:0, I:0 100 applypatch(1) aplica archivos de parches extendidos

Git es la herramienta de elección en estos días para el sistema de control de versiones (VCS) ya que Git puede hacerlo todo tanto para la gestión local como remota del código fuente.

Debian proporciona servicios Git gratuitos a través de Servicio Debian Salsa. Su documentación puede encontrarse en https://wiki.debian.org/Salsa .

Aquí hay algunos paquetes relacionados con Git.


Puede que quiera guardar parte de la configuración global en «~/.gitconfig» como su nombre y la dirección de correo electrónico que utiliza Git como se muestra.

$ git config --global user.name "Name Surname"
$ git config --global user.email [email protected]

También puedes personalizar el comportamiento predeterminado de Git de la siguiente manera.

$ git config --global init.defaultBranch main
$ git config --global pull.rebase true
$ git config --global push.default current

Si esta acostumbrado a utilizar órdenes Subversion o CVS, puede que quiera crear algunos alias de orden como se muestra.

$ git config --global alias.ci "commit -a"
$ git config --global alias.co checkout

Puede comprobar la configuración global como se muestra.

$ git config --global --list

La operación Git involucra varios datos.

  • El árbol de trabajo que contiene los archivos del usuario y en el que se realizan los cambios.

    • Los cambios a registrar deben ser explícitamente seleccionados y puestos en escena en el índice. Se trata de los comandos git add y git rm.

  • El índice mantiene los archivos organizados.

    • Los archivos almacenados se enviarán al repositorio local en las solicitudes posteriores. Este es el comando git commit.

  • El repositorio local mantiene los archivos confirmados.

    • Git realiza un seguimiento del historial vinculado de los datos comprometidos y lo administra como una bifurcación en el repositorio.

    • El repositorio local puede enviar datos al repositorio remoto con el comando git push.

    • El repositorio local puede recibir datos del repositorio remoto mediante los comandos git fetch y git pull.

      • El comando git pull ejecuta el comando git merge o git rebase después del comando git fetch.

      • Aquí, git merge combina los extremos de las historias de dos ramas separadas en un solo punto. (A falta de un git pull personalizado, este es el valor predeterminado, y también es bueno para que los autores anteriores publiquen ramas para muchas personas)

      • Aquí, git rebase crea una única rama del historial secuencial de la rama remota, seguida de la rama local. (Este es el caso de la personalización pull.rebase true y esto puede ser válido para el resto de nosotros.)

  • El repositorio remoto que contiene los archivos confirmados.

    • La comunicación con el repositorio remoto utiliza protocolos de comunicación seguros como SSH o HTTPS.

El árbol de trabajo son los archivos fuera del directorio .git/. Los archivos dentro del directorio .git/ contienen el índice, los datos del repositorio local y algunos archivos de texto de configuración de git.

Aquí hay una descripción general de los principales comandos de Git.


Aquí hay algunos consejos para Git.

Tabla 10.13. Consejos para Git

Línea de comandos Git función
gitk --all ver el historial completo de Git y operar en ellos, como restablecer HEAD a otro compromiso, seleccionar un parche, crear etiquetas y ramas...
git stash recuperar el árbol de trabajo limpio sin pérdida de datos
git remote -v verifica la configuración del control remoto
git branch -vv verifica la configuración de la rama del repositorio
git status mostrar el estado del árbol de trabajo
git config -l listar la configuración de git
git reset --hard HEAD; git clean -x -d -f revertir todos los cambios en el árbol de trabajo y limpiarlos por completo
git rm --cached filename revertir índice por pasos cambiado por git add filename
git reflog obtener el registro de referencia (útil para recuperar confirmaciones de la rama eliminada)
git branch new_branch_name HEAD@{6} crear una nueva rama a partir de la información de reflog
git remote add new_remote URL añadir un repositorio remoto new_remote apuntado por URL
git remote rename origin upstream cambiar el nombre del repositorio remoto de origin a upstream
git branch -u upstream/branch_name establecer el seguimiento remoto en el repositorio remoto upstream y su nombre de rama branch_name.
git remote set-url origin https://foo/bar.git cambiar la URL de origin
git remote set-url --push upstream DISABLED deshabilitar pulsar para upstream (Editar .git/config para volver a habilitar)
git remote update upstream Obtener actualizaciones de todas las ramas remotas en el repositorio upstream
git fetch upstream foo:upstream-foo crear una rama local (posiblemente huérfana) upstream-foo como copia de la rama foo en el repositorio upstream
git checkout -b topic_branch ; git push -u topic_branch origin hacer un nuevo topic_branch y llevarlo a origin
git branch -m oldname newname cambiar el nombre del nombre de la sucursal local
git push -d origin branch_to_be_removed eliminar una rama remota (nuevo método)
git push origin :branch_to_be_removed eliminar la rama remota (método antiguo)
git checkout --orphan unconnected crear una rama desconectada nueva
git rebase -i origin/main reorder/drop/squish commits desde origin/main para limpiar el historial de la rama
git reset HEAD^; git commit --amend squash los últimos 2 commits en uno
git checkout topic_branch ; git merge --squash topic_branch squash todo topic_branch en un commit
git fetch --unshallow --update-head-ok origin '+refs/heads/*:refs/heads/*' convertir un clon superficial en un clon completo de todas las ramas
git ime dividir el último commit en una serie commits de archivos por archivos más pequeños, etc. (se requiere el paquete imediff)
git repack -a -d; git prune Vuelve a empaquetar el repositorio local en un paquete separado (esto puede limitar las oportunidades de recuperar los datos perdidos de ramas eliminadas, etc.)

[Aviso] Aviso

No utilice etiquetas con caracteres blancos a pesar de que algunas herramientas permiten su utilización como gitk(1). Puede provocar errores en otras órdenes git.

[Atención] Atención

Si una rama local que se ha enviado a un repositorio remoto se reubica o aplasta, enviar esta rama tiene riesgos y requiere la opción --force. Por lo general, esto no es aceptable para la rama main, pero puede ser aceptable para una rama temática antes de fusionarse con la rama main.

[Atención] Atención

Llamar una suborden git directamente como «git-xyz» desde la línea de órdenes se ha declarado obsoleto desde principios de 2006.

[Sugerencia] Sugerencia

Si existe un archivo ejecutable git-foo en la ruta determinada por $PATH, al escribir «git foo» sin guión en la línea de órdenes llama a git-foo. Esto es una funcionalidad de la orden git.

Ver lo siguiente.



[4] Un medio de escritura única, como CD / DVD-R, puede evitar accidentes de sobrescritura. (Ver Sección 9.8, “Datos binarios” para saber cómo escribir en el medio de almacenamiento desde la línea de comandos del shell. El entorno GUI de escritorio GNOME le brinda fácil acceso a través del menú: "Lugares→Creador de CD/DVD".)

[5] Algunos de estos datos no se pueden regenerar introduciendo la misma cadena de entrada en el sistema.

[6] Si utilizas "~/.vimrc" en lugar de "~/.vim/vimrc", sustituye lo según corresponda.