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) 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:916, I:999 | 2880 |
.tar
|
tar(1) | el archivador estándar (estándar de facto) |
cpio
|
V:464, I:999 | 989 |
.cpio
|
cpio(1) | Archivador estilo Unix System V, utilizado con find(1) |
binutils
|
V:186, I:694 | 93 |
.ar
|
ar(1) | archivador para la creación de bibliotecas estáticas |
fastjar
|
V:4, I:45 | 172 |
.jar
|
fastjar(1) | archivador para Java (similar a zip) |
pax
|
V:14, I:36 | 164 |
.pax
|
pax(1) |
nuevo archivador estándar POSIX, comprometido entre tar y
cpio
|
gzip
|
V:888, I:999 | 243 |
.gz
|
gzip(1), zcat(1), … | Utilidad de compresión GNU LZ77 (estándar de facto) |
bzip2
|
V:178, I:953 | 196 |
.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:3, I:39 | 141 |
.lzma
|
lzma(1) | La utilidad de compresión LZMA tiene un índice de compresión más alto que gzip(1) (obsoleto) |
xz-utils
|
V:434, I:964 | 442 |
.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)
|
p7zip
|
V:88, I:439 | 986 |
.7z
|
7zr(1), p7zip(1) | El archivador de archivos 7-Zip tiene el alto índice de compresión (compresión LZMA) |
p7zip-full
|
V:131, I:521 | 4659 |
.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:6, I:51 | 97 |
.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:50, I:442 | 608 |
.zip
|
zip(1) | InfoZIP: herramienta de archivo y compresión DOS |
unzip
|
V:250, I:804 | 554 |
.zip
|
unzip(1) | InfoZIP: herramienta de desarchivo y descompresión DOS |
Aviso | |
---|---|
No asigne la variable « |
Nota | |
---|---|
Cuando se realiza una compresiñon gzip de un archivo
tar(1)
se utiliza la extensión de archivo « |
Nota | |
---|---|
La compresión xz de un archivo
tar(1)
utiliza la extensión de archivo « |
Nota | |
---|---|
Los métodos de compresión más populares entre las herramientas FOSS como
tar(1)
ha evolucionado como se muestra: |
Nota | |
---|---|
cp(1), scp(1) y tar(1) puede tener alguna limitación con archivos especiales. Cpio(1) es más versátil. |
Nota | |
---|---|
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. |
Nota | |
---|---|
La estructura interna de los archivos de información de Libreoffice son
archivos « |
Nota | |
---|---|
La herramienta de archivo multiplataforma de-facto es
|
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:888, I:999 | 15719 | GNU cp | copia archivos y directorios localmente («-a« para hacerlo recursivo) |
openssh-client
|
V:811, I:994 | 3545 | scp |
copia archivos y directorios de forma remota (cliente,
-r » para hacerlo recursivo)
|
openssh-server
|
V:686, I:813 | 1449 | sshd | copia archivos y directorios de forma remota (servidor remoto) |
rsync
|
V:365, I:628 | 729 | - | sincronización y respaldo remoto en un sentido |
unison
|
V:3, I:18 | 3457 | - | sincronización y respaldo remoto en dos direcciones |
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 | |
---|---|
La ejecución del archivo de órdenes |
Sugerencia | |
---|---|
Las herramientas de sistemas de control de versiones (VCS) en Tabla 10.11, “Relación de herramientas de sistemas de control de versiones” pueden operar como herramientas de sincronización y copia en múltiples sentidos. |
Aquí estan algunas manreas de archivar y desarchivar el contenido entero de
un directorio «./origen
» utilizando diferentes
herramientas.
GNU tar(1):
$ tar -cvJf archive.tar.xz ./origen $ tar -xvJf archive.tar.xz
Otra forma es como se muestra.
$ find ./origen -xdev -print0 | tar -cvJf archive.tar.xz --null -F -
cpio(1):
$ find ./origen -xdev -print0 | cpio -ov --null > archive.cpio; xz archive.cpio $ zcat archive.cpio.xz | cpio -i
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 ./origen; rsync -aHAXSv . /destino # cd ./origen; rsync -aHAXSv . usuario@equipo.dom:/destino
Puede utilizar la sintáxis de «barra «/« en el directorio origen«.
# rsync -aHAXSv ./origen/ /destino # rsync -aHAXSv ./origen/ usuario@equipo.dom:/destino
Otra forma es como se muestra.
# cd ./origen; find . -print0 | rsync -aHAXSv0 --files-from=- . /destino # cd ./origen; find . -print0 | rsync -aHAXSv0 --files-from=- . usuario@equipo.dom:/destino
GNU cp(1) y openSSH scp(1):
# cd ./origen; cp -a . /destino # cd ./origen; scp -pr . usuario@equipo.dom:/destino
GNU tar(1):
# (cd ./origen && tar cf - . ) | (cd /destino && tar xvfp - ) # (cd ./origen && tar cf - . ) | ssh usuario@equipo.dom '(cd /destino && tar xvfp - )'
cpio(1):
# cd ./origen; find . -print0 | cpio -pvdm --null --sparse /destino
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 | |
---|---|
Rsync(8)
y GNU
cp(1)
tiene la opción « |
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.3.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 /ruta/a \ -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 (consulte 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
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 | |
---|---|
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 « |
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 | |
---|---|
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 | |
---|---|
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 | |
---|---|
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 sonre una conexión de red rápida, puede ser la única opción real. |
Un dispositivo de almacenamiento extraible puede pertenecer a uno de los siguientes tipos:
Cámara digital
reproductor digital de música
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
».
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 unicamente
cuando el dispositivo no posee una entrada en
« |
En los entornos de escritorio modernos el punto de montaje es
«/media/<etiqueta_del_disco>
» que puede ser
personalizado como se muestra.
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 (consulte Sección 8.4.6, “Códificación del nombre del 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 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
sistema de archivos | descripción del caso de uso normal |
---|---|
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) |
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 filesystem | almacenamiento de información en archivos unix eficiente en disquete |
sistema de archivos ext2 | almacenamiento de información en dispositivos como discos duro para sistemas Linux antiguos |
sistema de archivo ext3 | almacenamiento de información en dispositivos como discos duro para sistemas Linux antiguos |
sistema de archivo ext4 | compartición de datos en un dispositivo com oun disco duro para sistemas Linux actuales |
Sugerencia | |
---|---|
Consulte Sección 9.8.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.
Particionemoslos con fdisk(8), cfdisk(8) or parted(8) (consulte Sección 9.5.2, “Configuración del particionado de disco”) en una única partición primaria y marquemosla 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 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 | |
---|---|
En sistemas de archivos FAT debido a su diseño, el tamaño máximo de un
archivo es |
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 | |
---|---|
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. Aquí estan 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 | compatición de archivos mediante una «Red Unix/Linux«, consulte exports(5) y Linux NFS-HOWTO |
servicio HTTP | compartición de archivos entre cliente/servidor web |
servicio HTTPS | compartición de archivos entre servidor web/cliente con cifrado con «Secure Sockets Layer« (SSL) o «Transport Layer Security« (TLS) |
servicio FTP | compartición de 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 securizarse como se muestra.
Consulte además Sección 6.10, “Servidores de aplicaciones en otras redes” y Sección 6.11, “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/
»
Software local: información 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
Saber como respaldar y recuperar datos.
Asegurar el el almacenamiento de información: 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
Evaluación de riesgos y costes implícitos.
Valor de los datos ante la pérdida
Uso de recursos para el respaldo: humanos, hardware, software, …
Modo de error en la recuperación y sus posibilidades
Nota | |
---|---|
No respalde el contenido de los pseudo sistemas de archivos ubicados en
|
Para el almacenamiento seguro de información, la información debe al menos estar en parciones distintas de disco y preferentemente en discos diferentres y máquinas diferentes para resistir la corrupción del sistema de archivos. La información importante es mejor almacenarla en medios que solo permiten una grabación com CD/DVD-R para evitar sobreescribirla por accidente. (Consulte Sección 9.7, “Datos binarios” para saber como escribir en los medios de almacenamiento desde el intérpre de órdenes. El entorno GNOME a través del interfaz gráfico de usuario ofrece un acceso fácil desde el menú: «Ubicaciones→Crear CD/DVD«.)
Nota | |
---|---|
Puee que quiera para algunos demonios como MTA (consulte Sección 6.3, “Agente de transporte de correo (Mail transport agent, MTA)”) mientras respalda su información. |
Nota | |
---|---|
Debe tener especial cuidado con el respaldo y restauración de los archivos
de identificación como « |
Nota | |
---|---|
Si una un trabajo cron como un proceso de usuario, debe restaurar los
archivos en el directorio « |
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:6 | 340 | 4.4 BSD dump(8) y restore(8) para sistemas de archivos ext2/ext3/ext4 |
xfsdump
|
V:0, I:10 | 834 | dump y restore con xfsdump(8) y xfsrestore(8) para XFS sistemas de archivos en GNU/Linux e IRIX |
backupninja
|
V:4, I:4 | 355 | sistema meta-backup extensible y ligero |
bacula-common
|
V:10, I:17 | 2369 | Bacula: copia de respaldo en red, recuperación y verificación - archivos de apoyo comunes |
bacula-client
|
I:4 | 175 | Bacula: copia de seguridad en red, recuperación y verificación - metapaquete cliente |
bacula-console
|
V:1, I:6 | 75 | Bacula: copia de seguridad en red, recuperación y verificación - consola de texto |
bacula-server
|
I:1 | 175 | Bacula: copia de seguridad en red, recuperación y verificación - metapaquete del servidor |
amanda-common
|
V:1, I:2 | 9890 | Amanda: Archivador Automático de Discos en Red Avanzado Maryland (Bibliotecas) |
amanda-client
|
V:1, I:2 | 1133 | Amanda: Archivador Automático de Discos en Red Avanzado Maryland (Cliente) |
amanda-server
|
V:0, I:0 | 1089 | Amanda: Archivador Automático de Discos en Red Avanzado Maryland (Servidor) |
backup-manager
|
V:1, I:2 | 571 | herramienta de copia de seguridad en línea de órdenes |
backup2l
|
V:0, I:1 | 114 | herramienta para medios externos para su copia/restauración con bajo mantenimiento (basado en discos) |
backuppc
|
V:4, I:4 | 2284 | BackupPC sistema de copia de respadlo de PCs( basado en disco) de alto rendimiento y ámbito empresarial |
duplicity
|
V:8, I:15 | 1609 | respaldo incremental (remoto) |
flexbackup
|
V:0, I:0 | 243 | respaldo incremental (remoto) |
rdiff-backup
|
V:8, I:16 | 704 | respaldo incremental (remoto) |
restic
|
V:0, I:1 | 22182 | respaldo incremental (remoto) |
rsnapshot
|
V:6, I:11 | 452 | respaldo incremental (remoto) |
slbackup
|
V:0, I:0 | 152 | 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.
Las copias de seguridad normales de los datos de los usuarios pueden realizarse con un archivo de órdenes sencillo (Sección 10.2.2, “Un ejemplo del archivo de órdenes para el sistema de copias de seguridad”) y la ayuda de cron(8).
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.
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 | |
---|---|
Consulte los archivos en « |
Para un sistema personal de escritorio Debian ejecutando
«inestable»
, solo necesito proteger mis datos críticos
personales. Reinstalo el sistema una vez al año siempre. Así es que no
encuentro una razón para tener copias de seguridad del sistema completo o
instalar una herramienta de copias de seguridad con todas las
funcionalidades.
Utilizo un archivo de órdenes simple y lo grabo en un CD/DVD utilizando un interfaz gráfico de usuario. Aquí esta un ejemplo de un archivo de órdenes que realiza esta tarea.
#!/bin/sh -e # Copyright (C) 2007-2008 Osamu Aoki <osamu@debian.org>, Public Domain BUUID=1000; USER=osamu # UID and name of a user who accesses backup files BUDIR=«/var/backups« XDIR0=«.+/Mail|.+/Desktop« XDIR1=«.+/\.thumbnails|.+/\.?Trash|.+/\.?[cC]ache|.+/\.gvfs|.+/sessions« XDIR2=«.+/CVS|.+/\.git|.+/\.svn|.+/Downloads|.+/Archive|.+/Checkout|.+/tmp« XSFX=«.+\.iso|.+\.tgz|.+\.tar\.gz|.+\.tar\.bz2|.+\.cpio|.+\.tmp|.+\.swp|.+~« SIZE=«+99M« DATE=$(date --utc +«%Y%m%d-%H%M«) [ -d «$BUDIR« ] || mkdir -p «BUDIR« umask 077 dpkg --get-selections \* > /var/lib/dpkg/dpkg-selections.list debconf-get-selections > /var/cache/debconf/debconf-selections { find /etc /usr/local /opt /var/lib/dpkg/dpkg-selections.list \ /var/cache/debconf/debconf-selections -xdev -print0 find /home/$USER /root -xdev -regextype posix-extended \ -type d -regex «$XDIR0|$XDIR1« -prune -o -type f -regex «$XSFX« -prune -o \ -type f -size «$SIZE« -prune -o -print0 find /home/$USER/Mail/Inbox /home/$USER/Mail/Outbox -print0 find /home/$USER/Desktop -xdev -regextype posix-extended \ -type d -regex «$XDIR2« -prune -o -type f -regex «$XSFX« -prune -o \ -type f -size «$SIZE« -prune -o -print0 } | cpio -ov --null -O $BUDIR/BU$DATE.cpio chown $BUUID $BUDIR/BU$DATE.cpio touch $BUDIR/backup.stamp
Esto pretende ser un ejemplo de archivo de órdenes ejecutado como superusuario.
Espero que lo cambie y ejecute como se muestra.
Edite este archivo de órdenes para que tenga en cuenta todos sus datos importantes (consulte Sección 10.1.5, “Formas de selección de archivos” y Sección 10.2, “Respaldo y recuperación”).
Sustituya «find … -print0
» por «find … -newer
$BUDIR/backup.stamp -print0
» para realizar copias de seguridad
incrementales.
Copie los archivos de backup a un equipo remoto utilizando scp(1) o rsync(1) o grabelos en CD/DVD para mayor seguridad. (Yo utilizo GNOME como interfaz gráfico de usuario de escritorio para grabar CD/DVD. Consulte para mayor redundancia Sección 12.1.8, “Ejemplo de archivo de órdenes con zenity”.)
¡Manténgalo simple!
Sugerencia | |
---|---|
Puede recuperar la información de configuración de con
« |
Para el conjunto de información qeu se encuentra en árbol del directorio, la
copia con «cp -a
» proporciona una copia de respaldo
normal.
Cuando se tiene gran cantidad de información estática que no se sobreescrite
en un directorio como en el caso del directorio
«/var/cache/apt/packages/
», los enlaces duros con
«cp -al
» aporta una alternativa a la copia de respaldo
normal consiguiendo un uso de espacio de disco eficiente.
Aquí esta una copia del archivo de órdenes, el cual he llamado
bkup
para las copias de respaldo. Este archivo de órdenes
copia todos los archivos (no-CVS) contenidos por el directorio actual al
directorio antiguo en el directorio padre o en el equipo remoto.
#!/bin/sh -e # Copyright (C) 2007-2008 Osamu Aoki <osamu@debian.org>, Public Domain fdot(){ find . -type d \( -iname «.?*« -o -iname «CVS« \) -prune -o -print0;} fall(){ find . -print0;} mkdircd(){ mkdir -p «$1«;chmod 700 «$1«;cd «$1«>/dev/null;} FIND=«fdot«;OPT=«-a«;MODE=«CPIOP«;HOST=«localhost«;EXTP=«$(hostname -f)« BKUP=«$(basename $(pwd)).bkup«;TIME=«$(date +%Y%m%d-%H%M%S)«;BU=«$BKUP/$TIME« while getopts gcCsStrlLaAxe:h:T f; do case $f in g) MODE=«GNUCP«;; # cp (GNU) c) MODE=«CPIOP«;; # cpio -p C) MODE=«CPIOI«;; # cpio -i s) MODE=«CPIOSSH«;; # cpio/ssh t) MODE=«TARSSH«;; # tar/ssh r) MODE=«RSYNCSSH«;; # rsync/ssh l) OPT=«-alv«;; # hardlink (GNU cp) L) OPT=«-av«;; # copy (GNU cp) a) FIND=«fall«;; # find all A) FIND=«fdot«;; # find non CVS/ .???/ x) set -x;; # trace e) EXTP=«${OPTARG}«;; # hostname -f h) HOST=«${OPTARG}«;; # user@remotehost.example.com T) MODE=«TEST«;; # test find mode \?) echo «use -x for trace.« esac; done shift $(expr $OPTIND - 1) if [ $# -gt 0 ]; then for x in $@; do cp $OPT $x $x.$TIME; done elif [ $MODE = GNUCP ]; then mkdir -p «../$BU«;chmod 700 «../$BU«;cp $OPT . «../$BU/« elif [ $MODE = CPIOP ]; then mkdir -p «../$BU«;chmod 700 «../$BU« $FIND|cpio --null --sparse -pvd ../$BU elif [ $MODE = CPIOI ]; then $FIND|cpio -ov --null | ( mkdircd «../$BU«&&cpio -i ) elif [ $MODE = CPIOSSH ]; then $FIND|cpio -ov --null|ssh -C $HOST «( mkdircd \«$EXTP/$BU\«&&cpio -i )« elif [ $MODE = TARSSH ]; then (tar cvf - . )|ssh -C $HOST «( mkdircd \«$EXTP/$BU\«&& tar xvfp - )« elif [ $MODE = RSYNCSSH ]; then rsync -aHAXSv ./ «${HOST}:${EXTP}-${BKUP}-${TIME}« else echo «Any other idea to backup?« $FIND |xargs -0 -n 1 echo fi
Se trata de ejemplos de órdenes. Por favor lea el archivo de órdenes y modifiquelo usted mismo para adaptarlo a sus necesidades.
Sugerencia | |
---|---|
Mantengo mi |
Sugerencia | |
---|---|
Para mantener un histórico de imágenes en un árbol de archivos o en un árbol de archivos de configuración, es fácil y eficiente en la utilización del espacio utilizar git(7) (see Sección 10.6.5, “Git para guardar el histórico de configuraciones”). |
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:737, I:996 | 727 | gpg(1) | GNU Privacy Guard - herramienta de firma y cifrado OpenPGP |
gpgv
|
V:880, I:999 | 840 | gpgv(1) | GNU Privacy Guard - herramienta de verificación de firma |
paperkey
|
V:0, I:6 | 58 | paperkey(1) | extracción únicamente de la información secreta sin considerar las claves secretas OpenPGP |
cryptsetup
|
V:32, I:80 | 67 | cryptsetup(8), … | utilities for dm-crypto soporte al cifrado de dispositivo en bloque para LUKS |
ecryptfs-utils
|
V:5, I:8 | 396 | ecryptfs(7), … | utilities for ecryptfs cifrado de sistema de archivos apilados |
coreutils
|
V:888, I:999 | 15719 | md5sum(1) | crea y comprueba el resúmen MD5 de un mensaje |
coreutils
|
V:888, I:999 | 15719 | sha1sum(1) | crea y comprueba el resumen SHA1 de un mensaje |
openssl
|
V:808, I:992 | 1452 | openssl(1ssl) |
crea el resumen de un mensaje con «openssl dgst »
(OpenSSL)
|
Consulte Sección 9.8, “Trucos para cifrar información” en dm-crypto y ecryptfs para la implementación de una infraestructura de cifrado de información automática por medio de los módulos del núcleo de Linux.
Aquí están 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 archivo
|
importa todas las claves desde un archivo |
gpg --send-keys ID_usuario
|
envia la clave de un ID_de_usuario al servidor de claves |
gpg --recv-keys ID_de_usuario
|
recibe claves del usuario ID_de_usuario desde el servidor de claves |
gpg --list-keys ID_de_usuario
|
relación de las claves de ID_de_usuario |
gpg --list-sigs ID_de_usuario
|
relación de las firmas de ID_de_usuarios |
gpg --check-sigs ID_de_usuario
|
comprueba la firma de ID_de_usuario |
gpg --fingerprint ID_de_usuario
|
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 confie 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 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.
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 foo@example.org
|
envia un mensaje de correo sin firmar a foo@example.org
|
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 archivo.sig --detach-sig archivo
|
, , |
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
La extensión de gnupg
le permite ejecutar GnuPG de forma
transparente para archivos con la extensión «.gpg
»,
«.asc
» y «.ppg
».
# aptitude install vim-scripts vim-addon-manager $ vim-addons install gnupg
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 | |
---|---|
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 |
---|---|---|---|---|
diffutils
|
V:874, I:987 | 1574 | diff(1) | compara archivos línea a línea |
diffutils
|
V:874, I:987 | 1574 | diff3(1) | compara y mezcla tres archivos línea a línea |
vim
|
V:119, I:395 | 2799 | vimdiff(1) | compare dos archivos en vim uno contra otro |
patch
|
V:115, I:779 | 243 | patch(1) | aplica un archivo diff al original |
dpatch
|
V:1, I:13 | 191 | dpatch(1) | gestiona un conjunto de parches para paquetes Debian |
diffstat
|
V:17, I:179 | 69 | diffstat(1) | produce un histográma de los cambios de diff |
patchutils
|
V:19, I:173 | 223 | combinediff(1) | crea un parche acumulativo con dos parches incrementales |
patchutils
|
V:19, I:173 | 223 | dehtmldiff(1) | extrae un diff de un página HTML |
patchutils
|
V:19, I:173 | 223 | filterdiff(1) | extrae o excluye diffs de un archivo diff |
patchutils
|
V:19, I:173 | 223 | fixcvsdiff(1) | repara archivos diff creados por CVS que son malinterpretados por patch(1) |
patchutils
|
V:19, I:173 | 223 | flipdiff(1) | intercambia el orden de dos parches |
patchutils
|
V:19, I:173 | 223 | grepdiff(1) | muestra que archivos son modificados por un parche de acuerdo a una expresión regular |
patchutils
|
V:19, I:173 | 223 | interdiff(1) | muestra las diferencias entre dos archivos diff unificados |
patchutils
|
V:19, I:173 | 223 | lsdiff(1) | muestra los archivos modificados por un parche |
patchutils
|
V:19, I:173 | 223 | recountdiff(1) | recalcula las cuentas y desplazamientos en un contexto diff unificado |
patchutils
|
V:19, I:173 | 223 | rediff(1) | repara los desplazamientos y cuentas en un diff editado de forma manual |
patchutils
|
V:19, I:173 | 223 | splitdiff(1) | selecciona parches incrementales |
patchutils
|
V:19, I:173 | 223 | unwrapdiff(1) | deshace los parches que han sido mezclados |
wiggle
|
V:0, I:0 | 174 | wiggle(1) | aplica parches rechazados |
quilt
|
V:3, I:38 | 785 | quilt(1) | gestiona un conjunto de parches |
meld
|
V:17, I:42 | 2942 | meld(1) | compara y mezcla archivos (GTK) |
dirdiff
|
V:0, I:2 | 161 | dirdiff(1) | muestra las diferencias y mezcla los cambios entre árboles de directorio |
docdiff
|
V:0, I:0 | 573 | docdiff(1) | compara dos archivos palabra a palabra / caracter a caracter |
imediff
|
V:0, I:0 | 157 | imediff(1) | interactive full screen 2/3-way merge tool |
makepatch
|
V:0, I:0 | 102 | makepatch(1) | genera archivos de parches extendidos |
makepatch
|
V:0, I:0 | 102 | applypatch(1) | aplica archivos de parches extendidos |
wdiff
|
V:8, I:77 | 644 | wdiff(1) | muestra las palabras diferentes en dos archivos de textos |
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 archivo.antiguo archivo.nuevo > archivo.patch0 $ diff -u antiguo/archivo nuevo/archivo > archivo.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 archivo < archivo.patch0 $ patch -p1 archivo < archivo.patch1
Aquí está un resumen de los sistemas de control de versiones (CVS) en el sistema Debian.
Nota | |
---|---|
Si no tiene experiencia con sistemas CVS, podría empezar a aprender Git, el cual es muy popular. |
Tabla 10.11. Relación de herramientas de sistemas de control de versiones
paquete | popularidad | tamaño | herramienta | Tipo de CVS | comentario |
---|---|---|---|---|---|
cssc
|
V:0, I:2 | 2035 | CSSC | local | copia de Unix SCCS (obsoleto) |
rcs
|
V:3, I:21 | 555 | RCS | local | «Unix SCCS bien hecho« |
cvs
|
V:5, I:49 | 4596 | CVS | remoto | estándar anterior de CVS remoto |
subversion
|
V:27, I:131 | 4809 | Subversion | remoto | «CVS bien hecho«, es nuevo estándar de facto para CVS remoto |
git
|
V:301, I:458 | 35266 | Git | distribuido | CVS distribuido rápido escrito en C (utilizado por el núcleo de Linux entre otros) |
mercurial
|
V:11, I:56 | 913 | Mercurial | distribuido | CVS distribudo escrito en Python y una pequeña parte en C |
bzr
|
V:3, I:20 | 74 | Bazaar | distribuido |
CVS distribuido influenciado por tla , escrito en Python
(utilizado por Ubuntu)
|
darcs
|
V:0, I:8 | 27950 | Darcs | distribuido | CVS distribuido con notación álgebraica inteligente (lento) |
tla
|
V:0, I:6 | 1011 | GNU arch | distribuido | CVS distribuido escrito principalmente por Tom Lord (histórico) |
monotone
|
V:0, I:0 | 5815 | Monotone | distribuido | CVS distribuido escrito en C++ |
tkcvs
|
V:0, I:1 | 1498 | CVS, … | remoto | Interfaz gráfico de usuario del árbol del repositorio de CVS (CVS, Subversion, RCS) |
gitk
|
V:8, I:47 | 1539 | Git | distribuido | GUI del árbol del repositorio CVS (Git) |
A CVS también se le denomina Sistema de Control de Revisiones (RCS) o Software de Gestión de la Configuración (SCM).
Los sistemas CVS distribuidos como Git son las herramientas comunes hoy en dia. CVS y Subversión son todavía útiles en la gestión de ciertas actividades de código abierto.
Debian provides free Git services via Debian Salsa service. Its documentation can be found at https://wiki.debian.org/Salsa .
Atención | |
---|---|
Debian has closed its old alioth services and the old alioth service data are available at alioth-archive as tarballs. |
Existen unos pocos fundamentos para la creación de un archivo CVS compartido.
Utilice «umask 002
» (consulte Sección 1.2.4, “Gestión de permisos para nuevos archivos: umask”)
Haga que todos los archivos del archivo CVS pertenezcan al grupo correspondiente
Active «asignar el ID de grupo« en todos directorios de los archivos CVS (según el esquema de creación de archivos BSD, consulte Sección 1.2.3, “Permisos del sistema de archivos”)
Haga que los usuarios compartan sus archivos perteneciendo al grupo correspondiente
Aquí se muestra una simplificación extrema de las órdenes propias de cada CVS para proporcionar una visión de conjunto. La secuencia de órdenes normal puede necesitar de opciones o parámetros.
Tabla 10.12. Comparación de órdenes particulares de cada CVS
Git | CVS | Subversion | función |
---|---|---|---|
git init
|
cvs init
|
svn create
|
crea un repositorio (local) |
- |
cvs login
|
- | acceso a un repositorio remoto |
git clone
|
cvs co
|
svn co
|
comprueba el repositorio remoto como árbol de trabajo |
git pull
|
cvs up
|
svn up
|
actualiza el árbol de trabajo mezclandolo con el repositorio remoto |
git add .
|
cvs add
|
svn add
|
añade uno o más archivos al árbol de trabajo del CVS |
git rm
|
cvs rm
|
svn rm
|
borra uno o más archivos del árbol de trabajo desde el CVS |
- |
cvs ci
|
svn ci
|
compromete los cambios en el repositorio remoto |
git commit -a
|
- | - | compromete los cambios en el repositorio local |
git push
|
- | - | actualiza el repositorio remoto con el repositorio local |
git status
|
cvs status
|
svn status
|
muestra el estado del árbol de trabajo desde el CVS |
git diff
|
cvs diff
|
svn diff
|
diff <repositorio_de_referencia> <árbol_de_trabajo> |
git repack -a -d; git prune
|
- | - | reempaqueta el repositorio local en un único paquete |
gitk
|
tkcvs
|
tkcvs
|
interfaz gráfico para mostrar el árbol de repositorios CVS |
Atención | |
---|---|
LLamar una subórden |
Sugerencia | |
---|---|
Si existe un archivo ejecutable |
Sugerencia | |
---|---|
Las herramientas GUI como tkcvs(1) y gitk(1) son realmente útiles en el seguimiento del histórico de archivos. El interfaz web que proporcionan muchos archivos públicos en sus repositorios son también muy útilies al permitir navegar por ellos. |
Sugerencia | |
---|---|
Git puede trabajar con diferentes repositorios como los de CVS y Subversión
y proporciona un repositorio local para cambio locales por medio de los
paquetes |
Sugerencia | |
---|---|
En git existen órdenes que no poseen equivalente en CVS y Subversion como «fetch«, «rebase«, «cherry-pick«, … |
Git puede realizan cualquier operación en el código fuente tanto el local como en remoto. Esto significa que puede guardar los cambios en el código fuente sin tener conexión de red al repositorio remoto.
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 «Nombre Apellido« $ git config --global user.email su_nombre@ejemplo.com
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
Consulte 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 para usuarios de CVS
(/usr/share/doc/git-doc/gitcvs-migration.html
)
Esto describe también como configurar un servidor como CVS y converitr los datos de CVS a Git.
Otros recursos git disponibles en Internet
Git Mágico
(/usr/share/doc/gitmagic/html/index.html
)
Las órdenes git-gui(1) y gitk(1) hacen que Git sea muy fácil de utilizar.
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 |
Incluso cuando el servidor es otro CVS, puede ser una buena idea utilizar git(1) para la operaciones locales ya que permite gestionar la copia local del árbol del código fuente sin una conexión de red al servidor. Aquí estan algunos paquetes y órdenes utilizados con git(1).
Tabla 10.13. Relación de paquetes y órdenes relacionados con git
paquete | popularidad | tamaño | orden | descripción |
---|---|---|---|---|
git-doc
|
I:18 | 11118 | N/A | documentación oficial de Git |
gitmagic
|
I:1 | 719 | N/A | «Git Mágico«, una guía de Git fácil de entender |
git
|
V:301, I:458 | 35266 | git(7) | Git, el sistema de control de versiones rápido, escalable y distribuido |
gitk
|
V:8, I:47 | 1539 | gitk(1) | Navegador de repositorios Git GUI con históricos |
git-gui
|
V:2, I:27 | 2266 | git-gui(1) | GUI para Git (sin históricos) |
git-svn
|
V:2, I:26 | 1037 | git-svnimport(1) | importar datos provenientes de Subversion en Git |
git-svn
|
V:2, I:26 | 1037 | git-svn(1) | proporciona operaciones bidireccionales entre Subversion y Git |
git-cvs
|
V:0, I:12 | 1172 | git-cvsimport(1) | importa datos provinientes de CVS a Git |
git-cvs
|
V:0, I:12 | 1172 | git-cvsexportcommit(1) | exporta un compromiso desde Git a una comprobación de CVS |
git-cvs
|
V:0, I:12 | 1172 | git-cvsserver(1) | emulador de un servidor CVS para Git |
git-email
|
V:0, I:13 | 860 | git-send-email(1) | Git envia un conjunto de parches como un correo |
stgit
|
V:0, I:0 | 1535 | stg(1) | quilt sobre git (Python) |
git-buildpackage
|
V:2, I:12 | 3928 | git-buildpackage(1) | automatiza la creación de paquetes Debian con Git |
guilt
|
V:0, I:0 | 146 | guilt(7) | quilt sobre git (SH/AWK/SED/…) |
Sugerencia | |
---|---|
Con
git(1),
puedes trabajar en una rama local con varios compromisos del código
(commits) y utilizar algo similar a « |
Sugerencia | |
---|---|
Cuando quiera bolver a un directorio de trabajo limpio sin perder el estado
actual del directorio de trabajo, puede utilizar « |
Puedes comprobar un repositorio Subversion en
«svn+ssh://svn.example.org/project/module/trunk
» a un
repositorio local Git en «./dest
» y comprometer los
cambios de vuelta al repositorio Subversion p. ej.:
$ git svn clone -s -rHEAD svn+ssh://svn.example.org/project dest $ cd dest ... hacer los cambios $ git commit -a ... sigua cambiando localmente con git $ git svn dcommit
Sugerencia | |
---|---|
La utilización de « |
Puede guardar manualmente la cronología de histórico de configuraciones
utilizando las herramientas Git. Aquí esta un
ejemplo simple para guardad el contenido de «/etc/apt/
»
de una forma práctica.
$ cd /etc/apt/ $ sudo git init $ sudo chmod 700 .git $ sudo git add . $ sudo git commit -a
Comprometes la configuración con la descripción.
Hacer modificaciones a los archivos de configuración.
$ cd /etc/apt/ $ sudo git commit -a
Compromete la configuración con la descripción y continua con su vida.
$ cd /etc/apt/ $ sudo gitk --all
Usted tiene el histórico completo de la configuración con usted.
Nota | |
---|---|
sudo(8)
es necesario para trabajar con todos los permisos de archivo de los datos de
configuración. Para los datos de configuración del usuario, puede evitar la
utilización |
Nota | |
---|---|
Se necesita la orden « |
Sugerencia | |
---|---|
Para un despliege completo del guardado del histórico de la configuración,
por favor compruebe el paquete |
CVS is an older version control system before Subversion and Git.
Atención | |
---|---|
Many URLs found in the below examples for CVS don't exist any more. |
Consulte lo siguiente.
cvs(1)
«/usr/share/doc/cvs/html-cvsclient
»
«/usr/share/doc/cvs/html-info
»
«/usr/share/doc/cvsbook
»
«info cvs
»
La siguiente configuración permite comprometer a un repositorio CVS solo por
un miembro del grupo «src
» y la administración del CVS
unicamente por un miembro del grupo «staff
», que reduce
la probabilidad de errores.
# cd /var/lib; umask 002; mkdir cvs # export CVSROOT=/srv/cvs/project # cd $CVSROOT # chown root:src . # chmod 2775 . # cvs -d $CVSROOT init # cd CVSROOT # chown -R root:staff . # chmod 2775 . # touch val-tags # chmod 664 history val-tags # chown root:src history val-tags
Sugerencia | |
---|---|
Puede restringuir la creación de un nuevo proyecto cambiando el dueño del
directorio « |
El repositorio por defecto de CVS esta referenciado por
«$CVSROOT
». Lo siguiente configura
«$CVSROOT
» para acceso local.
$ export CVSROOT=/srv/cvs/project
Many public CVS servers provide read-only remote access to them with account
name "anonymous
" via pserver service. For example,
Debian web site contents were maintained by webwml project via CVS at Debian alioth
service. The following was used to set up "$CVSROOT
" for
the remote access to this old CVS repository.
$ export CVSROOT=:pserver:anonymous@anonscm.debian.org:/cvs/webwml $ cvs login
Nota | |
---|---|
Ya que pserver es propenso a ataques de escucha e inseguro, el acceso de escritura normalmente esta deshabilitado por los administradores del servidor. |
The following was used to set up "$CVS_RSH
" and
"$CVSROOT
" for the remote access to the old CVS
repository by webwml project with SSH.
$ export CVS_RSH=ssh $ export CVSROOT=:ext:account@cvs.alioth.debian.org:/cvs/webwml
Puede utilizar tambien una clave pública para acreditarse por SSH el cual elimina el acceso remoto con contraseña.
Cree una nueva ubicación de un árbol local en
«~/path/to/module1
» como se muestra.
$ mkdir -p ~/path/to/module1; cd ~/path/to/module1
Rellene un nuevo árbol local en «~/path/to/module1
» con
archivos.
Impórtelo a CVS con los siguientes parámetros.
Nombre del módulo: «module1
»
Etiqueta del proveedor (Vendor tag): «Rama-principal
»
(etiqueta para toda la rama)
Etiqueta de la publicación: «release-initial
» (etiqueta
para una publicación concreta)
$ cd ~/path/to/module1 $ cvs import -m «Start module1« module1 Rama-principal Release-initial $ rm -Rf . # opcional
CVS no sobreescribe el archivo del repositorio actual si no que lo cambia
por otro. Así, los permisos de escritura del directorio del repositorio son
críticos. Para cada nuevo módulo de «module1
» en el
repositorio en «/srv/cvs/project
», si es necesario,
ejecute lo siguiente para asegurar que se cumple esto.
# cd /srv/cvs/project # chown -R root:src module1 # chmod -R ug+rwX module1 # chmod 2775 module1
Aquí esta un ejemplo paradigmático de flujo de trabajo con CVS.
Compruebe que todos los módulos disponibles del proyecto en el CVS son
referenciados por «$CVSROOT
» como se muestra.
$ cvs rls CVSROOT module1 module2 ...
Compruebe «module1
» en su directorio por defecto
«./module1
» como se muestra.
$ cd ~/path/to $ cvs co module1 $ cd module1
Haga los cambios que se necesiten en el contenido.
Compruebe los cambios haciendo el equivalente a «diff -u
[repositorio] [local]
» como se muestra.
$ cvs diff -u
Encontrará que ha comedito errores en algunos archivos
«archivo_a_deshacer
» y que otros archivos son correctos.
Sobreescrita el archivo «archivo_a_deshacer
» con una
copia la copia en buen estado del repositorios CVS como se muestra.
$ cvs up -C archivo_a_deshacer
Guarde el árbol local actualizado en CVS como se muestra.
$ cvs ci -m «Descripción del cambio«
Cree y añada el archivo «archivo_para_añadir
» al CVS como
se muestra.
$ vi archivo_a_añadir $ cvs add archivo_a_añadir $ cvs ci -m «Añadido archivo_a_añadir«
Mezcle la última versión del CVS como se muestra.
$ cvs up -d
Vigile las líneas que empiezan por «C filename
» ya que
indican cambios conflictivos.
Mire el código que no se ha modificado en
«.#nombre_del_archivo.version
».
Los cambios conflictivos en los archivos los puede encontrar buscando por la
cadena «<<<<<<<
» y
«>>>>>>>
».
Modifique los archivos para resolver los conflictos según necesite.
Añada una etiqueta de distribución «Liberación-1
» como se
muestra.
$ cvs ci -m «último compromiso de la Liberación-1« $ cvs tag Liberación-1
Editelo para continuar.
Borre la etiqueta de publicación «Liberación-1
» como se
muestra.
$ cvs tag -d Liberación-1
Compruebe los cambios del CVS como se muestra.
$ cvs ci -m «Últimos cambios comprometidos para la Liberación-1«
Vuelva a añadir al etiqueta de la publicación
«Liberación-1
» para actualizalar la cabecera CVS (CVS
HEAD) del raíz como se muestra.
$ cvs tag Liberación-1
Crea una rama poniendo una marca persistente ('sticky') de rama
«Correción-Liberación-inicial
» a partir de la versión
original apuntada por la etiqueta «Liberación-inicial
»
haga una comprobación de ella en el antiguo directorio
«~/camino/al/antiguo
» de la siguiente manera.
$ cvs rtag -b -r Liberación-inicial Correción-Liberación-inicial module1 $ cd ~/ruta/a $ cvs co -r Correción-Liberación-inicial -d antiguo module1 $ cd antiguo
Sugerencia | |
---|---|
Utilice « |
Trabaje en esta parte del árbol local teniendo como como etiqueta por
defecto «Corrección-Liberación-inicial
» la cual está
basada en su versión original.
Trabaje en esta rama ... hasta que alguien más se una a la rama
«CorrecciónLiberación-inicial
».
Sincronize los archivos modificados con otros en el rama y cree los archivos que necesite como se muestra.
$ cvs up -d
Modifique los archivos para resolver los conflictos según necesite.
Compruebe los cambios del CVS como se muestra.
$ cvs ci -m «comprobado en esta rama«
Actualice el árbol local con el HEAD del principal mientras borra la
etiqueta por defecto («-A
») y sin la expansion del
teclado («-kk
») como se muestra.
$ cvs up -d -kk -A
Actualice el árbol local (contenido = raíz del principal) por la mezcla de
la rama «Corrección-Liberación-inicial
» y sin la
expansión de teclado como se muestra.
$ cvs up -d -kk -j Corrección-Liberación-inicial
Corrija los conflictos con el editor.
Compruebe los cambios del CVS como se muestra.
$ cvs ci -m «Corrección-Liberación-inicial mezclada«
Realice el archivado como se muestra.
$ cd .. $ mv antiguo corrección-antiguo-module1 $ tar -cvzf corrección-antiguo-module1.tar.gz corrección-antiguo-module1 $ rm -rf corrección-antiguo-module1
Sugerencia | |
---|---|
La orden « |
Sugerencia | |
---|---|
Puede comprobar únicamente el subdirectorio « |
Tabla 10.14. Opciones importantes de la orden CVS (utilizado como primer parámetro en cvs(1))
opción | significado |
---|---|
-n
|
ejecución en seco, sin efecto |
-t
|
muestra los mensajes de los pasos de la actividad de cvs |
Para obtener los últimos archivos del CVS, utilice
«tomorrow
» como se muestra.
$ cvs ex -D tomorrow nombre_del_módulo
Añadir un alias «mx
» a un módulo de un proyecto CVS
(servidor local) como se muestra.
$ export CVSROOT=/srv/cvs/proyecto $ cvs co CVSROOT/módulos $ cd CVSROOT $ echo «mx -a module1« >>módulos $ cvs ci -m «Ahora mx es un alias para module1« $ cvs release -d .
Ahora ya puede comprobar «module1
» (alias:
«mx
») del CVS al directorio «nuevo
»
como se muestra.
$ cvs co -d nuevo mx $ cd nuevo
Nota | |
---|---|
Con el fin de llevar a cabo el procedimiento anterior, usted debe tener los permisos necesarios. |
Cuendo compruebe los archivos del CVS su bit de ejecución será mantenido.
Si encuentra problemas de permisos de ejecución al comprobar un archivo,
p. ej. «archivo
», para arreglarlo cambie su permiso en el
repositorio CVS correspondiente como se muestra.
# chmod ugo-x archivo
Subversion is an older version control system before Git but after CVS. It lacks tagging and branching features found in CVS and Git.
You need to install subversion
,
libapache2-mod-svn
and
subversion-tools
packages to set up a Subversion server.
Actualmente el paquete subversion
no crea ningún
repositorio, así es que debe ser creado de forma manual. Una posible
localización del repositorio es en /srv/svn/proyecto
».
Cree un directorio como se muestra.
# mkdir -p /srv/svn/proyecto
Cree la base de datos del repositorio como se muestra.
# svnadmin create /srv/svn/proyecto
Si solo accede al repositorio de Subversion a través del servidor Apache2, solo necesita hacer que el repositorio sea modificable solo por el servidor WWW como se muestra.
# chown -R www-data:www-data /srv/svn/proyecto
Añada (o descomente) lo siguiente en
«/etc/apache2/mods-available/dav_svn.conf
» para permitir
el acesso al repositorio por medio de la autenticación de usuario.
<Location /project> DAV svn SVNPath /srv/svn/proyecto AuthType Basic AuthName «Subversion repository« AuthUserFile /etc/subversion/passwd <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> </Location>
Cree un archivo de autenticación de usuarios con la orden que se muestra.
# htpasswd2 -c /etc/subversion/passwd algún_nombre_de_usuario
Reinicie de Apache2.
Se puede acceder a su nuevo repositorio de Subversion en la URL
«http://localhost/proyecto
» y
«http://example.com/proyecto
» desde
svn(1)
(asumiendo que la URL de su servidor web es
«http://example.com/
»).
Lo siguiente configura el acceso local a un repositorio Subversion en
función del grupo, p. ej. projecto
.
# chmod 2775 /srv/svn/proyecto # chown -R root:src /srv/svn/proyecto # chmod -R ug+rwX /srv/svn/proyecto
Su nuevo repositorio Subversion es accesible para los miembros del grupo
local project
a través de la URL
«file:///localhost/srv/svn/proyecto
» o
«file:///srv/svn/proyecto
» desde
svn(1).
Para asegurar el acceso del grupo debe ejecutar las órdenes
svn
, svnserve
,
svnlook
y svnadmin
con la máscara
«umask 002
».
El acceso remoto SSH a un repositorio Subversion basado en grupos se realiza
mediante la URL «example.com:/srv/svn/proyecto
», también
puede acceder con
svn(1)
mediante la URL
«svn+ssh://example.com:/srv/svn/proyecto
».
Muchos proyectos utilizan un árbol de directorios similar para compensar la falta de ramas y etiquetas de Subversion.
----- module1 | |-- branches | |-- tags | | |-- release-1.0 | | `-- release-2.0 | | | `-- trunk | |-- file1 | |-- file2 | `-- file3 | `-- module2
Sugerencia | |
---|---|
Debe utilizar la orden « |
Cree una nueva ubicación de un árbol local en
«~/path/to/module1
» como se muestra.
$ mkdir -p ~/path/to/module1; cd ~/path/to/module1
Rellene un nuevo árbol local en «~/path/to/module1
» con
archivos.
Impórtela a Subversion con los parámetros siguientes.
Nombre del módulo: «module1
»
URL del sitio de Subversion: «file:///srv/svn/proyecto
»
Directorio de Subversion: «module1/trunk
»
Etiqueta de Subversion: «module1/tags/Liberación-incial
»
$ cd ~/ruta/al/module1 $ svn import file:///srv/svn/proyecto/module1/trunk -m «Inicio del module1« $ svn cp file:///srv/svn/proyecto/module1/trunk file:///srv/svn/proyecto/module1/tags/Liberación-inicial
Otra forma es como se muestra.
$ svn import ~/ruta/al/module1 file:///srv/svn/proyecto/module1/trunk -m «Inicio del module1« $ svn cp file:///srv/svn/proyecto/module1/trunk file:///srv/svn/proyecto/module1/tags/Liberación-inicial
Sugerencia | |
---|---|
Puede sustituir las URLs del tipo « |
Aquí esta un ejemplo de flujo de trabajo estándar utilizando Subversion con su cliente nativo.
Sugerencia | |
---|---|
La orden cliente que aporta el paquete |
Enumere todos los módulos disponibles del proyecto Subversión que se
referencias por la URL «file:///srv/svn/proyecto
» como se
muestra.
$ svn list file:///srv/svn/proyecto module1 module2 ...
Compruebe «module1/trunk
» al directorio
«module1
» como se muestra.
$ cd ~/ruta/al $ svn co file:///srv/svn/proyecto/module1/trunk module1 $ cd module1
Haga los cambios que se necesiten en el contenido.
Compruebe los cambios haciendo el equivalente a «diff -u
[repositorio] [local]
» como se muestra.
$ svn diff
Encontrará que ha comedito errores en algunos archivos
«archivo_a_deshacer
» y que otros archivos son correctos.
Sobreescriba «archivo_a_deshacer
» con una copia limpia de
Subversion como se muestra.
$ svn revert archivo_a_deshacer
Guarde un árbol local actualizado en Subversión como se muestra.
$ svn ci -m «Descripción del cambio«
Cree y añada un archivo «archivo_a_añadir
» como se
muestra.
$ vi archivo_a_añadir $ svn add archivo_a_añadir $ svn ci -m «Añadido archivo archivo_a_añadir«
Mezcle la última versión de Subversion como se muestra.
$ svn up
Vigile las líneas que empiezan por «C filename
» ya que
indican cambios conflictivos.
MIre el código no modificado en
p. ej. «nombre_de_archivo.r6
»,
«nombre_de_archivo.r9
» y
«nombre_de_archivo.mio
».
Los cambios conflictivos en los archivos los puede encontrar buscando por la
cadena «<<<<<<<
» y
«>>>>>>>
».
Modifique los archivos para resolver los conflictos según necesite.
Añada una etiqueta de distribución «Liberación-1
» como se
muestra.
$ svn ci -m «Última entrega para la Liberación-1« $ svn cp file:///srv/svn/proyecto/module1/trunk file:///srv/svn/proyecto/module1/tags/Liberación-1
Editelo para continuar.
Borre la etiqueta de publicación «Liberación-1
» como se
muestra.
$ svn rm file:///srv/svn/proyecto/module1/tags/Liberación-1
Comprometa los cambios en Subversion como se muestra.
$ svn ci -m «Realmente la última entrega para la Liberación-1«
Vuelva a añadir al etiqueta de liberación «Liberación-1
»
de la cabeza de «trunk« de la versión actualizada de Subversion como se
muestra.
$ svn cp file:///srv/svn/proyecto/module1/trunk file:///srv/svn/proyecto/module1/tags/Liberación-1
Creee una rama con la ruta
«module1/ramas/Corrección-Liberación-inicial
» de la
versión original referenciada por la ruta
«module1/etiquetas/Liberación-inicial
» y compruebela en
el directorio «~/ruta/al/antiguo
» como se muestra.
$ svn cp file:///srv/svn/proyecto/module1/etiquetas/LIberación-inicial file:///srv/svn/proyecto/module1/ramas/Corrección-Liberación-inicial $ cd ~/ruta/a $ svn co file:///srv/svn/proyecto/module1/ramas/corrección-Liberación-inicial antiguo $ cd antiguo
Sugerencia | |
---|---|
Utilice « |
Trabaje en este árbol local que refencia a la rama
«Corrección-Liberación-inicial
» la cual esta basada en la
versión original.
Trabaje en esta rama ... hasta que alguien más se una a la rama
«CorrecciónLiberación-inicial
».
Sincronice los archivos modificados por tercereos en esta rama como se muestra.
$ svn up
Modifique los archivos para resolver los conflictos según necesite.
Comprometa los cambios en Subversion como se muestra.
$ svn ci -m «Comprobando esta rama«
Actualice el árbol local con el comienzo de trunk como se muestra.
$ svn switch file:///srv/svn/proyecto/module1/trunk
Actualice el árbol local (contenido = raíz de «trunk«) mezclandolo con la
rama «Corrección-Liberación-inicial
» como se muestra.
$ svn merge file:///srv/svn/proyecto/module1/ramas/Corrección-Liberación-inicial
Corrija los conflictos con el editor.
Comprometa los cambios en Subversion como se muestra.
$ svn ci -m «Corrección-Liberación-inicial mezclada«
Realice el archivado como se muestra.
$ cd .. $ mv antiguo corrección-antiguo-module1 $ tar -cvzf corrección-antiguo-module1.tar.gz corrección-antiguo-module1 $ rm -rf corrección-antiguo-module1
Sugerencia | |
---|---|
Puede sustituir las URLs del tipo « |
Sugerencia | |
---|---|
Puede comprobar unicamente un subdirectorio de « |
Tabla 10.15. Opciones importantes de las órdenes de Subversion (utilizadas como primer parámetro en svn(1))
opción | significado |
---|---|
--dry-run
|
ejecución en seco, sin efecto |
-v
|
muestra los detalles de los mensajes de la actividad de svn |