jueves, 30 de abril de 2015

Eliminando archivos y directorios

Como vimos anteriormente, el comando rm se usa para borrar archivos y directorios. Vamos a usarlo para limpiar un poco nuestro terreno de juego. Primero, borraremos uno de nuestros enlaces duros:

[me@linuxbox playground]$ rm fun-hard
[me@linuxbox playground]$ ls -l
total 12
drwxrwxr-x 2 me me 4096 2008-01-15 15:17 dir1
lrwxrwxrwx 1 me me    4 2008-01-16 14:45 dir1-sym -> dir1
drwxrwxr-x 2 me me 4096 2008-01-15 15:17 dir2
-rw-r--r-- 3 me me 1650 2008-01-10 16:33 fun
lrwxrwxrwx 1 me me    3 2008-01-15 15:15 fun-sym -> fun

Ha funcionado como esperábamos. El archivo fun-hard se ha ido y el contador de enlaces de fun muestra que se ha reducido de cuatro a tres, como indica el segundo campo del listado del directorio. A continuación, borraremos el archivo fun, y sólo por divertirnos, incluiremos la opción “-i” para ver qué hace:

[me@linuxbox playground]$ rm -i fun
rm: remove regular file `fun'?

Escribe “y” en la consola y el archivo se borrará. Pero ahora echemos un vistazo a la salida de ls. ¿Ves lo que le ha pasado a fun-sym? Como era un enlace simbólico apuntando a un archivo que ahora no existe, el enlace está roto:

[me@linuxbox playground]$ ls -l
total 8
drwxrwxr-x 2 me me 4096 2008-01-15 15:17 dir1
lrwxrwxrwx 1 me me    4 2008-01-16 14:45 dir1-sym -> dir1
drwxrwxr-x 2 me me 4096 2008-01-15 15:17 dir2
lrwxrwxrwx 1 me me    3 2008-01-15 15:15 fun-sym -> fun

La mayoría de las distribuciones Linux  configuran ls para mostrar los enlaces rotos. En Fedora, los enlaces rotos ¡se muestran en texto rojo parpadeante! La presencia de un enlace roto no es, por sí misma, peligrosa pero sí indica un poco de desorden. Si intentamos usar un enlace roto veremos esto:

[me@linuxbox playground]$ less fun-sym
fun-sym: No such file or directory

Limpiemos un poco. Borraremos los enlaces simbólicos:

[me@linuxbox playground]$ rm fun-sym dir1-sym
[me@linuxbox playground]$ ls -l
total 8
drwxrwxr-x 2 me me 4096 2008-01-15 15:17 dir1
drwxrwxr-x 2 me me 4096 2008-01-15 15:17 dir2

Una cosa que hay que recordar sobre los enlaces simbólicos es que la mayoría de las operaciones con archivos son realizadas en el archivo de destino, no en el propio enlace. rm es una excepción. Cuando borras un enlace, es el enlace el que es eliminado, no el archivo de destino.

Finalmente, borraremos nuestro terreno de juego. Para hacerlo, volveremos a nuestro directorio home y usaremos rm con la opción recursiva (-r) para borrar playground y todo su contenido, incluidos los subdirectorios:

[me@linuxbox playground]$ cd
[me@linuxbox ~]$ rm -r playground

miércoles, 29 de abril de 2015

Creando enlaces simbólicos

Los enlaces simbólicos fueron creados para superar las dos desventajas de los enlaces duros: Los enlaces duros no pueden salir de su dispositivo físico y tampoco pueden enlazar directorios, sólo archivos. Los enlaces simbólicos son un tipo especial de archivo que contiene un puntero de texto apuntando al archivo o directorio de destino.

Crear enlaces simbólicos es similar a crear enlaces duros:

[me@linuxbox playground]$ ln -s fun fun-sym
[me@linuxbox playground]$ ln -s ../fun dir1/fun-sym
[me@linuxbox playground]$ ln -s ../fun dir2/fun-sym

El primer ejemplo es muy sencillo, simplemente añadimos la opción “-s” para crear un enlace simbólico en lugar de un enlace duro. Pero ¿qué pasa con los dos siguientes? Recuerda, cuando creamos un enlace simbólico, estamos creando un texto describiendo dónde está el archivo de destino con respecto al enlace simbólico. Es más fácil verlo si observamos el resultado de ls:

[me@linuxbox playground]$ ls -l dir1
total 4
-rw-r--r-- 4 me me 1650 2008-01-10 16:33 fun-hard
lrwxrwxrwx 1 me me 6 2008-01-15 15:17 fun-sym -> ../fun

El listado para fun-sym en dir1 muestra que es un enlace simbólico con una “l” en el primer carácter del primer campo y que apunta a “../fun”, lo cual es correcto. En cuanto a la localización de fun-sym, fun está en el directorio superior. Ten en cuenta que, la longitud del archivo de enlace simbólico es 6, el número de caracteres de la cadena “../fun” en lugar de la longitud del archivo al que está apuntando.

Cuando creamos enlaces simbólicos, puedes usar rutas absolutas:

ln -s /home/me/playground/fun dir1/fun-sym

o rutas relativas, como hicimos en el anterior ejemplo. Usar rutas relativas es más recomendable porque permite que un directorio que contiene enlaces simbólicos pueda ser renombrado y/o movido sin romper los enlaces.

Además de archivos normales, los enlaces simbólicos también pueden enlazar directorios:

[me@linuxbox playground]$ ln -s dir1 dir1-sym
[me@linuxbox playground]$ ls -l
total 16
drwxrwxr-x 2 me me 4096 2008-01-15 15:17 dir1
lrwxrwxrwx 1 me me 4 2008-01-16 14:45 dir1-sym -> dir1
drwxrwxr-x 2 me me 4096 2008-01-15 15:17 dir2
-rw-r--r-- 4 me me 1650 2008-01-10 16:33 fun
-rw-r--r-- 4 me me 1650 2008-01-10 16:33 fun-hard
lrwxrwxrwx 1 me me 3 2008-01-15 15:15 fun-sym -> fun

martes, 28 de abril de 2015

Creando enlaces duros

Ahora intentaremos crear algunos enlaces. Primero los enlaces duros. Crearemos enlaces a nuestro archivo de datos de la siguiente forma:

[me@linuxbox playground]$ ln fun fun-hard
[me@linuxbox playground]$ ln fun dir1/fun-hard
[me@linuxbox playground]$ ln fun dir2/fun-hard

Así que ahora tenemos cuatro instancias del archivo “fun”. Echemos un vistazo a nuestro directorio playground:

[me@linuxbox playground]$ ls -l
total 16
drwxrwxr-x 2 me me 4096 2008-01-14 16:17 dir1
drwxrwxr-x 2 me me 4096 2008-01-14 16:17 dir2
-rw-r--r-- 4 me me 1650 2008-01-10 16:33 fun
-rw-r--r-- 4 me me 1650 2008-01-10 16:33 fun-hard

Una cosa que notarás es que el segundo campo en el listado para fun y fun-hard, contiene en ambos un “4” que es el número de enlaces duros que existen ahora para el archivo. Recordarás que un archivo tiene siempre al menos un enlace duro porque el nombre del archivo se crea con un enlace. Entonces, ¿cómo sabemos que fun y fun-hard son, en realidad, el mismo archivo? En este caso, ls no es muy útil. Aunque podemos ver que fun y fun-hard tienen los dos el mismo tamaño (campo 5), nuestro listado no nos ofrece una forma de estar seguros. Para solucionar el problema, vamos a tener que profundizar un poco más.

Cuando pensamos en los enlaces duros, puede ayudarnos imaginar que los archivos están compuestos de dos partes: la parte de datos que alberga el contenido del archivo y la parte del nombre que contiene el nombre del archivo. Cuando creamos enlaces duros, realmente estamos creando partes de nombres adicionales que se refieren todos a la misma parte de datos. El sistema asigna una cadena de sectores del disco a lo que se llama un inodo, el cual se asocia con la parte del nombre. Cada enlace duro por lo tanto se refiere a un inodo específico que alberga el contenido del archivo.

El comando ls tiene una forma de revelar esta información. Se invoca con la opción “-i”:

[me@linuxbox playground]$ ls -li
total 16
12353539 drwxrwxr-x 2 me me 4096 2008-01-14 16:17 dir1
12353540 drwxrwxr-x 2 me me 4096 2008-01-14 16:17 dir2
12353538 -rw-r--r-- 4 me me 1650 2008-01-10 16:33 fun
12353538 -rw-r--r-- 4 me me 1650 2008-01-10 16:33 fun-hard

En esta versión de la lista, el primer campo es el número del inodo y, como podemos ver, tanto fun como fun-hard comparten el mismo número de inodo, lo que confirma que son el mismo archivo.

lunes, 27 de abril de 2015

Moviendo y renombrando archivos

Bien, el nombre “passwd” no parece muy divertido y esto es un terreno de juego, así que lo cambiaremos por otra cosa:

[me@linuxbox playground]$ mv passwd fun

Divirtámonos un poco más moviendo nuestro archivo renombrado a cada directorio y devolvámoslo a su ubicación original:

[me@linuxbox playground]$ mv fun dir1

para moverlo  primero al directorio dir1, luego:

[me@linuxbox playground]$ mv dir1/fun dir2

para moverlo de dir1 a dir2, después:

[me@linuxbox playground]$ mv dir2/fun .

para finalmente traerlo de nuevo al directorio de trabajo actual. A continuación, veamos el efecto de mv en los directorios. Primero moveremos nuestro archivo de datos, nuevamente, al interior del dir1:

[me@linuxbox playground]$ mv fun dir1

luego moveremos dir1 dentro de dir2 y lo confirmaremos con ls:

[me@linuxbox playground]$ mv dir1 dir2
[me@linuxbox playground]$ ls -l dir2
total 4
drwxrwxr-x 2 me me 4096 2008-01-11 06:06 dir1
[me@linuxbox playground]$ ls -l dir2/dir1
total 4
-rw-r--r-- 1 me me 1650 2008-01-10 16:33 fun

Fíjate que como dir2 ya existía, mv movió dir1 dentro de dir2. Si dir2 no hubiera existido, mv habría renombrado dir1 a dir2. Finalmente, pondremos todo como estaba:

[me@linuxbox playground]$ mv dir2/dir1 .
[me@linuxbox playground]$ mv dir1/fun .

domingo, 26 de abril de 2015

Copiando archivos

A continuación, pongamos algunos datos en nuestro terreno de juego. Lo haremos copiando un archivo. Utilizando el comando cp, copiaremos el archivo passwd del directorio /etc al directorio de trabajo actual:

[me@linuxbox playground]$ cp /etc/passwd .

Fíjate cómo hemos usado la abreviatura para el directorio de trabajo actual, el punto al final del comando. Así que ahora si ejecutamos un ls, veremos nuestro archivo:

[me@linuxbox playground]$ ls -l
total 12
drwxrwxr-x 2 me me 4096 2008-01-10 16:40 dir1
drwxrwxr-x 2 me me 4096 2008-01-10 16:40 dir2
-rw-r--r-- 1 me me 1650 2008-01-10 16:07 passwd

Ahora, sólo por divertirnos, repitamos la copia usando la opción “-v” (verbose) para ver qué hace:

[me@linuxbox playground]$ cp -v /etc/passwd .
`/etc/passwd' -> `./passwd'

El comando cp realiza la copia otra vez, pero esta vez muestra un mensaje conciso indicando qué operación estaba realizando. Fíjate que cp sobrescribe la primera copia sin ningún aviso. De nuevo es un caso de cp asumiendo que sabes lo que estás haciendo. Para tener un aviso, incluiremos la opción “-i” (interactive):

[me@linuxbox playground]$ cp -i /etc/passwd .
cp: overwrite `./passwd'?

Responder a la consola escribiendo una “y” hará que el archivo se sobrescriba, cualquier otro carácter (por ejemplo, “n”) hará que cp deje al archivo en paz.

sábado, 25 de abril de 2015

Creando directorios

El comando mkdir se usa para crear un directorio. Para crear nuestro terreno de juego primero nos aseguraremos de que estamos en nuestro directorio home y luego crearemos nuestro nuevo directorio:

[me@linuxbox ~]$ cd 
[me@linuxbox ~]$ mkdir playground

Para hacer nuestro terreno de juego un poco más interesante, crearemos un par de directorios dentro llamados “dir1” y “dir2”. Para hacerlo, cambiaremos nuestro directorio de trabajo actual a playground y ejecutaremos otro mkdir:

[me@linuxbox ~]$ cd playground
[me@linuxbox playground]$ mkdir dir1 dir2

Fíjate que el comando mkdir acepta múltiples argumentos permitiéndonos crear ambos directorios con un único comando.

viernes, 24 de abril de 2015

Construyamos un terreno de juego

Como vamos a realizar manipulación real de archivos, construiremos un sitio seguro para “jugar” con nuestros comandos de manipulación de archivos. Primero necesitamos un directorio donde trabajar. Crearemos uno en nuestro directorio home y lo llamaremos “playground”.

jueves, 23 de abril de 2015

Enlaces simbólicos

Los enlaces simbólicos se crearon para solucionar las limitaciones de los enlaces duros. Los enlaces simbólicos funcionan creando un tipo especial de archivo que contiene un puntero de texto al archivo o directorio enlazado. En este aspecto, funcionan de forma muy parecida a los accesos directos de Windows, pero precedieron a esta característica de Windows en muchos años ;-)

Un archivo enlazado por un enlace simbólico, y el propio enlace simbólico son casi indistinguibles uno del otro. Por ejemplo, si escribes algo en el enlace simbólico, el archivo enlazado será modificado también. De todas formas cuando borras un enlace simbólico, sólo el enlace se borra, no el archivo. Si el archivo es borrado antes que el enlace simbólico, el enlace continuará existiendo, pero no apuntará a nada. En este caso, el enlace se dice que está roto. En muchas implementaciones, el comando ls mostrará los enlaces rotos en un color distintivo, como rojo, para revelar su presencia.

El concepto de enlace puede parecer muy confuso, pero aguanta. Vamos a probar todo esto y, con suerte, quedará claro.

miércoles, 22 de abril de 2015

Enlaces duros

Los enlaces duros son la forma original de Unix para crear enlaces, en comparación con los enlaces simbólicos, que son más modernos. Por defecto, todo archivo tiene un enlace duro que le da al archivo su nombre. Cuando creamos un enlace duro, creamos, para un archivo, una entrada adicional en el directorio. Los enlaces duros tienen dos limitaciones importantes:
  1. Un enlace duro no puede enlazar a un archivo fuera de su propio sistema de archivos. Esto significa que un enlace no puede enlazar a un archivo que no está en la misma partición de disco que el enlace mismo.
  2. Un enlace duro no puede enlazar a un directorio.
Un enlace duro es indistinguible del fichero mismo. Al contrario que un enlace simbólico, cuando listas el contenido de un directorio que contiene un enlace duro no veras ninguna indicación especial para el enlace. Cuando un enlace duro se borra, el enlace se elimina pero el contenido del fichero continua existiendo (o sea, su espacio no es liberado) hasta que todos los enlaces al archivo son borrados.

Es importante ser conscientes de los enlaces duros porque los podrías encontrar de vez en cuando, pero las prácticas modernas prefieren los enlaces simbólicos, que veremos a continuación.

martes, 21 de abril de 2015

ln – Crear Enlaces

El comando ln se usa para crear tanto enlaces duros como enlaces simbólicos. Se utiliza de una de estas dos formas:

ln archivo link

para crear un enlace duro, y:

ln -s ítem link

para crear un enlace simbólico donde “ítem” es un archivo o un directorio.

lunes, 20 de abril de 2015

¡Ten cuidado con rm!

Los sistemas operativos tipo Unix, por ejemplo Linux, no tienen un comando para restaurar archivos. Una vez que borras algo con rm, se ha ido. Linux asume que eres listo y sabes lo que haces.

Ten especial cuidado con los comodines. Piensa en este ejemplo clásico. Digamos que quieres borrar sólo los archivos HTML en un directorio. Para hacerlo, escribes:

rm *.html

lo cual es correcto, pero si accidentalmente dejas un espacio entre el “*” y el “.html” como aquí:

rm * .html

el comando rm borrará todos los archivos en el directorio y luego se quejará de que no hay ningún archivo llamado “.html”.

Aquí tienes un práctico consejo. Cada vez que uses comodines con rm (¡además  de comprobar cuidadosamente tu escritura!), prueba el comodín primero con ls. Esto te permitirá ver los archivos que van a ser borrados. Entonces pulsa la tecla de la flecha hacia arriba para recuperar el comando y reemplaza el ls con rm.

domingo, 19 de abril de 2015

Opciones útiles y ejemplos

Aquí tienes algunas de las opciones más comunes de rm:

Tabla 4-8: Opciones de rm
Opción Significado
-i, --interactive Antes de borrar un archivo existente, pide la confirmación del usuario. Si esta opción no es especificada, rm borrará silenciosamente los archivos.
-r, --recursive Borra directorios recursivamente. Esto significa que si un directorio que estamos borrando contiene subirectorios, los borra también. Para borrar un directorio, esta opción debe ser especificada.
-f, --force Ignora archivos no existentes y no pregunta. Esto prevalece sobre la opción –-interactive.
-v, --verbose Muestra mensajes informativos a medida que se realiza el borrado.

Tabla 4-9: Ejemplos de rm
Comando Resultados
rm archivo1 Borra el archivo1 silenciosamente
rm -i archivo1 Igual que antes, excepto que pide confirmación al usuario antes de borrarlo.
rm -r archivo1 directorio1 Borra el archivo1 y el directorio1 y su contenido
rm -rf archivo1 directorio1 Igual que antes, excepto que si archivo1 o directorio1 no existen, rm continuará silenciosamente.

sábado, 18 de abril de 2015

rm – Eliminar archivos y directorios

El comando rm se utiliza para eliminar (borrar) archivos y directorios:

rm elemento...

donde “elemento” es uno o más archivos o directorios.

viernes, 17 de abril de 2015

Opciones útiles y ejemplos

mv comparte muchas de las mismas opciones que cp:

Tabla 4-6: Opciones de mv
Opción Significado
-i, --interactive Antes de sobrescribir un archivo existente, pide confirmación al usuario. Si esta opción no está especificada, mv sobrescribirá silenciosamente los archivos.
-u, --update Cuando movemos archivos de un directorio a otro, sólo mueve archivos que, o no existen, o son más nuevos que los archivos correspondientes existentes en el directorio de destino.
-v, --verbose Muestra mensajes informativos a medida que se realiza el movimiento.

Tabla 4-7: Ejemplos de mv
Comando Resultados
mv archivo1 archivo2 Mueve el archivo1 al archivo2. Si el archivo2 existe, se sobrescribe con el contenido de archivo1. Si archivo2 no existe, se crea. En ambos casos, archivo1 deja de existir.
mv -i archivo1 archivo2 Igual que el anterior, excepto que si el archivo2 existe, el usuario es preguntado antes de que sea sobrescrito.
mv archivo1 archivo2 directorio1 Mueve archivo1 y archivo2 al directorio1directorio1 tiene que existir previamente.
mv directorio1 directorio2 Si el directorio2 no existe, crea el directorio2 y mueve el contenido de directorio1 dentro de directorio2 y borra el directorio1.
Si directorio2 existe, mueve directorio1 (y su contenido) dentro del directorio2.


jueves, 16 de abril de 2015

mv – Mover y renombrar archivos

El comando mv tanto mueve como renombra archivos, dependiendo de cómo se use. En ambos casos, el nombre de archivo original no existirá tras la operación. mv se usa de forma muy parecida a cp:

mv item1 item2

para mover o renombrar el archivo o directorio “item1” a “item2” o:

mv item... directorio

para mover uno o más elementos de un directorio a otro.

miércoles, 15 de abril de 2015

Opciones útiles y ejemplos

Aquí tenemos algunas de las opciones más usadas (la opción corta y la opción larga equivalente) para cp:

Tabla 4-4: Opciones cp
Opción Significado
-a, --archive Copia los archivos y directorios y todos sus atributos, incluyendo propietarios y permisos. Normalmente, las copias toman los atributos por defecto del usuario que realiza la copia.
-i, --interactive Antes de sobrescribir un archivo existente, pide al usuario confirmación. Si esta opción no es especificada, cp sobrescribirá silenciosamente los archivos.
-r, --recursive
Copia recursivamente los directorios y su contenido. Esta opción (o la opción -a) se requiere cuando se copian directorios.
-u, --update Cuando copiamos archivos de un directorio a otro, sólo copia archivos que, o no existan, o sean más nuevos que los archivos correspondientes existentes en el directorio de destino.
-v, --verbose Muestra mensajes informativos a medida que se realiza la copia.

Tabla 4-5: Ejemplos de cp
Comando Resultado
cp archivo1 archivo2 Copia el archivo1 al archivo2. Si el archivo2 existe, se sobrescribe con el contenido del archivo1. Si el archivo2 no existe, se crea.
cp -i archivo1 archivo2 Igual que el anterior, salvo que si el archivo2 existe, el usuario es preguntado antes de que sea sobrescrito.
cp archivo1 archivo2 directorio1 Copia el archivo1 y el archivo2 en el directorio1. El directorio1 debe existir.
cp directorio1/* directorio2 Usando un comodín, todos los archivos en directorio1 se copian a directorio2. directorio2 debe existir.
cp -r directorio1 directorio2 Copia el contenido del directorio1 al directorio2. Si el directorio2 no existe, se crea y, después de la copia, contendrá los mismos elementos que el directorio1.
Si el directorio2 existe, entonces el directorio1 (y su contenido) se copiará dentro de directorio2.

martes, 14 de abril de 2015

cp – Copiar archivos y directorios

El comando cp copia archivos o directorios. Puede usarse de dos formas diferentes:

cp item1 item2

para copiar el archivo o directorio “item1” al archivo o directorio “item2” y:

cp item... directorio

para copiar múltiples elementos (tanto archivos como directorios) a un directorio.

lunes, 13 de abril de 2015

mkdir – Crear directorios

El comando mkdir se utiliza para crear directorios. Funciona así:

mkdir directorio...

Una nota sobre la notación: Cuando tres puntos siguen a un argumento en la descripción de un comando (como el de arriba), significa que el argumento puede ser repetido, por lo tanto:

mkdir dir1

crearía un único directorio llamado “dir1”, mientras

mkdir dir1 dir2 dir3

crearía tres directorios llamados “dir1”, “dir2” y “dir3”.

domingo, 12 de abril de 2015

Los comodines también funcionan en la GUI

Los comodines son especialmente valiosos no sólo porque se usan tan frecuentemente en la línea de comandos, sino que también son soportados por algunos gestores gráficos de archivos.
  • En Nautilus (el gestor de archivos de GNOME), puedes seleccionar archivos utilizando el elemento del menú Editar/Seleccionar patrón. Sólo introduce un patrón de selección de archivos con comodines y los archivos que actualmente se vean en el directorio se marcarán para seleccionarlos.
  • El algunas versiones de Dolphin y Konqueror (los gestores de archivos de KDE), puedes introducir comodines directamente en la barra de direcciones. Por ejemplo, si quieres ver todos los archivos que empiecen por “u” minúscula en el directorio /usr/bin, introduce “/usr/bin/u*” en la barra de direcciones y mostrará el resultado.
Muchas ideas originales de la línea de comandos también han pasado a la interfaz gráfica. Esta es una de las muchas cosas que hace al escritorio Linux tan poderoso.

sábado, 11 de abril de 2015

Rangos de caracteres

Si vienes de otros entornos tipo Unix o has estado leyendo otros libros sobre el asunto, puede que hayas encontrado las notaciones de rango de caracteres [A -Z] o [a – z]. Son notaciones tradicionales de Unix y funcionaban en las versiones antiguas de Linux también. Pueden funcionar todavía, pero tienes que ser muy cuidadoso con ellas porque no producirán los resultados esperados a menos que estén adecuadamente configuradas. Por ahora, deberías  evitar utilizarlas y usar las clases de caracteres en su lugar.

viernes, 10 de abril de 2015

Comodines

Antes de empezar a usar nuestros comandos, necesitamos hablar sobre una característica del shell que hace a estos comandos muy potentes. Como el shell utiliza mucho los nombres de archivo, ofrece caracteres especiales para ayudarnos a especificar rápidamente grupos de nombres de archivo. Estos caracteres especiales se llaman comodines (wildcards). Utilizar comodines (también conocido como globbing) te permite seleccionar nombres de archivo basados en patrones de caracteres. La siguiente tabla lista los comodines y lo que seleccionan:

Tabla 4-1: Comodines
Comodín Significado
* Cualquier carácter
? Cualquier carácter individual
[caracteres] Cualquier carácter que sea miembro del grupo caracteres
[!caracteres] Cualquier carácter que no sea miembro del grupo caracteres
[[:clase:]] Cualquier carácter que sea miembro de la clase específicada

La Tabla 4-2 lista las clases de caracteres más comúnmente usadas:

Tabla 4-2: Clases de caracteres usadas más comúnmente
Clase de caracteres Significado
[:alnum:] Cualquier carácter alfanumérico
[:alpha:] Cualquier carácter alfabético
[:digit:] Cualquier dígito numérico
[:lower:] Cualquier letra minúscula
[:upper:] Cualquier letra mayúscula

Utilizar comodines posibilita construir criterios de selección muy sofisticados para los nombres de archivos. Aquí tienes algunos ejemplos de patrones y qué indican:

Tabla 4-3: Ejemplos de comodines
Patrón Selección
* Todos los archivos
g* Todos los archivos que empiezan por “g”
b*.txt Todos los archivos que empiecen por “b” seguido de cualquier carácter y terminados en “.txt”
Data??? Todos los archivos que empiezan por “Data” seguido de, exactamente, tres caracteres
[abc]* Todos los archivos que empiezan por “a”, “b” o “c”
BACKUP.[0-9][0-9][0-9] Todos los archivos que empiezan por “BACKUP.” seguido de, exactamente, tres números
[[:upper:]]* Todos los archivos que empiezan por una letra mayúscula
[![:digit:]]* Todos los archivos que no empiezan por un número
*[[:lower:]123] Todos los archivos que terminan por una letra minúscula o por los números “1”, “2” o “3”

Los comodines pueden usarse con cualquier comando que acepte nombres de archivo como argumento, pero hablaremos más sobre ello en el Capítulo 7.

jueves, 9 de abril de 2015

Manipulando archivos y directorios

Llegados a este punto, ¡estamos preparados para algo de trabajo real! En este capítulo presentaremos los siguientes comandos:
  • cp – Copia archivos y directorios
  • mv – Mueve/renombra archivos y directorios
  • mkdir – Crea directorios
  • rm – Borra archivos y directorios
  • ln – Crea enlaces duros y simbólicos
Estos cinco comandos están entre los comandos de Linux usados más frecuentemente. Se usan para manipular tanto archivos como directorios.

Aunque, para ser francos, algunas de las tareas que realizan estos comandos se hacen más fácilmente con un gestor gráfico de archivos. Con un gestor de archivos, podemos arrastrar y soltar un archivo de un directorio a otro, cortar y pegar archivos, borrar archivos, etc. Entonces, ¿por qué utilizamos estos programas antiguos de línea de comandos?

La respuesta es poder y flexibilidad. Mientras que es fácil realizar manipulaciones simples de archivos con un gestor gráfico de archivos, las tareas complicadas pueden ser más fáciles con la línea de comandos. Por ejemplo, ¿cómo podríamos copiar todos los archivos HTML de un directorio a otro, pero sólo copiando los archivos que no existan en el directorio de destino o que sean más recientes que las versiones en el directorio de destino? Bastante difícil con un gestor de archivos. Bastante fácil con la línea de comandos:

cp -u *.html destination

miércoles, 8 de abril de 2015

Para saber más

martes, 7 de abril de 2015

Resumiendo

Terminada nuestra visita guiada, hemos aprendido un montón acerca de nuestro sistema. Hemos visto varios archivos y directorios y sus contenidos. Una cosa que deberías haber sacado de esto es lo abierto que es el sistema. En Linux hay muchos archivos importantes que están en texto plano y legible. Al contrario que muchos sistemas propietarios, Linux hace que todo pueda ser examinado y estudiado.

lunes, 6 de abril de 2015

Enlaces duros

Como estamos en el tema de los enlaces, tenemos que mencionar que hay un segundo tipo de enlace llamado enlace duro. Los enlaces duros también permiten a los archivos tener múltiples nombres, pero lo hacen de una forma distinta. Hablaremos más sobre las diferencias entre enlaces simbólicos y duros en el próximo capítulo.

domingo, 5 de abril de 2015

Enlaces Simbólicos

A medida que inspeccionamos, es probable que veamos un listado de directorios con una entrada como esta:

lrwxrwxrwx 1 root root 11 2007-08-11 07:34
libc.so.6 -> libc-2.6.so

¿Ves como la primera letra del listado es “l” y la entrada parece tener dos nombres de archivo? Esto es un tipo especial de archivo llamado enlace simbólico (también conocido como enlace blando o sym-link.) En la mayoría de los sistemas tipo Unix es posible tener un archivo referenciado por múltiples nombres. Aunque el sentido de esto no parezca obvio, es realmente una característica muy útil.

Imagina este escenario: Un programa requiere el uso de  algún tipo de  recurso compartido contenido en un archivo llamado “foo”, pero “foo” tiene frecuentes cambios de versión. Sería bueno incluir el número de versión en el nombre del archivo para que el administrador u otras partes interesadas pudieran ver qué versión de “foo” está instalada. Esto presenta un problema. Si cambiamos el nombre del recurso compartido, tenemos que localizar cada programa que pudiera usarlo y cambiarlo para que busque el nuevo nombre del recurso cada vez que se instale una nueva versión del mismo. Esto no suena nada divertido.

Aquí es donde los enlaces simbólicos nos salvan el día.  Digamos que instalamos la versión 2.6 de “foo”, que tiene el nombre de archivo “foo-2.6” y entonces creamos un enlace simbólico llamado simplemente “foo” que apunta a “foo-2.6”. Esto significa que cuando un programa abre el archivo "foo", en realidad  está abriendo el archivo "foo-2.6". Ahora todo el mundo está contento. Los programas que utilizan “foo” pueden encontrarlo y nosotros aún podemos ver qué versión está instalada en realidad.  Cuando llegue la hora de actualizar a “foo-2.7”, sólo añadiremos el archivo a nuestro sistema, borraremos el enlace simbólico “foo” y crearemos uno nuevo que apunte a la nueva versión. No sólo soluciona el problema del cambio de versión,  también nos permite guardar ambas versiones en nuestra máquina. Imagina que “foo-2.7” tiene un bug (¡Condenados programadores!) y necesitamos recuperar la versión antigua. De nuevo, sólo borramos el enlace simbólico que apunta a la nueva versión y creamos un nuevo enlace simbólico apuntando a la versión antigua.

El directorio listado anteriormente (del directorio /lib de un sistema Fedora) muestra un enlace simbólico llamado “libc.so.6” que apunta a un archivo de biblioteca compartida llamado “libc-2.6.so”. Esto significa que los programas que busquen “libc.so.6” en realidad obtendrán el archivo “libc-2.6.so”. Aprenderemos cómo crear enlaces simbólicos en el próximo capítulo.

sábado, 4 de abril de 2015

Una visita guiada

La disposición del sistema de archivos en tu sistema Linux es casi como el que encontramos en otros sistemas tipo Unix. El diseño está especificado en un estándar publicado llamado Linux Filesystem Hierarchy Standard (Jerarquía Estándar del sistema de archivos de Linux). No todas las distribuciones Linux cumplen exactamente el estándar, pero la mayoría se acercan bastante.

A continuación, vamos a dar un paseo por el sistema de archivos para darnos cuenta qué hace que nuestro sistema Linux funcione. Esto nos dará la oportunidad de practicar nuestras habilidades de navegación. Una de las cosas que descubriremos es que muchos de los archivos interesantes están en texto plano legible. A medida que vayamos avanzando en nuestra visita guiada, prueba lo siguiente:
  1. cd en un directorio dado
  2. Lista los contenidos del directorio con ls -l
  3. Si ves un archivo interesante, determina su contenido con file
  4. Si parece que pudiera ser texto, trata de verlo con less
¡Recuerda el truco para copiar y pegar! Si utilizas ratón, puedes hacer doble clic en el nombre de un archivo para copiar y clic con el botón central para pegarlo en los comandos.

A medida que avancemos, no tengas miedo de echar un vistazo. Los usuarios normales tienen terminantemente prohibido desordenar cosas. ¡Es trabajo para los administradores de sistema! Si un comando protesta sobre algo, pasa a otra cosa. Pasa algo de tiempo echando un vistazo. El sistema es nuestro para explorarlo. Recuerda, en Linux, ¡no hay secretos!

La tabla 3-4 lista sólo algunos de los directorios que podemos explorar. ¡Eres libre de probar con más!

Tabla 3-4: Directorios que se encuentran en los Sistemas Linux
Directorio Comentarios
/ El directorio raíz. Donde comienza todo.
/bin Contiene binarios (programas) que tienen que estar presentes para que el sistema arranque y funcione.
/boot Contiene el kernel de Linux, la imagen del disco de RAM inicial (para controladores necesarios en el momento del arranque), y el cargador de arranque.

Archivos interesantes:
  • /boot/grub/grub.conf o menu.lst, que se utilizan para configurar el cargador de arranque.
  • /boot/vmlinuz, el kernel de Linux.
/dev Este es un directorio especial que contiene los nodos de dispositivo. “Todo es un archivo” también se aplica a los dispositivos. Aquí es donde el kernel mantiene una lista de todos los dispositivos que reconoce.
/etc El directorio /etc contiene todos los archivos de configuración del sistema. También contiene una colección de scripts de shell que inician cada uno de los servicios del sistema durante el arranque. Todo en este directorio debería ser texto legible.
Archivos interesantes: Como todo en /etc es interesante, os dejo algunos de mis favoritos de siempre:
  • /etc/crontab, un archivo que define cuando se ejecutarán los trabajos automáticos.
  • /etc/fstab, una tabla de los dispositivos de almacenamiento y sus puntos de montaje asociados.
  • /etc/passwd, una lista de las cuentas de usuario.
/home En configuraciones normales, a cada usuario se le asigna un directorio en /home. Los usuarios normales sólo pueden escribir archivos en sus directorios home. Esta limitación protege el sistema de actividades erróneas de los usuarios.
/lib Contiene archivos de bibliotecas compartidas utilizadas por los programas del núcleo del sistema. Son similares a las DLL de Windows.
/lost+found Cada partición formateada o dispositivo que usa un sistema de archivos de Linux como ext3, tendrá este directorio. Se usa en caso de una recuperación parcial causada por un evento de corrupción del sistema de archivos.
A menos que algo realmente malo ocurra a tu sistema, este directorio debería permanecer vacío.
/media En sistemas Linux modernos el directorio /media contendrá los puntos de montaje de los dispositivos extraíbles como unidades USB, CD-ROMs, etc. que se montan automáticamente al introducirlos.
/mnt El sistemas Linux antiguos, el directorio /mnt contiene los puntos de montaje de los dispositivos extraíbles que han sido montados manualmente.
/opt El directorio /opt se usa para instalar software “opcional”. Principalmente se usa para contener productos de software comercial que podrían ser instalados en tu sistema.
/proc El directorio /proc es especial. No es un sistema de ficheros real en el sentido de archivos almacenados en tu disco duro. En su lugar, es un sistema de archivos virtual mantenido por el kernel de Linux. Los “archivos” que contienen son como mirillas dentro del propio núcleo. Los archivos son legibles y te darán una descripción de cómo el kernel ve el ordenador.
/root Es el directorio home para la cuenta root.
/sbin Este directorio contiene binarios del "sistema". Son programas que realizan tareas vitales del sistema que generalmente están reservadas al superusuario.
/tmp El directorio /tmp está destinado a almacenamiento de archivos temporales creados por varios programas. Algunas configuraciones hacen que este directorio sea vaciado cada vez que el sistema se reinicia.
/usr El árbol del directorio /usr es casi el más grande en un sistema Linux. Contiene todos los programas y archivos de soporte utilizados por los usuarios normales.
/usr/bin /usr/bin contiene los programas ejecutables instalados en tu distribución Linux. No es raro que este directorio contenga miles de programas.
/usr/lib Las bibliotecas compartidas para los programas en /usr/bin.
/usr/local El árbol /usr/local es donde están instalados los programas que no están incluidos en tu distribución pero están destinados a un uso general. Los programas compilados a partir del código fuente normalmente se instalan en /usr/local/bin. En un sistema Linux recién instalado, este árbol existe, pero estará vacío hasta que el administrador del sistema coloque algo en él.
/usr/sbin Contiene más programas de administración del sistema.
/usr/share /usr/share contiene todos los datos compartidos utilizados por los programas en /usr/bin. Esto incluye cosas como archivos de configuración por defecto, iconos, fondos de pantalla, archivos de sonido, etc.
/usr/share/doc La mayoría de los paquetes instalados en el sistema incluirán algún tipo de documentación. En /usr/share/doc, encontraremos archivos de documentación ordenados por paquetes.
/var Con la excepción de /tmp y /home, los directorios que hemos visto hasta ahora permanecen relativamente estáticos, o sea, su contenido no cambia. El árbol del directorio /var es donde los datos, que es probable que cambien, son almacenados. Diferentes bases de datos, colas de impresión, correos de usuarios, etc. se encuentran aquí.
/var/log /var/log contiene archivos de registro (log files) de varias actividades del sistema. Son muy importantes y deberían ser monitorizados de vez en cuando. El más útil es /var/log/messages. Ten en cuenta que, por razones de seguridad, en algunos sistemas, tienes que ser superusuario para ver los archivos de registro.

viernes, 3 de abril de 2015

Menos es Más (Less is More)

El programa less fue diseñado como un reemplazo mejorado de un programa anterior de Unix llamado more. El nombre "less" viene de un juego de palabras “menos es mas – less is more” - un lema de los arquitectos y diseñadores modernistas.

less entra en la clase de programas llamados “paginadores”, que permiten ver fácilmente documentos de texto largos en forma de páginas. Mientras que el programa more sólo permitía avanzar páginas, el programa less permite avanzar y retroceder por las páginas y cuenta también con otras características.

jueves, 2 de abril de 2015

¿Qué es “texto”?

Hay muchas formas de representar información en un ordenador. Todos los métodos implican definir una relación entre la información y los números que se utilizarán para representarla. Los ordenadores, después de todo, sólo entienden los números, y todos los datos son convertidos a una representación numérica.

Algunas de estas representaciones son muy complejas (como los archivos de vídeo comprimido), mientras que otras son bastante simples. Una de las primeras y más simples es el llamado texto ASCII. ASCII (pronunciado “aski”) es la abreviatura de American Standard Code for Information Interchange (Código Estándar Americano para Intercambio de Información). Es un esquema de codificación simple que se usó por primera vez en las maquinas de Teletipo para convertir caracteres de teclado en números.

El texto es una conversión simple uno-a-uno de texto en números. Es muy compacto. Cincuenta caracteres de texto se traducen a cincuenta bytes de datos. Es importante comprender que el texto sólo contiene una conversión simple de caracteres a números. No es lo mismo que un documento de procesador de texto como los creados con Microsoft Word u OpenOffice.org Writer. Esos archivos, al contrario que el texto simple ASCII, contienen muchos elementos que no son texto y que sirven para describir la estructura y el formato. Los archivos de texto plano ASCII contienen sólo los caracteres y algunos códigos de control muy rudimentarios como las tabulaciones, retornos de carro y saltos de línea.

A lo largo de un sistema Linux, muchos archivos están almacenados en formato texto y hay muchas herramientas de Linux que trabajan con archivos de texto. Incluso Windows reconoce la importancia de este formato. El famoso programa NOTEPAD.EXE es un editor para archivos de texto plano ASCII.

miércoles, 1 de abril de 2015

Viendo el contenido de un archivo con less

El comando less es un programa para ver archivos de texto. En nuestro sistema Linux, hay muchos archivos que contienen texto legible por humanos. El programa less proporciona una forma adecuada para examinarlos.

¿Para qué querríamos examinar archivos de texto? Porque muchos de los archivos que contienen la configuración del sistema (llamados archivos de configuración) están almacenados en este formato, y ser capaces de leerlos nos permite ver cómo funciona el sistema por dentro. Además, muchos de los programas que el sistema utiliza (llamados scripts) están almacenados en este formato. En capítulos posteriores, aprenderemos cómo editar archivos de texto para modificar configuraciones del sistema y escribiremos nuestros propios scripts, pero por ahora sólo veremos su contenido.

El comando less se usa de la siguiente manera:

less nombre_del_archivo

Una vez ejecutado, el programa less nos permite desplazarnos arriba y abajo a través de un archivo de texto. Por ejemplo, para examinar el archivo que define todas las cuentas de usuario del sistema, usamos el siguiente comando:

[me@linuxbox ~]$ less /etc/passwd

Una vez que el programa less arranca, podemos ver el contenido del archivo. Si el archivo ocupa más de una página, podemos desplazarnos arriba y abajo. Para salir de less, pulsamos la tecla “q”.

La siguiente tabla muestra los comandos de teclado más comunes que se usan con less.

Comando Acción
RePág o b Se desplaza hacia atrás una página
AvPág o espacio Se desplaza hacia delante una página
Flecha hacia arriba Se desplaza hacia arriba una línea
Flecha hacia abajo Se desplaza hacia abajo una linea
G Se mueve al final del archivo de texto
1G o g Se mueve al principio de un archivo de texto
/caracteres Busca hacia delante hasta la siguiente coincidencia de caracteres
n Busca la siguiente coincidencia de caracteres de la búsqueda anterior
h Muestra la pantalla de ayuda
q Cierra less