La orden 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.

En la tabla 7.5 se muestran las opciones de cpio más utilizadas; la sintaxis de esta orden es bastante más confusa que la de tar debido a 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).

Tabla 7.5: 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 </tmp/backup.cpio
Para conocer más profundamente el funcionamiento de cpio, así como opciones propias de cada implementación, es indispensable consultar la página del manual de esta orden en cada clon de Unix donde vayamos a utilizarla.
© 2002 Antonio Villalón Huerta