Tabla de contenidos
Se describen las herramientas y operaciones para la gestión de información en formato binarios y texto.
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) |
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 | |
---|---|
No asigne la variable « |
Cuando se realiza una compresión gzip de un archivo
tar
(1) se utiliza la extensión de archivo
«.tgz
» o «.tar.gz
».
La compresión xz de un archivo tar
(1) utiliza la
extensión de archivo «.txz
» o
«.tar.xz
».
Los métodos de compresión más populares entre las herramientas FOSS como tar
(1) ha evolucionado
como se muestra: gzip
→ bzip2
→
xz
cp
(1), scp
(1) y
tar
(1) puede tener alguna limitación con archivos
especiales. Cpio
(1) es más versátil.
cpio
(1) esta diseñado para ser utilizado con
find
(1) y otras órdenes y archivos de órdenes para la
creación de copias de respaldo ya que la parte de selección de archivo del
archivo de órdenes puede ser probado de forma independiente.
La estructura interna de los archivos de información de Libreoffice son
archivos «.jar
» los cuales pueden incluso abrirse con
unzip
.
La herramienta de archivo multiplataforma de facto es
zip
. Para conseguir la máxima compatibilidad utilícela
mediante «zip -rX
». Si el tamaño del fichero es
importante añada también la opción «-s
».
Aquí hay un resumen de las herramientas de copia y respaldo disponibles en el sistema Debian.
Tabla 10.2. Relación de las herramientas de copia y sincronización
paquete | popularidad | tamaño | herramienta | función |
---|---|---|---|---|
coreutils
|
V:880, I:999 | 18307 | GNU cp | copia archivos y directorios localmente («-a« para hacerlo recursivo) |
openssh-client
|
V:866, I:996 | 4959 | scp | copia archivos y directorios de forma remota (cliente,
-r » para hacerlo recursivo) |
openssh-server
|
V:730, I:814 | 1804 | sshd | copia archivos y directorios de forma remota (servidor remoto) |
rsync
|
V:246, I:552 | 781 | sincronización y respaldo remoto en un sentido | |
unison
|
V:3, I:15 | 14 | sincronización y respaldo remoto en dos direcciones |
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 | |
---|---|
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í están algunas formas de archivar y desarchivar el contenido entero de
un directorio «./origen
» utilizando diferentes
herramientas.
GNU tar
(1):
$ tar -cvJf archive.tar.xz ./source $ tar -xvJf archive.tar.xz
Otra forma es como se muestra.
$ find ./source -xdev -print0 | tar -cvJf archive.tar.xz --null -T -
cpio
(1):
$ find ./source -xdev -print0 | cpio -ov --null > archive.cpio; xz archive.cpio $ zcat archive.cpio.xz | cpio -i
Aquí hay diferentes maneras de copiar el contenido completo de un directorio
«./source
» utilizando diferentes herramientas.
Copia local: directorio «./origen
» → directorio
«/destino
»
Copia remota: directorio «./origen
» en el equipo local →
directorio «/destino
» en el equipo
«[email protected]
»
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 | |
---|---|
|
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.
Busca todo los archivos que comienzan con «/ruta/a
»
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”)
Excluye los archivos que encajan con las expresiones regulares
«.*\.cpio
» o «.*~
» de la búsqueda sin
procesarlos
Excluye los directorios que encajan con la expresión regular de
«.*/\.git
» de la búsqueda sin procesarlas
Excluye los archivos cuyo tamaño es mayor de 99 Megabytes (en bytes 1048576 ) de la búsqueda sin procesarla
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 | |
---|---|
Para sistemas no Debian tipo Unix, algunas
opciones de |
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 | |
---|---|
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 | |
---|---|
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 | |
---|---|
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 | |
---|---|
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. |
Los dispositivos de almacenamiento extraíbles pueden ser cualquiera de los siguientes.
Cámara digital
reproductor digital de música
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
».
Sugerencia | |
---|---|
Los dispositivos que se montan de forma automática pueden tener la opción de
montaje « |
Sugerencia | |
---|---|
En los entornos de escritorio modernos el automontaje ocurre únicamente
cuando el dispositivo no posee una entrada en
« |
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 | |
---|---|
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 | |
---|---|
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 « |
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 | |
---|---|
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.
Se particiona con fdisk
(8), cfdisk
(8)
o parted
(8) (ver Sección 9.6.2, “Configuración del particionado de disco”) en una única partición primaria y
la marcamos como se muestra.
Tipo «6« para FAT15 para dispositivos menores de 2 GB.
Tipo «c« para FAT32 (LBA) para dispositivos grandes.
Formateemos la partición primaria con mkfs.vfat
(8) como
se muestra.
Si el nombre del dispositivo fuera, p. ej. «/dev/sda1
»
para FAT16
La opción explícita para FAT32 y su nombre de dispositivo,
p.ej. «-F 32 /dev/sda1
»
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 | |
---|---|
En sistemas de archivos FAT debido a su diseño, el tamaño máximo de un
archivo es |
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 | |
---|---|
Para más información acerca de sistemas de archivos y su uso, por favor lea «Cómo Sistemas de Archivos«. |
Para compartir información con otros sistemas a través de internet, debería utilizar un servicio común. He aquí algunas pistas.
Tabla 10.4. Relación de los servicios de red disponibles con el escenario típico de utilización
servicio de red | descripción del caso de uso normal |
---|---|
SMB/CIFS sistema de archivos en red montado con Samba | compartición de archivos por medio de«Microsoft Windows Network«, consulte
smb.conf (5) y Cómo Oficial y Guía de Referencia
de 3.x.x o el paquete samba-doc |
Sistema de archivos montado NFS con el núcleo de Linux | compartir archivos mediante una «Red Unix/Linux«, ver
exports (5) y Linux
NFS-HOWTO |
servicio HTTP | compartiendo archivos entre cliente/servidor web |
servicio HTTPS | compartiendo archivos entre servidor web/cliente con cifrado con «Secure Sockets Layer« (SSL) o «Transport Layer Security« (TLS) |
servicio FTP | compartiendo archivos entre servidor FTP/cliente |
Aunque los sistemas de archivos montados a través de la red pueden ser útiles, estos pueden ser inseguros. Sus conexiones de red deben ser securos como se muestra.
Consulte además Sección 6.5, “Servidores de aplicaciones en otras redes” y Sección 6.6, “Otros clientes de aplicaciones de red”.
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 | |
---|---|
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.
Saber lo qué hay que respaldar y recuperar.
Los archivos creados por usted: información en «~/
»
Archivos de información creados por las aplicaciones que utiliza: la
información en «/var/
» (excepto
«/var/cache/
», «/var/run/
» y
«/var/tmp/
»)
Archivos de configuración del sistema: información en
«/etc/
»
Programas locales: datos en «/usr/local/
» o
«/opt/
»
Información de la instalación del sistema: un resumen en texto plano de los pasos fundamentales (particionado, ...)
Probar el conjunto de datos: confirmarlo mediante la ejecución de operaciones de recuperación
Un trabajo cron como un proceso de usuario, los archivos en el directorio
«/var/spool/cron/crontabs
» y reinicie
cron
(8). Ver Sección 9.4.14, “Planificación regular de tareas” para cron
(8) y
crontab
(1).
Trabajos del temporizador del sistema como procesos de usuario: archivos en
el directorio "~/.config/systemd/user
". Ver
systemd.timer
(5) y systemd.service
(5).
Tareas de inicio automático como procesos de usuario: archivos en el
directorio "~/.config/autostart
". Ver Desktop Application Autostart
Specification.
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
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 | |
---|---|
Puede recuperar la información de configuración debconf con
« |
Nota | |
---|---|
No respalde el contenido de los pseudo sistemas de archivos ubicados en
|
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 | |
---|---|
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.
Prepare un dispositivo de almacenamiento USB para utilizarlo como copia de seguridad.
Formatea un dispositivo de almacenamiento USB con una partición en btrfs con
su nombre de etiqueta como "BKUP
". Esto se puede cifrar
(ver Sección 9.9.1, “Cifrado de discos externos con dm-crypt/LUKS”).
Conéctalo al sistema. El sistema de escritorio debería montarlo
automáticamente como "/media/penguin/BKUP
".
Ejecute "sudo chown penguin:penguin /media/penguin/BKUP
"
para que el usuario pueda escribir en él.
Crear "~/.local/share/applications/BKUP.desktop
"
siguiendo las técnicas escritas en Sección 9.4.10, “Iniciar un programa desde el interfaz gráfico de usuario” como:
[Desktop Entry] Name=bkss Comment=Backup and snapshot of ~/Documents Exec=/usr/local/bin/bkss.sh /home/penguin/Documents /media/penguin/BKUP Documents Type=Application
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.
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 la unidad de servicio systemd
"~/.config/systemd/user/back-BKUP.service
" como:
[Unit] Description=USB Disk backup Requires=media-%u-BKUP.mount After=media-%u-BKUP.mount [Service] ExecStart=/usr/local/bin/bkss.sh %h/Documents /media/%u/BKUP Documents StandardOutput=append:%h/.cache/systemd-snap.log StandardError=append:%h/.cache/systemd-snap.log [Install] WantedBy=media-%u-BKUP.mount
Habilite esta configuración de unidad systemd con lo siguiente:
$ systemctl --user enable bkup-BKUP.service
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.
Tabla 10.6. Relación de herramientas de infraestructura de seguridad de la información
paquete | popularidad | tamaño | orden | descripción |
---|---|---|---|---|
gnupg
|
V:554, I:906 | 885 | gpg (1) |
GNU Privacy Guard - herramienta de firma y cifrado OpenPGP |
gpgv
|
V:893, I:999 | 922 | gpgv (1) |
GNU Privacy Guard - herramienta de verificación de firma |
paperkey
|
V:1, I:14 | 58 | paperkey (1) |
extracción únicamente de la información secreta sin considerar las claves secretas OpenPGP |
cryptsetup
|
V:19, I:79 | 417 | cryptsetup (8), … |
utilidades para dm-crypt cifrado de dispositivos de bloque compatibles con LUKS |
coreutils
|
V:880, I:999 | 18307 | md5sum (1) |
crea y comprueba el resumen MD5 de un mensaje |
coreutils
|
V:880, I:999 | 18307 | sha1sum (1) |
crea y comprueba el resumen SHA1 de un mensaje |
openssl
|
V:841, I:995 | 2111 | openssl (1ssl) |
crea el resumen de un mensaje con «openssl dgst »
(OpenSSL) |
libsecret-tools
|
V:0, I:10 | 41 | secret-tool (1) |
almacenar y recuperar las contraseñas (CLI) |
seahorse
|
V:80, I:269 | 7987 | seahorse (1) |
herramienta de gestión de claves (GNOME) |
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.
Tabla 10.7. Relación de las órdenes GNU Privacy Guard par la gestión de claves
orden | descripción |
---|---|
gpg --gen-key |
genera una nueva clave |
gpg --gen-revoke mi_Id_de_usuario |
provoca la revocación de la clave para mi_ID_de_usuario |
gpg --edit-key ID_de_usuario |
edición interactiva de la clave, «help« para obtener ayuda |
gpg -o archivo --export |
exporta todas las claves a un archivo |
gpg --import file |
importa todas las claves desde un archivo |
gpg --send-keys user_ID |
envía la clave de un ID_de_usuario al servidor de claves |
gpg --recv-keys user_ID |
recibe claves del usuario ID_de_usuario desde el servidor de claves |
gpg --list-keys user_ID |
relación de las claves de ID_de_usuario |
gpg --list-sigs user_ID |
relación de las firmas de ID_de_usuarios |
gpg --check-sigs user_ID |
comprueba la firma de ID_de_usuario |
gpg --fingerprint user_ID |
comprueba la huella del ID_de_usuario |
gpg --refresh-keys |
actualiza el círculo de claves local |
Aquí esta el significado de un código seguro.
Tabla 10.8. Relación del significado del código de confianza
código | descripción de la confianza |
---|---|
- |
sin asignación del dueño de la confianza /no calculado todavía |
e |
cálculo de confianza fallido |
q |
falta de información suficiente para el cálculo |
n |
no confíe nunca en esta clave |
m |
confianza marginal |
f |
confianza total |
u |
confianza básica |
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.
Tabla 10.9. Relación de órdenes GNU Privacy Guard sobre archivos
orden | descripción |
---|---|
gpg -a -s archivo |
archivo de firma en ASCII del archivo.asc blindado |
gpg --armor --sign archivo |
, , |
gpg --clearsign archivo |
mensaje sin firmar |
gpg --clearsign archivo|mail [email protected] |
envía un mensaje de correo sin firmar a [email protected] |
gpg --clearsign --not-dash-escaped parche |
parche sin firmar |
gpg --verify archivo |
comprueba un archivo sin firmar |
gpg -o archivo.sig -b archivo |
crea un firma objetivo |
gpg -o file.sig --detach-sign file |
, , |
gpg --verify archivo.sig archivo |
comprueba el archivo con archivo.sig |
gpg -o archivo_cifrado.gpg -r nombre -e archivo |
intento de cifrado con clave pública para el nombre del archivo al arhivo binario archivo_cifrado.gpg |
gpg -o archivo_cifrado.gpg --recipient nombre --encrypt
archivo |
, , |
gpg -o archivo_cifrado.asc -a -r name -e archivo |
intento de cifrado con clave pública para el nombre del archivo al archivo blindado ASCII archivo_cifrado.asc |
gpg -o archivo_cifrado.gpg -c archivo |
cifrado simétrico de archivo a archivo_cifrado_gpg |
gpg -o archivo_cifrado.gpg --symmetric archivo |
, , |
gpg -o archivo_cifrado.asc -a -c archivo |
intento del cifrado simétrico para el nombre desde el archivo fuente al archivo blindado en ASCII archivo_cifrado.asc |
gpg -o archivo -d archivo_cifrado.gpg -r name |
Descifrado |
gpg -o file --decrypt archivo_cifrado.gpg |
, , |
Añada lo siguiente a «~/.muttrc
» para mantener el lento
el inicio automático de GnuPG, mientras permite usarlo pulsado
«S
» del menú principal.
macro index S ":toggle pgp_verify_sig\n" set pgp_verify_sig=no
El plugin gnupg
permite ejecutar GnuPG de forma
transparente para los archivos con extensiones ".gpg
",
".asc
", y ".pgp
".[6]
$ sudo aptitude install vim-scripts $ echo "packadd! gnupg" >> ~/.vim/vimrc
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 | |
---|---|
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. |
En el sistema GNOME, la herramienta GUI seahorse
(1)
gestiona las contraseñas y las almacena de forma segura en el llavero
~/.local/share/keyrings/*
.
secret-tool
(1) puede almacenar la contraseña en el
llavero desde la línea de comandos.
Almacenemos la frase de la contraseña utilizada para la imagen del disco encriptada LUKS/dm-crypt
$ secret-tool store --label='LUKS passphrase for disk.img' LUKS my_disk.img Password: ********
Esta contraseña almacenada puede ser recuperada y cedida a otros programas,
por ejemplo, cryptsetup
(8).
$ secret-tool lookup LUKS my_disk.img | \ cryptsetup open disk.img disk_img --type luks --keyring - $ sudo mount /dev/mapper/disk_img /mnt
Sugerencia | |
---|---|
Siempre que necesites proporcionar una contraseña en un script, utiliza
|
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 |
Los procedimientos siguientes extraen las diferencias entre dos archivos de
código fuente y crea los archivos diff unificados
«archivo.patch0
» o «archivo.patch1
»
dependiendo de la ubicación del archivo.
$ diff -u file.old file.new > file.patch0 $ diff -u old/file new/file > file.patch1
Un archivo diff (también llamado un parche o un archivo de parche) se utiliza para enviar una actualización de un programa. Quien lo recibe aplica esta actualización a otro archivo como se muestra.
$ patch -p0 file < file.patch0 $ patch -p1 file < file.patch1
Si tienes dos versiones de un código fuente, puede realizar la fusión
bidireccional de forma interactiva utilizando imediff
(1)
de la siguiente forma.
$ imediff -o file.merged file.old file.new
Si tiene tres versiones de un código fuente, puede realizar la fusión a tres
bandas de forma interactiva utilizando imediff
(1) de la
siguiente forma.
$ imediff -o file.merged file.yours file.base file.theirs
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.
Tabla 10.11. Relación de paquetes y órdenes relacionados con git
paquete | popularidad | tamaño | orden | descripción |
---|---|---|---|---|
git
|
V:351, I:549 | 46734 | git (7) |
Git, el sistema de control de versiones rápido, escalable y distribuido |
gitk
|
V:5, I:33 | 1838 | gitk (1) |
Navegador de repositorios Git GUI con históricos |
git-gui
|
V:1, I:18 | 2429 | git-gui (1) |
GUI para Git (sin históricos) |
git-email
|
V:0, I:10 | 1087 | git-send-email (1) |
Git envía un conjunto de parches como un correo |
git-buildpackage
|
V:1, I:9 | 1988 | git-buildpackage (1) |
automatiza la creación de paquetes Debian con Git |
dgit
|
V:0, I:1 | 473 | dgit (1) |
interoperabilidad de git con el archivo de Debian |
imediff
|
V:0, I:0 | 200 | git-ime (1) |
herramienta de ayuda interactiva para confirmaciones de git separadas |
stgit
|
V:0, I:0 | 601 | stg (1) |
quilt sobre git (Python) |
git-doc
|
I:12 | 13208 | N/A | documentación oficial de Git |
gitmagic
|
I:0 | 721 | N/A | «Git Mágico«, una guía de Git fácil de entender |
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.
Tabla 10.12. Principales comandos de Git
Comandos Git | función |
---|---|
git init |
crea un repositorio (local) |
git clone URL |
clonar el repositorio remoto en un repositorio local con el árbol de trabajo |
git pull origin main |
actualizar la rama local principal por el repositorio
remoto origen |
git add . |
añadir archivo(s) en el árbol de trabajo al índice sólo para archivos preexistentes en el índice |
git add -A . |
añadir archivo(s) en el árbol de trabajo al índice para todos los archivos, incluidas las eliminaciones |
git rm filename |
eliminar archivo(s) del árbol de trabajo y del índice |
git commit |
confirmar los cambios por etapas en el índice al repositorio local |
git commit -a |
agrega todos los cambios en el árbol de trabajo al índice y los envía al repositorio local (agregar + confirmar) |
git push -u origin branch_name |
actualizar el repositorio remoto origin por la rama local
branch_name (invocación inicial) |
git push origin branch_name |
actualizar el repositorio remoto origin por la rama local
branch_name (invocación posterior) |
git diff treeish1 treeish2 |
Muestra la diferencia entre la confirmación treeish1 y la confirmación treeish2 |
gitk |
Visualización GUI del árbol histórico de ramas del repositorio VCS |
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 | |
---|---|
No utilice etiquetas con caracteres blancos a pesar de que algunas
herramientas permiten su utilización como |
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
|
Atención | |
---|---|
Llamar una suborden |
Sugerencia | |
---|---|
Si existe un archivo ejecutable |
Ver lo siguiente.
manpage: git(1)
(/usr/share/doc/git-doc/git.html
)
Manual de Usuario
(/usr/share/doc/git-doc/user-manual.html
)
Un tutorial de introducción a
git (/usr/share/doc/git-doc/gittutorial.html
)
Un tutorial inicial a git:
parte dos
(/usr/share/doc/git-doc/gittutorial-2.html
)
«20 órdenes GIT para todos los
días (/usr/share/doc/git-doc/everyday.html
)
Git Mágico
(/usr/share/doc/gitmagic/html/index.html
)
Los Sistemas de control de versiones (VCS) a veces se denominan Sistemas de control de revisiones (RCS) o Administradores de configuración de software (SCM).
Aquí hay un resumen de otros VCS notables que no son Git en sistemas Debian.
Tabla 10.14. Lista de otras herramientas del sistema del control de las versiones
paquete | popularidad | tamaño | herramienta | Tipo de CVS | comentario |
---|---|---|---|---|---|
mercurial
|
V:5, I:32 | 2019 | Mercurial | distribuido | DCVS escrito en Python y algo en C |
darcs
|
V:0, I:5 | 34070 | Darcs | distribuido | DCVS con notación algebraica inteligente (lento) |
bzr
|
I:8 | 28 | GNU Bazaar | distribuido | DVCS influenciado por tla , escrito en Python (historic) |
tla
|
V:0, I:1 | 1022 | GNU arch | distribuido | DVCS principalmente por Tom Lord (histórico) |
subversion
|
V:13, I:72 | 4837 | Subversion | remoto | «CVS bien hecho«, nuevo estándar CVS remoto (histórico) |
cvs
|
V:4, I:30 | 4753 | CVS | remoto | estándar remoto anterior VCS (histórico) |
tkcvs
|
V:0, I:1 | 1498 | CVS, … | remoto | Visualización GUI del árbol de repositorios VCS (CVS, Subversion, RCS) |
rcs
|
V:2, I:13 | 564 | RCS | local | «Unix SCCS bien hecho« (histórico) |
cssc
|
V:0, I:1 | 2044 | CSSC | local | clon de Unix SCCS (histórico) |
[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.