Conocer los detalles sobre Linux, 101: Administración de archivos y directorios

Sentirse a gusto con los archivos y los directorios de Linux

Tal vez usted haya oído hablar de que todo en Linux es un archivo, entonces comencemos por el camino correcto con una base sólida en cuanto a la administración de archivos y de directorios -- buscando, escuchando, cambiando, copiando y archivando. Puede utilizar este material en el presente artículo para estudiar para el examen de LPI ® 101 para obtener la certificación de administrador del sistema Linux, o sólo aprenderlo por diversión.

Ian Shields, Senior Programmer, EMC

author photo - Ian ShieldsIan Shields trabaja en múltiples proyectos Linux para la zona Linux de developerWorks. Es Senior Programmer de IBM en el Research Triangle Park (RTP), Carolina del Norte. Ingresó a IBM en Canberra, Australia, como Systems Engineer en 1973, y desde entonces se dedica a sistemas de comunicaciones y computación ubicua en Montreal, Canadá, y en el RTP de Carolina del Norte. Es propietario de numerosas patentes y publicó diversos trabajos. Tiene una diplomatura en Matemática Pura y Filosofía de la Universidad Nacional de Australia. Es Máster y Doctor en Ciencias de la Computación de la Universidad Estatal de Carolina del Norte. Para contactar a Ian, escríbale a: ishields@us.ibm.com.


Nivel de autor contribuyente en developerWorks

08-07-2010

Información acerca de esta serie

Esta serie de artículos lo ayuda a conocer las tareas de administración del sistema Linux. También puede utilizar el material de estos artículos para prepararse para los exámenes de Linux Professional Institute Certification nivel 1 (LPIC-1) .

Vea nuestro series roadmap for a description of and link to each artículos en esta serie. La guía está en progreso y refleja los objetivos mas reciente (Abril 2009) para los exámenes LPIC-1: a medida que completemos el artículo, los agregaremos a la guía. Mientras tanto, usted podrá encontrar las anteriores versiones de similar material, dándoles soporte a los objetivos de LPIC-1 anteriores a Abril de 2009, en nuestra LPI certification exam prep tutorials.

Prerrequisitos

Para obtener lo más posible de los artículos en esta serie, debería tener un conocimiento básico sobre Linux y un sistema Linux funcionando en el cual pueda practicar los comandos cubiertos en este artículo. A veces las distintas versiones de un programa tendrán un formato diferente, por lo tanto, es posible que sus resultados no siempre se vean exactamente como los listados y las figuras que se muestran aquí.

Visión General

Este artículo lo inicia en los comandos básicos de Linux para manipular los archivos y los directorios. Aprenda a:

  • Listar el contenido del directorio
  • Copiar, mover o quitar archivos y directorios
  • Manipular muchos archivos y directorios repetidamente
  • Utilizar los patrones comodines para manejar los archivos
  • Usar el comando find para ubicar y tomar acción con los archivos basados en el tipo, el tamaño o el tiempo
  • Comprimir y descomprimir los archivos utilizando gzip y bzip2
  • Guardar los archivos utilizando tar, cpio y dd

Este artículo lo ayuda a preparase para el Objetivo 103.2 en el Tema 103 del examen 101 de Linux Professional Institute's Junior Level Administration (LPIC-1). El objetivo tiene un peso de 4.


Listado de los directorios

Todos los archivos en los sistemas de Linux y UNIX® son accedido como parte de un gran sistema de archivos único estructurado en árbol que tiene la raíz en /. Puede agregar más ramas a este árbol montándolas y quitándolas desmontándolas. Montar y desmontar será tratado en el artículo sobre Montar y desmontar los sistemas de archivos (ver la series roadmap).

Listado de los ingresos al directorio

En este artículo, practicaremos los comandos utilizando los archivos creados en dicho artículo "Learn Linux 101: Text streams and filters." Si leyó el artículo, creó un directorio, lpi103-2, en su directorio raíz. Si no lo hizo, entonces puede utilizar otro directorio en su sistema para practicar los comandos de los que se habla en este artículo.

Los nombres de los archivos y de los directorios son absolutos, es decir, comienzan con una /, o son relativos al directorio de trabajo actual, es decir, no comienzan con una /. La vía absoluta de un archivo o directorio consiste en una / seguida de una serie de ceros o nombres de más directorios, cada uno seguido de otra / y luego un nombre final.

El nombre de un archivo o de un directorio dado que sea relativo al actual directorio de trabajo, simplemente concatena el nombre absoluto del directorio de trabajo, una /, y el nombre relativo. Por ejemplo, el directorio, lpi103-2, que creamos en el anterior artículo fue creado en mi directorio raíz, /home/ian, de manera que es completo, o absoluto, la vía es /home/ian/lpi103-2.

Usted puede mostrar el nombre del actual directorio de trabajo con el comando pwd. También está generalmente disponible en la variable del entorno PWD. El listado 1 muestra el uso del comando pwd, y las tres formas diferentes de utilizar el comando ls para listar los archivos en este directorio.

Listado 1. Listado de los ingresos al directorio
[ian@echidna lpi103-2]$ pwd
/home/ian/lpi103-2
[ian@echidna lpi103-2]$ echo "$PWD"
/home/ian/lpi103-2
[ian@echidna lpi103-2]$ ls
sedtab  text1  text2  text3  text4  text5  text6  xaa  xab  yaa  yab
[ian@echidna lpi103-2]$ ls "$PWD"
sedtab  text1  text2  text3  text4  text5  text6  xaa  xab  yaa  yab
[ian@echidna lpi103-2]$ ls /home/ian/lpi103-2
sedtab  text1  text2  text3  text4  text5  text6  xaa  xab  yaa  yab

Como puede ver, usted puede darle un nombre al directorio relativo o absoluto como un parámetro del comando ls, y listará el contenido de ese directorio.

Listado de los detalles

En un dispositivo de almacenamiento, un archivo o directorio está contenido en un conjunto de bloques. La información acerca de un archivo está contenida en un inode que registra la información tal como el propietario, cuándo fue la última vez que se accedió al archivo, qué longitud tiene, si se trata de un directorio o no, y quién puede leer o grabar en él. El número del inode también es conocido como el número de serie del archivo y es exclusivo dentro de un determinado sistema de archivos. Podemos utilizar el -l (o --format=long) la opción para mostrar algo de la información almacenada en el inode.

Por omisión, el comando ls no lista los archivos especiales, aquéllos cuyos nombres comienzan con un punto (.). Cada directorio que no sea el raíz tiene por lo menos dos entradas especiales: el directorio en sí mismo (.) y el directorio matriz (..). El directorio raíz no tiene un directorio matriz.

El listado 2 usa las opciones -l y -a para mostrar un listado de formato largo de todos los archivos incluyendo la entradas de directorio . y .. .

Listado 2. Mostrar un listado de directorio largo
[ian@echidna lpi103-2]$ ls -al
total 52
drwxrwxr-x.  2 ian ian 4096 2009-08-11 21:21 .
drwx------. 35 ian ian 4096 2009-08-12 10:55 ..
-rw-rw-r--.  1 ian ian    8 2009-08-11 21:17 sedtab
-rw-rw-r--.  1 ian ian   24 2009-08-11 14:02 text1
-rw-rw-r--.  1 ian ian   25 2009-08-11 14:27 text2
-rw-rw-r--.  1 ian ian   63 2009-08-11 15:41 text3
-rw-rw-r--.  1 ian ian   26 2009-08-11 15:42 text4
-rw-rw-r--.  1 ian ian   24 2009-08-11 18:47 text5
-rw-rw-r--.  1 ian ian   98 2009-08-11 21:21 text6
-rw-rw-r--.  1 ian ian   15 2009-08-11 14:41 xaa
-rw-rw-r--.  1 ian ian    9 2009-08-11 14:41 xab
-rw-rw-r--.  1 ian ian   17 2009-08-11 14:41 yaa
-rw-rw-r--.  1 ian ian    8 2009-08-11 14:41 yab

En el Listado 2, la primera línea muestra la cantidad total de bloques de disco (52) utilizados por los archivos listados. El resto de las líneas le indican a usted las entradas del directorio.

  • El primer campo (drwxrwxr-x o -rw-rw-r-- en este caso) nos indica si el archivo es un directorio (d) o un archivo u otros valores para algunos archivos especiales (tales como los archivos en el sistema de archivos dev /). Usted conocerá más detalles sobre los vínculos simbólicos en el artículo Crear y cambiar los vínculos fuertes y los simbólicos (ver series roadmap). El tipo es seguido de tres conjuntos de permisos (tales como rwx o r--) para el propietario,los miembros del grupo del propietario, y para todos. Los tres valores, respectivamente, indican si el usuario, el grupo o todos tiene permiso de lectura (r), grabación (w), o ejecución (x). Se cubrirán otros usos tales como setuid, en este artículo Administrar los permisos y la propiedad de los archivos (ver el series roadmap).
  • El siguiente campo es un número que nos indica la cantidad de vínculos fuertes al archivo. Dijimos que el inode contiene la información acerca del archivo. La entrada al directorio de archivos contiene un vínculo fuerte (o puntero) al inode para el archivo, de manera que cada entrada listada debería tener por lo menos un vínculo fuerte. Las entradas al directorio tiene uno adicional para la entrada . y uno para cada entrada al subdirectorio. Entonces podemos ver del Listado 2 que el directorio "my home", representado por .., tiene unos pocos subdirectorios, ya que tiene 35 vínculos fuertes.
  • Los siguientes dos campos son el propietario del archivo y el grupo principal del propietario. Algunos sistemas, tales como los sistemas Red Hat o Fedora, omiten proveer un grupo separado para cada usuario. En otros sistemas, todos los usuarios pueden estar en uno o quizás en unos pocos grupos.
  • El siguiente campo contiene la longitud del archivo en bytes.
  • El penúltimo campo contiene el sello de la hora de la última modificación.
  • Y el campo final contiene el nombre del archivo o del directorio.

La opción -i del comando ls le mostrará los números de inode. Usted verá nuevamente los inodes luego en este artículo y también en el artículo Create and change hard and symbolic links (ver la series roadmap).

Archivos múltiples

También podrá especificar los parámetros múltiples para el comando ls, donde cada nombre corresponde al nombre de un archivo o directorio. Para los nombres de directorio, el comando ls lista el contenido del directorio en lugar de la información acerca del mismo. tEn nuestro ejemplo, supongamos que deseamos la información sobre la entrada al directorio lpi103-2 según está listada en el directorio matriz. El comando ls -l ../lpi103-2 nos daría un listado como el anterior ejemplo. El Listado 3 muestra cómo agregar la opción -dpara listar la información sobre las entradas al directorio en lugar del contenido de los directorios, y también cómo listar las entradas para los archivos o directorios múltiples.

Listado 3. Uso del ls -d
[ian@echidna lpi103-2]$ ls -ld ../lpi103-2 sedtab xaa
drwxrwxr-x. 2 ian ian 4096 2009-08-12 15:31 ../lpi103-2
-rw-rw-r--. 1 ian ian    8 2009-08-11 21:17 sedtab
-rw-rw-r--. 1 ian ian   15 2009-08-11 14:41 xaa

Observe que el tiempo de modificación para lpi103-2 es diferente del de la lista anterior. También, como en el listado anterior, es diferente de los tiempo de cualquiera de los archivos en el directorio. ¿Es esto lo que usted esperaría? Generalmente no. Sin embargo, durante el desarrollo de este artículo, creé algunos modelos extras y luego los eliminé, de manera que los sellos del tiempo del directorio reflejen ese hecho. Hablaremos más acerca de los tiempos de los archivos luego en Manejo de los archivos y directorios múltiples.

Clasificación de la salida

Por omisión, ls lista los archivos alfabéticamente. Existe una cantidad de opciones para clasificar la salida. Por ejemplo, ls -tla clasificará por momento de la modificación (de la más reciente a la más antigua) mientras que ls -lS producirá un largo listado por tamaño (de la más larga a la más pequeña). El agregado de -r revertirá el orden de la clasificación. Por ejemplo, utilice ls -lrt para producir un largo listado clasificado de la más antigua a la más reciente. Consulte la página man para obtener otras formas en las que puede listar los archivos y los directorios.


Copia, traslado y eliminación de los archivos

Ahora hemos aprendido algunas formas para crear archivos, pero supongamos que deseemos hacer copias de los archivos, renombrarlos, moverlos alrededor de la jerarquía del sistema de archivos, o incluso eliminarlos. Utilizamos tres comandos breves a estos fines.

cp
es utilizado para hacer una copia de uno o más archivos o directorios. Usted debe dar uno (o más nombres fuente y un nombre destino. Los nombres fuente o destino pueden incluir la especificación de vía. Si el destino es un directorio existente, entonces todas las fuentes son copiadas en el destino. Si el destino es un directorio que no existe, entonces la (única) fuente también deberá ser un directorio y una copia del directorio fuente y de su contenido será hecha con el nombre destino como el nuevo nombre. Si el destino es un archivo, entonces la (única) fuente deberá ser también un archivo y una copia del archivo fuente será hecha con el nombre destino como el nuevo nombre, reemplazando cualquier archivo existente con el mismo nombre. Observe que no existe ningún supuesto por omisión del destino que sea el directorio actual como en los sistemas operativos de DOS y Windows.
mv
es utilizado para mover o renombrar uno o más archivos o directorios. En general, los nombres que usted pueda usar siguen las mismas normas que para copiar con cp; puede renombrar un único archivo o mover un grupo de archivos a un nuevo directorio. Dado que el nombre es sólo una entrada al directorio que se vincula a un inode, no debería ser una sorpresa que el número del inode no cambie salvo que el archivo sea movido a otro sistema de archivos, en cuyo caso moverlo se comporta más como una copia seguida de la eliminación del original.
rm
es utilizado para eliminar uno o más archivos. Veremos cómo quitar los directorios en breve.

¿Dónde está el comando rename ?

Si está acostumbrado a un sistema DOS o Windows®, es probable que le parezca extraño utilizar mv para renombrar el archivo. Linux tiene un comando rename , pero tiene una sintaxis diferente de la de los comandos de DOS y de Windows del mismo nombre. Vea la página man page para obtener detalles sobre cómo utilizarlo.

El listado 4 muestra el uso de cp y de mv para realizar algunas copias de backup de nuestros archivos de texto. También usamos ls -i para mostrar los inodes de algunos de nuestros archivos.

  1. primero hacemos una copia de nuestro archivo text1 como text1.bkp.
  2. Luego decidimos crear un subdirectorio de backup usando el comando mkdir
  3. Hacemos una segunda copia de backup de text 1, esta vez en el directorio de backup, y mostramos que los tres archivos tienen diferentes inodes.
  4. Luego movemos nuestro text1.bkp al directorio de backup y después de eso lo renombramos para que sea más consistente con el segundo backup. Mientras que podríamos haber hecho esto con un único comando, usamos dos para ilustrarlo.
  5. Verificamos nuevamente los inodes y confirmamos que text1.bkp con el inode 934193 ya no es más nuestro directorio lpi103-2, sino que ese inode corresponde a text1.bkp.1 en el directorio de backup.
Listado 4. Copiar y mover archivos
[ian@echidna lpi103-2]$ cp text1 text1.bkp
[ian@echidna lpi103-2]$ mkdir backup
[ian@echidna lpi103-2]$ cp text1 backup/text1.bkp.2
[ian@echidna lpi103-2]$ ls -i text1 text1.bkp backup
933892 text1  934193 text1.bkp

backup:
934195 text1.bkp.2
[ian@echidna lpi103-2]$ mv text1.bkp backup
[ian@echidna lpi103-2]$ mv backup/text1.bkp backup/text1.bkp.1
[ian@echidna lpi103-2]$ ls -i text1 text1.bkp backup
ls: cannot access text1.bkp: No such file or directory
933892 text1

backup:
934193 text1.bkp.1  934195 text1.bkp.2

Normalmente, el comando cp copiará un archivo sobre una copia existente, si el archivo existente fuera factible de ser grabado. Por otro lado, mvmoverá o renombrará un archivo si el destino existe. Hay varias opciones útiles para este comportamiento de cp y mv.

-f o --force
harán que cp intente eliminar un archivo destino existente aun si no fuera factible de ser grabado.
-i o --interactive
pedirá la confirmación antes de intentar reemplazar un archivo existente
-b o --backup
realizará un backup de cualquier archivo que fuera reemplazado.

Como es habitual, consulte la página man para obtener los detalles completos de éstas y de otras opciones para copiar y mover.

El listado 6 muestra la copia con backup y la eliminación del archivo.

Listado 5. Hacer copias de backup y eliminar archivos
[ian@echidna lpi103-2]$ cp text2 backup
[ian@echidna lpi103-2]$ cp --backup=t text2 backup
[ian@echidna lpi103-2]$ ls backup
text1.bkp.1  text1.bkp.2  text2  text2.~1~
[ian@echidna lpi103-2]$ rm backup/text2 backup/text2.~1~
[ian@echidna lpi103-2]$ ls backup
text1.bkp.1  text1.bkp.2

Observe que el comando rm también acepta -i (interactive) y -f (force options).Una vez que haya eliminado un archivo usando rm, el sistema de archivos ya no tendrá acceso a él. Algunos sistemas definen un valor por omisión para establecer un alias alias rm='rm -i' para el usuario raíz a fin de ayudar a prevenir la eliminación inadvertida de los archivos. Ésta también es una buena idea, para los usuarios comunes si está nervioso pensando en que podría eliminar alguno accidentalmente.

Antes de dejar este tema, se deberá observar que el comando cp crea, por omisión, una nueva marcación de tiempo para el y los nuevos archivos. El propietario y el grupo también son definidos para el propietario y el grupo del usuario que esté haciendo la copia. La opción -p puede ser utilizada para preservar los atributos seleccionados. Observe que el usuario raíz puede ser el único usuario que puede preservar la propiedad. Vea la página man para obtener más detalles.


Crear y eliminar directorios

Ya hemos visto cómo crear un directorio con mkdir. Ahora veremos más en mkdir y presentaremos a rmdir, su análogo para eliminar los directorios.

Mkdir

Supongamos que estamos en nuestro directorio lpi103-2 y que deseamos crear los subdirectorios dir1 y dir2. mkdir, así como los comandos que acabamos de revisar, manejará las solicitudes múltiples para la creación de los directorios en un paso como se muestra en el Listado 6.

Listado 6. Crear múltiples directorios
[ian@echidna lpi103-2]$ mkdir dir1 dir2

Observe que no hay ninguna salida al finalizar con éxito, aunque podría usar echo $? para confirmar que el código de salida es realmente 0.

Si en lugar de eso, deseara crear un subdirectorio anidado, tal como d1/d2/d3, fallaría porque los directorios d1 y d2 no existen. Afortunadamente, mkdir tiene una opción -p que le permite crear cualquier directorio matriz requerido, como se muestra en el Listado 7.

Listado 7. Creación de los directorios matrices
[ian@echidna lpi103-2]$ mkdir d1/d2/d3
mkdir: cannot create directory `d1/d2/d3': No such file or directory
[ian@echidna lpi103-2]$ echo $?
1
[ian@echidna lpi103-2]$ mkdir -p d1/d2/d3
[ian@echidna lpi103-2]$ echo $?
0

Rmdir

Eliminar los directorios usando el comando rmdir es lo opuesto a crearlos. Nuevamente, existe una opción -p para eliminar los matrices también. Usted puede eliminar un directorio con rmdir sólo si está vacío y no hay ninguna opción para forzar la eliminación. Veremos otra forma de lograr ese truco cuando veamos el manejo repetitivo. Una vez que aprenda esto, tal vez raramente utilice rmdir en la línea de comandos, pero aún así es bueno conocerlo.

A fin de ilustrar la eliminación del directorio, copiamos nuestro archivo text1 al directorio d1/d2 de manera que ya no esté vacío. Luego usamos rmdir para eliminar todos los directorios que acabamos de crear con mkdir. Como puede ver, d1 y d2 no fueron eliminados porque d2 no estaba vacío. Los otros directorios fueron eliminados. Una vez que eliminemos la copia de text1 de d2, podremos eliminar d1 y d2 con una única invocación de rmdir -p.

Listado 8. Eliminación de los directorios
[ian@echidna lpi103-2]$ cp text1 d1/d2
[ian@echidna lpi103-2]$ rmdir -p d1/d2/d3 dir1 dir2
rmdir: failed to remove directory `d1/d2': Directory not empty
[ian@echidna lpi103-2]$ ls . d1/d2
.:
backup  sedtab  text2  text4  text6  xab  yab
d1      text1   text3  text5  xaa    yaa

d1/d2:
text1
[ian@echidna lpi103-2]$ rm d1/d2/text1
[ian@echidna lpi103-2]$ rmdir -p d1/d2

Manejo de múltiples archivos y directorios

Hasta ahora los comandos que hemos utilizado han operado en un único archivo o tal vez en unos pocos archivos nombrados individualmente. En el resto de este artículo, veremos varias operaciones para manejar múltiples archivos, repetitivamente, manejando parte de un árbol de directorio, y guardando o restaurando múltiples archivos o directorios.


Manejo repetitivo

Listado repetitivo

El comando ls tiene una opción -R (observe la "R" en mayúsculas) para listar un directorio y todos sus subdirectorios. La opción repetitiva se aplica sólo a los nombres de los directorios; no encontrará todos los archivos denominados 'text1', por ejemplo, en un árbol de directorios. Usted puede usar otras opciones que ya hayamos visto junto con -R. Se muestra un listado repetitivo de nuestro directorio lpi103-2, incluyendo los números de inode, ene l Listado 9.

Listado 9. Mostrar repetidamente los listados de los directorios
[ian@echidna lpi103-2]$ ls -iR
.:
934194 backup  933892 text1  933898 text3  933900 text5  933894 xaa  933896 yaa
933901 sedtab  933893 text2  933899 text4  933902 text6  933895 xab  933897 yab

./backup:
934193 text1.bkp.1  934195 text1.bkp.2

Copia repetida

Puede utilizar -r (o -R o la opción --repetitiva) para hacer que el comando cp descienda a los directorios fuente y que copie los contenidos repetitivamente. A fin de evitar una repetición infinita, el directorio fuente no podrá ser copiado a sí mismo. El listado 10 muestra cómo copiar todo en nuestro directorio lpi103-2 a un subdirectorio copy1. Utilizamos ls -R para mostrar el árbol de directorios resultante.

Listado 10. Copia repetitiva
[ian@echidna lpi103-2]$ cp -pR . copy1
cp: cannot copy a directory, `.', into itself, `copy1'
[ian@echidna lpi103-2]$ ls -R
.:
backup  copy1  sedtab  text1  text2  text3  text4  text5  text6  xaa  xab  yaa  yab

./backup:
text1.bkp.1  text1.bkp.2

./copy1:
text2  text3  text5  xaa  yaa  yab

Eliminación repetitiva

Antes mencionamos que rmdir sólo elimina los directorios vacíos. Podemos usar -r (o -R o la opción --repetitiva) para hacer que el comando rm elimine ambos archivos y directorios según se muestra en el Listado 11, donde eliminamos el directorio copy1 que acabamos de crear, junto con sus contenidos, incluyendo el subdirectorio de backup y sus contenidos.

Listado 11. Eliminación repetitiva
[ian@echidna lpi103-2]$ rm -r copy1
[ian@echidna lpi103-2]$ ls -R
.:
backup  sedtab  text1  text2  text3  text4  text5  text6  xaa  xab  yaa  yab

./backup:
text1.bkp.1  text1.bkp.2

Si usted tiene archivos que no puedan ser escritos por usted, es posible que necesite agregar la opción -f para forzar la eliminación. Esto lo hace con frecuencia el usuario raíz al realizar la limpieza, pero se debe advertir que puede perder datos valiosos su no es cuidadoso.


Comodines y "globbing"

Con frecuencia usted puede necesitar realizar una única operación en muchos objetos del sistema de archivos, sin operar en todo el árbol como recién hicimos con las operaciones repetitiva. Por ejemplo, usted podría desear encontrar los tiempos de modificación de todos los archivos de texto que creamos en lpi103-2, sin listar los archivos divididos. Aunque esto es fácil con nuestro pequeño directorio, es mucho más difícil en un sistema de archivos grande.

Para resolver este problema, utilice el soporte del comodín que esté incorporado en el bash shell. Este soporte, también denominado "globbing" (porque fue originalmente implementado como un programa denominado /etc/glob), le permite especificar múltiples archivos utilizando el patrón de comodines.

Una secuencia que contenga cualquiera de los caracteres '?', '*' o '[', es un patrón de comodines. Globbing es el proceso por el cual shell (o posiblemente otro programa) expande estos patrones a una lista de nombres de rutas que concuerden con el patrón. La concordancia se realiza de la siguiente manera:

?
concuerda con cualquier carácter único.
*
concuerda con cualquier cadena, incluyendo una cadena vacía.
[
presenta una clase de caracteres.Una clase de caracteres es una cadena que no está vacía, terminada por un ']'. Una concordancia significa la combinación de cualquier carácter único encerrado por corchetes. Existen unas pocas consideraciones especiales.
  • Los caracteres '*' y '?' concuerdan entre sí. Si usted los utiliza en los nombres de los archivos, necesita ser cuidadoso con respecto al entrecomillado o al escape apropiado.
  • Dado que la cadena no debe estar vacía y debe terminar con un ']', usted deberá colocar un ']' primero en la cadena si desea que concuerde.
  • El carácter '-' entre otros dos representa un rango que incluye los otros dos caracteres y todos los caracteres entre ellos en la secuencia compaginada. Por ejemplo, [0-9a-fA-F] representa cualquier dígito hexadecimal en minúsculas. Usted puede combinar un '-' colocándolo ya sea al principio o al final en un rango.
  • El carácter '!' especificado como el primer carácter de un rango complementa el rango de manera que concuerda con cualquier carácter salvo con los caracteres restantes. Por ejemplo, [!0-9] significa cualquier carácter salvo los dígitos del 0 al 9. Un '!' en cualquier posición que no sea la primera concuerda consigo mismo. Recuerde que '!' también es utilizado con la función del histórico de shell, de manera que usted debe ser cuidadoso para salir adecuadamente de él.

Nota: Los patrones de comodines y los patrones de expresión normal comparten algunas características, pero no son los mismos. Preste mucha atención.

Globbing se aplica por separado en cada componente de un nombre de ruta. Usted no puede combinar una '/', ni incluir una en un rango. Puede usarla en cualquier lugar que pueda especificar los nombres de archivos o directorios múltiples, por ejemplo en los comandos ls, cp, mv, o rm. En el Listado 12, primero creamos un par de archivos con nombres extraños y luego use los comandos ls y rm con los patrones de comodines.

Listado 12. Ejemplos de los patrones de comodines
[ian@echidna lpi103-2]$ echo odd1>'text[*?!1]'
[ian@echidna lpi103-2]$ echo odd2>'text[2*?!]'
[ian@echidna lpi103-2]$ ls
backup  text1       text2       text3  text5  xaa  yaa
sedtab  text[*?!1]  text[2*?!]  text4  text6  xab  yab
[ian@echidna lpi103-2]$ ls text[2-4]
text2  text3  text4
[ian@echidna lpi103-2]$ ls text[!2-4]
text1  text5  text6
[ian@echidna lpi103-2]$ ls text*[2-4]*
text2  text[2*?!]  text3  text4
[ian@echidna lpi103-2]$ ls text*[!2-4]* # Surprise!
text1  text[*?!1]  text[2*?!]  text5  text6
[ian@echidna lpi103-2]$ ls text*[!2-4] # Another surprise!
text1  text[*?!1]  text[2*?!]  text5  text6
[ian@echidna lpi103-2]$ echo text*>text10
[ian@echidna lpi103-2]$ ls *\!*
text[*?!1]  text[2*?!]
[ian@echidna lpi103-2]$ ls *[x\!]*
text1  text[*?!1]  text10  text2  text[2*?!]  text3  text4  text5  text6  xaa  xab
[ian@echidna lpi103-2]$ ls *[y\!]*
text[*?!1]  text[2*?!]  yaa  yab
[ian@echidna lpi103-2]$ ls tex?[[]*
text[*?!1]  text[2*?!]
[ian@echidna lpi103-2]$ rm tex?[[]*
[ian@echidna lpi103-2]$ ls *b*
sedtab  xab  yab

backup:
text1.bkp.1  text1.bkp.2
[ian@echidna lpi103-2]$ ls backup/*2
backup/text1.bkp.2
[ian@echidna lpi103-2]$ ls -d .*
.  ..

Notas:

  1. La complementación junto con un '*' puede dar algunas sorpresas. El patrón '*[!2-4]' concuerda con la parte más larga de un nombre que no tenga 2, 3 o 4 a continuación de él, que es combinado tanto por text[*?!1] como por text[2*?!]. Entonces ahora ambas sorpresas deberían ser claras.
  2. Así como con los anteriores ejemplos de ls, si la expansión del patrón da como resultado un nombre que es el nombre de un directorio y no se especifica la opción -d, entonces los contenidos de ese directorio serán listados (como en nuestro anterior ejemplo para el patrón '*b*').
  3. Si el nombre de un archivo comienza con un punto (.), entonces ese carácter debe concordar explícitamente. Observe que sólo el último comando ls listó las dos entradas especial al directorio (. y ..).

Recuerde que los caracteres de comodines en un comando son factibles de ser expandidos por shell, lo que puede llevar a resultados inesperados. Más aún, si especifica un patrón que no concuerde con algún objeto del sistema de archivos, entonces POSIX requiere que la cadena original de patrones sea pasada al comando. Algunas implementaciones anteriores pasaron una lista nula al comando, de manera que es posible que usted se encuentre con antiguos scripts que tengan una conducta inusual. Mostramos estos puntos en el Listado 13.

Listado 13. Sorpresas de los patrones de comodines
[ian@echidna lpi103-2]$ echo text*
text1 text10 text2 text3 text4 text5 text6
[ian@echidna lpi103-2]$ echo "text*"
text*
[ian@echidna lpi103-2]$ echo text[[\!?]z??
text[[!?]z??

Para obtener más información sobre globbing, vea man 7 glob. Necesitará al número de la sección, ya que también existe información sobre glob en la sección 3. La mejor forma de comprender todas las distintas interacciones de shell es a través de la práctica, entonces intente con estos comodines cuando tenga la oportunidad de hacerlo. Recuerde intentar con ls para verificar su patrón de comodines antes d permitir cp, mv, o peor aún, rm hacer algo inesperadamente.


Archivos Touching

Ahora veremos el comando touch, el que puede actualizar el acceso a los archivos y los momentos en los que se produjeron modificaciones o crear archivos vacíos. En la siguiente parte, veremos cómo utilizar esta información para encontrar archivos y directorios. Continuaremos usando el directorio lpi103-2 para nuestros ejemplos. También veremos las distintas formas en las que usted puede especificar las marcaciones de tiempo.

touch

El comando touch sin opciones toma uno o más nombres de archivos como parámetros y actualiza el momento de la modificación de los archivos. Ésta es la misma marcación de tiempo que aparece normalmente con un listado largo de directorios. En el Listado 14 usamos nuestro viejo amigo echo para crear un pequeño archivo denominado f1, y luego use un largo listado de directorios para mostrar el tiempo de la modificación (o mtime). En este caso, también es el momento en el que el archivo fue creado. Luego utilizamos el comando sleep para esperar 60 segundos y volver a ejecutar ls. Observe que la marcación de tiempo para el archivo ha cambiado en un minuto.

Listado 14. Actualización del momento de la modificación con touch
[ian@echidna lpi103-2]$ echo xxx>f1; ls -l f1; sleep 60; touch f1; ls -l f1
-rw-rw-r--. 1 ian ian 4 2009-08-14 18:24 f1
-rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 f1

Si usted especifica el nombre de archivo de un archivo que no existe, entonces touch normalmente creará un archivo en blanco, salvo que usted especifique la opción -c o --no-create.El Listado 15 muestra ambos comandos. Observe que sólo se crea f2.

Listado 15. Creación de archivos en blanco con touch
[ian@echidna lpi103-2]$ touch f2; touch -c f3; ls -l f*
-rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 f1
-rw-rw-r--. 1 ian ian 0 2009-08-14 18:27 f2

El comando touch también puede definir el momento de la modificación de un archivo (también conocido como mtime) a una fecha y hora determinadas usando ya sea las opciones -d o -t. La opción -d es muy flexible en los formatos de la fecha y la hora que aceptará, al tiempo que la opción -t necesita por lo menos MMDDhhmm con valores opciones para el año y los segundos. El Listado 16 muestra algunos ejemplos.

Listado 16. Definición de mtime con touch
[ian@echidna lpi103-2]$ touch -t 200908121510.59 f3
[ian@echidna lpi103-2]$ touch -d 11am f4
[ian@echidna lpi103-2]$ touch -d "last fortnight" f5
[ian@echidna lpi103-2]$ touch -d "yesterday 6am" f6
[ian@echidna lpi103-2]$ touch -d "2 days ago 12:00" f7
[ian@echidna lpi103-2]$ touch -d "tomorrow 02:00" f8
[ian@echidna lpi103-2]$ touch -d "5 Nov" f9
[ian@echidna lpi103-2]$ ls -lrt f*
-rw-rw-r--. 1 ian ian 0 2009-07-31 18:31 f5
-rw-rw-r--. 1 ian ian 0 2009-08-12 12:00 f7
-rw-rw-r--. 1 ian ian 0 2009-08-12 15:10 f3
-rw-rw-r--. 1 ian ian 0 2009-08-13 06:00 f6
-rw-rw-r--. 1 ian ian 0 2009-08-14 11:00 f4
-rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 f1
-rw-rw-r--. 1 ian ian 0 2009-08-14 18:27 f2
-rw-rw-r--. 1 ian ian 0 2009-08-15 02:00 f8
-rw-rw-r--. 1 ian ian 0 2009-11-05 00:00 f9

Si no está seguro de qué fecha podría ser resuelta por una expresión de fecha, puede usar el comando date para saberlo. También acepta la opción -d y puede resolver la misma clase de formatos de fecha que touch puede resolver.

Puede usar la opción -r (o --reference) junto con un nombre de archivo de referencia a fin de indicar que touch (o date) deberían usar la marcación de tiempo de un archivo existente. El Listado 17 muestra algunos ejemplos.

Listado 17. Marcaciones de tiempo de los archivos de referencia
[ian@echidna lpi103-2]$ date
Fri Aug 14 18:33:48 EDT 2009
[ian@echidna lpi103-2]$ date -r f1
Fri Aug 14 18:25:50 EDT 2009
[ian@echidna lpi103-2]$ touch -r f1 f1a
[ian@echidna lpi103-2]$ ls -l f1*
-rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 f1
-rw-rw-r--. 1 ian ian 0 2009-08-14 18:25 f1a

Un sistema Linux registra tanto el tiempo de modificación de un archivo como el tiempo de acceso. Estos también son conocidos respectivamente como mtime y atime. Ambas marcaciones de tiempo están definidas con el mismo valor cuando se crea un archivo, y ambas son restauradas cuando es modificado. Si se accede a un archivo, el tiempo del acceso es entonces actualizado, aun si no fuera modificado el archivo. Para nuestro último ejemplo con touch, veremos los tiempos de acceso del archivo. La opción -a (o --time=atime, --time=access o --time=use) especifican que el tiempo de acceso debería ser actualizado. El Listado 18 usa el comando cat para acceder al archivo f1 y mostrar sus contenidos. Entonces usamos ls -l y ls -lu para mostrar los momentos de la modificación y de acceso respectivamente para f1 y f1a, que creamos utilizando f1 como un archivo de referencia. Luego restauramos el tiempo de acceso de f1 al de f1a usando touch -a y para verificar que haya sido restaurado.

Listado 18. Momento del acceso y de la modificación
[ian@echidna lpi103-2]$ ls -lu f1*
-rw-rw-r--. 1 ian ian 4 2009-08-14 18:39 f1
-rw-rw-r--. 1 ian ian 0 2009-08-14 18:25 f1a
[ian@echidna lpi103-2]$ ls -l f1*
-rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 f1
-rw-rw-r--. 1 ian ian 0 2009-08-14 18:25 f1a
[ian@echidna lpi103-2]$ touch -a -r f1a f1
[ian@echidna lpi103-2]$ ls -lu f1*
-rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 f1
-rw-rw-r--. 1 ian ian 0 2009-08-14 18:25 f1a

A fin de obtener la información completa sobre las muchas especificaciones de hora y fecha permitidas, vea las páginas man o info para obtener detalles sobre los comandos touch y date.


Buscar archivos

Ahora que hemos cubierto el tema sobre los archivos y los directorioscon el gran martillo repetitivo que golpea todo, y con el martillo de globbing que golpea más selectivamente, veamos el comando find, el que puede ser más precido a el cuchillo de un cirujano. El comando find es utilizado para buscar archivos en uno o más árboles de directorios, basándose en los criterios tales como nombre, marcación de tiempo o tamaño. Nuevamente, utilizaremos el directorio lpi103-2.

find

El comando find buscará los archivos o los directorios utilizando todo o parte del nombre, o mediante otro criterio de búsqueda, tales como el tamaño, el tipo, el propietario del archivo, la fecha de creación o la fecha del último acceso. La búsqueda más básica es una por nombre o parte del mismo. El Listado 19 muestra un ejemplo de nuestro directorio lpi103-2 donde primero buscamos todos los archivos que tienen ya sea un '1' o una 'k' en su nombre, luego realizamos algunas búsquedas de rutas que están explicadas en las notas que aparecen más abajo.

Listado 19. Buscar archivos por nombre
[ian@echidna lpi103-2]$ find . -name "*[1k]*"
./f1a
./f1
./text10
./backup
./backup/text1.bkp.1
./backup/text1.bkp.2
./text1
[ian@echidna lpi103-2]$ find . -ipath "*ACK*1"
./backup/text1.bkp.1
[ian@echidna lpi103-2]$ find . -ipath "*ACK*/*1"
[

Notas:

  1. Los patrones que usted puede utilizar son los patrones de los comodines shell como los que vimos antes bajo el título Comodines y globbing.
  2. Usted puede utilizar -path en lugar de -name a fin de combinar las rutas completas en lugar de sólo los nombres de los archivos de base. En este caso, el patrón may abarca los componentes de las rutas, a diferencia de las concordancias comunes de comodines, los que concuerdan sólo con una única parte de una ruta.
  3. Si desea una búsqueda intensiva en cuanto a la tipografía, como se muestra antes con el uso de ipath, preceda las opciones find que buscan en una cadena o patrón con una 'i'.
  4. Si desea buscar un archivo o directorio cuyo n ombre comience con un punto, tal como .bashrc o el directorio actual (.), entonces debe especificar un punto líder como parte del patrón. De lo contrario, las búsquedas por nombre ignorarán estos archivos o directorios.

En el primer ejemplo precedente, encontramos ambos archivos y un directorio (./backup). Use el parámetro -type junto con una tipografía de una letra para acotar la búsqueda. Use 'f' para los archivos normales, 'd' para los directorios y 'l' para los vínculos simbólicos. Vea en la página man find para obtener otras posibles tipografías. El Listado 20 muestra el resultado de la búsqueda de los directorios (-type d) solos y con un nombre de archivo (* o todo, en este caso).

Listado 20. Buscar archivos por tipo
[ian@echidna lpi103-2]$ find . -type d
.
./backup
[ian@echidna lpi103-2]$ find . -type d -name "*"
.
./backup

Observe que la especificación del -type d sin ninguna froma de especificación de nombre muestra los directorios que tienen un punto líder en sus nombres (sólo el directorio actual en este caso), como el caso del "*" comodín.

También podemos buscar por tamaño del archivo, ya sea por un tamaño determinado (n) o por archivos que son más grandes (+n) o más pequeños que un valor dado (-n). Al utilizar tanto los límites de tamaño superiores e inferiores, podemos encontrar archivos cuyo tamaño se encuentre dentro de un rango dado. Por omisión, la opción -size de find asume una unidad de 'b' para los bloques de 512 bytes. Entre otras opciones, especifique 'c' para los bytes, o 'k' para los kilobytes. En el Listado 21, primero buscamos todos los archivos con tamaño 0, y luego todos con tamaño de 24 o 25 bytes. Observe que especificar -empty en lugar de -size 0 también busca los archivos en blanco.

Listado 21. Buscar archivos por tamaño
[ian@echidna lpi103-2]$ find . -size 0
./f1a
./f6
./f8
./f2
./f3
./f7
./f4
./f9
./f5
[ian@echidna lpi103-2]$ find . -size -26c -size +23c -print
./text2
./text5
./backup/text1.bkp.1
./backup/text1.bkp.2
./text1

El segundo ejemplo en el Listado 21 introduce la opción -print que es un ejemplo de una acción que puede ser tomada sobre los resultados devueltos por la búsqueda. En bash shell. Ésta es la acción por omisión si no se especifica ninguna. En algunos sistemas y en algunos shells, se requiere una acción; de lo contrario, no existe ninguna salida.

Otras acciones icluyen -ls, que imprime la información del archivo equivalente a la del comando ls -lids, y -exec, que ejecuta un comando para cada archivo. -exec debe ser finalizar con un punto y coma, que debe ser escapado para evitar que el shell lo interprete primero. También especifique {} donde desee utilizar el archivo devuelto en el comando. Recuerde que las llaves también tienen un significado para el shell y deben ser escapadas (o entrecomilladas). El Listado 22 muestra cómo las opciones -ls y -exec pueden ser utilizadas para listar la información del archivo. Observe que la segunda forma no lista la información del inode.

Listado 22. Buscar y tomar acciones en los archivos
[ian@echidna lpi103-2]$ find . -size -26c -size +23c -ls
933893    4 -rw-rw-r--   1 ian      ian            25 Aug 11 14:27 ./text2
933900    4 -rw-rw-r--   1 ian      ian            24 Aug 11 18:47 ./text5
934193    4 -rw-rw-r--   1 ian      ian            24 Aug 12 15:36 ./backup/text1.bkp.1
934195    4 -rw-rw-r--   1 ian      ian            24 Aug 12 15:36 ./backup/text1.bkp.2
933892    4 -rw-rw-r--   1 ian      ian            24 Aug 11 14:02 ./text1
[ian@echidna lpi103-2]$ find . -size -26c -size +23c -exec ls -l '{}' \;
-rw-rw-r--. 1 ian ian 25 2009-08-11 14:27 ./text2
-rw-rw-r--. 1 ian ian 24 2009-08-11 18:47 ./text5
-rw-rw-r--. 1 ian ian 24 2009-08-12 15:36 ./backup/text1.bkp.1
-rw-rw-r--. 1 ian ian 24 2009-08-12 15:36 ./backup/text1.bkp.2
-rw-rw-r--. 1 ian ian 24 2009-08-11 14:02 ./text1

La opción -exec puede ser utilizada con tantos fines como pueda soñar su imaginación. Por ejemplo:

find . -empty -exec rm '{}' \;

quita todos los archivos en blanco de un árbol de directorios, mientras que

find . -name "*.htm" -exec mv '{}' '{}l' \;

renombra a todos los archivos .htm a archivos .html files.

Para nuestros ejemplos finales de buscar, usamos las marcaciones de tiempo descritas con el comando touch a fin de ubicar los archivos que tengan marcaciones de tiempo determinadas. El Listado 23 nuestra tres ejemplos:

  1. Cuando se usa con -mtime -2, el comando find busca todos los archivos modificados dentro de los últimos dos días. Un día en este caso es un período de 24 horas enr elación con la fecha y hora actuales. Observe que usted usaría -atime si deseara buscar archivos basados en el momento del acceso en lugar del momento de la modificación.
  2. Al agregar la opción -daystart significa que deseamos considerar los días como días calendarios, comenzando a la medianoche. Ahora el archivo f3 es excluído de la lista.
  3. Finalmente, mostramos cómo usar un rango de tiempo en minutos en lugar de hacerlo en días para buscar los archivos modificados desde hace una hora (60 minutos) y 10 horas (600 minutos).
Listado 23. Buscar archivos por marcación de tiempo
[ian@echidna lpi103-2]$ date
Sat Aug 15 00:27:36 EDT 2009
[ian@echidna lpi103-2]$ find . -mtime -2 -type f -exec ls -l '{}' \;
-rw-rw-r--. 1 ian ian 0 2009-08-14 18:25 ./f1a
-rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 ./f1
-rw-rw-r--. 1 ian ian 0 2009-08-13 06:00 ./f6
-rw-rw-r--. 1 ian ian 0 2009-08-15 02:00 ./f8
-rw-rw-r--. 1 ian ian 0 2009-08-14 18:27 ./f2
-rw-rw-r--. 1 ian ian 58 2009-08-14 17:30 ./text10
-rw-rw-r--. 1 ian ian 0 2009-08-14 11:00 ./f4
-rw-rw-r--. 1 ian ian 0 2009-11-05 00:00 ./f9
[ian@echidna lpi103-2]$ find . -daystart -mtime -2 -type f -exec ls -l '{}' \;
-rw-rw-r--. 1 ian ian 0 2009-08-14 18:25 ./f1a
-rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 ./f1
-rw-rw-r--. 1 ian ian 0 2009-08-15 02:00 ./f8
-rw-rw-r--. 1 ian ian 0 2009-08-14 18:27 ./f2
-rw-rw-r--. 1 ian ian 58 2009-08-14 17:30 ./text10
-rw-rw-r--. 1 ian ian 0 2009-08-14 11:00 ./f4
-rw-rw-r--. 1 ian ian 0 2009-11-05 00:00 ./f9
[ian@echidna lpi103-2]$ find . -mmin -600 -mmin +60 -type f -exec ls -l '{}' \;
-rw-rw-r--. 1 ian ian 0 2009-08-14 18:25 ./f1a
-rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 ./f1
-rw-rw-r--. 1 ian ian 0 2009-08-14 18:27 ./f2
-rw-rw-r--. 1 ian ian 58 2009-08-14 17:30 ./text10

Las páginas man para el comando find pueden ayudarlo a conocer la amplia gama de opciones que no podemos cubrir en esta breve introducción.


Identificar archivos

Con frecuencia los nombres de los archivos tienen un sufijo tales como gif, jpeg o html que dan una clave de lo que el archivo podría contener. Linux no requiere dichos sufijos y generalmente no los utiliza para identificar un tipo de archivo. Sabiendo con qué tipo de archivo usted está tratando lo ayuda a saber qué programa usar para mostrarlo o manejarlo. El comando file le indica algo acerca del tipo de datos de uno o más archivos. El Listado 24 muestra algunos ejemplos de uso del comando file.

Listado 24. Identificación de los contenidos de los archivos
[ian@echidna lpi103-2]$ file backup text1 f2 ../p-ishields.jpg /bin/echo
backup:            directory
text1:             ASCII text
f2:                empty
../p-ishields.jpg: JPEG image data, JFIF standard 1.02
/bin/echo:         ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically 
linked (uses shared libs), for GNU/Linux 2.6.18, stripped

El comando file intenta clasificar cada archivo utilizando tres tipos de prueba. Las pruebas del sistema de archivos usan los resultados del comando stat para determinar si un archivo o un directorio está en blanco, por ejemplo . Las denominadas pruebas mágicas verifican los contenidos de un archivo que lo identifican. Estas firmas también son conocidas como números mágicos. Finalmente, las pruebas de lenguaje observan el contenido de los archivos de texto para intentar determinar si un archivo es XML, de fuente de lenguaje C o C++, un archivo troff, o algún otro archivo que sea considerado fuente para alguna clase de procesador de lenguajes. El primer tipo que se encuentra es informado salvo que la opción -k o --keep-goingsea especificada.

El comando file tiene muchas opciones que usted puede aprender utilizando las páginas man. El Listado 25 muestra cómo usar la opción -i (o --mime) para mostrar el tipo de archivo como una cadena MIME en lugar de la salida normal legible por el humano.

Listado 25. Identificación de los contenidos de los archivos como MIME
[ian@echidna lpi103-2]$ file -i backup text1 f2 ../p-ishields.jpg /bin/echo
backup:            application/x-directory; charset=binary
text1:             text/plain; charset=us-ascii
f2:                application/x-empty; charset=binary
../p-ishields.jpg: image/jpeg; charset=binary
/bin/echo:         application/x-executable; charset=binary

Los archivos de números mágicos son también administrador por el comando file. Nuevamente, vea las páginas man para obtener más información.

Nota: El comando identify que forma parte del paquete ImageMagick es una herramienta adicional que brinda más detalles al identificar los tipos de archivo de imagen.


Compresión de los archivos

Cuando realiza un back up, el archivo o la transmisión de archivos, es común comprimir los archivos. En un entorno de Linux, dos programas de compresión conocidos son gzip y bzip2. El comando gzip usa el algoritmo Lempel-Ziv, al tiempo que bzip2 usa el algoritmo de clasificación en bloque Burrows-Wheeler.

Uso de gzip y gunzip

La compresión generalmente funciona bien en los archivos de texto. Muchos formatos de imagen comprimen los datos, de manera que es posible que la compresión no funcione bien en estos o en otros archivos binarios. A fin de ilustrar la compresión en un archivo de texto razonablemente grande, copiemos /etc/los servicios a un directorio que hayamos estado usando y comprimámoslo utilizando gzip como se muestra en el Listado 26. Usamos la opción -p de cp para preservar la marcación de tiempo de /etc/servicios. Observe que el archivo comprimido tiene la misma marcación de tiempo y un sufijo .gz.

Listado 26. Compresión con gzip
[ian@echidna lpi103-2]$ cp -p /etc/services
[ian@echidna lpi103-2]$ ls -l serv*
-rw-r--r--. 1 ian ian 630983 2009-04-10 04:42 services
[ian@echidna lpi103-2]$ gzip services
[ian@echidna lpi103-2]$ ls -l serv*
-rw-r--r--. 1 ian ian 124460 2009-04-10 04:42 services.gz

Se descomprime un archivo gzippeado utilizando la opción -d de gzip o, más comúnmente, el comando gunzip. El Listado 27 muestra la primera de estas opciones. Observe que el archivo descomprimido ahora tiene el nombre y la marcación de tiempo del archivo original.

Listado 27. Descompresión con gzip
[ian@echidna lpi103-2]$ gzip -d services.gz
[ian@echidna lpi103-2]$ ls -l serv*
-rw-r--r--. 1 ian ian 630983 2009-04-10 04:42 services

Uso de bzip2 y bunzip2

El comando bzip2 opera en una manera similar a gzip como se muestra en el Listado 28.

Listado 28. Compresión con bzip2
[ian@echidna lpi103-2]$ ls -l serv*
-rw-r--r--. 1 ian ian 630983 2009-04-10 04:42 services
[ian@echidna lpi103-2]$ bzip2 services
[ian@echidna lpi103-2]$ ls -l serv*
-rw-r--r--. 1 ian ian 113444 2009-04-10 04:42 services.bz2
[ian@echidna lpi103-2]$ bunzip2 services.bz2
[ian@echidna lpi103-2]$ ls -l serv*
-rw-r--r--. 1 ian ian 630983 2009-04-10 04:42 services

Diferencias entre gzip y bzip2

Por el diseño, muchas de las opciones de bzip2 son las mismas que las de gzip, pero los dos comandos no tiene opciones idénticas. Es posible que usted haya notado que en ambos ejemplos, el archivo descomprimido tenía el mismo nombre y la misma marcación de tiempo que el original. Sin embargo, renombra o tocar el archivo comprimido puede cambiar esta conducta. El comando gzip tiene la opción -N o --name para forzar el nombre y la marcación de tiempo que serán preservados, pero bzip2 no. El comando gzip también tiene una opción -l para mostrar la información acerca del archivo comprimido, incluyendo el nombre que será usado cuando sea decomprimido. El Listado 29 muestra algunas de estas diferencias entre los dos comandos.

Listado 29. Algunas diferencias entre gzip y bzip2
[ian@echidna ~]$ ls -l serv*
-rw-r--r--. 1 ian ian 630983 2009-04-10 04:42 services
[ian@echidna ~]$ gzip -N services
[ian@echidna ~]$ touch services.gz
[ian@echidna ~]$ mv services.gz services-x.gz
[ian@echidna ~]$ ls -l serv*
-rw-r--r--. 1 ian ian 124460 2009-09-23 14:08 services-x.gz
[ian@echidna ~]$ gzip -l services-x.gz
         compressed        uncompressed  ratio uncompressed_name
             124460              630983  80.3% services-x
[ian@echidna ~]$ gzip -lN services-x.gz
         compressed        uncompressed  ratio uncompressed_name
             124460              630983  80.3% services
[ian@echidna ~]$ gunzip -N services-x.gz
[ian@echidna ~]$ ls -l serv*
-rw-r--r--. 1 ian ian 630983 2009-04-10 04:42 services
[ian@echidna ~]$
[ian@echidna ~]$ bzip2 services
[ian@echidna ~]$ mv services.bz2 services-x.bz2
[ian@echidna ~]$ touch services-x.bz2
[ian@echidna ~]$ ls -l serv*
-rw-r--r--. 1 ian ian 113444 2009-09-23 14:10 services-x.bz2
[ian@echidna ~]$ bunzip2 services-x.bz2
[ian@echidna ~]$ ls -l serv*
-rw-rw-r--. 1 ian ian 630983 2009-09-23 14:10 services-x
[ian@echidna ~]$ rm services-x # Don't need this any more

Tanto gzip como bzip2 aceptarán la entrada de stdin. Ambos dan soporte a la opción -c para dirigir la salida a stdout.

Existen otros dos comandos asociados con bzip2

  1. El comando bzcat descomprime los archivos a stdout y es equivalente a bzip2 -dc.
  2. El comando bzip2recover intenta recuperar los datos de los archivos dañados de bzip2.

Las páginas man lo ayudarán a conocer más detalles acerca de las otras opciones de gzip y bzip2.

Otras herramientas de compresión

Dos programa más antiguos, compress y uncompress, son todavía frecuentemente encontrados en los sistemas Linux y UNIX.

Además, los comandos zip y unzip del proyecto Info-ZIP están implementados para Linux. Estos brindar las funciones de compresión de plataformas cruzadas que están disponibles en un amplio rango de hardware y de los sistemas operativos. Sepa que no todos los sistemas operativos les dan soporte a los mismos atributos de archivos o a las capacidades del sistema de archivos. Si descarga un producto zippeado y lo dezippea en un sistema Windows, luego transfiere los archivos resultantes a un CD o DVD para instalarlos en Linux, es probable que experimente problemas con la instalación porque, por ejemplo, el sistema Windows no les da soporte a los vínculos simbólicos que forman parte del grupo de archivos original descomprimido.

Para obtener más información sobre estos u otros programas de compresión, vea sus respectivas páginas man .


Archivo de los archivos

Los comandos tar, cpio y dd son normalmente utilizados para hacer un backup de los grupos de archivos o incluso de todas las particiones, ya sea para el archivo o para la transmisión a otros usuario o sitio. El examen 201 que forma parte de la certificación de LPIC-2, enfoca las consideraciones sobre el backup con mayores detalles.

Existen tres enfoques generales para el backup:

  1. Un backup diferencial o acumulativo es un backup de todo lo que ha cambiado desde el último backup total. La recuperación requiere el último backup total más el backup diferencial más reciente.
  2. Un backup gradual es un backup de sólo aquellos cambios producidos desde el último backup gradual. La recuperación requiere el último backup total además de todos los backups graduales (en orden) desde el último backup total.
  3. Un backup total es un backup completo, generalmente de todo el sistema de archivos, directorios o grupos de archivos relacionados. Éste lleva el mayor tiempo de creación, de manera que es usualmente utilizado con uno de los otros dos enfoques.

Estos comandos, junto con otros comandos que usted haya aprendido en este artículo le brindan las herramientas para realizar cualquiera de estas tareas de backup.

Uso de tar

tar (originalmente de Tape ARchive) crea un archivo o tarfile o tarball, de un grupo de archivos de entrada o directorios, también restaura los archivos de dicha colección de archivos. Si un directorio es dado como la entrada a un tar, todos los archivos y subdirectorios son automáticamente incluidos, lo que hace que tar sea muy conveniente para archivar los sub árboles de la estructura de su directorio.

La salida puede ser a un archivo, un dispositivo tal como una cinta o un disquete, o a stdout. El lugar de la salida es especificado con la opción -f, Otras opciones comunes son -c para crear una colección de archivos, -x para extraer una colección de archivos, -v para una salida prolija, la que lista los archivos que serán procesados, -z para usar la compresión con gzip, y -j para usar la compresión con bzip2. Muchas opciones tar tienen una forma breve que utiliza un único guión y una forma larga que usa un par de guiones. Las formas breves se muestran aquí. Vea las páginas man para ver las largas y para obtener opciones adicionales.

El Listado 30 muestra cómo crear un backup de nuestro directorio lpi103-2 utilizando tar.

Listado 30. Backup de nuestro directorio lpi103-2 utilizando tar
[ian@echidna lpi103-2]$ tar -cvf ../lpitar1.tar .
./
./text3
./yab
...
./f5

Generalmente deseará comprimir los archivos de la colección de archivos para ahorrar espacio o reducir el tiempo de transmisión. La versión GNU del comando tar cle permite realizar esto con una única opción —-z para comprimir utilizando gzip y -b para c omprimir usando bzip2. El Listado 31 muestra el uso de la opción -z y la diferencia en tamaño entre las dos colecciones de archivos.

Listado 31. Compresión de la colección de archivos tar con gzip
[ian@echidna lpi103-2]$ tar -zcvf ../lpitar2.tar ~/lpi103-2/
tar: Removing leading `/' from member names
/home/ian/lpi103-2/
/home/ian/lpi103-2/text3
/home/ian/lpi103-2/yab
...
/home/ian/lpi103-2/f5
[ian@echidna lpi103-2]$ ls -l ../lpitar*
-rw-rw-r--. 1 ian ian 30720 2009-09-24 15:38 ../lpitar1.tar
-rw-rw-r--. 1 ian ian   881 2009-09-24 15:39 ../lpitar2.tar

El Listado 31 también muestra otra característica importante de tar. Utilizamos una ruta absoluta de directorio, y la primera línea de la salida le indica que tar está eliminando la primera barra (/) de los nombres ded los miembros. Esto les permite a los archivos ser restaurados a algún otro lugar para la verificación y puede ser especialmente importante si está intentando restaurar los archivos del sistema. Si realmente desea almacenar los nombres absolutos, use la opción -p. También es una buena idea evitar la combinación de los nombres de ruta absolutos con los relativos al crear una colección de archivos, ya que todo será relativo al restaurar de dicha colección de archivos.

El comando tar puede ser añadido a los archivos adicionales en el caso de una colección de archivos que utilice la opción -r o --append. Esto puede causar múltiples copias de un archivo en la colección de archivos. En tal caso, el último será restaurado durante una operación de restauración. Usted podrá usar la opción --occurrence para seleccionar un archivo determinado entre múltiples archivos. Si la colección de archivos se encuentra en un sistema de archivos normal en lugar de una cinta, puede utilizar la opción -u o --update para actualizar dicha colección de archivos. Esto funciona como el agregado de una colección de archivos, salvo que la marcación de tiempo de los archivos en la colección de archivos es comparada con la de sistema de archivos, y sólo se agregarán los archivos que hayan sido modificados desde la versión de la colección de archivos. Como hemos mencionado, esto no funciona para las colecciones de archivos en cinta.

El comando tar también puede comparar las colecciones de archivos con el sistema de archivos actual y restaurar los archivos de dichas colecciones. Use la opción -d, --compare, o --diff para realizar las comparaciones. La sallida mostrará archivos cuyos contenidos difieran, así como también los archivos cuyas marcaciones de tiempo difieran. Normalmente, sólo los archivos que difieran, si hubiera alguno, son listados. Use la opción -v mencionada anteriormente para una salida prolija. La opción -C o --directory le indica a tar realizar una operación comenzando del directorio especificado en lugar de hacerlo del directorio actual.

El Listado 32 muestra algunos ejemplos. Utilizamos touch para modificar la marcación de tiempo del archivo f1, luego mostramos la comparación las colecciones de archivos de las operaciones de comparación de tar antes de restaurar f1 de una de nuestras colecciones de archivos. Utilizamos una variedad de formas de opciones como ilustración.

Listado 32. Comparación y restauración utilizando tar
[ian@echidna lpi103-2]$ touch f1
[ian@echidna lpi103-2]$ tar --diff --file ../lpitar1.tar .
./f1: Mod time differs
[ian@echidna lpi103-2]$ tar -df ../lpitar2.tar -C /
home/ian/lpi103-2/f1: Mod time differs
[ian@echidna lpi103-2]$ tar -xvf ../lpitar1.tar ./f1 # See below
./f1
[ian@echidna lpi103-2]$ tar --compare -f ../lpitar2.tar --directory /

Los archivos o los directorios que usted especifique para la restauración deberán concordar con el nombre en la colección de archivos. El intento de restauración de sólo f1 en lugar de ./f1 en este caso no funcionaría. Puede estar usando globbing, pero necesita ser cuidadoso para evitar restaurar más o menos de lo que desea. Puede utilizar la opción --list o -t para listar los contenidos de la colección de archivos si no está seguro de lo que hay en una colección de archivos. El Listado 33 muestra un ejemplo de una especificación de comodines que habría restaurado más archivos que sólo ./f1.

Listado 33. Listado de los contenidos de la colección de archivos con tar
[ian@echidna lpi103-2]$ tar -tf ../lpitar1.tar "*f1*"
./f1a
./f1

Puede usar el comando find para seleccionar los archivos para el archivo y luego direccionar el resultado a tar. Hablaremos de esta técnica como parte del debate sobre cpio, pero el mismo método funciona para tar.

Así como con los otros comandos que ha estudiado aquí, existen muchas opciones que no están cubiertas en esta breve introducción. Vea la página man o info para obtener más detalles.

Uso de cpio

El comando cpio opera en la modalidad copy-out para crear una colección de archivos, la modalidad copy-in para restaurarla, o la modalidad copy-pass para copiar un grupo de archivos de un lugar a otro. Usted utiliza la opción -o o --create para la modalidad copy-out, la opción -i o --extract para la modalidad copy-in, y la opción -p o --pass-through para la modalidad copy-pass. La entrada es una lista de archivos provista en stdin. La salida es ya sea a stdout o a un dispositivo o archivo especificado con la opción -f o --file.

El Listado 34 muestra cómo generar una lista de archivos utilizando el comando find y luego direccionar la lista a cpio. Observe el uso de la opción -print0 en find para generar cadenas con terminaciones nulas para los nombres de los archivos, y la correspondiente opción --null en cpio para leer este formato. Esto manejará correctamente los nombres de los archivos que contengan blancos o caracteres de fin de línea. La opción -depth indica find listar las entradas al directorio antes del nombre del mismo. En este ejemplo, simplemente creamos dos colecciones de archivos de nuestro directorio lpi103-2, uno con nombres relativos y otro con nombres absolutos. No utilizamos las muchas capacidades de find para restringir los archivos seleccionados, tal como buscar sólo los archivos modificados esta semana.

Listado 34. Backup de un directorio utilizando cpio
[ian@echidna lpi103-2]$ find . -depth -print0 | cpio --null -o > ../lpicpio.1
3 blocks
[ian@echidna lpi103-2]$ find ~/lpi103-2/ -depth -print0 | cpio --null -o > ../lpicpio.2
4 blocks

Si quisiera ver los archivos listados como son archivados, agregue la opción -v a cpio.

El comando cpio en la modalidad copy-in (opción -i o --extract) puede listar los contenidos de un archivo o restaurar los archivos seleccionados. Cuando liste los archivos especificando la opción --absolute-filenames se reduce la cantidad de mensajes ajenos que alguna versión anterior de cpio de otra manera emitirá a medida que quiten cualquier carácter inicial / de cada ruta que tenga uno. Esta opción es discretamente ignorada en muchas implementaciones actuales. La salida del listado selectivo de nuestras anteriores colecciones de archivos se muestra en el Listado 35.

Listado 35. Listado y restauración de los archivos seleccionados utilizando cpio
[ian@echidna lpi103-2]$ cpio  -i --list  "*backup*" < ../lpicpio.1
backup
backup/text1.bkp.1
backup/text1.bkp.2
3 blocks
[ian@echidna lpi103-2]$ cpio  -i --list absolute-filenames "*text1*" < ../lpicpio.2
/home/ian/lpi103-2/text10
/home/ian/lpi103-2/backup/text1.bkp.1
/home/ian/lpi103-2/backup/text1.bkp.2
/home/ian/lpi103-2/text1
4 blocks

El Listado 36 muestra cómo restaurar todos los archivos con "text1" en su ruta al subdirectorio temporal. Algunos de estos están en los subdirectorios. A diferencia de tar, usted necesitará especificar la opción -d o --make-directories explícitamente si su árbol de directorios no existe. Más aún, cpio no reemplazará ningún archivo más nuevo del sistema de archivos con copias de la colección de archivos salvo que usted especifique la opción -u o --unconditional.

Listado 36. Restauración de los archivos seleccionados utilizando cpio
[ian@echidna lpi103-2]$ mkdir temp
[ian@echidna lpi103-2]$ cd temp
[ian@echidna temp]$ cpio  -idv "*f1*" "*.bkp.1" < ../../lpicpio.1
f1a
f1
backup/text1.bkp.1
3 blocks
[ian@echidna temp]$ cpio  -idv "*.bkp.1" < ../../lpicpio.1
cpio: backup/text1.bkp.1 not created: newer or same age version exists
backup/text1.bkp.1
3 blocks
[ian@echidna temp]$ cpio  -id --no-absolute-filenames "*text1*" < ../../lpicpio.2
cpio: Removing leading `/' from member names
4 blocks
./home/ian/lpi103-2/backup/text1.bkp.1
./home/ian/lpi103-2/backup/text1.bkp.2
./home/ian/lpi103-2/text1
./backup/text1.bkp.1
[ian@echidna temp]$ cd ..
[ian@echidna lpi103-2]$ rm -rf temp # You may remove these after you have finished

Para obtener más detalles sobre otras opciones, vea la página man.

Comando dd

En su forma más sencilla, el comando dd copia un archivo de entrada a un archivo de salida. Usted ya ha visto el comando cp, de manera que puede preguntarse para qué otro comando para copiar archivos. El comando dd puede hacer un un par de cosas que el cp normal no puede. En especial, puede realizar conversiones en el archivo, tales como convertir minúsculas a mayúsculas o ASCII a EBCDIC. También puede "reblock" un archivo, lo que se puede querer hacer al transferirlo a cinta. Puede saltear o incluir sólo los bloques seleccionados de un archivo. Y finalmente, puede leer y escribir en los dispositivos primitivos, tales como /dev/sda, que le permiten crear o restaurar un archivo que sea una imagen completa de partición. Para escribir en los dispositivos generalmente requiere autorización de origen.

Comenzaremos con un simple ejemplo de la conversión de un archivo a mayúsculas utilizando la opción conv como se muestra en el Listado 37. Usamos la opción if para especificar el archivo de entrada en lugar de usar el valor por omisión stdin. Una opción similar of está disponible para invalidar la salida por omisión a stdout. A los fines informativos, hemos especificado diferentes tamaños de bloques de entrada y salida utilizando las opciones ibs y obs. Para archivos grandes puede ser útil usar tamaños de bloque mayores para agilizar las operaciones al transferir de disco a disco. De lo contrario, los tamaños de los bloques son mayormente usados con cintas magnéticas. Observe las tres líneas de estado al final del listado que muestran cómo muchos bloques completos y parciales fueron leídos y escritos, y la cantidad total de datos transferidos.

Listado 37. Conversión del texto a mayúsculas usando dd
[ian@echidna lpi103-2]$ cat text6
1 apple
2 pear
3 banana
9       plum
3       banana
10      apple
1 apple
2 pear
3 banana
9       plum
3       banana
10      apple
[ian@echidna lpi103-2]$ dd if=text6 conv=ucase ibs=20 obs=30
1 APPLE
2 PEAR
3 BANANA
9       PLUM
3       BANANA
10      APPLE
1 APPLE
2 PEAR
3 BANANA
9       PLUM
3       BANANA
10      APPLE
4+1 records in
3+1 records out
98 bytes (98 B) copied, 0.00210768 s, 46.5 kB/s

Cualquier archivo puede ser un dispositivo primitivo. Éste será generalmente el caso para la cinta magnética, pero una partición completa del disco, tales como /dev/hda1 o /dev/sda2, puede ser backed up a un archivo o a una cinta. En el mejor de los casos, el sistema de archivos del dispositivo debería ser desmontado, o por lo menos montado para lectura solamente, para asegurar que los datos no cambien durante el backup. El Listado 39 muestra un ejemplo donde el archivo de entrada es un dispositivo primitivo, dev/sda3, y el archivo de salida es un archivo, backup-1, en el directorio inicial del usuario raíz. Para volcar el archivo a una cinta o a un disquete, usted debería especificar algo como of=/dev/fd0 o of=/dev/st0.

Listado 38. Backup de una partición usando dd
[root@echidna ~]# dd if=/dev/sda2 of=backup-1
1558305+0 records in
1558305+0 records out
797852160 bytes (798 MB) copied, 24.471 s, 32.6 MB/s

Observe que 797,852,160 bytes de datos fueron copiado y que un archivo de salida es así de grande, aunque sólo alrededor del 3% de esta partición sea realmente utilizada. Salvo que esté copiando a una cinta con la compresión de hardware, probablemente deseará comprimir los datos. El Listado 39 muestra una forma de lograrlo, junto con la salida de los comandos ls y df, los que le indican los tamaños de los archivos y el porcentaje de uso del sistema de archivos en /dev/sda3.

Listado 39. Backup con compresión utilizando dd
[root@echidna ~]# dd if=/dev/sda2 |gzip >backup-2
1558305+0 records in
1558305+0 records out
797852160 bytes (798 MB) copied, 23.4617 s, 34.0 MB/s
[root@echidna ~]# ls -l backup-[12]
-rw-r--r--. 1 root root 797852160 2009-09-25 17:13 backup-1
-rw-r--r--. 1 root root    995223 2009-09-25 17:14 backup-2
[root@echidna ~]# df -h /dev/sda2
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             755M   18M  700M   3% /grubfile

La compresión gzip redujo el tamaño de los archivos en alrededor de un 20% del tamaño no comprimido. Sin embargo, los bloque no utilizados podrás contener datos arbitrarios, de manera que aun el backup comprimido podrá ser mucho más grande que los datos totales de la partición.

Si divide los bytes totales copiados por el número de registros procesados verá que dd está escribiendo bloques de datos de 512 bytes. Cuando copia a un dispositivo primitivo de salida tal como una cinta, puede dar como resultado una operación muy ineficiente. Como mencionamos antes, especifique la opción obs para cambiar el tamaño de la salida o la opción ibs para especificar el tamaño del bloque de entrada. También especifique sólo bs para definir tanto los tamaños de los bloques de entrada como los de salida en un valor común. Al usar una cinta, recuerde usar el mismo tamaño de bloque para leer la cinta a medida que la utilice para escribir.

Si necesita múltiples cintas u otro almacenamiento removible para guardar su backup, necesitará dividirlo en piezas más pequeñas utilizando un utilitario tal como split. Si necesita saltear los bloques tales como las etiquetas de los discos o de las cintas, puede hacerlo con dd. Vea la página man en busca de ejemplos.

El comando dd no conoce el sistema de archivos, de manera que necesitará restaurar un vuelvo de una partición para buscar lo que hay en él. El Listado 40 muestra cómo restaurar la partición que fue volcada en el Listado 39 a una partición, /dev/sdc7, que fue especialmente creada en una unidad removible USB sólo con este propósito.

Listing 40. Restoring a partition using dd
[root@echidna ~]# gunzip backup-2 -c | dd  of=/dev/sdc7
1558305+0 records in
1558305+0 records out
797852160 bytes (798 MB) copied, 30.624 s, 26.1 MB/s

Es posible que esté interesado en saber que algunas aplicaciones para copiar a CD y a DVD usan el comando dd secretamente para realizar la escritura al dispositivo real. Si el utilitario que usar provee un registro de los comandos realmente utilizados, usted podrá encontrarlo útil para observar el registro ahora que sabe un poco más acerca de dd. De hecho, si copia una imagen de ISO a un CD o DVD, una forma de verificar que no hay errores es usar dd para leer de nuevo el disco y direccionar el resultado a través del utilitario cmp. El Listado 41 muestra la técnica general utilizando el archivo de backup que creamos en este artículo en lugar de una imagen de ISO. Observe que calculamos la cantidad de bloques que serán leídos usando el tamaño de la imagen del archivo.

Listado 41. Comparación de una imagen con un sistema de archivos.
[root@echidna ~]# ls -l backup-1
-rw-r--r--. 1 root root 797852160 2009-09-25 17:13 backup-1
[root@echidna ~]# echo $(( 797852160 / 512 )) # calculate number of 512 byte blocks
1558305
[root@echidna ~]# dd if=/dev/sdc7 bs=512 count=1558305 | cmp - backup-1
1558305+0 records in
1558305+0 records out
797852160 bytes (798 MB) copied, 26.7942 s, 29.8 MB/s

Recursos

Aprender

Obtener los productos y tecnologías

  • Con IBM trial software, disponible para ser descargado directamente de developerWorks, cree su próximo proyecto de desarrollo en Linux.

Comentar

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Linux
ArticleID=499729
ArticleTitle=Conocer los detalles sobre Linux, 101: Administración de archivos y directorios
publish-date=07082010