SlideShare una empresa de Scribd logo
1 de 64
Descargar para leer sin conexión
1

Filesystem basics
Capítulo 1 Navegación del sistema de archivos
Conceptos clave
•
•
•
•
•

El sistema de archivos de Linux es un "árbol invertido"de directorios y archivos con
un directorio raíz llamado "/".
Todo proceso tiene un directorio actual de trabajo con frecuencia llamado "cwd".
El comando pwd muestra el cwd de la shell bash.
El comando cd cambia el cwd de la shell bash.
Los archivos se pueden reseñar tanto por referencias absolutas como por referencias
relativas.

El árbol invertido del sistema de archivos
El concepto de un sistema de archivos organizado en directorios es común en muchos
sistemas informáticos. A un archivo individual se le asigna un nombre (un nombre de
archivo), y los nombres de archivo se organizan en un directorio (denominado como
directorio en algunos sistemas operativos). Sin embargo, los directorios son en sí mismos
un tipo de archivo para que también puedan ser recopilados en otros directorios. Este
proceso puede continuar, nivel tras nivel, hasta crear un entorno altamente estructurado.
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.
Figure 1. Ejemplo de un árbol de directorios
-- html
|
website -- -- forms
|
|
|
|
|
|
|

-- song1.midi
|
-- songs -|
|
|
-- song2.midi
|
2

Filesystem basics
-- media -|
-- picture1.png
|
|
-- photos-|
-- picture2.png

De la apariencia de ramificaciones de este diagrama es de donde surge la idea de árbol de
directorios. Por lo general se dibuja con las ramas hacia abajo y con la raíz del árbol en la
parte superior (website en este caso) y por lo tanto, se le llama estructura de directorio de
árbol invertido.
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.
Figure 2. Árbol de directorios iniciando en /
-- bin...
|
/ -- -- etc...
|
|
-|
|
|
-- alice -|
|
|
|
|
-|
|
-- home -|
|
-|
|
|
|
-- elvis -|
|
|
-...

mystuff...

website...

docs...

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.
Exploración del árbol de directorios utilizando Nautilus
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.
Figure 1. Ventana Nautilus

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]

Figure 3. El navegador Nautilus

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".
Figure 4. Activación del panel lateral de Nautilus
4

Filesystem basics
La aplicación de panel lateral deNautilus se utiliza para diferentes propósitos. En este
momento, estamos interesados en explorar el árbol de directorios, así que seleccione
"árbol" en el panel lateral superior del menú.
Figure 5. Selección del panel lateral del árbol en Nautilus

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.
Figure 6. Exploración del árbol de directorios con 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.
Ahora que ha dedicado un poco de tiempo explorando el concepto de árbol de directorios y
la forma como se construyen las referencias absolutas a los directorios y los archivos,
hablaremos un poco sobre algunos de los conceptos relacionados con el sistema de archivos
de Linux.
El directorio de trabajo actual (cwd)
A cada proceso Linux (por ejemplo,un programa o un comando) cuando se ejecuta, se le
asigna un directorio por defecto. Este directorio por defecto se utiliza para completar el
FQN para cualquier archivo cuyo nombre no se especifique como un FQN. Esto tiene dos
efectos. Primero, le permite al proceso referirse a los archivos de una manera más sencilla
sin tener que utilizar nombres demasiado largos. Segundo, le permite al proceso operar con
mayor flexibilidad ya que sus acciones dependen en parte del directorio por defecto. Si
cambia el directorio por defecto, la acción del proceso también cambiará. A este directorio
por defecto se le conoce como el directorio actual de trabajo ó cwd, para el proceso.
5

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.
¿En dónde estoy? El comando pwd
Uno de los procesos que se encuentra en ejecución en un sistema de Linux es la shell de
comandos. Si usted inicia la sesión en el sistema a través de una terminal virtual, o inicia un
programa de terminal en X, verá el intérprete de comandos en donde puede introducir
comandos para que el sistema actúe. Este intérprete de comandos es producido por la shell
de comandos, el cual es el proceso responsable de la lectura e interpretación de comandos.
Por defecto, la shell de comandos para los sistemas de Red Hat Enterprise Linux es la shell
de comandos bash (del inglés Bourne-again shell).
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]$

El intérprete de comandos le recuerda que ha iniciado la sesión con el nombre de usuario
"alice" en la "estación," del computador y se encuentra en el directorio website. Pero
pueden haber otros directorios website en alguna otra parte del sistema. La ruta completa
(o absoluta) del directorio de trabajo actual se puede visualizar con el comando pwd (del
inglés print working directory).
Uso:
pwd
6

Filesystem basics
La usuaria alice quiere verificar si se encuentra en el directorio correcto. Podría utilizar
pwd.
[alice@station student]$ pwd
/home/alice/website

Cambio de sitio- El comando cd
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]

Si no se especifica, DIRECTORIO utiliza por defecto el directorio de inicio del usuario.
Considere la siguiente secuencia de comandos:
[alice@station website]$ pwd
/home/alice/website
[alice@station website]$ cd /home
[alice@station home]$ pwd
/home
[alice@station home]$ cd /home/alice/website/songs
[alice@station songs]$ pwd
/home/alice/website/songs

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:
Table 1. Nombres de directorios especiales
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
Segundo, el árbol de directorios se describe generalmente utilizando la analogía padre/hijo.
Si dir1 contiene a dir2, entonces se dice que dir2 es el directorio hijo de dir1 y que el
dir1 es eldirectorio padre del dir2. Por lo tanto, el directorio .. está a un nivel más cerca
de la raíz del árbol de lo que se encuentra el cwd. Después se le asigna un directorio de
inicio a cada cuenta de usuario, usualmente un subdirectorio de /home que coincide con su
nombre de usuario (este tema se explicará más detalladamente en el siguiente capítulo). El
directorio ~ representa ese directorio. Finalmente, la raya (-) es una opción especial del
comando cd que se refiere al directorio de trabajo anterior, facilitando el cambio entre
directorios hacia adelante y hacia atrás.
De nuevo, considere la siguiente secuencia de comandos:
[alice@station songs]$ pwd
/home/alice/website/songs
[alice@station songs]$ cd ~
[alice@station alice]$ pwd
/home/alice
[alice@station alice]$ cd [alice@station songs]$ pwd
/home/alice/website/songs
[alice@station songs]$ cd ..
[alice@station website]$ pwd
/home/alice/website
[alice@station website]$ cd
[alice@station alice]$ pwd
/home/alice

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.
Referencias absolutas y relativas
Esta sección describe dos maneras de identificar la ubicación de un archivo. En esta
sección, como casi en cualquier otra parte de estas lecciones, es importante recordar que en
Linux un directorio es un tipo de archivo, así que todo lo que se diga sobre nominación de
archivos, también aplica a directorios y a archivos comunes de datos.
Para identificar un archivo, se debe proporcionar suficiente información para localizar el
archivo dentro del sistema de archivos. Esta ubicación se puede proporcionar de dos
maneras: como referencia absoluta(o ruta absoluta) o como referenciarelativa.
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."
Table 1. Ejemplos de referencias relativas a /home/alice/sample.txt
cwd
/home/alice

Referencia relativa
sample.txt

o ./sample.txt

/home/alice/website/songs ../../sample.txt
/home/elvis/docs

../../alice/sample.txt

/home

alice/sample.txt

/home

../home/alice/website/../sample.txt

Sí, el último ejemplo es bastante tonto, pero es perfectamente válido.
Capítulo 2 Directorios importantes
Conceptos clave
•
•
•
•
•

A toda cuenta de usuario se le asigna un directorio de inicio.
El directorio /tmp se utiliza como espacio global para borradores.
Los directorios /bin y /usr/bin comúnmente contienen archivos ejecutables.
El directorio /etc contiene archivos de configuración del sistema.
El directorio de inicio de /root, no se debe confundir con el directorio raíz del
sistema de archivos, /.

Esquema estándar de directorios de Linux
9

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í:
Figure 1. Árbol parcial de directorios iniciando en /
-|
-|
-|
-/ --|
-|
-|
-|
--

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.
El directorio de inicio del usuario
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.
El propósito más obvio para el directorio de inicio de un usuario es brindar un espacio
privado para datos, un lugar en donde se pueden guardar archivos separados de los archivos
de otros usuarios. Normalmente, los usuarios son libres de crear subdirectorios bajo su
directorio de inicio y de organizar sus datos como les parezca (sujetos a las restricciones de
cuotas que deben haber). Dos usuarios diferentes pueden incluso asignar el mismo nombre
a archivos y directorios sin causar ningún conflicto ya que cada uno almacena en su propio
espacio. Por ejemplo, tanto Alice como Hogan pueden tener cada uno su subdirectorio
10

Filesystem basics
public_html,

/home/alice/public_html
y
/home/hogan/public_html
respectivamente. El mantener el espacio de cada uno separado de los otros, ofrece también
más seguridad a los usuarios.

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.
Normalmente se le da a los usuarios un control relativamente completo sobre sus
directorios de inicio mientras que se les restringe el acceso al resto del sistema. Por
ejemplo, hay una gran probabilidad de que alice no pueda modificar o borrar ningún
archivo de configuración en el directorio /etc aunque es posible que sí pueda leerlos.
Además, es muy probable que no pueda leer, modificar o borrar ninguno de los archivos en
los directorios de los usuarios 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.
El directorio temporal /tmp
Además de su espacio personal en sus directorios de inicio, se le da acceso a los usuarios
para compartir espacio de "borrador", en el directorio /tmp. Un programa que necesite
almacenar datos comprimidos puede almacenar resultados parciales en /tmp, sólo poniendo
los resultados finales en el directorio de inicio del usuario cuando haya terminado de
hacerlo. Con frecuencia los sistemas Linux implementan cuotas en cuentas de usuarios para
prevenir que cualquier usuario consuma una proporción injusta del espacio disponible. El
directorio /tmp le da a todos los usuarios acceso a espacio adicional para cumplir con
necesidades a corto plazo sin cargar el espacio en su cuota. Esto es especialmente
importante, ya que los usuarios no siempre son conscientes de cuánto espacio extra necesita
un servicio y algunos servicios (tal como X) no pueden ejecutar si no hay espacio temporal
disponible de almacenamiento. Este espacio de borrador "global" se encuentra disponible
para todos los procesos en el sistema así como para todos los usuarios. El sistema borra
automáticamente los archivos puestos en este directorio después de unos días.
El directorio de configuración /etc
Una de las características únicas de un sistema Linux es su flexibilidad. Prácticamente todo
aspecto del sistema puede configurarse de alguna forma editando un archivo de
11

Filesystem basics
configuración. Estos archivos de configuración normalmente se colocan en /etc o en un
subdirectorio de /etc. Por ejemplo, el programa sendmail, a menudo utilizado para
ejecutar un servidor de correo, utiliza los archivos de configuración que se colocan en
/etc/mail. Los scripts de arranque del sistema se encuentran en /etc/rc.d, mientras que
los archivos de configuración de la red se encuentran en /etc/sysconfig. Obviamente, los
usuarios comunes no pueden modificar los archivos en /etc (o incluso leerlos, en algunos
casos), pero los administradores de sistemas invierten bastante de su tiempo trabajando con
los archivos almacenados aquí.
Los directorios de comandos /bin y /usr/bin
La mayoría de los comandos del sistema se encuentran almacenados como archivos
binarios en un formato legíble para la máquina. Los comandos apropiados para el uso de
usuarios comunes se suelen ubicar en los directorios binarios /bin o /usr/bin. Las
utilidades más importantes como ls, cd, cp, mv y el editor de texto vi, sin los cuales no se
podría usar el sistema van en /bin. Las utilidades adicionales como los compiladores, su
navegador de web y la suite de oficina van en /usr/bin, los cuales se pueden poner a
disposición de otros sistemas a través de la red. Considere /bin y /usr/bin como
directorios de comandos no privilegiados ya que no se necesitan privilegios especiales para
utilizar los comandos que se encuentran en ellos.
Considere /bin y /usr/bin como directorios de archivos no privilegiados puesto que no se
requieren privilegios especiales para utilizar los comandos que se encuentran en ellos.
Los directorios de comandos /sbin y /usr/sbin
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.
El directorio "variable" /var
Las colecciones de comandos y de archivos de configuración que se encuentran en lugares
como /bin o /etc cambian muy poco día a día, si es que cambian del todo. Estos archivos
tienden a ser muy estables. Sin embargo, algunos archivos cambian con frecuencia. Estos
incluyen correo electrónico entrante y saliente, registros del sistema, sitios web, archivos
ftp y similares. Estos archivos y directorios con contenido variable suelen recopilarse en el
directorio /var. El colocar dichos archivos aquí hace más fácil asignarles espacio y
proteger los archivos más estables que se encuentran en alguna otra parte del sistema.
root vs./rootvs./ (la raíz del sistema de archivos)
12

Filesystem basics
Es un desafortunado accidente de la historia que el término raíz tenga un papel tan
importante y a la vez confuso en Linux. La raíz o el "root" en inglés, es el nombre de
usuario del superusuario, es decir, el usuario con autoridad suprema sobre el sistema.
También es el nombre del directorio de inicio de ese usuario, /root. Igualmente, es el
término que se utiliza para la base (¿la parte superior?) del árbol de directorios del sistema
de archivos, el directorio /. Normalmente, el significado del término se puede deducir del
contexto, pero una oración tal como el "directorio raíz" puede llegar a ser ambigua. Trate
de anticipar y de evitar tal confusión en su propia comunicación y busque aclaración si el
significado de la palabra no se puede deducir fácilmente del contexto.
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í.
Para crear un archivo, Alice utilizará el comando touch.
[alice@station alice]$ cd /tmp
[alice@station tmp]$ ls
orbit-alice
ssh-XXDg4ke3
[alice@station tmp]$ ls -l
total 8
drwx-----2 alice
alice
drwx-----2 alice
alice
[alice@station tmp]$ touch newfile
[alice@station tmp]$ ls -l
total 8
-rw-rw-r-1 alice
alice
drwx-----2 alice
alice
drwx-----2 alice
alice

4096 Mar 16 08:04 orbit-alice
4096 Mar 16 07:07 ssh-XXDg4ke3

0 Mar 16 14:14 newfile
4096 Mar 16 08:04 orbit-alice
4096 Mar 16 07:07 ssh-XXDg4ke3

Después de cambiar a /tmp, Alice usa ls y ls -l para ver el contenido del directorio
/tmp. Aunque ls -l produce un listado largo, ella no está segura y ve su nombre de
usuario tantas veces que se convence de que algunos programas que ejecutó dejaron
archivos en /tmp, como le habían dicho antes. De hecho, tanto orbit-alice como
ssh-XXDg4ke3 fueron colocados allí cuando ella inició su entorno de escritorio.
Alice utiliza el comando touch para crear un nuevo archivo vacío llamado newfile
en /tmp. Como muchos de los comandos Linux cuando touch lo logra, lo hace de
manera silenciosa (sin ningun aviso en la pantalla). Alice verifica que touch sí
funcionó con otro ls -l.
Búsqueda de comandos en /bin y /usr/bin
13

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.

[hogan@station hogan]$ which cp
/bin/cp
[hogan@station hogan]$ which mozilla
/usr/bin/mozilla
[hogan@station hogan]$ which cd
/usr/bin/which: no cd in
(/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/hoga
n/bin:)
[hogan@station hogan]$ which fdisk
/usr/bin/which: no fdisk in
(/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/h
ogan/bin:)
[hogan@station hogan]$ ls /sbin
...
ether-wake
ldconfig
portmap
extendfs
lilo
poweroff
fdisk
logdump
pppoe
vgcfgbackup
...

usbmodules
vboxd

Hogan ve que cp se encuentra en el directorio /bin, lo cual le parece posible ya que
los archivos en /bin son los archivos que los usuarios normales desearían que
siempre estuvieran presentes en el sistema.
Hogan encuentra mozilla (el navegador que escogió) en /usr/bin. Esto también
parece estar bien ya que los archivos en /usr/bin son archivos que un usuario
normal podría querer que no siempre estuviesen disponibles.
Hogan está sorprendido de los resultados de cd, lo cual parece decir que el comando
cd no está en el sistema. Estaba esperando ver una respuesta como /bin/cd. (¿Por
qué?) Lo que Hogan no sabe es que cd es un ejemplo de un comando interno,
provisto por el comando de la shell bash. Por otro lado, si revisara, encontraría bash
14

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
Exploración de directorios importantes
Lab Exercise
Objetivo: Explore algunas de las características de los directorios importantes
discutidas en este capítulo.
Tiempo estimado: 15 minutos.
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.
c.
d.

~
/tmp
/bin
/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

1. Dos archivos llamados ~/newfile.username y /tmp/newfile.username, en
donde username es su nombre de cuenta primaria.
2. Un archivo ~/.bash_history que contiene un registro de sus comandos.

Possible Solution
La siguiente secuencia de comandos demuestra el uso de which y touch, y la ejecución de
un comando utilizando su referencia absoluta.
[student@station student]$ touch /tmp/newfile.student
[student@station student]$ which pwd
/bin/pwd
[student@station student]$ /bin/pwd
/home/student

Capítulo 3 Administración de archivos
Conceptos clave
•
•
•
•
•

Se pueden crear archivos (o agregar) de una manera fácil utilizando el
redireccionamiento de la shell.
El comando cp copia archivos.
El comando mv mueve archivos.
El comando rm borra archivos.
Los archivos pueden ser "sobrescritos" como resultado de redireccionar, mover o
copiar.
16

Filesystem basics
Redirección
Muchos de los comandos producen salidas “visibles”. Normalmente, la salida se mostrará
en la pantalla. Por ejemplo, observe la salida de pwd para Julius:
[julius@station julius]$ pwd
/home/julius
[julius@station julius]$

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:
cat

[OPCIONES] [ARCHIVO...]

ConcatenarARCHIVO(s) a la salida estándar.
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.
[julius@station julius]$ pwd > results.txt
[julius@station julius]$ ls
results.txt
[julius@station julius]$ cat results.txt
/home/julius

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
Si el archivo ya existe, el redireccionamiento borrará y re-creará el archivo vacío y luego
capturará la nueva salida. Sin embargo, si se utiliza un doble símbolo (>>) la nueva salida
se añadirá al archivo. Si se utiliza >> y el archivo destino no existe, éste se crea como si se
hubiese utilizado >. El símbolo > es un ejemplo de un meta-caracter de shell, es decir, un
símbolo con significado especial que la shell bash ve e interpreta antes de actuar sobre el
resto del comando. Hay muchos de éstos como veremos en las próximas lecciones y todos
requieren atención.
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:
echo

[OPCIONES] [STRING...]

Repite la cadena de caracteres en la salida estándar.
Example 1:
[julius@station julius]$ echo Hello > greetings.txt
[julius@station julius]$ echo How are you >> greetings.txt
[julius@station julius]$ cat greetings.txt
Hello
How are you

Ejemplo 2:
[julius@station
[julius@station
[julius@station
/home/julius
[julius@station
[julius@station
/home/julius
results.txt

julius]$ ls
julius]$ pwd > results.txt
julius]$ cat results.txt
julius]$ ls >> results.txt
julius]$ cat results.txt

Copie archivos con cp
Se pueden crear duplicados de archivos con el comando cp (del inglés copy).
Uso:
cp

[OPCIONES] {FUENTE} {DESTINO}

cp

[OPCIONES] {FUENTE...} {DIRECTORIO}
18

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:
1. Haga una copia de mysong.midi y nombre la copia backup.midi:
cp

mysong.midi backup.midi

2. Haga una copia de mynovel.txt en /tmp:
cp

mynovel.txt /tmp

El archivo resultante se llamará /tmp/mynovel.txt.
3. Copie los archivos songs.tar y novels.tgz en el directorio /tmp:
cp

songs.tar novels.tgz /tmp

Nombre los archivos resultantes /tmp/songs.tar y /tmp/novels.tgz.
4. Haga una copia de webpage.html desde su directorio de inicio a su directorio
actual:
cp

~/webpage.html .

El archivo resultante se llamará ./webpage.html.
Mueva/renombre archivos con mv
Puede mover archivos de un directorio a otro o de un nombre a otro (renombrarlos) con el
comando mv (mover).
Uso:
mv

[OPCION...] {FUENTE} {DESTINO}

mv

[OPCION...] {FUENTE...} {DIRECTORIO}

. En la primera forma, el archivo FUENTE es renombrado como DESTINO. De la segunda
forma, uno o más archivos pueden ser movidos a un directorio al mismo tiempo. Los
19

Filesystem basics
archivos FUENTE, ..., se mueven al DIRECTORIO y se nombran DIRECTORIO/FUENTE, ....
FUENTE puede ser un directorio, en tal caso el directorio se mueove o se renombra.
El comando mv es particularmente interesante , pues la manera en que funciona encierra un
hecho crítico sobre los sistemas de archivos Linux: Linux trata el nombre de archivo como
algo completamente diferente del contenido del archivo. Aunque el comando mv proviene
de la palabra "mover," de hecho mv raras veces mueve datos. En su lugar, el sistema de
archivos simplemente graba un cambio de nombre. Si el nombre cambia de
/somedir/somefile a /somedir/newname, vemos esto como una "renombramiento" del
archivo. Si el nombre cambia de /somedir/somefile a /newdir/somename, vemos esto
como "mover" el archivo. Si el nombre cambia de /somedir/somefile a
/newdir/newname, vemos esto como un cambio doble, mover y renombrar. Pero para
Linux todos estos son la misma cosa, un cambio en el FQN del archivo.
Ejemplos:
1. Renombre mysong.midi como backup.midi:
mv

mysong.midi backup.midi

2. Mueva mynovel.txt a /tmp:
mv

mynovel.txt /tmp

El archivo resultante se llamará /tmp/mynovel.txt.
3. Mueva songs.tar y novels.tgz a /tmp:
mv

songs.tar novels.tgz /tmp

Nombre los archivos resultantes /tmp/songs.tar y /tmp/novels.tgz.
4. Mueva webpage.html de su directorio de inicio al directorio de trabajo actual:
mv

~/webpage.html .

El archivo resultante se llamará ./webpage.html.
5. Renombre el subdirectorio html del directorio actual de trabajo a public_html:
mv

html public_html

Renombra ./html como ./public_html, asumiendo que ./public_html no existe
de antemano - vea el siguiente ejemplo.
20

Filesystem basics
6. Su cwd es su directorio de inicio. Tiene dos subdirectorios ~/images y ~/html.
Mueva el directorio images al directorio html:
mv

images html

El directorio resultante se llamará ~/html/images. Observe la similitud entre este
ejemplo y el anterior. La diferencia crítica es que en este caso el directorio destino
~/html ya existía, asi que mv movió el directorio fuente dentro (bajo) el directorio
destino. En el ejemplo anterior, el directorio destino no existía aún, así que mv
renombró el directorio fuente con el nuevo nombre.
Suprima (borre) archivos con rm
Se pueden suprimir (eliminar, borrar) archivos con el comando rm (remover).
Uso:
rm

[OPCIONES] {ARCHIVO...}

Suprime el (los) ARCHIVO(s) del sistema de archivos. Técnicamente, desenlaza el (los)
ARCHIVO(s), una diferencia que se aclarará más adelante. Con las opciones apropiadas (no
discutidas aquí - intente ejecutar man rm) se pueden borrar árboles de subdirectorios de
una sola vez.
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
2. Borre songs.tar y novels.tgz:
rm

songs.tar novels.tgz

3. Borre photos.html de su directorio de inicio:
rm

~/photos.html

Sobrescribir archivos (¡uy!)
Algunas de las advertencias incluídas en la sección anterior insinúan algunos de los
comandos potencialmente peligrosos como cp, mv y rm. Infortunadamente, aunque por lo
general, mientras vemos pasar las corrientes del rio, con frecuencia olvidamos las rocas que
se encuentran bajo el agua y Linux también es el mismo caso. Este es el precio que hay que
pagar por el poder de un sistema operativo como Linux. En esta sección resaltamos uno de
esos peligros: sobrescribir archivos.
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:
[julius@station
[julius@station
/home/julius
[julius@station
[julius@station
mycwd

julius]$ pwd > file1
julius]$ cat file1
julius]$ ls > file1
julius]$ cat file1

Aquí no hay muchas sorpresas si ha puesto atención -- simplemente observe la manera en
que la segunda redirección remplazó el contenido anterior de file1 sin ningún mensaje de
advertencia. El archivo file1 se ha sobrescrito.
Ejemplo 4:
[julius@station
[julius@station
file1
[julius@station
[julius@station
file1 file2
[julius@station
/home/julius

julius]$ touch file1
julius]$ ls
julius]$ pwd > file2
julius]$ ls
julius]$ cat file2
22

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:
[julius@station
[julius@station
file1
[julius@station
[julius@station
file1 file2
[julius@station
file1 file2

julius]$ touch file1
julius]$ ls
julius]$ ls > file2
julius]$ ls
julius]$ cat file2

¿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:
[julius@station julius]$ pwd > mycwd
[julius@station julius]$ cat mycwd
/home/julius
[julius@station julius]$ cp mycwd mycwd
cp: `mycwd' and `mycwd' are the same file
[julius@station julius]$ cat mycwd
/home/julius
[julius@station julius]$ cat mycwd > mycwd
cat: mycwd: input file is output file
[julius@station julius]$ cat mycwd
[julius@station julius]$

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.
Existen algunas pocas opciones de comandos y características especiales de la shell de
comando que se pueden utilizar para mitigar este comportamiento de alguna manera, pero
el objetivo de este capítulo simplemente es aprender cómo funcionan estos comandos y en
esta sección específicamente, la manera como funcionan en archivos existentes. Esta es una
característica no un error que necesario entender y utilizar de manera correcta.
Ejemplos
Mover/Archivar un sitio web simple
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.
Mover un sitio web simple
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
directorio de inicio y deben estar en ~/public_html. Necesita mover los archivos al
directorio correcto. Su problema es más complicado que el de Madonna, puesto que no
puede renombrar un subdirectorio simplemente. El directorio public_html fue creado por
su ISP.
[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 nota un archivo en su directorio ~/public_html que no reconoce, un archivo llamado
robots.txt. Decide borrarlo.
[elvis@station elvis]$
public_html
[elvis@station elvis]$
index.html robots.txt
[elvis@station elvis]$
[elvis@station elvis]$
index.html

ls
ls public_html
rm public_html/robots.txt
ls public_html

Ejercicios en línea
Crear un sitio web
Lab Exercise
Objetivo: Utilizar la redirección, cp y mv para crear un sitio web simple y archivar el
sitio web.
Tiempo estimado: 15 minutos.
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.
1.
2.
3.
4.

Cree una página web "en construcción" en ~/index.html.
Mueva este archivo a ~/html.
Renombre el directorio html como public_html.
Haga una copia de su archivo index.html en ~/archive.

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

1. Dos archivos ~/public_html/index.html y ~/archive/index.html, cada uno de
los cuales tiene un contenido idéntico (el texto "en construcción" posiblemente con
una etiqueta HTML).

Possible Solution
The following sequence of commands provides one possible solution to this exercise.
[student@station
[student@station
[student@station
[student@station
[student@station
[student@station
[student@station
[student@station
index.html
[student@station
index.html

student]$
student]$
student]$
student]$
student]$
student]$
student]$
student]$

mkdir html archive
echo '<h1>' > index.html
echo 'Under construction' >> index.html
echo '</h1>' >> index.html
mv index.html html
mv html public_html
cp public_html/index.html archive
ls public_html

student]$ ls archive

Investigar la opción "noclobber"
26

Filesystem basics
Lab Exercise
Objetivo: Investigar las consecuencias de la opción bash "noclobber".
Estimated Time: 10 mins.
Especificaciones
Desea investigar las consecuencias del sobrescribir archivos y de la opción bash
"noclobber".
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

1. Un archivo ~/.bash_history que tiene el récord de sus opciones de activación y
desactivación de la opción noclobber.

Possible Solution
The following sequence of commands provides one possible solution to this exercise.
[student@station student]$ echo source > source
[student@station student]$ echo target > target
[student@station student]$ cp source target
[student@station student]$ cat target
source
27

Filesystem basics
[student@station
[student@station
[student@station
source
[student@station

student]$ echo target > target
student]$ cat source > target
student]$ cat target
student]$ echo target > target

[student@station student]$ set -o noclobber
[student@station student]$ cp source target
[student@station student]$ cat target
source
[student@station student]$ echo target > target
[student@station student]$ cat source > target
-bash: target: cannot overwrite existing file
[student@station student]$ set +o noclobber
[student@station student]$ exit

Capítulo 4 Administración de directorios
Conceptos clave
•
•
•
•
•

Se puede examinar el contenido de árboles de directorios completos con el comando
ls -R.
El comando mkdir crea directorios.
El comando rmdir borra directorios (vacíos).
cp -r copia directorios recursivamente.
rm -r suprime directorios recursivamente.

Creación de directorios (nuevos, vacíos): mkdir
La organización de archivos dentro de directorios requiere la habilidad para crear los
directorios que necesita. En Linux, el comando para hacer un directorio nuevo es el
comando mkdir (del inglés make directory).
Uso:
mkdir

[OPCIONES] {DIRECTORIO...}

Crea el(los) DIRECTORIO(s) si no existe(n). Falla y emite un mensaje de error si uno o
más de los DIRECTORIO(s) existen, pero los nuevos directorios restantes son aún creados.
Para crear un subdirectorio ~/public_html Elvis puede proceder así:
[elvis@station elvis]$ ls
[elvis@station elvis]$ mkdir public_html
28

Filesystem basics
[elvis@station elvis]$ ls
public_html

Después Elvis puede crear un subdirectorio de public_html:
[elvis@station elvis] ls public_html
[elvis@station elvis] mkdir public_html/images
[elvis@station elvis] ls public_html
images

Sin embargo, observe que por defecto, mkdir no creará un subdirectorio si el directorio
padre no existe de antemano:
[elvis@station elvis] ls work
ls: work: No such file or directory
[elvis@station elvis] mkdir work/spreadsheets
mkdir: cannot create directory `work/spreadsheets': No such file or
directory

Sólo si Elvis utiliza mkdir -p (como 'padre') puede crear un árbol de directorios completo
de una sola vez:
[elvis@station elvis] ls work
ls: work: No such file or directory
[elvis@station elvis] mkdir -p work/spreadsheets
[elvis@station elvis] mkdir -p work/images/logos
[elvis@station elvis] mkdir -p work/images/advertising
[elvis@station elvis] ls work
images spreadsheets
[elvis@station elvis] ls work/images
advertising logos

Listado de árboles de directorios
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.
Cuando un comando se repite a través de una estructura, operando en cada elemento de la
estructura de la misma manera que en el elemento superior, se dice que el comando actúa
de modo recursivo. La opción -R especifica que el comando ls debería listar con recursion.
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.
Borrar directorios (vacíos): rmdir
El comando para borrar un directorio es rmdir. (remover directorio).
Uso:
rmdir

[OPCIONES] {DIRECTORIO...}

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.
Para borrar su subdirectorio ~/public_html/images Elvis puede proceder así:
[elvis@station
public_html
[elvis@station
[elvis@station
[elvis@station

elvis]$ ls
elvis]$ rmdir public_html/images
elvis]$ ls
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.
Listado de árboles de directorios
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.
Cuando un comando se repite a través de una estructura, operando en cada elemento de la
estructura de la misma manera que en el elemento superior, se dice que el comando actúa
de modo recursivo. La opción -R especifica que el comando ls debería listar con recursion.
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.
[elvis@station elvis]$ ls -R work
work/:
images spreadsheets
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.
Copiar árboles de directorios: cp -r
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).
Considere la siguiente estructura en el directorio de inicio de Hogan:
Figure 1. Estructura del directorio antes de copiar
-- html
|
31

Filesystem basics
hogan -- website -- -- forms
|
|
-|
|
|
-- songs -|
|
|
|
|
-|
|
-- media -|
-|
|
-- photos-|
--

song1.midi

song2.midi

picture1.png

picture2.png

Aunque este árbol de directorios contiene muchas ramas y archivos, se puede copiar con
una sóla orden:
[hogan@station hogan]$ cp -r website archive

Figure 2. Estructura del directorio después de copiar
-- html
|
-- website -- -- forms
|
|
|
|
-|
|
|
|
|
-- songs -|
|
|
|
|
|
|
-|
|
|
|
-- media -|
|
-|
|
|
hogan --- photos-|
|
|
-|
|
-- html
|
|
-- archive -- -- forms
|
|
-|
|
|
-- songs -|
|
|
|
|
-|
|
-- media -|
-|
|
-- photos--

song1.midi

song2.midi

picture1.png

picture2.png

song1.midi

song2.midi

picture1.png
32

Filesystem basics
|
-- picture2.png

Recuerde la diferencia en el comportamiento de cp cuando el último argumento es un
directorio existente: se hace una copia del (los) archivo(s) fuente(s) dentro del directorio
destino. En la demostración anterior el directorio archive no existía previamente así que
fue creado. Pero si el directorio archive ya hubiese existido el efecto hubiera sido
diferente.
Figure 3. Estructura del directorio antes de copiar
-- html
|
-- website -- -- forms
|
|
|
|
-|
|
|
|
|
-- songs -|
|
|
|
|
|
|
-hogan -|
|
|
-- media -|
|
-|
|
|
|
-- photos-|
|
|
--- archive

song1.midi

song2.midi

picture1.png

picture2.png

Hogan usa exactamente el mismo comando que antes para copiar:
[hogan@station hogan]$ cp -r website archive

Figure 4. Estructura del directorio después de copiar con cp -r websitearchive
-- html
|
-- website -- -- forms
|
|
|
|
-|
|
|
|
|
-- songs -|
|
|
|
|
|
|
-|
|
|
|
-- media -|
|
-|
|
|
hogan --- photos-|
|
|
--

song1.midi

song2.midi

picture1.png

picture2.png
33

Filesystem basics
|
|
|

-- html
|
-- archive -- website -- -- forms
|
|
-|
|
|
-- songs -|
|
|
|
|
-|
|
-- media -|
-|
|
-- photos-|
--

song1.midi

song2.midi

picture1.png

picture2.png

En esta segunda demonstración, el directorio website es recreado dentro del directorio
archive.
Borrar árboles de directorios: rm -r
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).
Considere la siguiente estructura en el directorio de inicio de Hogan:
Figure 1. Estructura del directorio antes de borrarlo
-- html
|
hogan -- website -- -- forms
|
|
-|
|
|
-- songs -|
|
|
|
|
-|
|
-- media -|
-|
|
-- photos-|
--

song1.midi

song2.midi

picture1.png

picture2.png

Si Hogan quisiera borrar el sub-árbol media, podría utilizar un sólo comando:
[hogan@station hogan]$ rm -r website/media
34

Filesystem basics
Figure 2. Estructura del directorio después de borrar
-- 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
Hacer una copia de seguridad de un árbol de directorios
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.
[hogan@station hogan]$ cp report report.bak
cp: omitting directory `report'

Al darse cuenta de su error añade la opción -r para decirle al comando cp que copie de
modo recursivo.
[hogan@station hogan]$ cp -r report report.bak

Ahora el contenido del directorio report es copiado de modo recursivo al directorio
report.bak.
35

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.
[hogan@station hogan]$ rmdir report.bak/
rmdir: `report.bak/': Directory not empty

Recuerde que rmdir sólo funciona en directorios vacíos así que en su lugar utiliza rm -r.
[hogan@station hogan]$ rm -r report.bak/
[hogan@station hogan]$ ls
report

Creación de una copia local de los archivos de ejemplo
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

examples/glade:
glade-demo.py README

README

test.glade

examples/gobject:
properties.py signal.py
examples/ide:
break.xpm
edit.py
browse.py
edit.xpm
...

gtkdb.py
gtkprof.py

next.xpm
pyide.py

README
return.xpm

step.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.
Tiempo estimado: 20 minutos.
Especificaciones
Se le ha despertado el interés en gdm, una aplicación que proporciona la pantalla de inicio
de sesión gráfica de su sistema y desea explorar su diseño.
37

Filesystem basics
1. Utilice el comando ls (con las opciones apropiadas) para obtener un listado
recursivo, incluyendo tamaños (-s) del contenido del directorio /usr/share/gdm.
Redireccione la salida del comando a un archivo en su directorio de inicio llamado
lsgdm.txt (debido a propósitos evaluativos es importante que especifique el
directorio como una referencia absoluta, por ejemplo, no share/gdm).
2. Haga un copia (recursiva) del directorio /usr/share/gdm en su directorio de inicio.
El directorio copiado también se debe llamar gdm.
3. Haga una segunda copia del directorio recién creado en su directorio de inicio. gdm,
llamado gdm.bak.
4. Desde su copia de seguridad, suprima (de modo recursivo) el subdirectorio
gdm.bak/themes/circles.
5. De nuevo desde su copia de seguridad, mueva el subdirectorio
gdm.bak/themes/Bluecurve a su directorio de inicio (el directorio todavía se debe
llamar Bluecurve).
Deliverables
Question 1

1. Un archivo en su directorio de inicio llamado lsgdm.txt, el cual contiene la salida
redireccionada de un listado recursivo, inclyendo el tamaño del directorio
/usr/share/gdm.
2. Un directorio en su directorio de inicio llamado gdm, el cual es una copia exacta del
directorio /usr/share/gdm.
3. Un directorio en su directorio de inicio llamado gdm.bak, el cual es una copia
exacta del directorio gdm, con el subdirectorio gdm.bak/themes/circles borrado y
con el subdirectorio gdm.bak/themes/Bluecurve/ movido a su directorio de
inicio.
4. Un directorio en su directorio de inicio llamado Bluecurve, el cual es el resultado
del resultado anterior.

Limpieza
Los directorios creados son bastante grandes, así que si quiere conservar espacio de disco
puede borrarlos cuando haya terminado.
Capítulo 5 Nombres y comodines de archivos
Conceptos clave
38

Filesystem basics
•
•
•
•

Los nombres de archivos pueden contener casi cualquier caracter a excepción de /.
Aunque los nombres de archivos pueden contener casi cualquier caracter eso no
significa que deban contenerlos.
Los archivos que comienzan con . son archivos "ocultos".
Los caracteres *, ?, [...], y [^...] se pueden utilizar para encontrar los archivos con
nombres de archivos similares por medio de un proceso llamado "comodines de
archivo".

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.
Los nombres de archivos de Linux pueden contener cualquier caracter imprimible (y
algunos que no lo son) a excepción de la barra oblicua /. Esta barra no puede ser parte del
nombre de archivo, puesto que es el caracter utilizado para separar los componentes del
nombre de un directorio en un nombre relativo o completamente calificado. Como la
mayoría de los caracteres "inusuales" son meta-caracteres de shell, deben estar protegidos
entre comillas para poderlos utilizar en un nombre de archivo:
[julius@station julius]$ touch
[julius@station julius]$ touch
[julius@station julius]$ touch
[julius@station julius]$ touch
[julius@station julius]$ ls
!@#$%^&*()_+=-|}]{[:;?>.<,~`
[julius@station julius]$

'a and b'
'"'
"'"
'!@#$%^&*()_+=-|}]{[:;?>.<,~`'
'

"

a and b

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.
Figure 1. Caracteres "seguros" para nombres de archivos
A-Z a-z 0-9 . _ - + ~

Aquí hay dos ejemplos que le mostrarán el daño que puede causar el uso de caracteres nosignificativos. Vamos a abusar de dos meta-caracteres de shell: el espacio y el signo mayor
que.
Ejemplo 1: ¡Tenga cuidado con esos espacios!

[hogan@station hogan]$ mkdir bad dir
[hogan@station hogan]$ touch this and that
[hogan@station hogan]$ mv this and that bad dir
[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.
Ejemplo 2: Una pequeña equivocación de dirección
40

Filesystem basics

[hogan@station hogan]$ mkdir bad- > dir
[hogan@station hogan]$ touch this
[hogan@station hogan]$ mv this bad- > dir
[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
Los nombres de archivos y directorios (recuerde un directorio es un tipo de archivo) que
comienzan por un punto son archivos "ocultos". Estos archivos no aparecen en los listados
de directorio producidos por ls a menos que se utilice la opción de comando especial -a (del
inglés all) o a menos que se especifique el punto inicial como parte del nombre. Se hace
posible reducir la aglomeración de elementos y la confusión manteniendo ciertos archivos"
fuera de vista y de consideración".
En la próxima sección aprenderemos a nombrar múltiples archivos por medio de una
técnica conocida como uso de "comodines". En general, los archivos ocultos tampoco
aparecen en un "comodín" a no ser que el punto inicial sea listado específicamente.
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.
[alice@station alice]$ mkdir .secret
[alice@station alice]$ touch sample
[alice@station alice]$ ls
41

Filesystem basics
sample
[alice@station
. .. sample
[alice@station
[alice@station
[alice@station
sample
[alice@station
[alice@station
sample
[alice@station

alice]$
.secret
alice]$
alice]$
alice]$

ls -a
mv sample .secret
ls
ls .secret

alice]$ cd .secret
.secret]$ ls
.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.
El comodín de parentesis representa una lista de caracteres individuales. Por lo tanto,
[aeiou] coincide con cualquier vocal. Un rango contiguo de caracteres se puede
representar utilizando un guión como en [a-z] para el alfabeto en minúsculas. Una ^
inicial, niega la lista de manera que [^aeiou] sea cualquier caracter menos una vocal. Un
guión "real" se puede representar escapando los caracteres utilizando una barra invertida ()
(más adelante se abordará este tema). Por lo tanto, la expresión [a-z] coincide con a, z o
un guión sólamente. Se pueden mezclar caracteres individuales y rangos. El patrón [A-Zaz0-9._-+~] coincide con cualquiera de los caracteres "seguros" de nombres de archivos
mencionados anteriormente en la gráfica 5-1.
42

Filesystem basics
Suponga que el directorio actual contiene los siguientes archivos:
image1.jpg
image2.jpg

image10.jpeg
image11.jpeg

page1.html
page2.html

page3.htm
page40.htm

script1.pl

La siguiente tabla ilustra el uso de estos comodines.
Table 2. Ejemplos de comodines
Patrón

Genera la lista

*

todos los archivos en la lista

*.html

page1.html page2.html

page*.htm* page1.html page2.html page3.htm page40.htm
image?.*

image1.jpeg image2.jpeg

[ps]*

page1.html page2.html page3.htm page40.htm script1.pl

[^ps]*

image1.jpeg image2.jpeg image10.jpeg image11.jpeg

Los comodines se pueden utilizar con cualquier comando que espera el nombre de un
archivo. Por ejemplo, el comando
[bob@station bob] mv *.htm public_html

es lo mismo que el comando
[bob@station bob] mv page3.htm page40.htm public_html

asumiendo que el directorio de inicio de Bob contiene los archivos listados anteriormente.
[Nota técnica: muchos de los comandos se comportan de manera diferente cuando no
aparecen archivos en la lista, contrario a cuando uno o más archivos se dan como parte del
comando. Entonces, ¿qué sucede en dicho comando si se utiliza un patron de comodín de
modo que el listado de archivos esté vacío? En el caso especial donde la shell bash intenta
expandir una expresión de comodín y no coincide con nada, ésta deja la expresión como
parte del comando. Esto se ilustra a continuación:
[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
Búsqueda de ese archivo de configuración
Alice estaba revisando recientemente el archivo de configuración del DNS (Servicio de
Nombres de Dominio), pero olvidó el nombre. Recuerda que el archivo terminaba en
.conf. Con el fin de reducir el número de archivos a tomar en consideración, utilizó los
comodines para listar todos los archivos en el directorio /etc terminados en .conf.
[alice@station images]$ ls /etc/*.conf
/etc/aep.conf
/etc/lftp.conf
/etc/aeplog.conf
/etc/libuser.conf
/etc/cdrecord.conf /etc/logrotate.conf
/etc/esd.conf
/etc/lpd.conf
/etc/fam.conf
/etc/ltrace.conf
/etc/gpm-root.conf /etc/modprobe.conf
/etc/grub.conf
/etc/mtools.conf
/etc/host.conf
/etc/named.conf
/etc/initlog.conf
/etc/nscd.conf
/etc/jwhois.conf
/etc/nsswitch.conf
/etc/krb5.conf
/etc/ntp.conf
/etc/krb.conf
/etc/pam_smb.conf
/etc/ldap.conf
/etc/pbm2ppa.conf
/etc/ld.so.conf
/etc/pine.conf

/etc/pnm2ppa.conf
/etc/pwdb.conf
/etc/resolv.conf
/etc/rndc.conf
/etc/scrollkeeper.conf
/etc/sysctl.conf
/etc/syslog.conf
/etc/updatedb.conf
/etc/updfstab.conf
/etc/warnquota.conf
/etc/webalizer.conf
/etc/wvdial.conf
/etc/xinetd.conf
/etc/yp.conf

Mirando un poco más reconoce el archivo de configuración resolv.conf.
Listado de bibliotecas estáticas
Bob ha estado aprendiendo la diferencia entre bibliotecas enlazadas estáticamente y
dinámicamente que los programas utilizan. El sabe que las bibliotecas enlazadas estática y
convencionalmente tienen el nombre de libalgo.a, en donde algo es el nombre de la
biblioteca. También sabe que las bibliotecas se encuentran por lo general en el directorio
/usr/lib.
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.
[bob@station bob]$ ls /usr/lib/*a
/usr/lib/liba2ps.a
/usr/lib/libimlib-ps.a
/usr/lib/libacl.a
/usr/lib/libimlib-tiff.a
/usr/lib/libanl.a
/usr/lib/libimlib-xpm.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.
[bob@station bob]$ ls /usr/lib/lib*.a
/usr/lib/liba2ps.a
/usr/lib/libimlib-ps.a
/usr/lib/libacl.a
/usr/lib/libimlib-tiff.a
/usr/lib/libanl.a
/usr/lib/libimlib-xpm.a
...
/usr/lib/libimlib-jpeg.a
/usr/lib/libimlib-png.a
/usr/lib/libimlib-ppm.a

/usr/lib/libz.a
/usr/lib/libzvt.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.
[bob@station bob]$ ls /usr/lib/lib?.a
/usr/lib/libc.a /usr/lib/libl.a /usr/lib/libz.a
/usr/lib/libg.a /usr/lib/libm.a
[bob@station bob]$ ls /usr/lib/lib??.a
/usr/lib/libdl.a /usr/lib/libgd.a /usr/lib/librt.a
/usr/lib/libfl.a /usr/lib/libmp.a
[bob@station bob]$ ls /usr/lib/lib???.a
/usr/lib/libacl.a /usr/lib/libgdk.a /usr/lib/libosp.a
/usr/lib/librle.a
/usr/lib/libanl.a /usr/lib/libgif.a /usr/lib/libpam.a
/usr/lib/librpm.a
/usr/lib/libapm.a /usr/lib/libgmp.a /usr/lib/libpbm.a
/usr/lib/libSDL.a
/usr/lib/libbfd.a /usr/lib/libgpm.a /usr/lib/libpci.a
/usr/lib/libssl.a
/usr/lib/libbsd.a /usr/lib/libgtk.a /usr/lib/libpgm.a
/usr/lib/libttf.a
/usr/lib/libefs.a /usr/lib/libIDL.a /usr/lib/libpng.a
/usr/lib/libusb.a
/usr/lib/libesd.a /usr/lib/libnsl.a /usr/lib/libpnm.a
/usr/lib/libxml.a
/usr/lib/libgal.a /usr/lib/libogg.a /usr/lib/libppm.a
/usr/lib/libzvt.a

¿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?
Listado de las páginas man
45

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.
[alice@station man]$ ls /usr/share/man/
cs de_DE fr
hu it man1 man3 man5
de es
fr_FR id ja man2 man4 man6

man7
man8

man9
mann

pl
pt_BR

ru
sk

sv

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.
[alice@station man]$ ls /usr/share/man/man[157]
/usr/share/man/man1:
:.1.gz
pbmtolj.1.gz
[.1.gz
pbmtoln03.1.gz
411toppm.1.gz
pbmtolps.1.gz
a2p.1.gz
pbmtomacp.1.gz
...
groff.7.gz
groff_char.7.gz
groff_diff.7.gz

wireless.7.gz
x25.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.
[alice@station man]$ ls /usr/share/man/man[1-9]
/usr/share/man/man1:
:.1.gz
pbmtolj.1.gz
[.1.gz
pbmtoln03.1.gz
411toppm.1.gz
pbmtolps.1.gz
a2p.1.gz
pbmtomacp.1.gz
...
named-checkconf.8.gz
named-checkzone.8.gz

zic.8.gz

/usr/share/man/man9:

Ejercicios en línea
Administración de archivos con comodines
Lab Exercise
Objetivo: Administrar archivos de modo eficiente por medio del uso de comodines
46

Filesystem basics
de archivo.
Tiempo estimado: 20 minutos.
Especificaciones
Este laboratorio utilizará comodines de archivo para administrar un gran número de
archivos que tienen nombres vagamente estructurados. Todos los archivos se encuentran en
el directorio /usr/share/tcl8.4/encoding.
1. Cree los siguientes directorios en su directorio de inicio: cp_even, cp_mid,
cp_thousand, iso_mid, mac y xxxn.
2. Examine los archivos en el directorio /usr/share/tcl8.3/encoding. Copie todos
los archivos que comienzan con mac en el directorio mac.
3. Copie todos los archivos que comienzan con cp y que tengan un número par en el
directorio cp_even.
4. Copie todos los archivos que comienzan con cp y que tengan un número mayor a
1000 en el directorio cp_thousand.
5. Copie todos los archivos que comienzan con cp y que tengan un número mayor a
800, pero menor que 1000 en el directorio cp_mid.
6. Copie todos los archivos que comienzan con iso8859- y que tengan un número
después del guión entre 3 y 8 (inclusive) en el directorio iso_mid.
7. Copie todos los archivos cuyos primeros cuatro caracteres estén compuestos de
exactamente tres letras seguidas por un número dentro del directorio xxxn.
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
cp1252.enc cp1258.enc cp860.enc
cp1254.enc cp850.enc
cp862.enc
cp_mid:
cp850.enc
cp852.enc
cp855.enc

cp857.enc
cp860.enc
cp861.enc

cp_thousand:
cp1250.enc cp1252.enc

cp862.enc
cp863.enc
cp864.enc

cp864.enc
cp866.enc
cp874.enc

cp865.enc
cp866.enc
cp869.enc

cp1254.enc

cp932.enc
cp936.enc
cp950.enc

cp874.enc
cp932.enc
cp936.enc

cp1256.enc

cp949.enc
cp950.enc

cp1258.enc
47

Filesystem basics
cp1251.enc

cp1253.enc

iso_mid:
iso8859-3.enc
iso8859-4.enc
mac:
macCentEuro.enc
macCroatian.enc
macCyrillic.enc
xxxn:
big5.enc
iso2022.enc
iso2022-jp.enc
iso2022-kr.enc
iso8859-10.enc

cp1255.enc

iso8859-5.enc
iso8859-6.enc

iso8859-7.enc
iso8859-8.enc

macDingbats.enc
macGreek.enc
macIceland.enc

iso8859-13.enc
iso8859-14.enc
iso8859-15.enc
iso8859-16.enc
iso8859-1.enc

cp1257.enc

macJapan.enc
macRoman.enc
macRomania.enc

iso8859-2.enc
iso8859-3.enc
iso8859-4.enc
iso8859-5.enc
iso8859-6.enc

macThai.enc
macTurkish.enc
macUkraine.enc

iso8859-7.enc
iso8859-8.enc
iso8859-9.enc
jis0201.enc
jis0208.enc

jis0212.enc
koi8-r.enc
koi8-u.enc
ksc5601.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).
[bob@station bob]$ cp /usr/share/tcl8.3/encoding/mac* mac/

Capítulo 6 Examen de archivos
Conceptos clave
•
•
•
•
•

El comando file muestra el tipo de archivo
El comando cat muestra el contenido de un archivo
Los comandos more y less "hojean" através de un archivo, una pantalla completa a
la vez.
Los comandos head y tail presentan las primeras o las últimas líneas de un archivo.
En el entorno gráfico X se puede utilizar nautilus para examinar archivos de texto.

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í.

file

[OPCIONES] [ARCHIVO...]

Prueba FILE(s) para determinar el tipo de archivo y muestra los resultados en la salida
estándar.
Ejemplo de uso con archivos ASCII:
[nero@station nero]$ file index.html novel.ps mailer
index.html:
HTML document text
novel.ps:
PostScript document text conforming at level 3.0
mailer:
perl script text executable

Ejemplo de uso con archivos binarios:
[nero@station nero]$ file logo.jpeg symphony.mp3 archive.tgz
logo.png:
PNG image data, 387 x 69, 8-bit grayscale, noninterlaced
symphony.mp3:
MP3, 128 bits, 44.1 kHz, JStereo
archive.tgz:
gzip compressed data, deflated, last modified: Thu
Mar 20 21:27:27 2003, os: Unix

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.

cat

[OPCIONES] [ARCHIVO...]

Concatena FILE(s) en la salida estándar.
Opción

Efecto
49

Filesystem basics
Opción

Efecto

-A

Muestra todos los caracteres incluyendo los caracteres de control y los de no
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.
Los paginadores more y less
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.

more

[OPCIONES] [ARCHIVO...]

Muestra el/los archivo(s)FILE(s) en la salida estándar y una pantalla a la vez bajo el control
del teclado.
Acción

Opció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

less

[OPCIONES] [ARCHIVO...]

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

Table 1. Comandos de navegación less (more)
Comando

more?

Acción

>espacio>

Si

adelanta una pantalla entera

[PgDn]

No

adelanta una pantalla entera

b

Si

devuelve una pantalla entera

[PgUp]

No

devuelve una pantalla entera

[DnArrow]

No

adelanta una línea

[Flechaarriba]

No

se devuelve una línea

/text

Si

va hacia adelante para buscar texto

?texto

No

va hacia atrás para buscar texto

n

Si

repite la última búsqueda

N

No

repite la última búsqueda pero en dirección contraria

q

Si

quit

h

Si

ayuda (introduce muchos comandos nuevos)

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.
[elvis@station elvis]$ ps aux
USER
PID %CPU %MEM
VSZ
root
1 0.0 0.0 1392

RSS TTY
92 ?

STAT START
S
17:27

TIME COMMAND
0:04 init [
51

Filesystem basics
root
2 0.0 0.0
0
0 ?
root
3 0.0 0.0
0
0 ?
root
4
0.0
0.0
0
[ksoftirqd_CPU0]
root
9 0.0 0.0
0
0 ?
...
[elvis@station elvis]$ ps aux | less

SW
SW

17:27
17:27

SW

17:27

0 ?

0:00 [keventd]
0:00 [kapmd]
SWN
17:27
0:00
0:00 [bdflush]

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.

head

[OPCIONES] [ARCHIVO...]

Escribe las primeras 10 líneas de cada ARCHIVO a la salida estándar.
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.
[elvis@station elvis]$ head /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
tty:x:5:
disk:x:6:root
lp:x:7:daemon,lp
mem:x:8:
kmem:x:9:
[elvis@station elvis]$ head -n 5 /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
52

Filesystem basics
Si se le da más de un nombre de archivo como argumento head presentará unas primeras
pocas líneas de cada archivo individualmente separado por un encabezado que muestra el
nombre de archivo. En el siguiente ejemplo, elvis lista las primeras pocas líneas de los
scripts de servicios de Red Hat que se encuentran en el directorio /etc/rc.d/init.d.
[elvis@station elvis]$ head -5 /etc/rc.d/init.d/*
==> /etc/rc.d/init.d/aep1000 <==
#!/bin/sh
#
# Tags
# chkconfig: - 30 70
# description: load and unload AEP1000/AEP2000 coprocessor driver
==> /etc/rc.d/init.d/anacron <==
#!/bin/sh
# Startup script for anacron
#
# chkconfig: 2345 95 05
# description: Run cron jobs that were left out due to downtime
==> /etc/rc.d/init.d/apmd <==
#!/bin/sh
#
# chkconfig: 2345 26 74
# description: apmd is used for monitoring battery status and logging it
via 
#
syslog(8). It can also be used for shutting down the machine when

==> /etc/rc.d/init.d/atd <==
#!/bin/bash
#
#
/etc/rc.d/init.d/atd
#
# Starts the at daemon
...

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.
[student@station student]$ ps aux |
USER
PID %CPU %MEM
VSZ RSS
root
1 0.0 0.1 2500 416
root
2 0.0 0.0
0
0
root
3 0.0 0.0
0
0
root
4 0.0 0.0
0
0
[ksoftirqd/0]
[student@station student]$

El comando tail

head -5
TTY
?
?
?
?

STAT
S
SW
SW
SWN

START
10:51
10:51
10:51
10:51

TIME
0:03
0:00
0:00
0:00

COMMAND
init [5]
[keventd]
[kapmd]
53

Filesystem basics

tail

[OPCIONES] [ARCHIVO...]

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.
[elvis@station elvis]$ tail /etc/group
named:x:25:
gdm:x:42:
postgres:x:26:
apache:x:48:
postdrop:x:90:
postfix:x:89:
squid:x:23:
webalizer:x:67:
ldap:x:55:
elvis:x:500:
[elvis@station elvis]$ tail -n 5 /etc/group
postfix:x:89:
squid:x:23:
webalizer:x:67:
ldap:x:55:
elvis:x:500:

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
Identificación de documentos con file
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.
[prince@station banners]$ cd /usr/share/cups/banners/
[prince@station banners]$ file *
classified:
PostScript document text conforming at level
confidential: PostScript document text conforming at level
secret:
PostScript document text conforming at level
standard:
PostScript document text conforming at level
topsecret:
PostScript document text conforming at level
unclassified: PostScript document text conforming at level

3.0
3.0
3.0
3.0
3.0
3.0

El comando file revela que éstos son documentos PostScript enviados a la impresora como
pancartas.
Determinar el tipo correcto de archivo con file
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.
[elvis@station images]$ ls pics/
dscn0936.png dscn0942.png dscn0953.jpg
dscn0938.png dscn0952.png dscn0959.jpg

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.
[elvis@station images]$ file
pics/dscn0936.png: PNG image
interlaced
pics/dscn0938.png: PNG image
interlaced
pics/dscn0942.png: PNG image
interlaced
pics/dscn0952.png: PNG image
interlaced
pics/dscn0953.jpg: PNG image
interlaced
pics/dscn0959.jpg: PNG image
interlaced

pics/*
data, 360 x 480, 8-bit/color RGB, nondata, 640 x 480, 8-bit/color RGB, nondata, 360 x 480, 8-bit/color RGB, nondata, 360 x 480, 8-bit/color RGB, nondata, 640 x 480, 8-bit/color RGB, nondata, 640 x 480, 8-bit/color RGB, non-

Los últimos dos archivos están en formato PNG como los otros cuatro. Aparentemente, los
dos últimos fueron nombrados con una extensión equivocada.
Hojear archivos con head
55

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.
[blondie@station blondie]$ head /etc/profile.d/*.sh
==> /etc/profile.d/glib2.sh <==
## This caused GLib2 applications to convert filenames from
## locale encoding to UTF-8. If the locale encoding is already
## UTF-8 then it makes no difference.
export G_BROKEN_FILENAMES=1
==> /etc/profile.d/gnome-ssh-askpass.sh <==
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
export SSH_ASKPASS
==> /etc/profile.d/jdk.sh <==
export PATH=/usr/local/j2sdk1.3.1/bin:$PATH
==> /etc/profile.d/lang.sh <==
# /etc/profile.d/lang.sh - set i18n stuff
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"
...

Combinación de archivos múltiples en un sólo archivo con head
La usuaria madonna está aprendiendo sobre PAM, los módulos de autenticación
conectables de Linux. Acaba de descubrir el directorio /usr/share/doc/pam-0.75/txts,
el cual contiene un gran número de archivos README.
[madonna@station madonna]$ cd /usr/share/doc/pam-0.75/txts/
[madonna@station txts]$ ls
pam_appl.txt
README.pam_ftp
README.pam_shells
pam_modules.txt
README.pam_limits
README.pam_stack
pam.txt
README.pam_listfile
README.pam_stress
README
README.pam_localuser README.pam_tally
README.pam_access
README.pam_mail
README.pam_time
README.pam_chroot
README.pam_nologin
README.pam_timestamp
README.pam_console
README.pam_permit
README.pam_unix
README.pam_cracklib README.pam_pwdb
README.pam_userdb
README.pam_deny
README.pam_rhosts
README.pam_warn
2 filesystem basics
2 filesystem basics
2 filesystem basics
2 filesystem basics
2 filesystem basics
2 filesystem basics
2 filesystem basics
2 filesystem basics
2 filesystem basics

Más contenido relacionado

La actualidad más candente

Tutorial 18pag
Tutorial 18pagTutorial 18pag
Tutorial 18pageckoby
 
Comandos básicos para la terminal de ubuntu
Comandos básicos para la terminal de ubuntuComandos básicos para la terminal de ubuntu
Comandos básicos para la terminal de ubuntuMonchitocm Cuemtz
 
Tutorial Comandos
Tutorial ComandosTutorial Comandos
Tutorial Comandoseguzman
 
MANUAL DE PRACTICAS DE LINUX (Alberto Hdz)
MANUAL DE PRACTICAS DE LINUX (Alberto Hdz) MANUAL DE PRACTICAS DE LINUX (Alberto Hdz)
MANUAL DE PRACTICAS DE LINUX (Alberto Hdz) Alberto Hdz
 
Script Y Comandos De Linux
Script Y Comandos De LinuxScript Y Comandos De Linux
Script Y Comandos De Linuxsilvanetorres
 
8 herramientas de procesos de string
8  herramientas de procesos de string8  herramientas de procesos de string
8 herramientas de procesos de stringcyberleon95
 
Consola y Comandos Básicos de Linux (I)
Consola y Comandos Básicos de Linux (I)Consola y Comandos Básicos de Linux (I)
Consola y Comandos Básicos de Linux (I)Julio Caiza
 
Comandos basicos linux
Comandos basicos linuxComandos basicos linux
Comandos basicos linuxmaomaq
 
Guia basica de comandos ubuntu
Guia basica de comandos ubuntuGuia basica de comandos ubuntu
Guia basica de comandos ubuntussxdan
 
COMANDOS BASICOS DE LINUX
COMANDOS BASICOS DE LINUXCOMANDOS BASICOS DE LINUX
COMANDOS BASICOS DE LINUXvicente choque
 
Comandos Basicos De Linux
Comandos Basicos De LinuxComandos Basicos De Linux
Comandos Basicos De LinuxUsa
 

La actualidad más candente (19)

17 comandos basicoslinuxasoitson
17 comandos basicoslinuxasoitson17 comandos basicoslinuxasoitson
17 comandos basicoslinuxasoitson
 
Tutorial 18pag
Tutorial 18pagTutorial 18pag
Tutorial 18pag
 
Presentación linux
Presentación linuxPresentación linux
Presentación linux
 
Comandos básicos para la terminal de ubuntu
Comandos básicos para la terminal de ubuntuComandos básicos para la terminal de ubuntu
Comandos básicos para la terminal de ubuntu
 
Tutorial Comandos
Tutorial ComandosTutorial Comandos
Tutorial Comandos
 
Comandos básicos GNU/Linux
Comandos básicos GNU/LinuxComandos básicos GNU/Linux
Comandos básicos GNU/Linux
 
MANUAL DE PRACTICAS DE LINUX (Alberto Hdz)
MANUAL DE PRACTICAS DE LINUX (Alberto Hdz) MANUAL DE PRACTICAS DE LINUX (Alberto Hdz)
MANUAL DE PRACTICAS DE LINUX (Alberto Hdz)
 
876t
876t876t
876t
 
Script Y Comandos De Linux
Script Y Comandos De LinuxScript Y Comandos De Linux
Script Y Comandos De Linux
 
8 herramientas de procesos de string
8  herramientas de procesos de string8  herramientas de procesos de string
8 herramientas de procesos de string
 
Consola y Comandos Básicos de Linux (I)
Consola y Comandos Básicos de Linux (I)Consola y Comandos Básicos de Linux (I)
Consola y Comandos Básicos de Linux (I)
 
Comandos basicos linux
Comandos basicos linuxComandos basicos linux
Comandos basicos linux
 
Guia basica de comandos ubuntu
Guia basica de comandos ubuntuGuia basica de comandos ubuntu
Guia basica de comandos ubuntu
 
Linux
LinuxLinux
Linux
 
Comandos basicos linux
Comandos basicos linuxComandos basicos linux
Comandos basicos linux
 
COMANDOS BASICOS DE LINUX
COMANDOS BASICOS DE LINUXCOMANDOS BASICOS DE LINUX
COMANDOS BASICOS DE LINUX
 
Comandos linux
Comandos linuxComandos linux
Comandos linux
 
Sistema Operativos - Objetivo 3 - Comandos Linux
Sistema Operativos - Objetivo 3 - Comandos LinuxSistema Operativos - Objetivo 3 - Comandos Linux
Sistema Operativos - Objetivo 3 - Comandos Linux
 
Comandos Basicos De Linux
Comandos Basicos De LinuxComandos Basicos De Linux
Comandos Basicos De Linux
 

Destacado

3 users and groups
3   users and groups3   users and groups
3 users and groupscyberleon95
 
7 standard io and pipes
7 standard io and pipes7 standard io and pipes
7 standard io and pipescyberleon95
 
10 network applications
10 network applications10 network applications
10 network applicationscyberleon95
 
Plataforma de monitoreo zabbix
Plataforma de monitoreo zabbixPlataforma de monitoreo zabbix
Plataforma de monitoreo zabbixDaniel Patiño
 
Configuracion servidores linux-20131029-octubre
Configuracion servidores linux-20131029-octubreConfiguracion servidores linux-20131029-octubre
Configuracion servidores linux-20131029-octubrecyberleon95
 
Manual de referencia
Manual de referenciaManual de referencia
Manual de referenciacyberleon95
 
Repositorio grafico
Repositorio graficoRepositorio grafico
Repositorio graficocyberleon95
 
Presentacion HTTP/HTTPS/DNS
Presentacion HTTP/HTTPS/DNSPresentacion HTTP/HTTPS/DNS
Presentacion HTTP/HTTPS/DNSjalvarezpiedra
 
Gestión del Talento Humano
Gestión del Talento HumanoGestión del Talento Humano
Gestión del Talento Humanocyberleon95
 
Contratación de Tecnología para Call Center
Contratación de Tecnología para Call CenterContratación de Tecnología para Call Center
Contratación de Tecnología para Call Centercyberleon95
 
Configuración Script Usuarios Masivos Windows Server 2012 R2
Configuración Script Usuarios Masivos Windows Server 2012 R2Configuración Script Usuarios Masivos Windows Server 2012 R2
Configuración Script Usuarios Masivos Windows Server 2012 R2cyberleon95
 
Configuración VPN Sitio a Sitio en ENDIAN
Configuración VPN Sitio a Sitio en ENDIANConfiguración VPN Sitio a Sitio en ENDIAN
Configuración VPN Sitio a Sitio en ENDIANcyberleon95
 
Instalación Windows Server 2012
Instalación Windows Server 2012Instalación Windows Server 2012
Instalación Windows Server 2012cyberleon95
 

Destacado (20)

3 users and groups
3   users and groups3   users and groups
3 users and groups
 
7 standard io and pipes
7 standard io and pipes7 standard io and pipes
7 standard io and pipes
 
6 la shell bash
6 la shell bash6 la shell bash
6 la shell bash
 
1 quick tours
1 quick tours1 quick tours
1 quick tours
 
10 network applications
10 network applications10 network applications
10 network applications
 
11 suplemments
11 suplemments11 suplemments
11 suplemments
 
Plataforma de monitoreo zabbix
Plataforma de monitoreo zabbixPlataforma de monitoreo zabbix
Plataforma de monitoreo zabbix
 
Se linux
Se linuxSe linux
Se linux
 
Configuracion servidores linux-20131029-octubre
Configuracion servidores linux-20131029-octubreConfiguracion servidores linux-20131029-octubre
Configuracion servidores linux-20131029-octubre
 
Manual linux
Manual linuxManual linux
Manual linux
 
Manual de referencia
Manual de referenciaManual de referencia
Manual de referencia
 
Softlibre
SoftlibreSoftlibre
Softlibre
 
Repositorio grafico
Repositorio graficoRepositorio grafico
Repositorio grafico
 
Presentacion HTTP/HTTPS/DNS
Presentacion HTTP/HTTPS/DNSPresentacion HTTP/HTTPS/DNS
Presentacion HTTP/HTTPS/DNS
 
Actividad ITIL
Actividad ITIL Actividad ITIL
Actividad ITIL
 
Gestión del Talento Humano
Gestión del Talento HumanoGestión del Talento Humano
Gestión del Talento Humano
 
Contratación de Tecnología para Call Center
Contratación de Tecnología para Call CenterContratación de Tecnología para Call Center
Contratación de Tecnología para Call Center
 
Configuración Script Usuarios Masivos Windows Server 2012 R2
Configuración Script Usuarios Masivos Windows Server 2012 R2Configuración Script Usuarios Masivos Windows Server 2012 R2
Configuración Script Usuarios Masivos Windows Server 2012 R2
 
Configuración VPN Sitio a Sitio en ENDIAN
Configuración VPN Sitio a Sitio en ENDIANConfiguración VPN Sitio a Sitio en ENDIAN
Configuración VPN Sitio a Sitio en ENDIAN
 
Instalación Windows Server 2012
Instalación Windows Server 2012Instalación Windows Server 2012
Instalación Windows Server 2012
 

Similar a 2 filesystem basics

Guia comandos-rapidos-linux-4781
Guia comandos-rapidos-linux-4781Guia comandos-rapidos-linux-4781
Guia comandos-rapidos-linux-4781Enrique Villafuerte
 
Semana 12 filesystem basico
Semana 12  filesystem basicoSemana 12  filesystem basico
Semana 12 filesystem basicovictdiazm
 
Windows y sus partes
Windows y sus partesWindows y sus partes
Windows y sus partesbardock95
 
Trabajo digital
Trabajo digitalTrabajo digital
Trabajo digitaledwin-c
 
Trabajo digital
Trabajo digitalTrabajo digital
Trabajo digitaledwin-c
 
Trabajo digital
Trabajo digitalTrabajo digital
Trabajo digitaledwin-c
 
Trabajo digital
Trabajo digitalTrabajo digital
Trabajo digitaledwin-c
 
Linux ud2 - comandos gestion archivos
Linux   ud2 - comandos gestion archivosLinux   ud2 - comandos gestion archivos
Linux ud2 - comandos gestion archivosJavier Muñoz
 
Tarea 01 laboratorio
Tarea 01   laboratorioTarea 01   laboratorio
Tarea 01 laboratorioFree Lancer
 
Archivo y directorios en linux
Archivo y directorios en linuxArchivo y directorios en linux
Archivo y directorios en linuxJessica Medina
 
Quasi - Sistema de archivos
Quasi - Sistema de archivosQuasi - Sistema de archivos
Quasi - Sistema de archivosdegarden
 
2.7 nombre de archivos y directorios rutas y exploracion de arbol
2.7 nombre de archivos y directorios rutas y exploracion de arbol2.7 nombre de archivos y directorios rutas y exploracion de arbol
2.7 nombre de archivos y directorios rutas y exploracion de arbolFernando Solis
 
2.7 nombre de archivos y directorios rutas y exploracion de arbol
2.7 nombre de archivos y directorios rutas y exploracion de arbol2.7 nombre de archivos y directorios rutas y exploracion de arbol
2.7 nombre de archivos y directorios rutas y exploracion de arbolFernando Solis
 
LINUX - Comandos básicos I
LINUX - Comandos básicos I LINUX - Comandos básicos I
LINUX - Comandos básicos I Pablo Macon
 
1 estructura del sistema de archivos
1  estructura del sistema de archivos1  estructura del sistema de archivos
1 estructura del sistema de archivosAprende Viendo
 
Archivo y directorios en linux
Archivo y directorios en linuxArchivo y directorios en linux
Archivo y directorios en linuxJessica Medina
 

Similar a 2 filesystem basics (20)

Guia comandos-rapidos-linux-4781
Guia comandos-rapidos-linux-4781Guia comandos-rapidos-linux-4781
Guia comandos-rapidos-linux-4781
 
Semana 12 filesystem basico
Semana 12  filesystem basicoSemana 12  filesystem basico
Semana 12 filesystem basico
 
Windows y sus partes
Windows y sus partesWindows y sus partes
Windows y sus partes
 
Lliurex Sesion2
Lliurex Sesion2Lliurex Sesion2
Lliurex Sesion2
 
Trabajo digital
Trabajo digitalTrabajo digital
Trabajo digital
 
Trabajo digital
Trabajo digitalTrabajo digital
Trabajo digital
 
Trabajo digital
Trabajo digitalTrabajo digital
Trabajo digital
 
Trabajo digital
Trabajo digitalTrabajo digital
Trabajo digital
 
Linux ud2 - comandos gestion archivos
Linux   ud2 - comandos gestion archivosLinux   ud2 - comandos gestion archivos
Linux ud2 - comandos gestion archivos
 
Tarea 01 laboratorio
Tarea 01   laboratorioTarea 01   laboratorio
Tarea 01 laboratorio
 
Archivo y directorios en linux
Archivo y directorios en linuxArchivo y directorios en linux
Archivo y directorios en linux
 
Quasi - Sistema de archivos
Quasi - Sistema de archivosQuasi - Sistema de archivos
Quasi - Sistema de archivos
 
2.7 nombre de archivos y directorios rutas y exploracion de arbol
2.7 nombre de archivos y directorios rutas y exploracion de arbol2.7 nombre de archivos y directorios rutas y exploracion de arbol
2.7 nombre de archivos y directorios rutas y exploracion de arbol
 
2.7 nombre de archivos y directorios rutas y exploracion de arbol
2.7 nombre de archivos y directorios rutas y exploracion de arbol2.7 nombre de archivos y directorios rutas y exploracion de arbol
2.7 nombre de archivos y directorios rutas y exploracion de arbol
 
LINUX - Comandos básicos I
LINUX - Comandos básicos I LINUX - Comandos básicos I
LINUX - Comandos básicos I
 
1 estructura del sistema de archivos
1  estructura del sistema de archivos1  estructura del sistema de archivos
1 estructura del sistema de archivos
 
1 estructura del sistema de archivos
1  estructura del sistema de archivos1  estructura del sistema de archivos
1 estructura del sistema de archivos
 
16 fhsasoitson
16 fhsasoitson16 fhsasoitson
16 fhsasoitson
 
Archivo y directorios en linux
Archivo y directorios en linuxArchivo y directorios en linux
Archivo y directorios en linux
 
Prueba2
Prueba2Prueba2
Prueba2
 

Más de cyberleon95

Configuración VPN de Acceso remoto con TMG
Configuración VPN de Acceso remoto con TMGConfiguración VPN de Acceso remoto con TMG
Configuración VPN de Acceso remoto con TMGcyberleon95
 
Instalación y Configuración Firewall ENDIAN
Instalación y Configuración Firewall ENDIANInstalación y Configuración Firewall ENDIAN
Instalación y Configuración Firewall ENDIANcyberleon95
 
Manual Instalación y Configuración Firewall TMG
Manual Instalación y Configuración Firewall TMGManual Instalación y Configuración Firewall TMG
Manual Instalación y Configuración Firewall TMGcyberleon95
 
Documentación ACL - Firewall ASA
Documentación ACL - Firewall ASADocumentación ACL - Firewall ASA
Documentación ACL - Firewall ASAcyberleon95
 
Plan de continuidad
Plan de continuidadPlan de continuidad
Plan de continuidadcyberleon95
 
Análisis de riesgos y vulnerabilidades
Análisis de riesgos y vulnerabilidades Análisis de riesgos y vulnerabilidades
Análisis de riesgos y vulnerabilidades cyberleon95
 
Manual PXE - RHEL 6.2
Manual PXE - RHEL 6.2Manual PXE - RHEL 6.2
Manual PXE - RHEL 6.2cyberleon95
 
Manual WDS - Windows Server 2008 R2
Manual WDS - Windows Server 2008 R2Manual WDS - Windows Server 2008 R2
Manual WDS - Windows Server 2008 R2cyberleon95
 
Manual WSUS - Windows Server 2008 R2
Manual WSUS - Windows Server 2008 R2Manual WSUS - Windows Server 2008 R2
Manual WSUS - Windows Server 2008 R2cyberleon95
 
Manual Monitoreo de Servidores
Manual  Monitoreo de ServidoresManual  Monitoreo de Servidores
Manual Monitoreo de Servidorescyberleon95
 
Teoría Plataformas de Monitoreo
Teoría  Plataformas de Monitoreo  Teoría  Plataformas de Monitoreo
Teoría Plataformas de Monitoreo cyberleon95
 
Autodiagnostico 5 Trimestre
Autodiagnostico 5 TrimestreAutodiagnostico 5 Trimestre
Autodiagnostico 5 Trimestrecyberleon95
 
Integración LDAP + SAMBA
Integración LDAP + SAMBAIntegración LDAP + SAMBA
Integración LDAP + SAMBAcyberleon95
 
Actividad Topologías VoIP
Actividad Topologías VoIPActividad Topologías VoIP
Actividad Topologías VoIPcyberleon95
 
Integración GNS3 - VirtualBox - Wireshark
Integración GNS3 - VirtualBox - WiresharkIntegración GNS3 - VirtualBox - Wireshark
Integración GNS3 - VirtualBox - Wiresharkcyberleon95
 
Instalación y Configuración SSH CentOS 6.5 / RHEL 6.2
Instalación y Configuración SSH CentOS 6.5 / RHEL 6.2Instalación y Configuración SSH CentOS 6.5 / RHEL 6.2
Instalación y Configuración SSH CentOS 6.5 / RHEL 6.2cyberleon95
 
Centos 6.5 Servidor Básico
Centos 6.5 Servidor BásicoCentos 6.5 Servidor Básico
Centos 6.5 Servidor Básicocyberleon95
 
Configuración DHCP - NAT
Configuración DHCP - NATConfiguración DHCP - NAT
Configuración DHCP - NATcyberleon95
 
Trabajo IOS de CISCO
Trabajo IOS de CISCOTrabajo IOS de CISCO
Trabajo IOS de CISCOcyberleon95
 

Más de cyberleon95 (20)

Configuración VPN de Acceso remoto con TMG
Configuración VPN de Acceso remoto con TMGConfiguración VPN de Acceso remoto con TMG
Configuración VPN de Acceso remoto con TMG
 
Instalación y Configuración Firewall ENDIAN
Instalación y Configuración Firewall ENDIANInstalación y Configuración Firewall ENDIAN
Instalación y Configuración Firewall ENDIAN
 
Manual Instalación y Configuración Firewall TMG
Manual Instalación y Configuración Firewall TMGManual Instalación y Configuración Firewall TMG
Manual Instalación y Configuración Firewall TMG
 
Documentación ACL - Firewall ASA
Documentación ACL - Firewall ASADocumentación ACL - Firewall ASA
Documentación ACL - Firewall ASA
 
Plan de continuidad
Plan de continuidadPlan de continuidad
Plan de continuidad
 
Análisis de riesgos y vulnerabilidades
Análisis de riesgos y vulnerabilidades Análisis de riesgos y vulnerabilidades
Análisis de riesgos y vulnerabilidades
 
Manual PXE - RHEL 6.2
Manual PXE - RHEL 6.2Manual PXE - RHEL 6.2
Manual PXE - RHEL 6.2
 
Manual WDS - Windows Server 2008 R2
Manual WDS - Windows Server 2008 R2Manual WDS - Windows Server 2008 R2
Manual WDS - Windows Server 2008 R2
 
Manual WSUS - Windows Server 2008 R2
Manual WSUS - Windows Server 2008 R2Manual WSUS - Windows Server 2008 R2
Manual WSUS - Windows Server 2008 R2
 
Manual Monitoreo de Servidores
Manual  Monitoreo de ServidoresManual  Monitoreo de Servidores
Manual Monitoreo de Servidores
 
Teoría Plataformas de Monitoreo
Teoría  Plataformas de Monitoreo  Teoría  Plataformas de Monitoreo
Teoría Plataformas de Monitoreo
 
Autodiagnostico 5 Trimestre
Autodiagnostico 5 TrimestreAutodiagnostico 5 Trimestre
Autodiagnostico 5 Trimestre
 
Integración LDAP + SAMBA
Integración LDAP + SAMBAIntegración LDAP + SAMBA
Integración LDAP + SAMBA
 
Actividad Topologías VoIP
Actividad Topologías VoIPActividad Topologías VoIP
Actividad Topologías VoIP
 
Conceptos VoIP
Conceptos VoIPConceptos VoIP
Conceptos VoIP
 
Integración GNS3 - VirtualBox - Wireshark
Integración GNS3 - VirtualBox - WiresharkIntegración GNS3 - VirtualBox - Wireshark
Integración GNS3 - VirtualBox - Wireshark
 
Instalación y Configuración SSH CentOS 6.5 / RHEL 6.2
Instalación y Configuración SSH CentOS 6.5 / RHEL 6.2Instalación y Configuración SSH CentOS 6.5 / RHEL 6.2
Instalación y Configuración SSH CentOS 6.5 / RHEL 6.2
 
Centos 6.5 Servidor Básico
Centos 6.5 Servidor BásicoCentos 6.5 Servidor Básico
Centos 6.5 Servidor Básico
 
Configuración DHCP - NAT
Configuración DHCP - NATConfiguración DHCP - NAT
Configuración DHCP - NAT
 
Trabajo IOS de CISCO
Trabajo IOS de CISCOTrabajo IOS de CISCO
Trabajo IOS de CISCO
 

Último

Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaDecaunlz
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...JonathanCovena1
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfNancyLoaa
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAEl Fortí
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA IIAFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA IIIsauraImbrondone
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSYadi Campos
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Alejandrino Halire Ccahuana
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática5    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática5    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
Sesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxSesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxMaritzaRetamozoVera
 
plan de capacitacion docente AIP 2024 clllll.pdf
plan de capacitacion docente  AIP 2024          clllll.pdfplan de capacitacion docente  AIP 2024          clllll.pdf
plan de capacitacion docente AIP 2024 clllll.pdfenelcielosiempre
 
Valoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCVValoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCVGiustinoAdesso1
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 

Último (20)

Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativa
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA IIAFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
Medición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptxMedición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptx
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática5    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática5    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
Sesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxSesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docx
 
plan de capacitacion docente AIP 2024 clllll.pdf
plan de capacitacion docente  AIP 2024          clllll.pdfplan de capacitacion docente  AIP 2024          clllll.pdf
plan de capacitacion docente AIP 2024 clllll.pdf
 
Valoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCVValoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCV
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 

2 filesystem basics

  • 1. 1 Filesystem basics Capítulo 1 Navegación del sistema de archivos Conceptos clave • • • • • El sistema de archivos de Linux es un "árbol invertido"de directorios y archivos con un directorio raíz llamado "/". Todo proceso tiene un directorio actual de trabajo con frecuencia llamado "cwd". El comando pwd muestra el cwd de la shell bash. El comando cd cambia el cwd de la shell bash. Los archivos se pueden reseñar tanto por referencias absolutas como por referencias relativas. El árbol invertido del sistema de archivos El concepto de un sistema de archivos organizado en directorios es común en muchos sistemas informáticos. A un archivo individual se le asigna un nombre (un nombre de archivo), y los nombres de archivo se organizan en un directorio (denominado como directorio en algunos sistemas operativos). Sin embargo, los directorios son en sí mismos un tipo de archivo para que también puedan ser recopilados en otros directorios. Este proceso puede continuar, nivel tras nivel, hasta crear un entorno altamente estructurado. 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. Figure 1. Ejemplo de un árbol de directorios -- html | website -- -- forms | | | | | | | -- song1.midi | -- songs -| | | -- song2.midi |
  • 2. 2 Filesystem basics -- media -| -- picture1.png | | -- photos-| -- picture2.png De la apariencia de ramificaciones de este diagrama es de donde surge la idea de árbol de directorios. Por lo general se dibuja con las ramas hacia abajo y con la raíz del árbol en la parte superior (website en este caso) y por lo tanto, se le llama estructura de directorio de árbol invertido. 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. Figure 2. Árbol de directorios iniciando en / -- bin... | / -- -- etc... | | -| | | -- alice -| | | | | -| | -- home -| | -| | | | -- elvis -| | | -... mystuff... website... docs... 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. 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. Exploración del árbol de directorios utilizando Nautilus 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. Figure 1. Ventana Nautilus 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] Figure 3. El navegador Nautilus 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". Figure 4. Activación del panel lateral de Nautilus
  • 4. 4 Filesystem basics La aplicación de panel lateral deNautilus se utiliza para diferentes propósitos. En este momento, estamos interesados en explorar el árbol de directorios, así que seleccione "árbol" en el panel lateral superior del menú. Figure 5. Selección del panel lateral del árbol en Nautilus 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. Figure 6. Exploración del árbol de directorios con 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. Ahora que ha dedicado un poco de tiempo explorando el concepto de árbol de directorios y la forma como se construyen las referencias absolutas a los directorios y los archivos, hablaremos un poco sobre algunos de los conceptos relacionados con el sistema de archivos de Linux. El directorio de trabajo actual (cwd) A cada proceso Linux (por ejemplo,un programa o un comando) cuando se ejecuta, se le asigna un directorio por defecto. Este directorio por defecto se utiliza para completar el FQN para cualquier archivo cuyo nombre no se especifique como un FQN. Esto tiene dos efectos. Primero, le permite al proceso referirse a los archivos de una manera más sencilla sin tener que utilizar nombres demasiado largos. Segundo, le permite al proceso operar con mayor flexibilidad ya que sus acciones dependen en parte del directorio por defecto. Si cambia el directorio por defecto, la acción del proceso también cambiará. A este directorio por defecto se le conoce como el directorio actual de trabajo ó cwd, para el proceso.
  • 5. 5 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. ¿En dónde estoy? El comando pwd Uno de los procesos que se encuentra en ejecución en un sistema de Linux es la shell de comandos. Si usted inicia la sesión en el sistema a través de una terminal virtual, o inicia un programa de terminal en X, verá el intérprete de comandos en donde puede introducir comandos para que el sistema actúe. Este intérprete de comandos es producido por la shell de comandos, el cual es el proceso responsable de la lectura e interpretación de comandos. Por defecto, la shell de comandos para los sistemas de Red Hat Enterprise Linux es la shell de comandos bash (del inglés Bourne-again shell). 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]$ El intérprete de comandos le recuerda que ha iniciado la sesión con el nombre de usuario "alice" en la "estación," del computador y se encuentra en el directorio website. Pero pueden haber otros directorios website en alguna otra parte del sistema. La ruta completa (o absoluta) del directorio de trabajo actual se puede visualizar con el comando pwd (del inglés print working directory). Uso: pwd
  • 6. 6 Filesystem basics La usuaria alice quiere verificar si se encuentra en el directorio correcto. Podría utilizar pwd. [alice@station student]$ pwd /home/alice/website Cambio de sitio- El comando cd 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] Si no se especifica, DIRECTORIO utiliza por defecto el directorio de inicio del usuario. Considere la siguiente secuencia de comandos: [alice@station website]$ pwd /home/alice/website [alice@station website]$ cd /home [alice@station home]$ pwd /home [alice@station home]$ cd /home/alice/website/songs [alice@station songs]$ pwd /home/alice/website/songs 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: Table 1. Nombres de directorios especiales 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. 7 Filesystem basics Segundo, el árbol de directorios se describe generalmente utilizando la analogía padre/hijo. Si dir1 contiene a dir2, entonces se dice que dir2 es el directorio hijo de dir1 y que el dir1 es eldirectorio padre del dir2. Por lo tanto, el directorio .. está a un nivel más cerca de la raíz del árbol de lo que se encuentra el cwd. Después se le asigna un directorio de inicio a cada cuenta de usuario, usualmente un subdirectorio de /home que coincide con su nombre de usuario (este tema se explicará más detalladamente en el siguiente capítulo). El directorio ~ representa ese directorio. Finalmente, la raya (-) es una opción especial del comando cd que se refiere al directorio de trabajo anterior, facilitando el cambio entre directorios hacia adelante y hacia atrás. De nuevo, considere la siguiente secuencia de comandos: [alice@station songs]$ pwd /home/alice/website/songs [alice@station songs]$ cd ~ [alice@station alice]$ pwd /home/alice [alice@station alice]$ cd [alice@station songs]$ pwd /home/alice/website/songs [alice@station songs]$ cd .. [alice@station website]$ pwd /home/alice/website [alice@station website]$ cd [alice@station alice]$ pwd /home/alice 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. Referencias absolutas y relativas Esta sección describe dos maneras de identificar la ubicación de un archivo. En esta sección, como casi en cualquier otra parte de estas lecciones, es importante recordar que en Linux un directorio es un tipo de archivo, así que todo lo que se diga sobre nominación de archivos, también aplica a directorios y a archivos comunes de datos. Para identificar un archivo, se debe proporcionar suficiente información para localizar el archivo dentro del sistema de archivos. Esta ubicación se puede proporcionar de dos maneras: como referencia absoluta(o ruta absoluta) o como referenciarelativa. 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. 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." Table 1. Ejemplos de referencias relativas a /home/alice/sample.txt cwd /home/alice Referencia relativa sample.txt o ./sample.txt /home/alice/website/songs ../../sample.txt /home/elvis/docs ../../alice/sample.txt /home alice/sample.txt /home ../home/alice/website/../sample.txt Sí, el último ejemplo es bastante tonto, pero es perfectamente válido. Capítulo 2 Directorios importantes Conceptos clave • • • • • A toda cuenta de usuario se le asigna un directorio de inicio. El directorio /tmp se utiliza como espacio global para borradores. Los directorios /bin y /usr/bin comúnmente contienen archivos ejecutables. El directorio /etc contiene archivos de configuración del sistema. El directorio de inicio de /root, no se debe confundir con el directorio raíz del sistema de archivos, /. Esquema estándar de directorios de Linux
  • 9. 9 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í: Figure 1. Árbol parcial de directorios iniciando en / -| -| -| -/ --| -| -| -| -- 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. El directorio de inicio del usuario 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. El propósito más obvio para el directorio de inicio de un usuario es brindar un espacio privado para datos, un lugar en donde se pueden guardar archivos separados de los archivos de otros usuarios. Normalmente, los usuarios son libres de crear subdirectorios bajo su directorio de inicio y de organizar sus datos como les parezca (sujetos a las restricciones de cuotas que deben haber). Dos usuarios diferentes pueden incluso asignar el mismo nombre a archivos y directorios sin causar ningún conflicto ya que cada uno almacena en su propio espacio. Por ejemplo, tanto Alice como Hogan pueden tener cada uno su subdirectorio
  • 10. 10 Filesystem basics public_html, /home/alice/public_html y /home/hogan/public_html respectivamente. El mantener el espacio de cada uno separado de los otros, ofrece también más seguridad a los usuarios. 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. Normalmente se le da a los usuarios un control relativamente completo sobre sus directorios de inicio mientras que se les restringe el acceso al resto del sistema. Por ejemplo, hay una gran probabilidad de que alice no pueda modificar o borrar ningún archivo de configuración en el directorio /etc aunque es posible que sí pueda leerlos. Además, es muy probable que no pueda leer, modificar o borrar ninguno de los archivos en los directorios de los usuarios 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. El directorio temporal /tmp Además de su espacio personal en sus directorios de inicio, se le da acceso a los usuarios para compartir espacio de "borrador", en el directorio /tmp. Un programa que necesite almacenar datos comprimidos puede almacenar resultados parciales en /tmp, sólo poniendo los resultados finales en el directorio de inicio del usuario cuando haya terminado de hacerlo. Con frecuencia los sistemas Linux implementan cuotas en cuentas de usuarios para prevenir que cualquier usuario consuma una proporción injusta del espacio disponible. El directorio /tmp le da a todos los usuarios acceso a espacio adicional para cumplir con necesidades a corto plazo sin cargar el espacio en su cuota. Esto es especialmente importante, ya que los usuarios no siempre son conscientes de cuánto espacio extra necesita un servicio y algunos servicios (tal como X) no pueden ejecutar si no hay espacio temporal disponible de almacenamiento. Este espacio de borrador "global" se encuentra disponible para todos los procesos en el sistema así como para todos los usuarios. El sistema borra automáticamente los archivos puestos en este directorio después de unos días. El directorio de configuración /etc Una de las características únicas de un sistema Linux es su flexibilidad. Prácticamente todo aspecto del sistema puede configurarse de alguna forma editando un archivo de
  • 11. 11 Filesystem basics configuración. Estos archivos de configuración normalmente se colocan en /etc o en un subdirectorio de /etc. Por ejemplo, el programa sendmail, a menudo utilizado para ejecutar un servidor de correo, utiliza los archivos de configuración que se colocan en /etc/mail. Los scripts de arranque del sistema se encuentran en /etc/rc.d, mientras que los archivos de configuración de la red se encuentran en /etc/sysconfig. Obviamente, los usuarios comunes no pueden modificar los archivos en /etc (o incluso leerlos, en algunos casos), pero los administradores de sistemas invierten bastante de su tiempo trabajando con los archivos almacenados aquí. Los directorios de comandos /bin y /usr/bin La mayoría de los comandos del sistema se encuentran almacenados como archivos binarios en un formato legíble para la máquina. Los comandos apropiados para el uso de usuarios comunes se suelen ubicar en los directorios binarios /bin o /usr/bin. Las utilidades más importantes como ls, cd, cp, mv y el editor de texto vi, sin los cuales no se podría usar el sistema van en /bin. Las utilidades adicionales como los compiladores, su navegador de web y la suite de oficina van en /usr/bin, los cuales se pueden poner a disposición de otros sistemas a través de la red. Considere /bin y /usr/bin como directorios de comandos no privilegiados ya que no se necesitan privilegios especiales para utilizar los comandos que se encuentran en ellos. Considere /bin y /usr/bin como directorios de archivos no privilegiados puesto que no se requieren privilegios especiales para utilizar los comandos que se encuentran en ellos. Los directorios de comandos /sbin y /usr/sbin 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. El directorio "variable" /var Las colecciones de comandos y de archivos de configuración que se encuentran en lugares como /bin o /etc cambian muy poco día a día, si es que cambian del todo. Estos archivos tienden a ser muy estables. Sin embargo, algunos archivos cambian con frecuencia. Estos incluyen correo electrónico entrante y saliente, registros del sistema, sitios web, archivos ftp y similares. Estos archivos y directorios con contenido variable suelen recopilarse en el directorio /var. El colocar dichos archivos aquí hace más fácil asignarles espacio y proteger los archivos más estables que se encuentran en alguna otra parte del sistema. root vs./rootvs./ (la raíz del sistema de archivos)
  • 12. 12 Filesystem basics Es un desafortunado accidente de la historia que el término raíz tenga un papel tan importante y a la vez confuso en Linux. La raíz o el "root" en inglés, es el nombre de usuario del superusuario, es decir, el usuario con autoridad suprema sobre el sistema. También es el nombre del directorio de inicio de ese usuario, /root. Igualmente, es el término que se utiliza para la base (¿la parte superior?) del árbol de directorios del sistema de archivos, el directorio /. Normalmente, el significado del término se puede deducir del contexto, pero una oración tal como el "directorio raíz" puede llegar a ser ambigua. Trate de anticipar y de evitar tal confusión en su propia comunicación y busque aclaración si el significado de la palabra no se puede deducir fácilmente del contexto. 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í. Para crear un archivo, Alice utilizará el comando touch. [alice@station alice]$ cd /tmp [alice@station tmp]$ ls orbit-alice ssh-XXDg4ke3 [alice@station tmp]$ ls -l total 8 drwx-----2 alice alice drwx-----2 alice alice [alice@station tmp]$ touch newfile [alice@station tmp]$ ls -l total 8 -rw-rw-r-1 alice alice drwx-----2 alice alice drwx-----2 alice alice 4096 Mar 16 08:04 orbit-alice 4096 Mar 16 07:07 ssh-XXDg4ke3 0 Mar 16 14:14 newfile 4096 Mar 16 08:04 orbit-alice 4096 Mar 16 07:07 ssh-XXDg4ke3 Después de cambiar a /tmp, Alice usa ls y ls -l para ver el contenido del directorio /tmp. Aunque ls -l produce un listado largo, ella no está segura y ve su nombre de usuario tantas veces que se convence de que algunos programas que ejecutó dejaron archivos en /tmp, como le habían dicho antes. De hecho, tanto orbit-alice como ssh-XXDg4ke3 fueron colocados allí cuando ella inició su entorno de escritorio. Alice utiliza el comando touch para crear un nuevo archivo vacío llamado newfile en /tmp. Como muchos de los comandos Linux cuando touch lo logra, lo hace de manera silenciosa (sin ningun aviso en la pantalla). Alice verifica que touch sí funcionó con otro ls -l. Búsqueda de comandos en /bin y /usr/bin
  • 13. 13 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. [hogan@station hogan]$ which cp /bin/cp [hogan@station hogan]$ which mozilla /usr/bin/mozilla [hogan@station hogan]$ which cd /usr/bin/which: no cd in (/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/hoga n/bin:) [hogan@station hogan]$ which fdisk /usr/bin/which: no fdisk in (/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/h ogan/bin:) [hogan@station hogan]$ ls /sbin ... ether-wake ldconfig portmap extendfs lilo poweroff fdisk logdump pppoe vgcfgbackup ... usbmodules vboxd Hogan ve que cp se encuentra en el directorio /bin, lo cual le parece posible ya que los archivos en /bin son los archivos que los usuarios normales desearían que siempre estuvieran presentes en el sistema. Hogan encuentra mozilla (el navegador que escogió) en /usr/bin. Esto también parece estar bien ya que los archivos en /usr/bin son archivos que un usuario normal podría querer que no siempre estuviesen disponibles. Hogan está sorprendido de los resultados de cd, lo cual parece decir que el comando cd no está en el sistema. Estaba esperando ver una respuesta como /bin/cd. (¿Por qué?) Lo que Hogan no sabe es que cd es un ejemplo de un comando interno, provisto por el comando de la shell bash. Por otro lado, si revisara, encontraría bash
  • 14. 14 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 Exploración de directorios importantes Lab Exercise Objetivo: Explore algunas de las características de los directorios importantes discutidas en este capítulo. Tiempo estimado: 15 minutos. 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. c. d. ~ /tmp /bin /root Claramente, cabe esperar que algunos de sus esfuerzos no den resultado. Regrese a su directorio de inicio cuando haya terminado.
  • 15. 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 1. Dos archivos llamados ~/newfile.username y /tmp/newfile.username, en donde username es su nombre de cuenta primaria. 2. Un archivo ~/.bash_history que contiene un registro de sus comandos. Possible Solution La siguiente secuencia de comandos demuestra el uso de which y touch, y la ejecución de un comando utilizando su referencia absoluta. [student@station student]$ touch /tmp/newfile.student [student@station student]$ which pwd /bin/pwd [student@station student]$ /bin/pwd /home/student Capítulo 3 Administración de archivos Conceptos clave • • • • • Se pueden crear archivos (o agregar) de una manera fácil utilizando el redireccionamiento de la shell. El comando cp copia archivos. El comando mv mueve archivos. El comando rm borra archivos. Los archivos pueden ser "sobrescritos" como resultado de redireccionar, mover o copiar.
  • 16. 16 Filesystem basics Redirección Muchos de los comandos producen salidas “visibles”. Normalmente, la salida se mostrará en la pantalla. Por ejemplo, observe la salida de pwd para Julius: [julius@station julius]$ pwd /home/julius [julius@station julius]$ 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: cat [OPCIONES] [ARCHIVO...] ConcatenarARCHIVO(s) a la salida estándar. 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. [julius@station julius]$ pwd > results.txt [julius@station julius]$ ls results.txt [julius@station julius]$ cat results.txt /home/julius Esta vez, Julius capturó la salida de pwd redireccionando los resultados a results.txt y después mostró results.txt con cat.
  • 17. 17 Filesystem basics Si el archivo ya existe, el redireccionamiento borrará y re-creará el archivo vacío y luego capturará la nueva salida. Sin embargo, si se utiliza un doble símbolo (>>) la nueva salida se añadirá al archivo. Si se utiliza >> y el archivo destino no existe, éste se crea como si se hubiese utilizado >. El símbolo > es un ejemplo de un meta-caracter de shell, es decir, un símbolo con significado especial que la shell bash ve e interpreta antes de actuar sobre el resto del comando. Hay muchos de éstos como veremos en las próximas lecciones y todos requieren atención. 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: echo [OPCIONES] [STRING...] Repite la cadena de caracteres en la salida estándar. Example 1: [julius@station julius]$ echo Hello > greetings.txt [julius@station julius]$ echo How are you >> greetings.txt [julius@station julius]$ cat greetings.txt Hello How are you Ejemplo 2: [julius@station [julius@station [julius@station /home/julius [julius@station [julius@station /home/julius results.txt julius]$ ls julius]$ pwd > results.txt julius]$ cat results.txt julius]$ ls >> results.txt julius]$ cat results.txt Copie archivos con cp Se pueden crear duplicados de archivos con el comando cp (del inglés copy). Uso: cp [OPCIONES] {FUENTE} {DESTINO} cp [OPCIONES] {FUENTE...} {DIRECTORIO}
  • 18. 18 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: 1. Haga una copia de mysong.midi y nombre la copia backup.midi: cp mysong.midi backup.midi 2. Haga una copia de mynovel.txt en /tmp: cp mynovel.txt /tmp El archivo resultante se llamará /tmp/mynovel.txt. 3. Copie los archivos songs.tar y novels.tgz en el directorio /tmp: cp songs.tar novels.tgz /tmp Nombre los archivos resultantes /tmp/songs.tar y /tmp/novels.tgz. 4. Haga una copia de webpage.html desde su directorio de inicio a su directorio actual: cp ~/webpage.html . El archivo resultante se llamará ./webpage.html. Mueva/renombre archivos con mv Puede mover archivos de un directorio a otro o de un nombre a otro (renombrarlos) con el comando mv (mover). Uso: mv [OPCION...] {FUENTE} {DESTINO} mv [OPCION...] {FUENTE...} {DIRECTORIO} . En la primera forma, el archivo FUENTE es renombrado como DESTINO. De la segunda forma, uno o más archivos pueden ser movidos a un directorio al mismo tiempo. Los
  • 19. 19 Filesystem basics archivos FUENTE, ..., se mueven al DIRECTORIO y se nombran DIRECTORIO/FUENTE, .... FUENTE puede ser un directorio, en tal caso el directorio se mueove o se renombra. El comando mv es particularmente interesante , pues la manera en que funciona encierra un hecho crítico sobre los sistemas de archivos Linux: Linux trata el nombre de archivo como algo completamente diferente del contenido del archivo. Aunque el comando mv proviene de la palabra "mover," de hecho mv raras veces mueve datos. En su lugar, el sistema de archivos simplemente graba un cambio de nombre. Si el nombre cambia de /somedir/somefile a /somedir/newname, vemos esto como una "renombramiento" del archivo. Si el nombre cambia de /somedir/somefile a /newdir/somename, vemos esto como "mover" el archivo. Si el nombre cambia de /somedir/somefile a /newdir/newname, vemos esto como un cambio doble, mover y renombrar. Pero para Linux todos estos son la misma cosa, un cambio en el FQN del archivo. Ejemplos: 1. Renombre mysong.midi como backup.midi: mv mysong.midi backup.midi 2. Mueva mynovel.txt a /tmp: mv mynovel.txt /tmp El archivo resultante se llamará /tmp/mynovel.txt. 3. Mueva songs.tar y novels.tgz a /tmp: mv songs.tar novels.tgz /tmp Nombre los archivos resultantes /tmp/songs.tar y /tmp/novels.tgz. 4. Mueva webpage.html de su directorio de inicio al directorio de trabajo actual: mv ~/webpage.html . El archivo resultante se llamará ./webpage.html. 5. Renombre el subdirectorio html del directorio actual de trabajo a public_html: mv html public_html Renombra ./html como ./public_html, asumiendo que ./public_html no existe de antemano - vea el siguiente ejemplo.
  • 20. 20 Filesystem basics 6. Su cwd es su directorio de inicio. Tiene dos subdirectorios ~/images y ~/html. Mueva el directorio images al directorio html: mv images html El directorio resultante se llamará ~/html/images. Observe la similitud entre este ejemplo y el anterior. La diferencia crítica es que en este caso el directorio destino ~/html ya existía, asi que mv movió el directorio fuente dentro (bajo) el directorio destino. En el ejemplo anterior, el directorio destino no existía aún, así que mv renombró el directorio fuente con el nuevo nombre. Suprima (borre) archivos con rm Se pueden suprimir (eliminar, borrar) archivos con el comando rm (remover). Uso: rm [OPCIONES] {ARCHIVO...} Suprime el (los) ARCHIVO(s) del sistema de archivos. Técnicamente, desenlaza el (los) ARCHIVO(s), una diferencia que se aclarará más adelante. Con las opciones apropiadas (no discutidas aquí - intente ejecutar man rm) se pueden borrar árboles de subdirectorios de una sola vez. 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. 21 Filesystem basics 2. Borre songs.tar y novels.tgz: rm songs.tar novels.tgz 3. Borre photos.html de su directorio de inicio: rm ~/photos.html Sobrescribir archivos (¡uy!) Algunas de las advertencias incluídas en la sección anterior insinúan algunos de los comandos potencialmente peligrosos como cp, mv y rm. Infortunadamente, aunque por lo general, mientras vemos pasar las corrientes del rio, con frecuencia olvidamos las rocas que se encuentran bajo el agua y Linux también es el mismo caso. Este es el precio que hay que pagar por el poder de un sistema operativo como Linux. En esta sección resaltamos uno de esos peligros: sobrescribir archivos. 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: [julius@station [julius@station /home/julius [julius@station [julius@station mycwd julius]$ pwd > file1 julius]$ cat file1 julius]$ ls > file1 julius]$ cat file1 Aquí no hay muchas sorpresas si ha puesto atención -- simplemente observe la manera en que la segunda redirección remplazó el contenido anterior de file1 sin ningún mensaje de advertencia. El archivo file1 se ha sobrescrito. Ejemplo 4: [julius@station [julius@station file1 [julius@station [julius@station file1 file2 [julius@station /home/julius julius]$ touch file1 julius]$ ls julius]$ pwd > file2 julius]$ ls julius]$ cat file2
  • 22. 22 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: [julius@station [julius@station file1 [julius@station [julius@station file1 file2 [julius@station file1 file2 julius]$ touch file1 julius]$ ls julius]$ ls > file2 julius]$ ls julius]$ cat file2 ¿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: [julius@station julius]$ pwd > mycwd [julius@station julius]$ cat mycwd /home/julius [julius@station julius]$ cp mycwd mycwd cp: `mycwd' and `mycwd' are the same file [julius@station julius]$ cat mycwd /home/julius [julius@station julius]$ cat mycwd > mycwd cat: mycwd: input file is output file [julius@station julius]$ cat mycwd [julius@station julius]$ 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. 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. Existen algunas pocas opciones de comandos y características especiales de la shell de comando que se pueden utilizar para mitigar este comportamiento de alguna manera, pero el objetivo de este capítulo simplemente es aprender cómo funcionan estos comandos y en esta sección específicamente, la manera como funcionan en archivos existentes. Esta es una característica no un error que necesario entender y utilizar de manera correcta. Ejemplos Mover/Archivar un sitio web simple 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. Mover un sitio web simple 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. 24 Filesystem basics directorio de inicio y deben estar en ~/public_html. Necesita mover los archivos al directorio correcto. Su problema es más complicado que el de Madonna, puesto que no puede renombrar un subdirectorio simplemente. El directorio public_html fue creado por su ISP. [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 nota un archivo en su directorio ~/public_html que no reconoce, un archivo llamado robots.txt. Decide borrarlo. [elvis@station elvis]$ public_html [elvis@station elvis]$ index.html robots.txt [elvis@station elvis]$ [elvis@station elvis]$ index.html ls ls public_html rm public_html/robots.txt ls public_html Ejercicios en línea Crear un sitio web Lab Exercise Objetivo: Utilizar la redirección, cp y mv para crear un sitio web simple y archivar el sitio web. Tiempo estimado: 15 minutos. 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. 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. 1. 2. 3. 4. Cree una página web "en construcción" en ~/index.html. Mueva este archivo a ~/html. Renombre el directorio html como public_html. Haga una copia de su archivo index.html en ~/archive. 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 1. Dos archivos ~/public_html/index.html y ~/archive/index.html, cada uno de los cuales tiene un contenido idéntico (el texto "en construcción" posiblemente con una etiqueta HTML). Possible Solution The following sequence of commands provides one possible solution to this exercise. [student@station [student@station [student@station [student@station [student@station [student@station [student@station [student@station index.html [student@station index.html student]$ student]$ student]$ student]$ student]$ student]$ student]$ student]$ mkdir html archive echo '<h1>' > index.html echo 'Under construction' >> index.html echo '</h1>' >> index.html mv index.html html mv html public_html cp public_html/index.html archive ls public_html student]$ ls archive Investigar la opción "noclobber"
  • 26. 26 Filesystem basics Lab Exercise Objetivo: Investigar las consecuencias de la opción bash "noclobber". Estimated Time: 10 mins. Especificaciones Desea investigar las consecuencias del sobrescribir archivos y de la opción bash "noclobber". 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 1. Un archivo ~/.bash_history que tiene el récord de sus opciones de activación y desactivación de la opción noclobber. Possible Solution The following sequence of commands provides one possible solution to this exercise. [student@station student]$ echo source > source [student@station student]$ echo target > target [student@station student]$ cp source target [student@station student]$ cat target source
  • 27. 27 Filesystem basics [student@station [student@station [student@station source [student@station student]$ echo target > target student]$ cat source > target student]$ cat target student]$ echo target > target [student@station student]$ set -o noclobber [student@station student]$ cp source target [student@station student]$ cat target source [student@station student]$ echo target > target [student@station student]$ cat source > target -bash: target: cannot overwrite existing file [student@station student]$ set +o noclobber [student@station student]$ exit Capítulo 4 Administración de directorios Conceptos clave • • • • • Se puede examinar el contenido de árboles de directorios completos con el comando ls -R. El comando mkdir crea directorios. El comando rmdir borra directorios (vacíos). cp -r copia directorios recursivamente. rm -r suprime directorios recursivamente. Creación de directorios (nuevos, vacíos): mkdir La organización de archivos dentro de directorios requiere la habilidad para crear los directorios que necesita. En Linux, el comando para hacer un directorio nuevo es el comando mkdir (del inglés make directory). Uso: mkdir [OPCIONES] {DIRECTORIO...} Crea el(los) DIRECTORIO(s) si no existe(n). Falla y emite un mensaje de error si uno o más de los DIRECTORIO(s) existen, pero los nuevos directorios restantes son aún creados. Para crear un subdirectorio ~/public_html Elvis puede proceder así: [elvis@station elvis]$ ls [elvis@station elvis]$ mkdir public_html
  • 28. 28 Filesystem basics [elvis@station elvis]$ ls public_html Después Elvis puede crear un subdirectorio de public_html: [elvis@station elvis] ls public_html [elvis@station elvis] mkdir public_html/images [elvis@station elvis] ls public_html images Sin embargo, observe que por defecto, mkdir no creará un subdirectorio si el directorio padre no existe de antemano: [elvis@station elvis] ls work ls: work: No such file or directory [elvis@station elvis] mkdir work/spreadsheets mkdir: cannot create directory `work/spreadsheets': No such file or directory Sólo si Elvis utiliza mkdir -p (como 'padre') puede crear un árbol de directorios completo de una sola vez: [elvis@station elvis] ls work ls: work: No such file or directory [elvis@station elvis] mkdir -p work/spreadsheets [elvis@station elvis] mkdir -p work/images/logos [elvis@station elvis] mkdir -p work/images/advertising [elvis@station elvis] ls work images spreadsheets [elvis@station elvis] ls work/images advertising logos Listado de árboles de directorios 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. Cuando un comando se repite a través de una estructura, operando en cada elemento de la estructura de la misma manera que en el elemento superior, se dice que el comando actúa de modo recursivo. La opción -R especifica que el comando ls debería listar con recursion. 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. 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. Borrar directorios (vacíos): rmdir El comando para borrar un directorio es rmdir. (remover directorio). Uso: rmdir [OPCIONES] {DIRECTORIO...} 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. Para borrar su subdirectorio ~/public_html/images Elvis puede proceder así: [elvis@station public_html [elvis@station [elvis@station [elvis@station elvis]$ ls elvis]$ rmdir public_html/images elvis]$ ls 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. Listado de árboles de directorios 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. 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. Cuando un comando se repite a través de una estructura, operando en cada elemento de la estructura de la misma manera que en el elemento superior, se dice que el comando actúa de modo recursivo. La opción -R especifica que el comando ls debería listar con recursion. 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. [elvis@station elvis]$ ls -R work work/: images spreadsheets 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. Copiar árboles de directorios: cp -r 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). Considere la siguiente estructura en el directorio de inicio de Hogan: Figure 1. Estructura del directorio antes de copiar -- html |
  • 31. 31 Filesystem basics hogan -- website -- -- forms | | -| | | -- songs -| | | | | -| | -- media -| -| | -- photos-| -- song1.midi song2.midi picture1.png picture2.png Aunque este árbol de directorios contiene muchas ramas y archivos, se puede copiar con una sóla orden: [hogan@station hogan]$ cp -r website archive Figure 2. Estructura del directorio después de copiar -- html | -- website -- -- forms | | | | -| | | | | -- songs -| | | | | | | -| | | | -- media -| | -| | | hogan --- photos-| | | -| | -- html | | -- archive -- -- forms | | -| | | -- songs -| | | | | -| | -- media -| -| | -- photos-- song1.midi song2.midi picture1.png picture2.png song1.midi song2.midi picture1.png
  • 32. 32 Filesystem basics | -- picture2.png Recuerde la diferencia en el comportamiento de cp cuando el último argumento es un directorio existente: se hace una copia del (los) archivo(s) fuente(s) dentro del directorio destino. En la demostración anterior el directorio archive no existía previamente así que fue creado. Pero si el directorio archive ya hubiese existido el efecto hubiera sido diferente. Figure 3. Estructura del directorio antes de copiar -- html | -- website -- -- forms | | | | -| | | | | -- songs -| | | | | | | -hogan -| | | -- media -| | -| | | | -- photos-| | | --- archive song1.midi song2.midi picture1.png picture2.png Hogan usa exactamente el mismo comando que antes para copiar: [hogan@station hogan]$ cp -r website archive Figure 4. Estructura del directorio después de copiar con cp -r websitearchive -- html | -- website -- -- forms | | | | -| | | | | -- songs -| | | | | | | -| | | | -- media -| | -| | | hogan --- photos-| | | -- song1.midi song2.midi picture1.png picture2.png
  • 33. 33 Filesystem basics | | | -- html | -- archive -- website -- -- forms | | -| | | -- songs -| | | | | -| | -- media -| -| | -- photos-| -- song1.midi song2.midi picture1.png picture2.png En esta segunda demonstración, el directorio website es recreado dentro del directorio archive. Borrar árboles de directorios: rm -r 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). Considere la siguiente estructura en el directorio de inicio de Hogan: Figure 1. Estructura del directorio antes de borrarlo -- html | hogan -- website -- -- forms | | -| | | -- songs -| | | | | -| | -- media -| -| | -- photos-| -- song1.midi song2.midi picture1.png picture2.png Si Hogan quisiera borrar el sub-árbol media, podría utilizar un sólo comando: [hogan@station hogan]$ rm -r website/media
  • 34. 34 Filesystem basics Figure 2. Estructura del directorio después de borrar -- 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 Hacer una copia de seguridad de un árbol de directorios 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. [hogan@station hogan]$ cp report report.bak cp: omitting directory `report' Al darse cuenta de su error añade la opción -r para decirle al comando cp que copie de modo recursivo. [hogan@station hogan]$ cp -r report report.bak Ahora el contenido del directorio report es copiado de modo recursivo al directorio report.bak.
  • 35. 35 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. [hogan@station hogan]$ rmdir report.bak/ rmdir: `report.bak/': Directory not empty Recuerde que rmdir sólo funciona en directorios vacíos así que en su lugar utiliza rm -r. [hogan@station hogan]$ rm -r report.bak/ [hogan@station hogan]$ ls report Creación de una copia local de los archivos de ejemplo 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. 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 examples/glade: glade-demo.py README README test.glade examples/gobject: properties.py signal.py examples/ide: break.xpm edit.py browse.py edit.xpm ... gtkdb.py gtkprof.py next.xpm pyide.py README return.xpm step.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. Tiempo estimado: 20 minutos. Especificaciones Se le ha despertado el interés en gdm, una aplicación que proporciona la pantalla de inicio de sesión gráfica de su sistema y desea explorar su diseño.
  • 37. 37 Filesystem basics 1. Utilice el comando ls (con las opciones apropiadas) para obtener un listado recursivo, incluyendo tamaños (-s) del contenido del directorio /usr/share/gdm. Redireccione la salida del comando a un archivo en su directorio de inicio llamado lsgdm.txt (debido a propósitos evaluativos es importante que especifique el directorio como una referencia absoluta, por ejemplo, no share/gdm). 2. Haga un copia (recursiva) del directorio /usr/share/gdm en su directorio de inicio. El directorio copiado también se debe llamar gdm. 3. Haga una segunda copia del directorio recién creado en su directorio de inicio. gdm, llamado gdm.bak. 4. Desde su copia de seguridad, suprima (de modo recursivo) el subdirectorio gdm.bak/themes/circles. 5. De nuevo desde su copia de seguridad, mueva el subdirectorio gdm.bak/themes/Bluecurve a su directorio de inicio (el directorio todavía se debe llamar Bluecurve). Deliverables Question 1 1. Un archivo en su directorio de inicio llamado lsgdm.txt, el cual contiene la salida redireccionada de un listado recursivo, inclyendo el tamaño del directorio /usr/share/gdm. 2. Un directorio en su directorio de inicio llamado gdm, el cual es una copia exacta del directorio /usr/share/gdm. 3. Un directorio en su directorio de inicio llamado gdm.bak, el cual es una copia exacta del directorio gdm, con el subdirectorio gdm.bak/themes/circles borrado y con el subdirectorio gdm.bak/themes/Bluecurve/ movido a su directorio de inicio. 4. Un directorio en su directorio de inicio llamado Bluecurve, el cual es el resultado del resultado anterior. Limpieza Los directorios creados son bastante grandes, así que si quiere conservar espacio de disco puede borrarlos cuando haya terminado. Capítulo 5 Nombres y comodines de archivos Conceptos clave
  • 38. 38 Filesystem basics • • • • Los nombres de archivos pueden contener casi cualquier caracter a excepción de /. Aunque los nombres de archivos pueden contener casi cualquier caracter eso no significa que deban contenerlos. Los archivos que comienzan con . son archivos "ocultos". Los caracteres *, ?, [...], y [^...] se pueden utilizar para encontrar los archivos con nombres de archivos similares por medio de un proceso llamado "comodines de archivo". 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. Los nombres de archivos de Linux pueden contener cualquier caracter imprimible (y algunos que no lo son) a excepción de la barra oblicua /. Esta barra no puede ser parte del nombre de archivo, puesto que es el caracter utilizado para separar los componentes del nombre de un directorio en un nombre relativo o completamente calificado. Como la mayoría de los caracteres "inusuales" son meta-caracteres de shell, deben estar protegidos entre comillas para poderlos utilizar en un nombre de archivo: [julius@station julius]$ touch [julius@station julius]$ touch [julius@station julius]$ touch [julius@station julius]$ touch [julius@station julius]$ ls !@#$%^&*()_+=-|}]{[:;?>.<,~` [julius@station julius]$ 'a and b' '"' "'" '!@#$%^&*()_+=-|}]{[:;?>.<,~`' ' " a and b 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. 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. Figure 1. Caracteres "seguros" para nombres de archivos A-Z a-z 0-9 . _ - + ~ Aquí hay dos ejemplos que le mostrarán el daño que puede causar el uso de caracteres nosignificativos. Vamos a abusar de dos meta-caracteres de shell: el espacio y el signo mayor que. Ejemplo 1: ¡Tenga cuidado con esos espacios! [hogan@station hogan]$ mkdir bad dir [hogan@station hogan]$ touch this and that [hogan@station hogan]$ mv this and that bad dir [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. Ejemplo 2: Una pequeña equivocación de dirección
  • 40. 40 Filesystem basics [hogan@station hogan]$ mkdir bad- > dir [hogan@station hogan]$ touch this [hogan@station hogan]$ mv this bad- > dir [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 Los nombres de archivos y directorios (recuerde un directorio es un tipo de archivo) que comienzan por un punto son archivos "ocultos". Estos archivos no aparecen en los listados de directorio producidos por ls a menos que se utilice la opción de comando especial -a (del inglés all) o a menos que se especifique el punto inicial como parte del nombre. Se hace posible reducir la aglomeración de elementos y la confusión manteniendo ciertos archivos" fuera de vista y de consideración". En la próxima sección aprenderemos a nombrar múltiples archivos por medio de una técnica conocida como uso de "comodines". En general, los archivos ocultos tampoco aparecen en un "comodín" a no ser que el punto inicial sea listado específicamente. 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. [alice@station alice]$ mkdir .secret [alice@station alice]$ touch sample [alice@station alice]$ ls
  • 41. 41 Filesystem basics sample [alice@station . .. sample [alice@station [alice@station [alice@station sample [alice@station [alice@station sample [alice@station alice]$ .secret alice]$ alice]$ alice]$ ls -a mv sample .secret ls ls .secret alice]$ cd .secret .secret]$ ls .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. El comodín de parentesis representa una lista de caracteres individuales. Por lo tanto, [aeiou] coincide con cualquier vocal. Un rango contiguo de caracteres se puede representar utilizando un guión como en [a-z] para el alfabeto en minúsculas. Una ^ inicial, niega la lista de manera que [^aeiou] sea cualquier caracter menos una vocal. Un guión "real" se puede representar escapando los caracteres utilizando una barra invertida () (más adelante se abordará este tema). Por lo tanto, la expresión [a-z] coincide con a, z o un guión sólamente. Se pueden mezclar caracteres individuales y rangos. El patrón [A-Zaz0-9._-+~] coincide con cualquiera de los caracteres "seguros" de nombres de archivos mencionados anteriormente en la gráfica 5-1.
  • 42. 42 Filesystem basics Suponga que el directorio actual contiene los siguientes archivos: image1.jpg image2.jpg image10.jpeg image11.jpeg page1.html page2.html page3.htm page40.htm script1.pl La siguiente tabla ilustra el uso de estos comodines. Table 2. Ejemplos de comodines Patrón Genera la lista * todos los archivos en la lista *.html page1.html page2.html page*.htm* page1.html page2.html page3.htm page40.htm image?.* image1.jpeg image2.jpeg [ps]* page1.html page2.html page3.htm page40.htm script1.pl [^ps]* image1.jpeg image2.jpeg image10.jpeg image11.jpeg Los comodines se pueden utilizar con cualquier comando que espera el nombre de un archivo. Por ejemplo, el comando [bob@station bob] mv *.htm public_html es lo mismo que el comando [bob@station bob] mv page3.htm page40.htm public_html asumiendo que el directorio de inicio de Bob contiene los archivos listados anteriormente. [Nota técnica: muchos de los comandos se comportan de manera diferente cuando no aparecen archivos en la lista, contrario a cuando uno o más archivos se dan como parte del comando. Entonces, ¿qué sucede en dicho comando si se utiliza un patron de comodín de modo que el listado de archivos esté vacío? En el caso especial donde la shell bash intenta expandir una expresión de comodín y no coincide con nada, ésta deja la expresión como parte del comando. Esto se ilustra a continuación: [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. 43 Filesystem basics Ejemplos Búsqueda de ese archivo de configuración Alice estaba revisando recientemente el archivo de configuración del DNS (Servicio de Nombres de Dominio), pero olvidó el nombre. Recuerda que el archivo terminaba en .conf. Con el fin de reducir el número de archivos a tomar en consideración, utilizó los comodines para listar todos los archivos en el directorio /etc terminados en .conf. [alice@station images]$ ls /etc/*.conf /etc/aep.conf /etc/lftp.conf /etc/aeplog.conf /etc/libuser.conf /etc/cdrecord.conf /etc/logrotate.conf /etc/esd.conf /etc/lpd.conf /etc/fam.conf /etc/ltrace.conf /etc/gpm-root.conf /etc/modprobe.conf /etc/grub.conf /etc/mtools.conf /etc/host.conf /etc/named.conf /etc/initlog.conf /etc/nscd.conf /etc/jwhois.conf /etc/nsswitch.conf /etc/krb5.conf /etc/ntp.conf /etc/krb.conf /etc/pam_smb.conf /etc/ldap.conf /etc/pbm2ppa.conf /etc/ld.so.conf /etc/pine.conf /etc/pnm2ppa.conf /etc/pwdb.conf /etc/resolv.conf /etc/rndc.conf /etc/scrollkeeper.conf /etc/sysctl.conf /etc/syslog.conf /etc/updatedb.conf /etc/updfstab.conf /etc/warnquota.conf /etc/webalizer.conf /etc/wvdial.conf /etc/xinetd.conf /etc/yp.conf Mirando un poco más reconoce el archivo de configuración resolv.conf. Listado de bibliotecas estáticas Bob ha estado aprendiendo la diferencia entre bibliotecas enlazadas estáticamente y dinámicamente que los programas utilizan. El sabe que las bibliotecas enlazadas estática y convencionalmente tienen el nombre de libalgo.a, en donde algo es el nombre de la biblioteca. También sabe que las bibliotecas se encuentran por lo general en el directorio /usr/lib. 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. [bob@station bob]$ ls /usr/lib/*a /usr/lib/liba2ps.a /usr/lib/libimlib-ps.a /usr/lib/libacl.a /usr/lib/libimlib-tiff.a /usr/lib/libanl.a /usr/lib/libimlib-xpm.a ... /usr/lib/mozilla: plugins
  • 44. 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. [bob@station bob]$ ls /usr/lib/lib*.a /usr/lib/liba2ps.a /usr/lib/libimlib-ps.a /usr/lib/libacl.a /usr/lib/libimlib-tiff.a /usr/lib/libanl.a /usr/lib/libimlib-xpm.a ... /usr/lib/libimlib-jpeg.a /usr/lib/libimlib-png.a /usr/lib/libimlib-ppm.a /usr/lib/libz.a /usr/lib/libzvt.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. [bob@station bob]$ ls /usr/lib/lib?.a /usr/lib/libc.a /usr/lib/libl.a /usr/lib/libz.a /usr/lib/libg.a /usr/lib/libm.a [bob@station bob]$ ls /usr/lib/lib??.a /usr/lib/libdl.a /usr/lib/libgd.a /usr/lib/librt.a /usr/lib/libfl.a /usr/lib/libmp.a [bob@station bob]$ ls /usr/lib/lib???.a /usr/lib/libacl.a /usr/lib/libgdk.a /usr/lib/libosp.a /usr/lib/librle.a /usr/lib/libanl.a /usr/lib/libgif.a /usr/lib/libpam.a /usr/lib/librpm.a /usr/lib/libapm.a /usr/lib/libgmp.a /usr/lib/libpbm.a /usr/lib/libSDL.a /usr/lib/libbfd.a /usr/lib/libgpm.a /usr/lib/libpci.a /usr/lib/libssl.a /usr/lib/libbsd.a /usr/lib/libgtk.a /usr/lib/libpgm.a /usr/lib/libttf.a /usr/lib/libefs.a /usr/lib/libIDL.a /usr/lib/libpng.a /usr/lib/libusb.a /usr/lib/libesd.a /usr/lib/libnsl.a /usr/lib/libpnm.a /usr/lib/libxml.a /usr/lib/libgal.a /usr/lib/libogg.a /usr/lib/libppm.a /usr/lib/libzvt.a ¿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? Listado de las páginas man
  • 45. 45 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. [alice@station man]$ ls /usr/share/man/ cs de_DE fr hu it man1 man3 man5 de es fr_FR id ja man2 man4 man6 man7 man8 man9 mann pl pt_BR ru sk sv 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. [alice@station man]$ ls /usr/share/man/man[157] /usr/share/man/man1: :.1.gz pbmtolj.1.gz [.1.gz pbmtoln03.1.gz 411toppm.1.gz pbmtolps.1.gz a2p.1.gz pbmtomacp.1.gz ... groff.7.gz groff_char.7.gz groff_diff.7.gz wireless.7.gz x25.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. [alice@station man]$ ls /usr/share/man/man[1-9] /usr/share/man/man1: :.1.gz pbmtolj.1.gz [.1.gz pbmtoln03.1.gz 411toppm.1.gz pbmtolps.1.gz a2p.1.gz pbmtomacp.1.gz ... named-checkconf.8.gz named-checkzone.8.gz zic.8.gz /usr/share/man/man9: Ejercicios en línea Administración de archivos con comodines Lab Exercise Objetivo: Administrar archivos de modo eficiente por medio del uso de comodines
  • 46. 46 Filesystem basics de archivo. Tiempo estimado: 20 minutos. Especificaciones Este laboratorio utilizará comodines de archivo para administrar un gran número de archivos que tienen nombres vagamente estructurados. Todos los archivos se encuentran en el directorio /usr/share/tcl8.4/encoding. 1. Cree los siguientes directorios en su directorio de inicio: cp_even, cp_mid, cp_thousand, iso_mid, mac y xxxn. 2. Examine los archivos en el directorio /usr/share/tcl8.3/encoding. Copie todos los archivos que comienzan con mac en el directorio mac. 3. Copie todos los archivos que comienzan con cp y que tengan un número par en el directorio cp_even. 4. Copie todos los archivos que comienzan con cp y que tengan un número mayor a 1000 en el directorio cp_thousand. 5. Copie todos los archivos que comienzan con cp y que tengan un número mayor a 800, pero menor que 1000 en el directorio cp_mid. 6. Copie todos los archivos que comienzan con iso8859- y que tengan un número después del guión entre 3 y 8 (inclusive) en el directorio iso_mid. 7. Copie todos los archivos cuyos primeros cuatro caracteres estén compuestos de exactamente tres letras seguidas por un número dentro del directorio xxxn. 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 cp1252.enc cp1258.enc cp860.enc cp1254.enc cp850.enc cp862.enc cp_mid: cp850.enc cp852.enc cp855.enc cp857.enc cp860.enc cp861.enc cp_thousand: cp1250.enc cp1252.enc cp862.enc cp863.enc cp864.enc cp864.enc cp866.enc cp874.enc cp865.enc cp866.enc cp869.enc cp1254.enc cp932.enc cp936.enc cp950.enc cp874.enc cp932.enc cp936.enc cp1256.enc cp949.enc cp950.enc cp1258.enc
  • 47. 47 Filesystem basics cp1251.enc cp1253.enc iso_mid: iso8859-3.enc iso8859-4.enc mac: macCentEuro.enc macCroatian.enc macCyrillic.enc xxxn: big5.enc iso2022.enc iso2022-jp.enc iso2022-kr.enc iso8859-10.enc cp1255.enc iso8859-5.enc iso8859-6.enc iso8859-7.enc iso8859-8.enc macDingbats.enc macGreek.enc macIceland.enc iso8859-13.enc iso8859-14.enc iso8859-15.enc iso8859-16.enc iso8859-1.enc cp1257.enc macJapan.enc macRoman.enc macRomania.enc iso8859-2.enc iso8859-3.enc iso8859-4.enc iso8859-5.enc iso8859-6.enc macThai.enc macTurkish.enc macUkraine.enc iso8859-7.enc iso8859-8.enc iso8859-9.enc jis0201.enc jis0208.enc jis0212.enc koi8-r.enc koi8-u.enc ksc5601.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). [bob@station bob]$ cp /usr/share/tcl8.3/encoding/mac* mac/ Capítulo 6 Examen de archivos Conceptos clave • • • • • El comando file muestra el tipo de archivo El comando cat muestra el contenido de un archivo Los comandos more y less "hojean" através de un archivo, una pantalla completa a la vez. Los comandos head y tail presentan las primeras o las últimas líneas de un archivo. En el entorno gráfico X se puede utilizar nautilus para examinar archivos de texto. 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. 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í. file [OPCIONES] [ARCHIVO...] Prueba FILE(s) para determinar el tipo de archivo y muestra los resultados en la salida estándar. Ejemplo de uso con archivos ASCII: [nero@station nero]$ file index.html novel.ps mailer index.html: HTML document text novel.ps: PostScript document text conforming at level 3.0 mailer: perl script text executable Ejemplo de uso con archivos binarios: [nero@station nero]$ file logo.jpeg symphony.mp3 archive.tgz logo.png: PNG image data, 387 x 69, 8-bit grayscale, noninterlaced symphony.mp3: MP3, 128 bits, 44.1 kHz, JStereo archive.tgz: gzip compressed data, deflated, last modified: Thu Mar 20 21:27:27 2003, os: Unix 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. cat [OPCIONES] [ARCHIVO...] Concatena FILE(s) en la salida estándar. Opción Efecto
  • 49. 49 Filesystem basics Opción Efecto -A Muestra todos los caracteres incluyendo los caracteres de control y los de no 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. Los paginadores more y less 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. more [OPCIONES] [ARCHIVO...] Muestra el/los archivo(s)FILE(s) en la salida estándar y una pantalla a la vez bajo el control del teclado. Acción Opció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 less [OPCIONES] [ARCHIVO...] 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. 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 Table 1. Comandos de navegación less (more) Comando more? Acción >espacio> Si adelanta una pantalla entera [PgDn] No adelanta una pantalla entera b Si devuelve una pantalla entera [PgUp] No devuelve una pantalla entera [DnArrow] No adelanta una línea [Flechaarriba] No se devuelve una línea /text Si va hacia adelante para buscar texto ?texto No va hacia atrás para buscar texto n Si repite la última búsqueda N No repite la última búsqueda pero en dirección contraria q Si quit h Si ayuda (introduce muchos comandos nuevos) 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. [elvis@station elvis]$ ps aux USER PID %CPU %MEM VSZ root 1 0.0 0.0 1392 RSS TTY 92 ? STAT START S 17:27 TIME COMMAND 0:04 init [
  • 51. 51 Filesystem basics root 2 0.0 0.0 0 0 ? root 3 0.0 0.0 0 0 ? root 4 0.0 0.0 0 [ksoftirqd_CPU0] root 9 0.0 0.0 0 0 ? ... [elvis@station elvis]$ ps aux | less SW SW 17:27 17:27 SW 17:27 0 ? 0:00 [keventd] 0:00 [kapmd] SWN 17:27 0:00 0:00 [bdflush] 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. head [OPCIONES] [ARCHIVO...] Escribe las primeras 10 líneas de cada ARCHIVO a la salida estándar. 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. [elvis@station elvis]$ head /etc/group root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon sys:x:3:root,bin,adm adm:x:4:root,adm,daemon tty:x:5: disk:x:6:root lp:x:7:daemon,lp mem:x:8: kmem:x:9: [elvis@station elvis]$ head -n 5 /etc/group root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon sys:x:3:root,bin,adm adm:x:4:root,adm,daemon
  • 52. 52 Filesystem basics Si se le da más de un nombre de archivo como argumento head presentará unas primeras pocas líneas de cada archivo individualmente separado por un encabezado que muestra el nombre de archivo. En el siguiente ejemplo, elvis lista las primeras pocas líneas de los scripts de servicios de Red Hat que se encuentran en el directorio /etc/rc.d/init.d. [elvis@station elvis]$ head -5 /etc/rc.d/init.d/* ==> /etc/rc.d/init.d/aep1000 <== #!/bin/sh # # Tags # chkconfig: - 30 70 # description: load and unload AEP1000/AEP2000 coprocessor driver ==> /etc/rc.d/init.d/anacron <== #!/bin/sh # Startup script for anacron # # chkconfig: 2345 95 05 # description: Run cron jobs that were left out due to downtime ==> /etc/rc.d/init.d/apmd <== #!/bin/sh # # chkconfig: 2345 26 74 # description: apmd is used for monitoring battery status and logging it via # syslog(8). It can also be used for shutting down the machine when ==> /etc/rc.d/init.d/atd <== #!/bin/bash # # /etc/rc.d/init.d/atd # # Starts the at daemon ... 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. [student@station student]$ ps aux | USER PID %CPU %MEM VSZ RSS root 1 0.0 0.1 2500 416 root 2 0.0 0.0 0 0 root 3 0.0 0.0 0 0 root 4 0.0 0.0 0 0 [ksoftirqd/0] [student@station student]$ El comando tail head -5 TTY ? ? ? ? STAT S SW SW SWN START 10:51 10:51 10:51 10:51 TIME 0:03 0:00 0:00 0:00 COMMAND init [5] [keventd] [kapmd]
  • 53. 53 Filesystem basics tail [OPCIONES] [ARCHIVO...] 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. [elvis@station elvis]$ tail /etc/group named:x:25: gdm:x:42: postgres:x:26: apache:x:48: postdrop:x:90: postfix:x:89: squid:x:23: webalizer:x:67: ldap:x:55: elvis:x:500: [elvis@station elvis]$ tail -n 5 /etc/group postfix:x:89: squid:x:23: webalizer:x:67: ldap:x:55: elvis:x:500: 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 Identificación de documentos con file 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. 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. [prince@station banners]$ cd /usr/share/cups/banners/ [prince@station banners]$ file * classified: PostScript document text conforming at level confidential: PostScript document text conforming at level secret: PostScript document text conforming at level standard: PostScript document text conforming at level topsecret: PostScript document text conforming at level unclassified: PostScript document text conforming at level 3.0 3.0 3.0 3.0 3.0 3.0 El comando file revela que éstos son documentos PostScript enviados a la impresora como pancartas. Determinar el tipo correcto de archivo con file 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. [elvis@station images]$ ls pics/ dscn0936.png dscn0942.png dscn0953.jpg dscn0938.png dscn0952.png dscn0959.jpg 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. [elvis@station images]$ file pics/dscn0936.png: PNG image interlaced pics/dscn0938.png: PNG image interlaced pics/dscn0942.png: PNG image interlaced pics/dscn0952.png: PNG image interlaced pics/dscn0953.jpg: PNG image interlaced pics/dscn0959.jpg: PNG image interlaced pics/* data, 360 x 480, 8-bit/color RGB, nondata, 640 x 480, 8-bit/color RGB, nondata, 360 x 480, 8-bit/color RGB, nondata, 360 x 480, 8-bit/color RGB, nondata, 640 x 480, 8-bit/color RGB, nondata, 640 x 480, 8-bit/color RGB, non- Los últimos dos archivos están en formato PNG como los otros cuatro. Aparentemente, los dos últimos fueron nombrados con una extensión equivocada. Hojear archivos con head
  • 55. 55 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. [blondie@station blondie]$ head /etc/profile.d/*.sh ==> /etc/profile.d/glib2.sh <== ## This caused GLib2 applications to convert filenames from ## locale encoding to UTF-8. If the locale encoding is already ## UTF-8 then it makes no difference. export G_BROKEN_FILENAMES=1 ==> /etc/profile.d/gnome-ssh-askpass.sh <== SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass export SSH_ASKPASS ==> /etc/profile.d/jdk.sh <== export PATH=/usr/local/j2sdk1.3.1/bin:$PATH ==> /etc/profile.d/lang.sh <== # /etc/profile.d/lang.sh - set i18n stuff 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" ... Combinación de archivos múltiples en un sólo archivo con head La usuaria madonna está aprendiendo sobre PAM, los módulos de autenticación conectables de Linux. Acaba de descubrir el directorio /usr/share/doc/pam-0.75/txts, el cual contiene un gran número de archivos README. [madonna@station madonna]$ cd /usr/share/doc/pam-0.75/txts/ [madonna@station txts]$ ls pam_appl.txt README.pam_ftp README.pam_shells pam_modules.txt README.pam_limits README.pam_stack pam.txt README.pam_listfile README.pam_stress README README.pam_localuser README.pam_tally README.pam_access README.pam_mail README.pam_time README.pam_chroot README.pam_nologin README.pam_timestamp README.pam_console README.pam_permit README.pam_unix README.pam_cracklib README.pam_pwdb README.pam_userdb README.pam_deny README.pam_rhosts README.pam_warn