Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2-Filesystem Basics PDF
2-Filesystem Basics PDF
Filesystem basics
Conceptos clave
Por ejemplo, la usuaria alice podría tener varias canciones almacenadas en archivos con
nombres como song1.midi y song2.midi. Estas canciones se podrían agrupar en un
directorio llamado songs. La usuaria alice también podría tener algunas fotos almacenadas
en los archivos picture1.png y picture2.png y a su vez, podría haberlos agrupado en un
directorio llamado photos. Los dos directorios songs y photos se pueden organizar en un
directorio llamado media. Este nuevo directorio puede ser uno de tantos en el directorio
website.
Una manera de visualizar esto es por medio de una estructura ramificada de árbol. El
directorio website puede contener los subdirectorios html, formsy media. Junto con los
directorios y los archivos nombrados anteriormente, este orden se puede bosquejar como
aparece en la gráfica 1-1.
-- html
|
website -- -- forms
|
| -- song1.midi
| |
| -- songs --
| | |
| | -- song2.midi
| |
2
Filesystem basics
-- media --
| -- picture1.png
| |
-- photos--
|
-- picture2.png
Linux utiliza un sólo árbol de directorios para toda su colección de archivos y directorios,
todas las ramas de una sola raíz "/" (léase como "barra oblicua") llamada directorio raíz.
Este árbol de directorios se puede ver, en parte, como se muestra en la gráfica 1-2.
-- bin...
|
/ -- -- etc...
|
| -- mystuff...
| |
| -- alice --
| | |
| | -- website...
| |
-- home --
| | -- docs...
| | |
| -- elvis --
| |
| -- graphics...
...
Las elipses en el diagrama sugieren que hay muchos archivos y directorios que no se
muestran aquí. Por ejemplo, puede ver que el directorio website trazado anteriormente
puede adjuntarse para extender el diagrama. La característica más importante del diagrama
en este punto es la estructura arbórea que se desprende de / y no el contenido específico.
Al nombrar un archivo o directorio, comience desde la raíz del árbol del sistema de
archivos Linux y liste todas las ramas del directorio hasta el archivo o directorio deseado,
separando cada parte con una barra oblicua (/). Esto se conoce como el nombre
completamente calificado o FQN. Por ejemplo, el FQN del directorio website,
mencionado anteriormente, sería /home/alice/website. El archivo song1.midide la
usuaria alice se identificaría como /home/alice/website/songs/song1.midi. La cadena
de nombres de directorios que le llevan al nombre de archivo es la ruta del archivo. Este
tipo de nominación, ayuda a garantizar que cada archivo y directorio tenga un nombre
3
Filesystem basics
único completamente calificado. En la práctica real, los atajos y las suposiciones por
defecto se utilizan para simplificar el tecleado de los nombres de los archivos.
En el entorno gráfico X de Red Hat Enterprise Linux, los usuarios pueden utilizar Nautilus
como una herramienta sofisticada para navegar en el sistema de archivos. En el escritorio
de Red Hat Enterprise Linux, se puede abrir una ventana de Nautilus al hacer doble clic
(izquierdo) en el icono de inicio que se encuentra en la esquina superior izquierda.
Como una alternativa, usted puede utilizar el navegador Nautilus (puede ser más sencillo
para aquellos que han tenido contacto con lanzamientos previos de Red Hat Enterprise
Linux) al seleccionar el "navegador de archivos" desde el menú principal de Aplicaciones.
[1]
Para poder explorar el árbol de directorios utilizando Nautilus, primero tenemos que activar
el panel lateral de Nautilus. Esto puede hacerse seleccionando el "panel lateral" desde el
menú "ver".
Filesystem basics
El panel lateral de Nautilus le debe mostrar ahora la lista de directorios (carpetas) en forma
de árbol con el directorio superior llamado simplemente /. Un directorio se puede expandir
al hacer clic (en el botón izquierdo del ratón) en el triángulo al lado del icono de la carpeta.
Cuando haga click en el icono de la carpeta o en el nombre de carpeta, podrá ver el
contenido de la carpeta en el panel principal de Nautilus.
Tenga en cuenta que cuando se selecciona un directorio particular para ver, la entrada de
"Buscar" que se encuentra justo arriba del panel principal, muestra una referencia absoluta
(FQN) para el directorio que se está viendo. Dedique un poco de tiempo para explorar el
sistema de archivos con Nautilus y para ver el contenido de varios directorios. Intente ver el
contenido del archivo /etc/sysconfig/network-scripts/ifcfg-lo, primero
seleccionando el directorio /etc/sysconfig/network-scripts en el panel lateral y
después, haciendo doble clic (en el botón izquierdo del ratón) en el icono ifcfg-lo en el
panel principal.
Filesystem basics
Un método común que puede utilizarse con los directorios es el considerar un directorio
como un lugar más que una cosa. Desde este punto de vista entonces el cwd para un
proceso se puede considerar como la ubicación actual de un proceso. Si un proceso cambia
de cwd entonces se ha movidode un directorio a otro. Esta manera de ver un directorio
como un "lugar" es tan común en el mundo de Linux que la palabra lugar es bastante
dominante en el lenguaje. Por ejemplo, los usuarios hablan de navegar el sistema de
archivos cuando se mueven de un directorio a otro.
En primer lugar, el padre del proceso que lo inicia le asigna un cwd al proceso. Sin
embargo, un proceso no está sujeto todo el tiempo a un determinado cwd cuando ejecuta.
Cuando sea necesario, un proceso puede cambiar su cwd a otro directorio antes de
continuar su trabajo.
Como cualquier otro proceso, la shell bash se mantiene al tanto de su cwd mientras está
ejecutando. El directorio de trabajo actual afecta los comandos que usted escribe en el
intérprete de comandos y se convierte en su cwd mientras ejecutan. Básicamente entonces,
el cwd de la shell bash es su cwd, y puede considerarse como el lugar en donde usted se
encuentra dentro del sistema. Obviamente, es importante estar al tanto del cwd.
Afortunadamente, hay ayuda disponible. Primero, el mismo intérprete de comandos
muestra el último directorio de la ruta al cwd. Por ejemplo, la usuaria alice, al trabajar en su
directorio website, puede ver un intérprete de comandos como éste:
[alice$station website]$
Uso:
pwd
6
Filesystem basics
Como se anotó anteriormente, los procesos pueden cambiar sus cwd cuando sea necesario.
Esto incluye la shell de comando bash, la cual proporciona el comando cd (del ingleś
change directory) para cambiar el directorio actual desde el intérprete de comandos.
Uso:
cd [DIRECTORIO]
Observe cómo cambia el resultado del comando pwd y la última parte del intérprete de
comandos para reflejar el nuevo cwd después de cada comando cd.
Puesto que navegar por los directorios es tan importante, hay abreviaturas especiales para
hacer referencia a ciertos directorios:
Symbol Significado
. The current working directory
.. El directorio padre
~ The user's home directory
- El directorio de trabajo anterior
Las entradas en esta tabla requieren poca explicación. Primero, bash reconoce todos menos
el último nombre simbólico en la mayoría de los contextos, no sólo en el comando cd.
7
Filesystem basics
La última serie de comandos en el ejemplo anterior muestra que por defecto el comando cd
usa el directorio ~ si no se le asigna un directorio.
Las referencias absolutas inician con una barra oblicua (/) y asignan el FQN del archivo. Es
decir, la referencia absoluta nombra cada rama del árbol de directorio del sistema de
archivos, a partir de /, la cual se debe recorrer hasta llegar al archivo. Sin importar en dónde
se encuentre usted en el sistema de archivos, (en otras palabras, sin importar el valor del
cwd), una referencia absoluta identifica claramente el recurso específico. Ya hemos
discutido varios ejemplos de referencias absolutas en esta lección.
8
Filesystem basics
Una referencia relativa no describe la ruta al archivo desde /, sino que describe la ruta a
partir del directorio actual. Por ejemplo, si el cwd es /home/alice, entonces la referencia
relativa a song1.midi puede ser website/songs/song1.midi. Esta es una referencia
relativa ya que no comienza con /. Esta referencia sólo nombra los directorios que se deben
recorrer iniciando desde /home/alice, no desde /. Para que una referencia relativa sea
válida debe iniciar nombrando un directorio (o archivo) en el cwd.
Todos los directorios en Linux contienen dos entradas especiales, los directorios . y .., los
cuales representan el directorio actual y el directorio padre, respectivamente. Por lo tanto,
en la discusión previa acerca del comando cd, el ejemplo cd .. era en realidad sólo un uso
de una referencia relativa.
La tabla 1-2 muestra algunos ejemplos adicionales sobre referencias relativas. Cada uno de
estos es una referencia al archivo /home/alice/sample.txt con FQN. Algunos de estos
ejemplos son intencionalmente "ineficaces."
Conceptos clave
Filesystem basics
Linux se puede utilizar para soportar muchos tipos diferentes de sistemas informáticos:
servidores, estaciones de desarrollo, sistemas de escritorio personales, etc. Para poder
estandarizar la estructura del directorio del sistema de archivos a través de este variado
rango de sistemas, la mayoría de los sistemas Linux emplean un esquema de nominación y
utilización común que facilitan el uso y el mantenimiento de los sistemas. Al utilizar el
mismo tipo de diagrama arbóreo empleado en el último capítulo, parte de la primera capa
del árbol de directorios se vería así:
-- bin...
|
-- etc...
|
-- home...
|
-- root...
/ --|
-- sbin...
|
-- tmp...
| -- bin
-- usr --|
| -- sbin
-- var...
Este capítulo presenta una breve descripción (a veces muy breve) del papel de cada uno de
estos directorios.
A cada usuario del sistema Linux se le asigna un directorio especial llamado su directorio
de inicio y representa su espacio "privado" en el sistema. Comúnmente éste es un
subdirectorio bajo el directorio /home, cuyo nombre coincide con el nombre de inicio de
sesión del usuario (se vieron varios ejemplos anteriormente /home/alice o /home/hogan).
La única excepción importante a esto es el superusuario (o el usuario root) cuyo directorio
de inicio usualmente es /root. Para cualquier usuario, el caracter (~) representa el FQN del
directorio de inicio del usuario cuando se utiliza como el primer caracter de una referencia
de archivo o directorio.
Filesystem basics
Otro aspecto importante del directorio de inicio de un usuario es que proporciona un lugar
para almacenar archivos de configuración específicos para cada usuario. Por ejemplo,
cuando Blondie inicia la sesión puede que necesite un entorno diferente al de Prince. Puede
que Blondie prefiera diferentes colores en su pantalla, diferentes atajos de comandos e
inclusive un entorno de escritorio de trabajo completamente diferente al de Prince. Los
archivos de configuración locales específicos para cada usuario hacen que esto sea posible.
Muchos de estos archivos de configuración se crean automáticamente por defecto cuando
se crea la cuenta de un usuario o al utilizar por primera vez un recurso en particular del
sistema.
Cuando un usuario inicia sesión en el sistema por primera vez se le ubica "en" su directorio
de inicio, es decir, el sistema configura su directorio de inicio como su directorio de trabajo
inicial.
Filesystem basics
Así como /bin y /usr/bin almacenan archivos de comando para usuarios comunes,
también /sbin y /usr/sbin almacenan archivos de comandos para que el superusuario
root los utilice. Estos incluyen comandos para adjuntar y quitar hardware, para iniciar y
detener el sistema y para realizar mantenimiento del sistema. Estos comandos privilegiados
también se encuentran almacenados en dos directorios separados por las mismas razones
que para /bin y /usr/bin.
Filesystem basics
Ejemplos
El directorio /tmp
Alice acaba de aprender que algunos de los procesos utilizan automáticamente /tmp como
espacio de borrador y quiere ver si algo de lo que ha hecho ha utilizado ese espacio.
También quiere probar si realmente puede crear archivos allí.
Filesystem basics
Hogan quiere ver si algunos de los comandos comunes que utiliza se encuentran en alguno
de los directorios de los comandos binarios /bin o /usr/bin. Decide probar cp, mozilla,
cd y fdisk.
Hogan puede utilizar ls para buscar estos comandos, pero en su lugar quiere probar un
nuevo comando, which.
Uso sencillo:
which PROGRAM
Muestra el FQN del archivo del comando PROGRAM que se utilizará si el usuario ejecuta
el comando.
Filesystem basics
en /bin.
Hogan también está sorprendido de los resultados de fdisk. Sabe que es un comando
importante, pero peligroso, utilizado para particionar discos y sólo debe estar
disponible para el superusuario así que estaba esperando una respuesta de /sbin.
Incluso puede ver fdisk en /sbin cuando lo examina utilizando ls. Al mirarlo más
detenidamente, descubre que which ni siquiera buscó fdisk en /sbin. Después Hogan
aprenderá sobre la ruta de comandos y descubrirá el porqué esto tiene perfecto
sentido.
Ejercicios en línea
Lab Exercise
Objetivo: Explore algunas de las características de los directorios importantes
discutidas en este capítulo.
Configuración
En este ejercicio necesitará utilizar touch para crear archivos. Este comando se demostró en
los ejemplos de este capítulo. Necesitará utilizar which para ubicar los archivos de
comando. Este comando también se demostró en los ejemplos.
Especificaciones
1. Abra una nueva terminal o una nueva consola virtual (esto se necesita para la
evaluación de su trabajo en línea).
Quiere probar si en realidad puede utilizar touch para crear archivos en varios
directorios. Espera que esto funcione en su directorio de inicio y en /tmp, pero no
en otros directorios. Use el comando touch newfile.username (en donde el
username se remplaza con su nombre de usuario) en cada uno de los siguientes
directorios.
a. ~
b. /tmp
c. /bin
d. /root
Claramente, cabe esperar que algunos de sus esfuerzos no den resultado. Regrese a
su directorio de inicio cuando haya terminado.
15
Filesystem basics
2. Utilizando which, determine el FQN del archivo del comando binario para cada uno
de los siguientes: pwd, ls y whoami. Ejecute cada uno de estos comandos de
manera "cruda" utilizando el FQN en el intérprete de comandos. Finalmente, ejecute
exit, salga de la terminal o de la consola virtual.
Cuando haya terminado, salga de su shell para que se guarde la historia de sus comandos en
el archivo ~/.bash_history.
Deliverables
Question 1
Possible Solution
Conceptos clave
Filesystem basics
Redirección
A Linux le gusta pensar que todo es un archivo. En el ejemplo anterior, pwd envió la salida
al archivo de salida estándar, o STDOUT, el cual es por defecto la pantalla para los usuarios
que han iniciado sesión en el sistema.
Una de las características de la shell de comandos bash es que la salida que normalmente es
dirigida a la pantalla a través de STDOUT, también puede ser redireccionada a algún otro
archivo. Esto se hace utilizando el símbolo especial de redireccionamiento, , como se
muestra en este ejemplo:
[julius@station julius]$ ls
[julius@station julius]$ pwd > results.txt
[julius@station julius]$ ls
results.txt
En este ejemplo, los resultados usuales del comando fueron dirigidos al archivo
results.txt, creando el archivo durante el proceso. Un comando útil que nos puede servir
para verificar lo que ha pasado es el comando cat (concatenar).
Uso:
El comando cat copia cada uno de los archivos listados a la salida estándar. Si se lista más
de un archivo, esto concatena efectivamente los archivos. Como para cualquier otro
comando, esta salida se mostrará en la pantalla por defecto, pero también se puede
redireccionar a un archivo. Lo utilizaremos para mostrar un archivo nombrando un sólo
archivo y no redireccionando los resultados.
Esta vez, Julius capturó la salida de pwd redireccionando los resultados a results.txt y
después mostró results.txt con cat.
17
Filesystem basics
El comando más sencillo de todos que produce una salida visible es echo. El comando echo
toma cualquier texto que se teclee como parte del comando y lo repite a la salida estándar
(usualmente la pantalla). Este comando sencillo junto con el redireccionamiento, se puede
utilizar para crear archivos de texto.
Uso:
Example 1:
Ejemplo 2:
[julius@station julius]$ ls
[julius@station julius]$ pwd > results.txt
[julius@station julius]$ cat results.txt
/home/julius
[julius@station julius]$ ls >> results.txt
[julius@station julius]$ cat results.txt
/home/julius
results.txt
Uso:
Filesystem basics
De la primera manera, se hace una copia del archivo FUENTE como DESTINO. De la segunda
manera, se pueden copiar uno o más archivos al mismo tiempo a un directorio. Se hace una
copia del archivo FUENTE, ..., en el DIRECTORIO y se nombra DIRECTORIO/FUENTE, .... Con
las opciones apropiadas (no se discutirán aquí - intente man cp), puede copiar árboles de
subdirectorios completos de una sola vez.
Ejemplos:
cp mysong.midi backup.midi
cp mynovel.txt /tmp
cp ~/webpage.html .
Uso:
Filesystem basics
Ejemplos:
mv mysong.midi backup.midi
mv mynovel.txt /tmp
mv ~/webpage.html .
mv html public_html
Filesystem basics
mv images html
Uso:
rm [OPCIONES] {ARCHIVO...}
Note
rm no puede borrar un directorio a menos de que se utilicen opciones especiales del
comando. Hay un comando especial para este propósito: rmdir.
Warning
Sí, el comando rm puede suprimir árboles enteros de directorios de una sola vez. En
las manos del susperusuario puede borrar el contenido completo de un sistema de
archivos -- no siempre es lo que se pretende hacer.
Warning
La documentación para rm incluye la siguiente frase: "Observe que si utiliza rm para
suprimir un archivo, usualmente es posible recuperar el contenido de ese archivo."
Aunque esto pueda ser verdad requiere un nivel de habilidad más allá del proposito de
este curso, así que para todos los propósitos prácticos, debe tratar este comando como
si no fuese reversible.
Ejemplos:
1. Borrar mysong.midi:
rm mysong.midi
21
Filesystem basics
rm songs.tar novels.tgz
rm ~/photos.html
La redirección de comandos con > y los comandos cp y mv, pueden nombrar los archivos
destino. Normalmente, estos son nombres de archivos nuevos y los comandos crean los
archivos. Pero si se nombra un archivo existente como destino de la redirección, cp o mv,
el archivo existente será destruido sin advertencia. Esto se conoce como sobrescribir un
archivo. Puesto que este problema puede llegar a ser tan sorprendentemente sutil para un
nuevo usuario, le vamos a mostrar varios ejemplos.
Ejemplo 3:
Ejemplo 4:
Filesystem basics
[julius@station julius]$ mv file2 file1
[julius@station julius]$ ls
file1
[julius@station julius]$ cat file1
/home/julius
Aquí tampoco hay sorpresas -- observe como mv remplazó el contenido previo de file1
sin ninguna advertencia. De nuevo, file1 ha sido sobrescrito. cp habría remplazado file1
de la misma manera.
Para poder entender completamente nuestro último ejemplo, necesitamos aprender un poco
más acerca de redireccionamiento. En particular, necesitamos aprender cuándo se sucede la
redirección.
Ejemplo 5:
¿Por qué file2 lista file1 y file2, cuando el primer ls sólo muestra file1? Respuesta:
debido a la secuencia en que tuvieron lugar los pasos críticos. Evento 1: bash vio la
redirección al archivo file2 y lo creó como un archivo vacio (vea la discusión anterior
sobre redireccionamiento). Evento 2: ls generó un listado de archivos mostrando el archivo
creado anteriormente file1 y el que se acaba de crear file2. Evento 3: la salida de ls se
envió a file2.
Ejemplo 6:
Esto necesita una explicación. Primero, Julius crea mycwd usando pwd y presenta su
contenido con cat. Después utiliza cp para tratar de copiar el archivo a sí mismo pero cp
detecta el "error," muestra un mensaje y no hace nada (mv hubiese hecho lo mismo). El cat
23
Filesystem basics
en la línea siguiente verifica que mycwd no ha tenido cambios. Está bien hasta ahora. Sin
embargo, la siguiente secuencia produce una gran sorpresa. Julius usa cat con
redireccionamiento para tratar de copiar un archivo a sí mismo. cat también se queja de los
archivos fuente (entrada) y del destino (salida) al ser el mismo y pareciese que no hace
nada. Pero el cat final de mycwd no produce ninguna respuesta -- ¡el contenido del archivo
se perdio! ¿Por qué? Debido a la secuencia en la que tuvieron lugar los eventos. Evento 1:
bash ve la redirección a un archivo que ya existe, borra el archivo y lo re-crea vacío (vea la
discusión anterior sobre redirección) -- mycwd es sobrescrito. Evento 2: ya no importa lo
que cat haga puesto que el archivo fuente mycwd ya ha sido destruído y re-creado. Es
demasiado tarde para evitar el error.
Ejemplos
Madonna intentó configurar un sitio web personal simple, pero después de terminar su ISP
le dijo que había puesto todos los archivos del sitio web en un directorio equivocado. Puso
los archivos en ~/html y debieron haber sido puestos en ~/public_html. Necesita mover
los archivos al directorio correcto. Mientras lo hace, también necesita hacer una copia de
seguridad de los archivos que se encuentran en el directorio archive, por si acaso daña o
borra accidentalmente uno de los archivos en ~/public_html. El directorio archive ya
existe.
[madonna@station madonna]$ ls
html archive
[madonna@station madonna]$ mv html public_html
[madonna@station madonna]$ cd public_html
[madonna@station public_html]$ ls
index.html photo.jpeg
[madonna@station madonna]$ cp index.html photo.jpeg ../archive
Para mover los archivos todo lo que Madonna tuvo que hacer fue renombrar el directorio.
Para hacer copias de seguridad utilizó la habilidad del comando cp para copiar más de un
archivo a la vez.
Nero intentó configurar un sitio web personal simple, pero después de terminar su
proveedor de servicios de internet (ISP por sus siglas en inglés) le dijo que habia puesto
todos los archivos del sitio web en el directorio equivocado. Puso los archivos en su
24
Filesystem basics
[nero@station nero]$ ls
index.html photo1.jpeg photo2.jpeg public_html
[nero@station nero]$ mv index.html photo1.jpeg photo2.jpeg public_html
[nero@station nero]$ ls
public_html
[nero@station nero]$ cd public_html
[nero@station public_html]$ ls
index.html photo1.jpeg photo2.jpeg
Para mover los archivos Nero utilizó la habilidad del comando mv para mover más de un
archivo a la vez.
Suprimir robots.txt
[elvis@station elvis]$ ls
public_html
[elvis@station elvis]$ ls public_html
index.html robots.txt
[elvis@station elvis]$ rm public_html/robots.txt
[elvis@station elvis]$ ls public_html
index.html
Ejercicios en línea
Lab Exercise
Objetivo: Utilizar la redirección, cp y mv para crear un sitio web simple y archivar el
sitio web.
Configuración
En este ejercicio necesitará trabajar con los directorios ~/html y ~/archive. Inicie sesión
con su cuenta y utilice los siguientes comandos para crear estos dos directorios:
25
Filesystem basics
[student@station student]$ mkdir ~/html
[student@station student]$ mkdir ~/archive
Especificaciones
Quiere crear un sitio web personal simple utilizando las técnicas que se demostraron en la
sección de ejemplos de este capítulo.
Note
La página web resultante puede ser o no visible con un navegador, dependiendo de las
características adicionales de la configuración de su sistema. Su instructor le dirá si
puede ver los resultados de su trabajo de este modo.
Deliverables
Question 1
Possible Solution
The following sequence of commands provides one possible solution to this exercise.
Filesystem basics
Lab Exercise
Objetivo: Investigar las consecuencias de la opción bash "noclobber".
Especificaciones
1. Abra una nueva terminal o una nueva consola virtual (esto se necesita para la
evaluación de su trabajo en línea).
2. Cree un archivo llamado source que incluya la palabra "fuente" y un archivo
llamado target que incluya la palabra "destino."
3. Use cp para sobrescribir target con source. Verifique el efecto con cat.
4. Re-cree target.
5. Sobrescriba target de nuevo haciendo cat en source y redireccionando la salida.
Verifique los resultados.
6. Active la opción bash "noclobber" con el siguiente comando mágico:
7. [student@station student]$ set -o noclobber
8. Ensaye de nuevo ambos tipos de sobrescritura y observe los resultados.
9. Desactive la opción bash "noclobber" con el siguiente comando mágico:
10. [student@station student]$ set +o noclobber
11. Termine la sesión en la terminal o en la consola virtual.
Deliverables
Question 1
Possible Solution
The following sequence of commands provides one possible solution to this exercise.
Filesystem basics
Conceptos clave
Uso:
[elvis@station elvis]$ ls
[elvis@station elvis]$ mkdir public_html
28
Filesystem basics
[elvis@station elvis]$ ls
public_html
Sin embargo, observe que por defecto, mkdir no creará un subdirectorio si el directorio
padre no existe de antemano:
Sólo si Elvis utiliza mkdir -p (como 'padre') puede crear un árbol de directorios completo
de una sola vez:
Por ahora, tenga en cuenta que cuando se da un directorio como argumento al comando ls,
éste lista el contenido del directorio. ¿Pero qué pasa si el directorio contiene otros
directorios? Por defecto, el comando ls sólo mostrará el contenido del directorio del nivel
más alto. Si también quiere que el comando ls liste los subdirectorios, puede añadir la
opción -R.
Por ejemplo, hogan está explorando la configuración de red de la máquina y sospecha que
el directorio /etc/sysconfig/networking es un directorio importante. Para poder
descubrir los archivos y los subdirectorios que contiene, hogan lista el contenido del
directorio de modo recursivo.
29
Filesystem basics
[hogan@station hogan]$ ls -R /etc/sysconfig/networking/
/etc/sysconfig/networking/:
devices ifcfg-lo profiles
/etc/sysconfig/networking/devices:
ifcfg-eth0
/etc/sysconfig/networking/profiles:
default netup
/etc/sysconfig/networking/profiles/default:
hosts ifcfg-eth0 network resolv.conf
/etc/sysconfig/networking/profiles/netup:
hosts ifcfg-eth0 network resolv.conf
ls -R también se puede combinar con cualquiera de las opciones de línea de comando vistas
anteriormente, tales como ls -sR para incluir los tamaños de archivos, o ls -lR para incluir
los atributos de archivos.
Uso:
Suprime el (los) DIRECTORIO(s) si están vacíos. Emite un mensaje de error si uno o más
del (los) DIRECTORIO(s) no está(n) vacío(s), pero los directorios que quedan (vacíos) se
borran. Tenga en cuenta que un directorio que contiene sólo un subdirectorio no se
considera como vacío.
[elvis@station elvis]$ ls
public_html
[elvis@station elvis]$ rmdir public_html/images
[elvis@station elvis]$ ls
[elvis@station elvis]$
Como lo señalamos antes, observe de nuevo que los comandos tales como mkdir y rmdir
funcionan de manera silenciosa. Como dice el dicho el silencio es oro.
Por ahora, tenga en cuenta que cuando se da un directorio como argumento al comando ls,
éste lista el contenido del directorio. ¿Pero qué pasa si el directorio contiene otros
30
Filesystem basics
directorios? Por defecto, el comando ls sólo mostrará el contenido del directorio del nivel
más alto. Si también quiere que el comando ls liste los subdirectorios, puede añadir la
opción -R.
Por ejemplo, a elvis le gustaría tener una lista de archivos y directorios más detallada en su
directorio ~/work. Recuerde que elvis antes tenía que emitir un comando ls por separado
para cada subdirectorio de ~/work con el fin de ver el contenido de subdirectorio. Ahora en
su lugar, puede utilizar la opción ls -R.
work/images:
advertising logos
work/images/advertising:
work/images/logos:
work/spreadsheets:
Observe que el comando anterior mostrará archivos así como directorios. En este ejemplo,
casualmente no hay ningún archivo para mostrar.
ls -R también se puede combinar con cualquiera de las opciones de línea de comando vistas
anteriormente, tales como ls -sR para incluir los tamaños de archivos, o ls -lR para incluir
los atributos de archivos.
En el capítulo anterior cuando se introdujo cp, señalamos que con las opciones correctas el
comando cp serviría para copiar árboles de directorios completos. Aquí analizamos dicha
opción: -r (de recursive) (Muchos de los comandos tienen la opción de actuar de modo
recursivo es decir, recorriendo todas las ramas de un sub-árbol de directorio, actuando en
cada subdirectorio a su vez).
-- html
|
31
Filesystem basics
hogan -- website -- -- forms
|
| -- song1.midi
| |
| -- songs --
| | |
| | -- song2.midi
| |
-- media --
| -- picture1.png
| |
-- photos--
|
-- picture2.png
Aunque este árbol de directorios contiene muchas ramas y archivos, se puede copiar con
una sóla orden:
-- html
|
-- website -- -- forms
| |
| | -- song1.midi
| | |
| | -- songs --
| | | |
| | | -- song2.midi
| | |
| -- media --
| | -- picture1.png
| | |
hogan -- -- photos--
| |
| -- picture2.png
|
| -- html
| |
-- archive -- -- forms
|
| -- song1.midi
| |
| -- songs --
| | |
| | -- song2.midi
| |
-- media --
| -- picture1.png
| |
-- photos--
32
Filesystem basics
|
-- picture2.png
-- html
|
-- website -- -- forms
| |
| | -- song1.midi
| | |
| | -- songs --
| | | |
| | | -- song2.midi
hogan -- | |
| -- media --
| | -- picture1.png
| | |
| -- photos--
| |
| -- picture2.png
-- archive
-- html
|
-- website -- -- forms
| |
| | -- song1.midi
| | |
| | -- songs --
| | | |
| | | -- song2.midi
| | |
| -- media --
| | -- picture1.png
| | |
hogan -- -- photos--
| |
| -- picture2.png
33
Filesystem basics
|
| -- html
| |
-- archive -- website -- -- forms
|
| -- song1.midi
| |
| -- songs --
| | |
| | -- song2.midi
| |
-- media --
| -- picture1.png
| |
-- photos--
|
-- picture2.png
En el capítulo anterior cuando se introdujo rm, señalamos que con las opciones correctas,
el comando rm puede borrar por completo árboles de directorios. De nuevo, para cp la
opción es -r (derecursivo).
-- html
|
hogan -- website -- -- forms
|
| -- song1.midi
| |
| -- songs --
| | |
| | -- song2.midi
| |
-- media --
| -- picture1.png
| |
-- photos--
|
-- picture2.png
Filesystem basics
-- html
|
hogan -- website --
|
-- forms
Vale la pena anotar una vez más que, en general, el borrar archivos no tiene reversa. Si se
utiliza de manera negligente el comando rm -r es muy peligroso.
Ejemplos
El usuario hogan ha estado trabajando bastante en un reporte, el cual tiene varios archivos
que ha organizado en subdirectorios bajo un directorio llamado report.
report/
|-- chapter01/
| |-- figures/
| | |-- image01.png
| | `-- image02.png
| |-- section01.html
| `-- section02.html
`-- chapter02/
|-- figures/
| |-- image01.png
| `-- image02.png
|-- section01.html
`-- section02.html
4 directories, 8 files
Está a punto de utilizar un corrector ortográfico para chequear y remplazar las palabras mal
escritas. Ya que esta es la primera vez que utiliza este corrector ortográfico, quiere hacer
una copia de seguridad de su trabajo antes de continuar. Primero trata de hacer una copia de
seguridad con el comando cp.
Al darse cuenta de su error añade la opción -r para decirle al comando cp que copie de
modo recursivo.
Filesystem basics
.
|-- report/
| |-- chapter01/
| | |-- figures/
| | | |-- image01.png
| | | `-- image02.png
| | |-- section01.html
| | `-- section02.html
| `-- chapter02/
| |-- figures/
| | |-- image01.png
| | `-- image02.png
| |-- section01.html
| `-- section02.html
`-- report.bak/
|-- chapter01/
| |-- figures/
| | |-- image01.png
| | `-- image02.png
| |-- section01.html
| `-- section02.html
`-- chapter02/
|-- figures/
| |-- image01.png
| `-- image02.png
|-- section01.html
`-- section02.html
10 directories, 16 files
Una vez que hogan haya usado el corrector ortográfico y que esté contento con los
resultados, quiere suprimir el directorio de copia de seguridad report.bak. Primero utiliza
el comando rmdir.
Recuerde que rmdir sólo funciona en directorios vacíos así que en su lugar utiliza rm -r.
El usuario ventura está interesado en programar con el lenguage python. Descubrió scripts
de muestra en el directorio /usr/share/doc/pygtk2-1.99.14/examples/. Le gustaría
jugar con los scripts para poder probar nuevas ideas, pero no tiene permiso de escritura en
los archivos. Decide hacer una copia local de los scripts.
36
Filesystem basics
[ventura@station ventura]$ cp -r /usr/share/doc/pygtk2-1.99.16/examples/
.
[ventura@station ventura]$ ls -R examples/
examples/:
atk gl glade gobject ide neil pango pygtk-demo simple
examples/atk:
atk-demo.py
examples/gl:
cone.py dots.py gears.py README
examples/glade:
glade-demo.py README test.glade
examples/gobject:
properties.py signal.py
examples/ide:
break.xpm edit.py gtkdb.py next.xpm README step.xpm
browse.py edit.xpm gtkprof.py pyide.py return.xpm
...
Observe el uso del nombre de directorio . para referirse a "el directorio local".
Cuando cp recibe un directorio como destino (el último argumento) copia a ese
directorio, preservando los nombres de los archivos originales. En este caso, el
directorio examples fue copiado al directorio ..
El comando ls -R genera una lista recursiva de todo archivo en el directorio recién
creado example.
Ahora ventura tiene una copia a nivel local de los scripts python, lo que significa que los
puede modificar cuando quiera.
Ejercicios en línea
Administración de directorios
Lab Exercise
Objetivo: Listar, copiar, mover y suprimir directorios de manera eficiente.
Especificaciones
Filesystem basics
Deliverables
Question 1
Limpieza
Los directorios creados son bastante grandes, así que si quiere conservar espacio de disco
puede borrarlos cuando haya terminado.
Conceptos clave
38
Filesystem basics
Nombres de archivo
Muchos sistemas operativos restringen el número y tipo de caracteres que se pueden utilizar
al nombrar archivos. En Linux, virtualmente cualquier caracter imprimible se puede utilizar
en el nombre de archivo y los nombres pueden ser casi de cualquier longitud.
Los nombres de archivos de Linux pueden tener hasta 255 caracteres, excluyendo cualquier
componente de directorio. Cuando se utiliza en un comando, un nombre de archivo
absoluto o relativo, incluyendo los componentes del directorio, pueden tener hasta de ¡4095
caracteres! Esto permite que los nombres de archivo y directorios puedan ser bastante
descriptivos.
Como lo puede ver, se crearon cuatro archivos con nombres un poco extraños.
Warning
El ejemplo anterior es sólo a manera de ilustración. Muchos de los caracteres
utilizados en este ejemplo son meta-caracteres shell, cuyo significado aún no se ha
discutido aquí. Debe evitar utilizar signos de puntuación en los nombres de archivos,
pues si los utiliza de manera inapropiada puede producir resultados desastrosos.
39
Filesystem basics
La advertencia anterior no se debe olvidar. En general, los nombres de archivos deben estar
compuestos de caracteres alfabéticos y numéricos (A-Z, a-z, 0-9) y signos de puntuación ._-
+~ (punto, guión bajo, guión, más, tilde). Normalmente, los nombres de archivos deben
iniciar con un caracter alfanumérico o con un punto (vea la siguiente sección sobre archivos
ocultos). Aunque encontrará nombres de archivos con espacios incrustados no se
recomienda utilizarlos.
Aquí hay dos ejemplos que le mostrarán el daño que puede causar el uso de caracteres no-
significativos. Vamos a abusar de dos meta-caracteres de shell: el espacio y el signo mayor
que.
[hogan@station hogan]$ ls
dir
Hogan intenta crear un directorio llamado 'bad dir,' pero sin saber creó dos
directorios, uno llamado 'bad' y otro llamado 'dir'.
Después, Hogan trata de crear un archivo llamado 'this and that' con touch, pero
en realidad crea tres archivos llamados 'this', 'and', y'that'.
Ahora Hogan intenta mover el archivo que él cree que se llama 'this and that' al
directorio que el piensa que se llama 'bad dir', pero lo que hace es mover todos los
cuatro 'directoriosthis', 'and', 'that', y 'bad' (tres archivos comunes y un directorio)
al directorio dir.
Puesto que todos los comandos anteriores se ejecutaron "con éxito", sólo hasta este
momento Hogan se da cuenta de que algo ha salido mal.
Es obvio que, si Hogan hubiese encerrado entre comillas los nombres como se mostró en
las notas explicativas, las cosas hubiesen funcionado como él lo quería. Hecho que vale la
pena recordar, ya que encontrará nombres de archivos con espacios encrustados. En
relación a esto, un nombre de archivo que contiene espacios al principio y al final es legal,
pero es muy difícil de identificar en un listado de archivos.
Filesystem basics
[hogan@station hogan]$ ls
bad- dir
Hogan finalmente decide evitar los espacios. Esta vez intenta crear un directorio
llamado 'bad-> dir' pero sin querer crea un directorio llamado 'bad-' y un archivo
llamado 'dir' (¿por qué?).
Después Hogan crea un archivo llamado 'this' con touch. ¡Este paso lo hace bien!
Ahora Hogan trata de mover un archivo llamado 'this' al directorio que el piensa que
se llama 'bad->dir,' pero en vez de lograr esto, mueve 'this' al directorio bad-,
redireccionando la salida (no hay ninguna) al archivo 'dir'.
De nuevo, sólo hasta ahora Hogan se da cuenta de que algo ha salido mal.
Como antes, si Hogan hubiese utilizado las comillas para encerrar los nombres de archivos,
las cosas habrían salido como él quería. Las comillas enmascaran una multitud de pecados,
pero no utilice esto como excusa para crear nombres de archivos inapropiados. Muchas de
las tareas que aún tenemos que aprender se hacen más fáciles si se utilizan nombres
"normales" para los archivos.
Archivos ocultos
Aparte de ocultar el archivo, el punto inicial no tiene otra importancia y los archivos y
directorios ocultos se pueden utilizar como cualquiera de los otros.
Filesystem basics
sample
[alice@station alice]$ ls -a
. .. sample .secret
[alice@station alice]$ mv sample .secret
[alice@station alice]$ ls
[alice@station alice]$ ls .secret
sample
[alice@station alice]$ cd .secret
[alice@station .secret]$ ls
sample
[alice@station .secret]$
"Comodines"
Con frecuencia es necesario emitir un comando que actúe en más de un archivo. Los
comandos como cp -r y rm -r funcionan en sub-árboles enteros de directorios, sin
embargo, Linux cuenta con una manera más flexible de identificar grupos de archivos. La
shell de comando bash trata algunos de sus meta-caracteres especiales como comodines.
Cuando bash lee la línea de comando, la shell realiza un proceso llamado expansión de
meta-caracteres o expansión de comodines, lo cual genera una lista de nombres de archivos
que coinciden con el patrón descrito por la expresión del comodín y luego pasa la lista
generada al comando. Esto se conoce comúnmente como "comodines de nombres de
archivos."
Table 1. Comodines
Caracter Efecto
* coincide con cero o más caracteres (a excepción del punto inicial)
? coincide exactamente con un caracter (a excepción del punto inicial)
[...] coincide exactamente con un caracter de la lista o rango
[^...] coincide exactamente con un caracter no incluido en la lista o rango
El uso de * y ? es más bien sencillo. Los comodines de listas son un poco más complicados,
pero también bastante poderosos y útiles.
Filesystem basics
Los comodines se pueden utilizar con cualquier comando que espera el nombre de un
archivo. Por ejemplo, el comando
asumiendo que el directorio de inicio de Bob contiene los archivos listados anteriormente.
[bob@station bob]$ rm
rm: too few arguments
Try `rm --help' for more information.
[bob@station bob]$ rm z*
rm: cannot lstat `z*': No such file or directory
En el primer rm, el comando vio cero nombres de archivos y falló presentando un mensaje
de error. En la segunda versión, la shell no pudo generar una lista de nombres del patrón z*
y por lo tanto la cadena z*se envió a rm como el nombre de archivo mismo. Como Bob no
tiene un archivo llamado z* en su directorio, el comando falló con un mensaje diferente].
43
Filesystem basics
Ejemplos
Cuando echa un vistazo a las bibliotecas estáticas instaladas en su sistema, encuentra cerca
de 1000 archivos en el directorio /usr/lib. Para reducir el número de archivos a examinar
trata de listar todos los archivos terminados en a.
...
/usr/lib/mozilla:
plugins
44
Filesystem basics
/usr/lib/samba:
vfs
Muchas de las líneas de este listado largo han sido borradas, pero se han dejado las
suficientes para ilustrar el problema, el "comodín" de bob no fue lo suficientemente
específico y capturó también algunos de los directorios terminados en a. Refinando un poco
más la lista obtiene lo que quiere.
...
/usr/lib/libimlib-jpeg.a /usr/lib/libz.a
/usr/lib/libimlib-png.a /usr/lib/libzvt.a
/usr/lib/libimlib-ppm.a
Luego, bob sospecha que las bibliotecas utilizadas con más frecuencia tienen nombres
cortos y eficientes (tal vez descriptivos). Procede a listar todas las bibliotecas que tengan
nombres de una, dos o tres letras.
¿Hay alguna forma fácil de utilizar los comodines para que bob pudiese haber listado las
bibliotecas con uno, dos o tres caracteres de nombres con una sola expresión?
Filesystem basics
La usuaria alice descubrió que los archivos que contienen las páginas man se encuentran
instalados en el directorio /usr/share/man en los subdirectorios relacionanados con los
capítulos de las páginas man.
Como usuaria regular del sistema, sabe que los capítulos que más le interesan son el 1, 5 y
7. Utiliza una expresión con comodines para enumerar sólo el contenido de esos
directorios.
...
groff.7.gz wireless.7.gz
groff_char.7.gz x25.7.gz
groff_diff.7.gz
Si alice hubiese estado interesada en todas las páginas man de los capítulos numerados,
pero no en los capítulos impares "n" podría haber utilizado la expresión de rango con
comodines.
...
named-checkconf.8.gz zic.8.gz
named-checkzone.8.gz
/usr/share/man/man9:
Ejercicios en línea
Lab Exercise
Objetivo: Administrar archivos de modo eficiente por medio del uso de comodines
46
Filesystem basics
de archivo.
Especificaciones
Deliverables
Question 1
Si ha realizado el ejercicio correctamente, debe tener los seis directorios con los siguientes
archivos.
[bob@station bob]$ ls *
cp_even:
cp1250.enc cp1256.enc cp852.enc cp864.enc cp932.enc
cp1252.enc cp1258.enc cp860.enc cp866.enc cp936.enc
cp1254.enc cp850.enc cp862.enc cp874.enc cp950.enc
cp_mid:
cp850.enc cp857.enc cp862.enc cp865.enc cp874.enc cp949.enc
cp852.enc cp860.enc cp863.enc cp866.enc cp932.enc cp950.enc
cp855.enc cp861.enc cp864.enc cp869.enc cp936.enc
cp_thousand:
cp1250.enc cp1252.enc cp1254.enc cp1256.enc cp1258.enc
47
Filesystem basics
iso_mid:
iso8859-3.enc iso8859-5.enc iso8859-7.enc
iso8859-4.enc iso8859-6.enc iso8859-8.enc
mac:
macCentEuro.enc macDingbats.enc macJapan.enc macThai.enc
macCroatian.enc macGreek.enc macRoman.enc macTurkish.enc
macCyrillic.enc macIceland.enc macRomania.enc macUkraine.enc
xxxn:
big5.enc iso8859-13.enc iso8859-2.enc iso8859-7.enc jis0212.enc
iso2022.enc iso8859-14.enc iso8859-3.enc iso8859-8.enc koi8-r.enc
iso2022-jp.enc iso8859-15.enc iso8859-4.enc iso8859-9.enc koi8-u.enc
iso2022-kr.enc iso8859-16.enc iso8859-5.enc jis0201.enc ksc5601.enc
iso8859-10.enc iso8859-1.enc iso8859-6.enc jis0208.enc
Sugerencias
El siguiente comando copiaría los archivos que coinciden con el primer criterio (asumiendo
que el directorio de trabajo actual es el directorio de inicio de Bob).
Conceptos clave
Ver archivos
Linux ofrece varios comandos para examinar archivos y su contenido. Esta lección aborda
algunas de las herramientas más utilizadas.
El comando file
48
Filesystem basics
El contenido de cualquier archivo dado puede ser ASCII (texto plano, HTML, scripts de
shell, código fuente del programa, etc.) o binario (un ejecutable compilado, un archivo,
comprimido, audio, etc.).
Los comandos analizados en este capítulo son sólo para uso en archivos ASCII, el intentar
usarlos con archivos binarios puede generar problemas un poco molestos (como pantallas
llenas de caracteres extraños) o hasta problemas mayores (bloqueando la terminal). Esto se
debe a que los archivos binarios pueden contener códigos binarios arbitrarios y algunos de
estos códigos tienen un significado especial cuando se (mal )interpretan como texto ASCII.
Por lo tanto, es una buena idea revisar el tipo de archivo de cualquier archivo que usted no
reconozca utilizando file antes de intentar ver el archivo con otra de las herramientas que se
muestran aquí.
Prueba FILE(s) para determinar el tipo de archivo y muestra los resultados en la salida
estándar.
El comando cat
Este comando se introdujo por primera vez en el capítulo 3 de este cuaderno. Aquí le
mostramos algunas de sus opciones.
Opción Efecto
49
Filesystem basics
Opción Efecto
Muestra todos los caracteres incluyendo los caracteres de control y los de no
-A
impresión.
-s " Apiña" múltiples líneas adyacentes en blanco en una sóla línea en blanco
-n Numera las líneas de la salida
El comando cat, cuando se utiliza para ver archivos, simplemente muestra todo el
contenido de una sola vez. Los archivos largos pasan por la pantalla de manera muy rápida
haciendo que cat sea el comando más apropiado para aquellos archivos con menos de una
pantalla de texto.
Tanto more como less están diseñados para ver archivos de texto en la pantalla. Su uso es
muy similar aunque el comando less es un poco más moderno y tiene unas pocas
características extras tales como el responder de manera correcta a [PgArriba], [PgAbajo] y
a las flechas de navegación. Después de todo,less es more.
Es bien importante familiarizarse con el comando less, ya que otras herramientas (como
man) lo utilizan en segundo plano para brindar funciones de paginador.
Muestra el/los archivo(s)FILE(s) en la salida estándar y una pantalla a la vez bajo el control
del teclado.
Opción Acción
-c Limpia la pantalla y redibuja en vez de desplazarse
-s "Apiña" múltiples líneas adyacentes en blanco en una sóla línea en blanco
Muestra el/los archivo(s)FILE(s) en la salida estándar y una pantalla a la vez bajo el control
del teclado.
Opción Acción
-c Limpia la pantalla y redibuja en vez de desplazarse
-r Muestra los caracteres de control básico
50
Filesystem basics
Opción Acción
-s "Apiña" múltiples líneas adyacentes en blanco en una sóla línea en blanco
Una de las características del paginador less es que depende de un concepto estándar de
Unix llamado tuberías. Aunque las tuberías se discuten más adelante esta característica de
less es bastante útil y sencilla de utilizar así que amerita presentarla ahora. Una tubería
actúa como un redireccionamiento en donde la salida de un comando es redireccionado a un
lugar distinto de la terminal. Con la redirección (usando >) la salida se redirecciona a un
archivo específico. Cuando se utiliza una tubería la salida de un comando es redireccionada
como entrada de otro comando. La shell bash usa el caracter | (suele encontrarse encima de
la tecla RETURN) para construir tuberías.
Al ejecutar un comando que produce bastante salida, ésta se puede poner en una tubería
usandoless. En vez de ser botada a una terminal, la salida se puede navegar como si fuese
un archivo, subiendo y bajando de página y haciendo búsquedas. Cuando termine salga de
less y la salida desaparecerá.
El usuario elvis está utilizando el comando ps aux para ver una tabla con todos los
procesos que están ejecutándose en la máquina. Como espera que la salida sea más bien
larga, decide entonces poner una tubería del comando al navegador less.
Filesystem basics
root 2 0.0 0.0 0 0 ? SW 17:27 0:00 [keventd]
root 3 0.0 0.0 0 0 ? SW 17:27 0:00 [kapmd]
root 4 0.0 0.0 0 0 ? SWN 17:27 0:00
[ksoftirqd_CPU0]
root 9 0.0 0.0 0 0 ? SW 17:27 0:00 [bdflush]
...
[elvis@station elvis]$ ps aux | less
Ahora él puede utilizar la mismas secuencia que utiliza al navegar un archivo (o las páginas
man) para hojear las salidas de los comandos ps:ESPACIO para avanzar, b para
retroceder, /textRETORNO para buscar el texto text, y q para salir.
El comando head
Algunas veces todo lo que se necesita al examinar un archivo es ver las primeras líneas del
archivo. El comando head nos permite hacer esto.
Opción Efecto
-num, -n num Imprime las primeras num líneas (por defecto es 10).
-q Suprime encabezados que dan nombres de archivo
En el siguiente ejemplo elvis examinará las primeras 10 líneas y luego las primeras 5 líneas
del archivo /etc/group.
Filesystem basics
...
Así como con el paginador less de arriba, la salida de comandos largos se puede truncar al
establecer una tubería en el comando head.
El comando tail
53
Filesystem basics
Para complementar head, el comando tail muestra las últimas 10 líneas de cada FILE a la
salida estándar.
Opción Efecto
-num, -n num Muestra las últimas num líneas (por defecto es 10).
-q Suprime encabezados que dan nombres de archivo
-f Mantiene el archivo abierto y escribe las nuevas líneas como añadidas
En el siguiente ejemplo, elvis escribe las últimas 10 líneas y después las ultimas 5 del
archivo /etc/group.
El comando tail tiene otra opción bastante útil: la opción -f (follow). Con esta opción tail
mostrará las últimas líneas del archivo y luego "espera" y continua presentando cualquier
nueva línea al ser añadida al archivo. Frecuentemente, se utiliza para monitorear archivos
de registro en tiempo real. Una vez inicie con esta opción, el intérprete de comandos no
retorna. En su lugar, tail -f se mantiene activa y continuará presentando las nuevas líneas
hasta que se presione CTRL-C.
Ejemplos
Al explorar la configuración del sistema de impresión cups, prince se encontró con los
siguientes archivos en el directorio /usr/share/cups/banners.
54
Filesystem basics
[prince@station banners]$ ls /usr/share/cups/banners/
classified confidential secret standard topsecret unclassified
Como no está seguro de qué tipo de archivos son, trata entonces de identificarlos con el
comando file.
El comando file revela que éstos son documentos PostScript enviados a la impresora como
pancartas.
El usuario elvis acaba de descargar algunas imágenes del álbum de fotos del sitio web de su
amigo y las guardó en un directorio llamado pics.
Observa las extensiones de cuatro de los archivos y parecen estar en formato PNG,
mientras que dos de ellas parecen tener formato JPEG. Al parecerle extraño, confirma el
tipo de archivos ejecutando el comando file.
Los últimos dos archivos están en formato PNG como los otros cuatro. Aparentemente, los
dos últimos fueron nombrados con una extensión equivocada.
Filesystem basics
La usuaria blondie recientemente aprendió que todos los archivos del directorio
/etc/profile.d terminados en .sh se encuentran incluidos en su configuración de shell
bash cada vez que inicia sesión. Interesada en saber lo que contienen los archivos decide
hojear las primeras líneas de cada archivo con el siguiente comando.
export G_BROKEN_FILENAMES=1
==> /etc/profile.d/gnome-ssh-askpass.sh <==
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
export SSH_ASKPASS
sourced=0
for langfile in /etc/sysconfig/i18n $HOME/.i18n ; do
[ -f $langfile ] && . $langfile && sourced=1
done
if [ -n "$GDM_LANG" ]; then
sourced=1
LANG="$GDM_LANG"
...
Filesystem basics
README.pam_env README.pam_rootok README.pam_wheel
README.pam_filter README.pam_securetty README.pam_xauth
En Red Hat Enterprise Linux, los eventos del sistema se registran en archivos de texto que
se encuentran en el directorio /var/log tales como /var/log/messages (para eventos del
sistema en general) y /var/log/secure (para aquellos eventos que incluyen información
importante). Cuando los eventos ocurren se añaden nuevas líneas a estos archivos en
tiempo real.
Filesystem basics
Jun 25 11:20:59 station kernel: 15: @cf13e5c0 length 8000031e status
0001031e
Jun 25 11:22:06 station su(pam_unix)[2229]: session closed for user
madonna
Jun 25 11:22:10 station su(pam_unix)[2352]: session opened for user root
by elvis(uid=2291)
Jun 25 11:23:06 station su(pam_unix)[2399]: session opened for user root
by elvis(uid=2291)
Jun 25 11:23:55 station su(pam_unix)[2399]: session closed for user root
Jun 25 11:24:00 station su(pam_unix)[2441]: session opened for user elvis
by elvis(uid=2291)
En este punto, el comando tail sigue ejecutándose, pero la salida hace una pausa hasta que
ocurre un nuevo evento en el sistema, el cual se registra en uno de los archivos. Después el
comando tail muestra las nuevas lineas añadidas decoradas con el nombre de archivo del
archivo pertinente.
Ejercicios en línea
Filesystem basics
Lab Exercise
Objetivo: Examinar archivos usando varias utilidades para navegar.
Especificaciones
En este ejercicio necesitará tres terminales (ya sean consolas virtuales o terminales dentro
del entorno gráfico X) cada una utilizando su cuenta primaria.
Cuando haya terminado, NO salga del paginador less, vaya a una nueva terminal
para realizar el siguiente paso.
3. En la segunda terminal, use el comando head para ver las primeras 5 líneas de todos
los archivos en el directorio /etc/sysconfig cuyo nombre empieza por system- al
archivo confheaders.txt en su directorio de inicio. Utilice la opción apropiada
para suprimir los encabezados con los nombres de archivos que head imprime por
defecto.
4. Al seguir en la segunda terminal, ejecute el comando vmstat 1. Este comando traza
las estadísticas de la memoria y la CPU de su máquina generando una línea una vez
por segundo. Cuando haya visto lo suficiente, utilice la secuencia CTRL-C para
matar el comando.
NO pare este comando, déjelo ejecutando. Vaya a una nueva terminal para realizar
el siguiente paso.
5. En una tercera terminal siga el creciente archivo vmstat.out con el comando tail -
f. NO pare el comando tail hasta no haber confirmado el siguiente ejercicio.
59
Filesystem basics
Deliverables
Question 1
Limpieza
Después de completar este ejercicio salga del paginador less con el comando q y termine
los comandos vmstat y tail con la secuencia de controlCTRL-C.
Conceptos clave
Una de las maneras en que Linux alcanza su alto nivel de flexibilidad es por medio de la
robustez de su configuración. Usualmente la información sobre la configuración se
60
Filesystem basics
Un procesador de palabras sería una opción apropiada para escribir una carta, un memo, un
boletín, un folleto o cualquier documento en donde la presentación visual sea controlada
por el software de edición.
Linux viene junto con un juego completo de editores de texto, cada uno con sus fortalezas y
debilidades. Linux también incluye procesadores de palabra para la creación de documentos
como parte de productos tales como OpenOffice.
Como todos los editores de texto trabajan en archivos de texto sencillos, puede escoger el
que quiera sin problemas de compatibilidad entre los productos. Normalmente se escoge
una opción con base en la disponibilidad, facilidad de uso, familiaridad y características
especiales. Por ejemplo, algunos editores facilitan la generación de código de programas
formateados de manera correcta haciendo que la programación sea mucho más fácil y
rápida. Este capítulo presenta dos editores fáciles de utilizar nano y gedit. El editor de
texto más popular en los sistemas Linux es vi y también es el más robusto y el más
complicado. La complejidad de este editor hace difícil abordarlo en un curso introductorio.
nano
nano es un editor de texto simple que presenta una pantalla completa. Los comandos se
presentan al final de la pantalla y se proporciona ayuda de acuerdo con el contexto. Al
escribir los caracteres estos se insertan de manera inmediata en el texto.
61
Filesystem basics
Uso:
Comando Función
^G Ayuda - abre una pequeña ventana de ayuda
^X Salir - sale (y opcionalmente guarda el archivo)
^O Escribir - guarda el archivo
^J Justificar
^R Leer el archivo - e insertar en la posición del cursor
^W Dónde está - búsqueda de texto
^Y Página anterior -retrocede una página
^V Próxima página - adelanta una página
^K Cortar texto - corta una línea a la vez
^U Deshace el corte de texto - inserta el último bloque de texto cortado
^C Posición del cursor- identifica el número de línea y de columna
^T Corrector ortográfico - empieza a corregir la ortografía
Opción Función
-w desactiva el ajuste de texto
-v "ver" el archivo en modo de sólo-lectura
Los archivos de configuración pueden sufrir daños debido a cortes de línea indebidos, así
que con frecuencia se inicianano con la opción-w para editar estos archivos.
gedit
62
Filesystem basics
Ejercicios en línea
Editores de texto
Lab Exercise
Objetivo: Editores de texto
Especificaciones
Filesystem basics
gedit. Si su sistema no tiene instalado el servidor X, utilice el editor nano para ambos
archivos.
El editor nano
El editor gedit
Deliverables
Question 1
Filesystem basics