jueves, 31 de diciembre de 2009

cpio


cpio (Copy In/Out) es una utilidad que permite copiar archivos a o desde un contenedor cpio, que no es más que un fichero que almacena otros archivos e información sobre ellos (permisos, nombres, propietario...). Este contenedor puede ser un disco, otro archivo, una cinta o incluso una tubería, mientras que los ficheros a copiar pueden ser archivos normales, pero también dispositivos o sistemas de ficheros completos.

La interpretación de lo que cpio entiende por `dentro' y `fuera': copiar `fuera' es generar un contenedor en salida estándar (que con toda probabilidad desearemos redireccionar), mientras que copiar `dentro' es lo contrario, es decir, extraer archivos de la entrada estándar (también es seguro que deberemos redireccionarla).


Opciones de la orden cpio.
Opción Acción realizada
o Copiar `fuera' (out)
i Copiar `dentro' (in)
m Conserva fecha y hora de los ficheros
t Crea tabla de contenidos
A Añade ficheros a un contenedor existente
v Modo verbose

Por ejemplo, si deseamos copiar los archivos de /export/home/ en el fichero contenedor
/tmp/backup.cpio podemos utilizar la siguiente sintaxis:
anita:~# find /export/home/ |cpio -o > /tmp/backup.cpio
Como podemos ver, cpio lee la entrada estándar esperando los nombres de ficheros a guardar, por lo que es conveniente utilizarlo tras una tubería pasándole esos nombres de archivo. Además, hemos de redirigir su salida al nombre que queramos asignarle al contenedor, ya que de lo contrario se mostraría el resultado en salida estándar (lo que evidentemente no es muy utilizado para realizar backups). Podemos fijarnos también en que estamos usando la orden `find' en lugar de un simple `ls': esto es debido a que `ls' mostraría sólo el nombre de cada fichero (por ejemplo, `passwd') en lugar de su ruta completa (`/etc/passwd'), por lo que cpio buscaría dichos ficheros a partir del directorio actual.

Una vez creado el fichero contenedor quizás resulte interesante chequear su contenido, con la opción `t'. Por ejemplo, la siguiente orden mostrará en pantalla el contenido de /tmp/backup.cpio:
anita:~# cpio -t < /tmp/backup.cpio 
Igual que para almacenar ficheros en un contenedor hemos de pasarle a cpio la ruta de los mismos, para extraerlos hemos de hacer lo mismo; si no indicamos lo contrario, cpio -i extraerá todos los archivos de un contenedor, pero si sólo nos interesan algunos de ellos podemos especificar su nombre de la siguiente forma:
anita:~# echo "/export/home/toni/hola.tex" |cpio -i 
fuente:
http://mmc.geofisica.unam.mx/LuCAS/Manuales-LuCAS/doc-unixsec/unixsec-html/node106.html

La utilidad cpio tiene tres modes de funcionamiento:

Copy-out mode: Activado con -o "o" --create , crea un archivo y copia los archivos dentro.
Copy-in mode: Activado con -i "o" --extract, extrae los datos de un archivo existente.
Copy-pass mode : activado con -p "o" --pass-trough. Combina la copia afuera. Permite copiar un arbol de directorios de un lugar a otro.

Para utilizar cpio se debe pasar una lista de archivos a la utilidad.
ejemplo 1:
Debian:/mnt# find /media/167B-0C61/ |cpio -o >/mnt/practica/archivo.cpio

ejemplo2:
find /media/167B-0C61/ | cpio -ov > /tmp/practicaLinux/archivo.cpio

extracción de datos sin comprimir con gzip

cpio -iv < archivo.cpio

para comprimir con gzip:

find /media/167B-0C61/ |cpio -ov | gzip > /tmp/practicaLinux/archivo.cpio.gz

No hay comentarios: