- ls – Lista los contenidos de un directorio
- file – Muestra el tipo de archivo
- less – Muestra el contenido del archivo
El comando ls es probablemente el más usado, y por una buena razón. Con él, podemos ver los contenidos de un directorio y determinar varios atributos importantes de los archivos y directorios. Como hemos visto, podemos usar simplemente ls para ver una lista de los archivos y subdirectorios contenidos en el directorio de trabajo actual:
[me@linuxbox ~]$ ls
Desktop Documents Music Pictures Public Templates Videos
Además del directorio de trabajo actual, podemos especificar el directorio a listar, de esta forma:
[me@linuxbox ~]$ ls /usr
bin games kerberos libexec sbin src
etc include lib local share tmp
O incluso especificar múltiples directorios. En este ejemplo listaremos el directorio home del usuario (simbolizado por el carácter “~”) y el directorio /usr:
[me@linuxbox ~]$ ls ~ /usr
/home/me:
Desktop Documents Music Pictures Public Templates Videos
/usr:
bin games kerberos libexec sbin src
etc include lib local share tmp
También podemos cambiar el formato de la salida para que nos muestre más detalles:
[me@linuxbox ~]$ ls -l
total 56
drwxrwxr-x 2 me me 4096 2007-10-26 17:20 Desktop
drwxrwxr-x 2 me me 4096 2007-10-26 17:20 Documents
drwxrwxr-x 2 me me 4096 2007-10-26 17:20 Music
drwxrwxr-x 2 me me 4096 2007-10-26 17:20 Pictures
drwxrwxr-x 2 me me 4096 2007-10-26 17:20 Public
drwxrwxr-x 2 me me 4096 2007-10-26 17:20 Templates
drwxrwxr-x 2 me me 4096 2007-10-26 17:20 Videos
Añadiendo “-l” al comando, cambiamos la salida al formato largo.
Opciones y argumentos
Ésto nos ofrece un aspecto muy importante sobre como funcionan la mayoría de los comandos. A los comandos, a menudo, le siguen una o más opciones que modifican su comportamiento, y adicionalmente, por uno o más argumentos, los elementos sobre los que el comando actúa. Así que la mayoría de los comandos aparecen como algo así:comando -opciones argumentos
La mayoría de los comandos usan opciones que consisten en un sólo carácter precedido por un guión, por ejemplo, “-l”, pero muchos comandos, incluidos los del Proyecto GNU, también soportan opciones largas, consistentes en una palabra precedida por dos guiones. Además, muchos comandos permiten múltiples opciones cortas enlazadas. En este ejemplo, al comando ls se le han dado dos opciones, la opción “l” para mostrar la salida en formato largo, y la opción “t” para ordenar el resultado por la hora de modificación de los archivos.
[me@linuxbox ~]$ ls -lt
Añadiremos la opción larga “--reverse” para invertir el orden de la lista:
[me@linuxbox ~]$ ls -lt --reverse
Fíjate que las opciones de los comandos, como los nombres de archivo en Linux, son sensibles a las mayúsculas.
El comando ls tiene un gran número de posibles opciones. Las más comunes están listadas aquí:
Lista todos los archivos, incluso aquellos cuyo nombre empieza con un punto, que normalmente no se listan (p.ej. Ocultos)
-A --almost-all
Como la opción -a anterior, salvo que no lista . (el directorio actual) y .. (el directorio padre).
-d --directory
Por defecto, si especificamos un directorio, ls listará los contenidos del directorio y no el directorio en sí. Usa esta opción junto con la opción -l para ver detalles del directorio además de su contenido.
-F --classify
Esta opción añadirá un carácter indicador al final de cada nombre listado. Por ejemplo, una “/” es que el nombre es un directorio.
-h --human-readable
En los listados en formato largo, muestra el tamaño de los archivos en un formato comprensible, en lugar de en bytes.
-l
Muestra los resultados en formato largo.
-r --reverse
Muestra los resultados en orden inverso. Normalmente, ls muestra los resultados en orden alfabético ascendente.
-s
Ordena los resultados por tamaño.
-t
Ordena por hora de modificación.
Un vistazo más profundo al formato largo
Como vimos antes, la opción “-l” hace que ls muestre sus resultados en formato largo. Este formato contiene gran cantidad de información útil. Aquí está el directorio Examples de un sistema Ubuntu:
-rw-r--r-- 1 root root 3576296 2007-04-03 11:05 Experience ubuntu.ogg
-rw-r--r-- 1 root root 1186219 2007-04-03 11:05 kubuntu-leaflet.png
-rw-r--r-- 1 root root 47584 2007-04-03 11:05 logo-Edubuntu.png
-rw-r--r-- 1 root root 44355 2007-04-03 11:05 logo-Kubuntu.png
-rw-r--r-- 1 root root 34391 2007-04-03 11:05 logo-Ubuntu.png
-rw-r--r-- 1 root root 32059 2007-04-03 11:05 oo-cd-cover.odf
-rw-r--r-- 1 root root 159744 2007-04-03 11:05 oo-derivatives.doc
-rw-r--r-- 1 root root 27837 2007-04-03 11:05 oo-maxwell.odt
-rw-r--r-- 1 root root 98816 2007-04-03 11:05 oo-trig.xls
-rw-r--r-- 1 root root 453764 2007-04-03 11:05 oo-welcome.odt
-rw-r--r-- 1 root root 358374 2007-04-03 11:05 ubuntu Sax.ogg
Veamos los diferentes campos de uno de los archivos y examinemos su significado:
-rw-r—r--
Permisos de acceso al archivo. El primer carácter indica el tipo de archivo. Entre los diferentes tipos, un guión medio significa un archivo normal, mientras que una “d” indica un directorio. Los siguientes tres caracteres son los permisos de acceso para el propietario del archivo, los tres siguientes los de los miembros del grupo del archivo, y lo tres últimos los del resto de usuarios.
1
Numero de enlaces fuertes del archivo. Veremos el tema de los enlaces más adelante en este capítulo.
root
El nombre del propietario del archivo.
root
El nombre del grupo del propietario del archivo.
32059
Tamaño del archivo en bytes.
2007-04-03 11:05
Fecha y hora de la última modificación del archivo.
Averiguando el tipo de archivo con file
Al explorar el sistema será útil saber que contienen los archivos. Para hacerlo utilizaremos el comando file para determinar el tipo de archivo. Como vimos antes, los nombres de archivo en Linux no necesitan reflejar el contenido del archivo. Mientras que un nombre de archivo como “picture.jpg” se espera que contenga una imagen comprimida JPEG, ésto no tiene porqué ser así en Linux. Podemos invocar el comando file de la siguiente forma:
file nombre_del_archivo
El nombre del propietario del archivo.
root
El nombre del grupo del propietario del archivo.
32059
Tamaño del archivo en bytes.
2007-04-03 11:05
Fecha y hora de la última modificación del archivo.
Averiguando el tipo de archivo con file
Al explorar el sistema será útil saber que contienen los archivos. Para hacerlo utilizaremos el comando file para determinar el tipo de archivo. Como vimos antes, los nombres de archivo en Linux no necesitan reflejar el contenido del archivo. Mientras que un nombre de archivo como “picture.jpg” se espera que contenga una imagen comprimida JPEG, ésto no tiene porqué ser así en Linux. Podemos invocar el comando file de la siguiente forma:
file nombre_del_archivo
Cuando invocamos, el comando file mostrará una breve descripción del contenido del archivo. Por ejemplo:
[me@linuxbox ~]$ file picture.jpg
picture.jpg: JPEG image data, JFIF standard 1.01
Hay muchos tipos de archivos. De hecho, una de las ideas comunes en los sitemas operativos como-Unix es que “todo es un archivo”. Según avancemos en nuestras lecciones, veremos como de cierta es esta expresión.
Mientras que muchos de los archivos en tu sistema son familiares, por ejemplo MP3 y JPEG, hay otros muchos que son un poco menos obvios y algunos que son un poco raros.
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 comprensible. 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á almacenados en este formato, y ser capaces de leerlos nos permite ver como 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 como 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”.
A continuación los comandos de teclado más comunes que se usan con less:
Re Pag o b
Se desplaza hacia atrás una página
Av Pag 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
¿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 vídeos comprimidos), 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 trasladan 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 o 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 etiquetas, 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.
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.
Una visita guiada
La disposición del sistema de archivos en tu sistema Linux es casi como el que encontramos en otros sistemas como-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 el estándar exactamente pero la mayoría se acercan bastante.
A continuación, vamos a dar un paseo por el sistema de archivos para darnos cuenta de lo que hace nuestro sistema linux. Ésto 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 vamos avanzando en nuestra visita guiada, prueba lo siguiente:
- cd en un directorio dado
- Lista los contenidos del directorio con ls -l
- Si ves un archivo interesante, determina su contenido con file
- Si parece que pudiera ser texto, trata de verlo con less
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!
Directorios que se encuentran en los Sistemas Linux
/
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.
- /boot/grub/grub.conf o menu.lst, que se utilizan para configurar el cargador de arranque.
- /boot/vmlinuz, el kernel de Linux.
/dev
Éste 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 se ejecutan con cada servicio del
sistema en 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.
/var/log/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 librerías 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/var/log modernos el directorio /media contendrá los puntos de montaje de los dispositivos extraibles 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 os darán una imagen de como el kernel ve el ordenador.
/root
Es el directorio home para la cuenta root.
/sbin
Este directorio contiene binarios de sistema. Son programas que realizan tareas de sistema vitales que generalmente están reservadas al superusuario.
/tmp
El directorio /tmp está destinado a almacenamiento de temporales, ficheros provisionales 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
Contiene más programas de administración de sistema.
/usr/lib
Las librerías 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.
/usr/sbin
Contiene más programas de administración de sistema.
/usr/share
contiene todos los datos compartidos utilizados por los programas en /usr/bin. Ésto 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 paquete.
/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, archivos de colas, correos de usuarios, etc. se encuentran aquí.
/var/log
Contiene archivos de registro 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. Tenga en cuenta que, por razones de seguridad, en algunos sistemas, tienes que ser superusuario para ver los archivos de registro.
Enlaces Simbólicos
Cuando miramos a nuestro alrededor, es probable que veamos un listado de directorio 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? Ésto 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 como-Unix es posible tener un archivo referenciado por múltiples nombres. Aunque el sentido de ésto 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 que versión de “foo” está instalada. Ésto presenta un problema. Si cambiamos el nombre del recurso compartido, tenemos que localizar cada programa que pudiera usarlo y cambiarlo para que buscara un nuevo recurso cada vez que se instalara una nueva versión del recurso. Esto no suena nada divertido.
Aquí es donde los enlaces simbólicos nos arreglan 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”. Ahora todo el mundo está contento. Los programas que utilizan “foo” pueden encontrarlo y nosotros aún podemos ver que 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 librería compartida llamado “libc-2.6.so”. Ésto significa que los programas que busquen “libc.so.6” en realidad obtendrán el archivo “libc-2.6.so”.
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.
Resumiendo
Terminado nuestro tour, 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 ésto 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.
Para saber más
- La versión completa de la Jerarquía Estándar del Sistema de Archivos de Linux puedes encontrarla aquí:
http://www.pathname.com/fhs
- Un artículo sobre la estructura de directorios de Unix y los sistemas como-Unix:
https://es.wikipedia.org/wiki/Unix_File_System
- Una descripción detallada del formato de texto ASCII:
https://es.wikipedia.org/wiki/ASCII
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.