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 extraibles
10.1.8. Selección del sistema de archivos para compartir datos
10.1.9. Compartición de información a través de la red
10.2. Respaldo y recuperación
10.2.1. Backup and recovery policy
10.2.2. Suites de utilidades de copias de seguridad
10.2.3. Personal backup
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. Password keyring
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. Interactive merge
10.5. Git
10.5.1. Configuración del cliente Git
10.5.2. Basic Git commands
10.5.3. Git tips
10.5.4. Algunas referencias sobre Git
10.5.5. Other version control systems

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 extraibles

  • 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:920, I:999 3144 .tar tar(1) el archivador estándar (estándar de facto)
cpio V:416, I:998 1141 .cpio cpio(1) Archivador estilo Unix System V, utilizado con find(1)
binutils V:160, I:642 109 .ar ar(1) archivador para la creación de bibliotecas estáticas
fastjar V:1, I:19 183 .jar fastjar(1) archivador para Java (similar a zip)
pax V:10, I:18 170 .pax pax(1) nuevo archivador estándar POSIX, comprometido entre tar y cpio
gzip V:882, I:999 252 .gz gzip(1), zcat(1), … Utilidad de compresión GNU LZ77 (estándar de facto)
bzip2 V:161, I:970 121 .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 sintáxis similar)
lzma V:1, I:20 149 .lzma lzma(1) LZMA compression utility with higher compression ratio than gzip(1) (deprecated)
xz-utils V:432, I:979 1216 .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ápdio que bzip2; es el sustituyo del la utilidad de compresión LZMA)
zstd V:34, I:91 2027 .zstd zstd(1), zstdcat(1), … Zstandard fast lossless compression utility
p7zip V:111, I:454 987 .7z 7zr(1), p7zip(1) El archivador de archivos 7-Zip tiene el alto índice de compresión (compresión LZMA)
p7zip-full V:116, I:460 4664 .7z 7z(1), 7za(1) El archivador de archivos 7-Zip tiene un alto nivel de compresión (compresión LZMA y otros)
lzop V:13, I:133 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 sintáxis parecida)
zip V:47, I:398 623 .zip zip(1) InfoZIP: herramienta de archivo y compresión DOS
unzip V:100, I:772 385 .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 algorimo de transferencia delta envia ú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, “List of other version control system tools” pueden operar como herramientas de sincronización y copia en múltiples sentidos.

Aquí están diferentes maneras de copiar el contenido completo de un directotio «./origen» utilizando diferentes herramientas.

  • Copia local: directorio «./origen» → directorio «/destino»

  • Copia remota: directorio «./origen» en el equipo local → directorio «/destino» en el equipo «usuario@equipo.dom»

rsync(8):

# cd ./source; rsync -aHAXSv . /dest
# cd ./source; rsync -aHAXSv . user@host.dom:/dest

Puede utilizar la sintáxis de «barra «/« en el directorio origen«.

# rsync -aHAXSv ./source/ /dest
# rsync -aHAXSv ./source/ user@host.dom:/dest

Otra forma es como se muestra.

# cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . /dest
# cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . user@host.dom:/dest

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

# cd ./source; cp -a . /dest
# cd ./source; scp -pr . user@host.dom:/dest

GNU tar(1):

# (cd ./source && tar cf - . ) | (cd /dest && tar xvfp - )
# (cd ./source && tar cf - . ) | ssh user@host.dom '(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) es utilizada 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” and Sección 10.1.4, “Formas de copia”) o por xargs(1) (consulte 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 sintáxis 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 «O lógico« (que se escribe «-o» entre condiciones) tiene menor precedencia que el «Y lógico« (que se escribe «-a» o vacio entre condiciones).

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

  • La expresión «-prune» devuelve siempre un VERDADERO lógico y, si es un directorio, la búsqueda del archivos es detenida 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) (consulte 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 (consulte 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 imprimet 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 (consulte 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. Impreme los nombres de los archivos que cumplen los criterios de búsqueda anterirores y son más nuevos que el «/ruta/al/sellodetiempo»

Tenga el cuenta la forma en que se utiliza «-prune -o»para excluir los archvios 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ñia 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 fuegoA fire-resistant safe 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, diquete)

  • 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 deben ser tenidos en cuenta para la toma de decisiones sobre almacenamiento de datos críticos. Por favor, consulte la informaciń 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 sonre una conexión de red rápida, puede ser la única opción real.

[Sugerencia] Sugerencia

If you use re-writable media for your backups, use of filesystem such as btrfs or zfs which supports read-only snapshots may be a good idea.

Un dispositivo de almacenamiento extraible puede pertenecer a uno de los siguientes tipos:

Pueden ser conectados mediante:

Los entornos de escritorio modernos como GNOME y KDE pueden montar automaticamente estos dispositivos extraibles sin su entrada correspondiente en «/etc/fstab».

  • udisks2 package provides a daemon and associated utilities to mount and unmount these devices.

  • D-bus crea los eventos 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 es utilizada por umount(8).

[Sugerencia] Sugerencia

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

Mount point under modern desktop environment is chosen as "/media/username/disk_label" which can be customized by the following.

  • 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 (consulte Sección 8.1.3, “Códificación del nombre del 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 extraible, 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 extrabiles con sus casos de uso normales

filesystem name typical usage scenario
FAT12 compartición de información entre diferentes platadormas 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 plaformas mediante dispositivos como un gran disco duro (<8TiB, soportados por MS Windows95 OSR2 y posteriores)
exFAT cross platform sharing of data on the large hard disk like device (<512TiB, supported by WindowsXP, Mac OS X Snow Leopard 10.6.5, and Linux kernel since 5.4 release)
NTFS compartición de información entre platadormas mediante un dispositivo como un gran disco duro (soporte nativo en MS Windows NT y versiones posteriores y soportdado 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 com oun disco duro para sistemas Linux actuales
btrfs sharing of data on the hard disk like device with current Linux systems with read-only snapshots

[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 casit 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 platadormas, lo siguiente podrían ser las opciones más seguras.

Cuando se utilizan los sistemas de archivos FAT o ISO9660 para compartición de información tenga en cuenta las consideraciones siguientes:

  • 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ñia Microsoft no recomienda el uso de FAT para dispostivos 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: planficació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.

    • Risk of data when lost

      • Data should be at least on different disk partitions preferably on different disks and machines to withstand the filesystem corruption. Important data are best stored on a read-only filesystem. [4]

    • Risk of data when breached

      • Sensitive identity data such as "/etc/ssh/ssh_host_*_key", "~/.gnupg/*", "~/.ssh/*", "~/.local/share/keyrings/*", "/etc/passwd", "/etc/shadow", "popularity-contest.conf", "/etc/ppp/pap-secrets", and "/etc/exim4/passwd.client" should be backed up as encrypted. [5] (See Sección 9.9, “Trucos para cifrar información”.)

      • Never hard code system login password nor decryption passphrase in any script even on any trusted system. (See Sección 10.3.6, “Password keyring”.)

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

      • Hardware (especially HDD) will break

      • Filesystem may be corrupted and data in it may be lost

      • Remote storage system can't be trusted for security breaches

      • Weak password protection can be easily compromised

      • File permission system may be compromised

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

      • Automatic scheduled backup with cron job or systemd timer job

[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

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

Aquí estan una relación con 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
dump V:1, I:5 351 4.4 BSD dump(8) y restore(8) para sistemas de archivos ext2/ext3/ext4
xfsdump V:0, I:8 848 dump y restore con xfsdump(8) y xfsrestore(8) para XFS sistemas de archivos en GNU/Linux e IRIX
backupninja V:3, I:4 367 sistema meta-backup extensible y ligero
bacula-common V:10, I:12 2120 Bacula: copia de respaldo en red, recuperación y verificación - archivos de apoyo comunes
bacula-client I:3 183 Bacula: copia de seguridad en red, recuperación y verificación - metapaquete cliente
bacula-console V:0, I:4 104 Bacula: copia de seguridad en red, recuperación y verificación - consola de texto
bacula-server I:1 183 Bacula: copia de seguridad en red, recuperación y verificación - metapaquete del servidor
amanda-common V:0, I:2 9937 Amanda: Archivador Automático de Discos en Red Avanzado Maryland (Bibliotecas)
amanda-client V:0, I:2 1085 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)
backup-manager V:0, I:1 571 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)
backuppc V:2, I:2 3178 BackupPC sistema de copia de respadlo de PCs( basado en disco) de alto rendimiento y ámbito empresarial
duplicity V:19, I:40 1859 respaldo incremental (remoto)
flexbackup V:0, I:0 243 respaldo incremental (remoto)
rdiff-backup V:5, I:12 1162 respaldo incremental (remoto)
restic V:2, I:5 21593 respaldo incremental (remoto)
slbackup V:0, I:0 151 respaldo incremental (remoto)

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 rapidamente desde una copia en CD/DVD etc. sin seguir el proceso normal de instalación del sistema.

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

  • Regular backups of user data can be realized by a simple script (Sección 10.2.3, “Personal backup”).

Las herramientas básicas detalladas en Sección 10.1.1, “Herramientas de repositorios y compresión” and Sección 10.1.2, “Herramientas de sincronización y copia” pueden ser utilizadas para permiteir la copias de seguridad del sistema por medio de archivos de órdenes personalizados. Estos archivos de órdenes pueden ser mejorados como se muestra.

  • El paquete restic permite las copias de seguridad incrementales (en remoto).

  • El paquete rdiff-backup permite las copias de seguridad incrementales (en remoto).

  • El paquete dump ayuda en el archivo y restauración incremental del sistema de archivos completo de forma incremental y eficiente.

[Sugerencia] Sugerencia

Consulte los archivos en «/usr/share/doc/dump/» y «Es dump de verdad en deshuso?« para aprender sobre el paquete dump.

For a personal Debian desktop system running testing suite, I only need to protect personal and critical data. I reinstall system once a year anyway. Thus I see no reason to backup the whole system or to install a full featured backup utility.

At the same time, it is very valuable to have frequent recent snapshots of personal data and system configuration, and occasional full backups of personal data.

I usually make these snapshots and backups with a simple shell script bss. This script is a short shell which uses standard utilities: btrfs subvolume snapshot, rsync. For data encryption, disk image is created by fallocate(1) and configured with cryptsetup(8).

[Sugerencia] Sugerencia

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

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.


See Sección 9.9, “Trucos para cifrar información” on dm-crypt and fscrypt which implement automatic data encryption infrastructure via Linux kernel modules.

Aquí están 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 corrompia 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í estan los ejemplos de utilización de las órdenes GNU Privacy Guard sobre archivos.


md5sum(1) proporciona la funcionalidad de hacer resumenes 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:90, I:702 248 patch(1) aplica un archivo diff al original
vim V:97, I:390 3570 vimdiff(1) compare dos archivos en vim uno contra otro
imediff V:0, I:0 169 imediff(1) interactive full screen 2/3-way merge tool
meld V:11, I:34 3500 meld(1) compara y mezcla archivos (GTK)
wiggle V:0, I:0 174 wiggle(1) aplica parches rechazados
diffutils V:876, I:995 1597 diff(1) compara archivos línea a línea
diffutils V:876, I:995 1597 diff3(1) compara y mezcla tres archivos línea a línea
quilt V:3, I:26 773 quilt(1) gestiona un conjunto de parches
wdiff V:8, I:59 648 wdiff(1) muestra las palabras diferentes en dos archivos de textos
diffstat V:12, I:127 74 diffstat(1) produce un histográma de los cambios de diff
patchutils V:14, I:125 232 combinediff(1) crea un parche acumulativo con dos parches incrementales
patchutils V:14, I:125 232 dehtmldiff(1) extrae un diff de un página HTML
patchutils V:14, I:125 232 filterdiff(1) extrae o excluye diffs de un archivo diff
patchutils V:14, I:125 232 fixcvsdiff(1) repara archivos diff creados por CVS que son malinterpretados por patch(1)
patchutils V:14, I:125 232 flipdiff(1) intercambia el orden de dos parches
patchutils V:14, I:125 232 grepdiff(1) muestra que archivos son modificados por un parche de acuerdo a una expresión regular
patchutils V:14, I:125 232 interdiff(1) muestra las diferencias entre dos archivos diff unificados
patchutils V:14, I:125 232 lsdiff(1) muestra los archivos modificados por un parche
patchutils V:14, I:125 232 recountdiff(1) recalcula las cuentas y desplazamientos en un contexto diff unificado
patchutils V:14, I:125 232 rediff(1) repara los desplazamientos y cuentas en un diff editado de forma manual
patchutils V:14, I:125 232 splitdiff(1) selecciona parches incrementales
patchutils V:14, I:125 232 unwrapdiff(1) deshace los parches que han sido mezclados
dirdiff V:0, I:2 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 is the tool of choice these days for the version control system (VCS) since Git can do everything for both local and remote source code management.

Debian provides free Git services via Debian Salsa service. Its documentation can be found at https://wiki.debian.org/Salsa .

Here are some Git related packages.


Git operation involves several data.

  • The working tree which holds user facing files and you make changes to them.

    • The changes to be recorded must be explicitly selected and staged to the index. This is git add and git rm commands.

  • The index which holds staged files.

    • Staged files will be committed to the local repository upon the subsequent request. This is git commit command.

  • The local repository which holds committed files.

    • Git records the linked history of the committed data and organizes them as branches in the repository.

    • The local repository can send data to the remote repository by git push command.

    • The local repository can receive data from the remote repository by git fetch and git pull commands.

      • The git pull command performs git merge or git rebase command after git fetch command.

      • Here, git merge combines two separate branches of history at the end to a point. (This is default of git pull without customization and may be good for upstream people who publish branch to many people.)

      • Here, git rebase creates one single branch of sequential history of the remote branch one followed by the local branch one. (This is pull.rebase true customization case and may be good for rest of us.)

  • The remote repository which holds committed files.

    • The communication to the remote repository uses secure communication protocols such as SSH or HTTPS.

The working tree is files outside of the .git/ directory. Files inside of the .git/ directory hold the index, the local repository data, and some git configuration text files.

Here is an overview of main Git commands.


Here are some Git tips.

Tabla 10.13. Git tips

Git command line función
gitk --all see complete Git history and operate on them such as resetting HEAD to another commit, cheery-picking patches, creating tags and branches ...
git stash get the clean working tree without loosing data
git remote -v check settings for remote
git branch -vv check settings for branch
git status show working tree status
git config -l list git settings
git reset --hard HEAD; git clean -x -d -f revert all working tree changes and clean them up completely
git rm --cached filename revert staged index changed by git add filename
git reflog get reference log (useful for recovering commits from the removed branch)
git branch new_branch_name HEAD@{6} create a new branch from reflog information
git remote add new_remote URL add a new_remote remote repository pointed by URL
git remote rename origin upstream rename the remote repository name from origin to upstream
git branch -u upstream/branch_name set the remote tracking to the remote repository upstream and its branch name branch_name.
git remote set-url origin https://foo/bar.git change URL of origin
git remote set-url --push upstream DISABLED disable push to upstream (Edit .git/config to re-enable)
git checkout -b topic_branch ; git push -u topic_branch origin make a new topic_branch and push it to origin
git branch -m oldname newname rename local branch name
git push -d origin branch_to_be_removed remove remote branch (new method)
git push origin :branch_to_be_removed remove remote branch (old method)
git checkout --orphan unconnected crear una rama desconectada nueva
git fetch upstream foo:upstream-foo create a local (possibly orphan) upstream-foo branch as a copy of foo branch the upstream repository
git rebase -i origin/main reorder/drop/squish commits from origin/main to clean branch history
git reset HEAD^; git commit --amend squash last 2 commits into one
git checkout topic_branch ; git merge --squash topic_branch squash entire topic_branch into a commit
git fetch --unshallow --update-head-ok origin '+refs/heads/*:refs/heads/*' convert a shallow clone to the full clone of all branches
git ime split the last commit into a series of file-by-file smaller commits etc. (imediff package required)
git repack -a -d; git prune repack the local repository into single pack (this may limit chance of lost data recovery from erased branch 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

If a local branch which has been pushed to remote repository is rebased or squashed, pushing this branch has risks and requires --force option. This is usually not an acceptable for main branch but may be acceptable for a topic branch before merging to main branch.

[Atención] Atención

LLamar una subórden git directamento como «git-xyz» desde la línea de órdenes ha sido declarado obsoleto desde principios de 2006.

[Sugerencia] Sugerencia

If there is a executable file git-foo in the path specified by $PATH, entering "git foo" without hyphen to the command line invokes this git-foo. This is a feature of the git command.

Consulte lo siguiente.



[4] A write-once media such as CD/DVD-R can prevent overwrite accidents. (See Sección 9.8, “Datos binarios” for how to write to the storage media from the shell commandline. GNOME desktop GUI environment gives you easy access via menu: "Places→CD/DVD Creator".)

[5] Some of these data can not be regenerated by entering the same input string to the system.

[6] If you use "~/.vimrc" instead of "~/.vim/vimrc", please substitute accordingly.