next up previous contents
Next: Redireccionamientos Up: Sistema de Archivos Previous: Sistema de Archivos   Índice General

Manejo del sistema de archivos

El comando utilizado para visualizar el contenido de un directorio es ls con una serie de opciones. Las opciones a programas y comandos en Unix típicamente van precedidas por el carácter -, salvo cuando se indique lo contrario. Las opciones sirven generalmente para cambiar el comportamiento de un comando. Por ejemplo para ver el contenido de un directorio en forma somera, basta dar ls:

$ ls
TODO                    funny.tex       ps-files
bib.tex                 gpl.tex         shell.tex
commands.tex            guide.dvi       shell2.tex
config.tex              guide.ps        starting.tex
convntns.tex            guide.tex       thanks.tex
copyright.tex           intro.tex       unixinfo.tex
emacs-chapter-stuff     kmsg            vi.tex
emacs.tex               kmsg.2          x11.tex
errors.tex              l               gpl.tex
find_unfinished         network.tex

o en forma mas completa ls -al, donde la opción a indica que queremos todos los archivos (se puede ``ocultar'' un archivo a ls) y la opción l indica que queremos la versión completa o ``larga'' de la salida:

$ ls -al
total 2431
drwxr-xr-x      4       mancha  users   1024    Sep     20      16:12   .
drwxrwxrwx      3       mancha  users   1024    Jan     8       19:52   ..
-rw-r--r--      1       mancha  users   572     Aug     7       22:08   TODO
-rw-r--r--      1       mancha  users   619     Feb     9       1994    bib.tex
-rw-r--r--      1       mancha  users   20051   Aug     3       21:10   commands.tex
-rw-r--r--      1       mancha  users   46025   Aug     30      19:32   config.tex
-rw-r--r--      1       mancha  users   1707    Sep     6       22:50   convntns.tex
-rw-r--r--      1       mancha  users   1945    Aug     30      16:57   copyright.tex
drwxr-xr-x      2       mancha  users   1024    Aug     5       20:25   emacs-chapter-stuff
-rw-r--r--      1       mancha  users   58341   Sep     6       22:51   emacs.tex
-rw-r--r--      1       mancha  users   7260    Aug     3       10:53   errors.tex
-rwxr-xr-x      1       mancha  users   20      Feb     9       1994    find_unfinished
-rw-r--r--      1       mancha  users   28447   Aug     30      16:51   funny.tex
-rw-r--r--      1       mancha  users   18124   Feb     9       1994    gpl.tex
-rw-r--r--      1       mancha  users   498708  Sep     20      16:11   guide.dvi
-rw-r--r--      1       mancha  users   1576525 Sep     20      16:11   guide.ps
-rw-r--r--      1       mancha  users   4721    Sep     8       13:35   guide.tex
-rw-r--r--      1       mancha  users   12714   Aug     3       10:30   intro.tex
-rw-r--r--      1       mancha  users   1177    Feb     9       1994    kmsg
-rw-r--r--      1       mancha  users   91      Feb     9       1994    kmsg.2
-rw-r--r--      1       mancha  users   25582   Aug     4       12:15   lgpl.tex
-rw-r--r--      1       mancha  users   5052    Aug     30      16:36   network.tex
drwxr-xr-x      2       mancha  users   1024    Aug     3       21:11   ps-files
-rw-r--r--      1       mancha  users   29551   Aug     4       12:01   shell.tex
-rw-r--r--      1       mancha  users   34042   Aug     4       13:09   shell2.tex
-rw-r--r--      1       mancha  users   22141   Aug     4       12:01   starting.tex
-rw-r--r--      1       mancha  users   934     Aug     2       20:45   thanks.tex
-rw-r--r--      1       mancha  users   10919   Aug     30      16:58   unixinfo.tex
-rw-r--r--      1       mancha  users   32095   Aug     30      19:35   vi.tex
-rw-r--r--      1       mancha  users   13574   Aug     30      18:24   x11.tex

Las primeras diez columnas indican el tipo de acceso que tiene cada archivo para los diferentes usuarios. Así, el archivo con nombre guide.ps tiene los accesos que se indican en la tabla [*]


Tabla: Accesos a un archivo. Cada columna está numerada, con los siguientes significados: 1) No es un archivo ``especial'' 2) El dueño (pablo) puede leerlo 3) El dueño puede escribirlo 4) El dueño no puede ejecutarlo 5) Los del grupo (users) pueden leerlo 6) Los del grupo no pueden escribirlo 7) Los del grupo no pueden ejecutarlo 8) Los otros pueden leerlo 9) Los otros no pueden escribirlo 10) Los otros no pueden ejecutarlo 11) Número de ligas 12) Usuario 13) Grupo 14) Tamaño en bytes 15) y 16) Fecha de alteración 17) Hora de alteración 18) Nombre del archivo.
1#1


En el caso de los archivos ejecutables, aparece una x para denotarlos. Los caracteres para los archivos ``especiales'' son: - normales, d directorios, l liga simbólica, b dispositivo por bloques, c dispositivo por carácteres y p pipe3.2 ``nombrado''.

Para cambiar los atributos de un archivo contamos con la instrucción chmod, que nos permite cambiar el modo de acceso del archivo. La sintáxis es:

chmod quienes operacion modo

donde quienes puede ser una combinación de ugo con u para fijar el modo para el usuario, g para el grupo y o para los otros, es decir, para los que no son el usuario y que tampoco pertenecen al grupo. La operacion es + para añadir y - para retirar el modo a los grupos seleccionados y modo puede ser cualquier combinación de rwx con el significado dado en la tabla [*]. Por ejemplo: si el usuario Pablo quiere que un archivo en particular, digamos que se llama diario, no sea leído por nadie en el sistema salvo por él y por root3.3, tendría que usar: chmod go-rw diario. Así que si ahora examina los accesos del archivo con ls, estos serán:

-rw-------   1 pablo    usuarios     1789 Jun 13 01:54 diario

Lo mismo en caso de querer ocultar un directorio, por ejemplo el directorio cursilerias: chmod go-rwx cursilerias de tal manera que los demás usuarios del sistema ni siquiera podrán ver el contenido del directorio.

Ahora pensemos que Pablo es un gran programador3.4 y en sus ratos libres se dedica, además de escribir cartas, a escribir programas que desea compartir con los demás usuarios del sistema. Para esto, crea un subdirectorio donde los depositará y además los dejará con los permisos adecuados para que todo mundo los pueda ejecutar y examinar. Digamos que decide que el directorio se llamará bin3.5, y allí deposíta todos los programas que hasta ahora ha hecho. La secuencia completa es la siguiente:

 1:$ cd
 2:$ mkdir bin
 3:$ chmod u=rwx bin
 4:$ chmod go=rx bin
 5:$ cd bin
 6:$ cp ../fuentes/* .
 7:$ chmod u=rwx *
 8:$ chmod go=rx *

Ejercicio: Puede explicar paso a paso lo que hizo Pablo?

La primera línea desplegada por ls es el total de bloques ocupados por el directorio:

total 2431

Las siguientes dos líneas se refieren a dos directorios especiales: el directorio `.' que es una referencia a sí mismo y el directorio `..' que es la referencia al directorio padre del actual.

drwxr-xr-x      4       mancha  users   1024    Sep     20      16:12   .
drwxrwxrwx      3       mancha  users   1024    Jan     8       19:52   ..

Encontramos también un directorio:

drwxr-xr-x   2 mancha   users        1024 Aug  5 20:25 emacs-chapter-stuff

donde el usuario, los miembros de su grupo y los demás usuarios tienen puesta la bandera de ejecución. En el caso de un directorio, esta bandera indica que se pueden cambiar a ese directorio, pero sólo el usuario tiene permiso de escritura.

El archivo find_unfinished aparece también con la bandera de ejecución puesta. Como es un archivo ordinario, podemos asumir que realmente se trata de un ``ejecutable'', pese a medir tan sólo 20 bytes. Más adelante veremos cómo es posible esto.

-rwxr-xr-x      1       mancha  users   20      Feb     9       1994 find_unfinished

El comando ls es de los que más opciones tiene. Conocerlas todas es demasiado pedir pese a que probablemente sea de los comandos más usados. Qué hacer entonces? Bueno, el segundo comando más empleado en Unix es man, que es el comando que muestra la ayuda de otros comandos.

Dadas las diferentes versiones de Unix que existen es difícil hacer un compendio completo de todas las opciones de cada comando, así que man debe ser siempre nuestra referencia para cada sistema. En este caso, para conocer bien todas las opciones de ls, lo más conveniente es que las veamos en la ``página'' de ls, por supuesto con man.

Las opciones más útiles son -k que lista las páginas de manual de los comandos referentes a la siguiente palabra que se dá, por ejemplo:

$ man -k change
chdir (2)               - Change working directory
chmod (1)               - Change the access permissions of files 
chown (1)               - Change the user and group ownership of files 
passwd (1)              - Change password

lista todos los comandos que contienen la palabra change. La otra opción más usada, sirve como una referencia rápida para saber que acción ejecuta un comando en particular. Es la opción -f. Por ejemplo:

$ man -f chdir
chdir (2)               - Change working directory

nos indica que chdir es el comando para movernos entre directorios.

Ahora ya sabemos como interpretar la salida de ls, como invocar la ayuda de un comando en particular, como buscar ayuda acerca de un tópico y como averiguar que hace un comando en particular. Estamos listos para comernos el mundo de Unix. O casi.

Para finalizar ésta sección hablaremos de algunos comandos para manipular archivos y directorios.

En caso de que quisiéramos ver el contenido de un archivo podríamos usar el comando cat:

$ cat find_unfinished 
grep "\*\*\*" *.tex

Bien ahora conocemos el contenido de ese misterioso archivo ejecutable. Parece ser que fue escrito por algún niño o por una persona que habla otro idioma. grep y una serie de garabatos... Pero tenemos a man para saber si grep se trata de algún comando:

$ man -f grep
grep, egrep, fgrep (1)  - Print lines matching a pattern

parece ser que sí, que se trata de un comando, y uno bastante interesante ya que habla de imprimir las líneas que cumplen con un patrón3.6dado. Más adelante hablaremos de él, ahora listemos el contenido de otro archivo. Como lo más probable es que no se tenga a la mano un directorio como el que hemos estado mostrando en los ejemplos, vamos a usar uno común a todos los Unix, el directorio /etc y el archivo passwd, que es donde el Sistema Operativo coteja a los usuarios válidos en el sistema:

$ cat /etc/passwd
root:qb7Y7hJrPw69s:0:0:root:/root:/bin/bash
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
adm:*:3:4:adm:/var/adm:
lp:*:4:7:lp:/var/spool/lpd:
sync:*:5:0:sync:/sbin:/bin/sync
shutdown:*:6:0:shutdown:/sbin:/sbin/shutdown
halt:*:7:0:halt:/sbin:/sbin/halt
mail:*:8:12:mail:/var/spool/mail:
news:*:9:13:news:/usr/lib/news:
uucp:*:10:14:uucp:/var/spool/uucppublic:
operator:*:11:0:operator:/root:/bin/bash
games:*:12:100:games:/usr/games:
man:*:13:15:man:/usr/man:
postmaster:*:14:12:postmaster:/var/spool/mail:/bin/bash
ftp:*:404:1::/home/ftp:/bin/bash
gonzo::418:100::/home/gonzo:/bin/bash
satan::419:100::/home/hell:/bin/bash
snake::420:100::/home/pit:/bin/bash
mancha:Ncoo.YlGCT1sU:501:100:La Mancha de la Calabaza que ladra:/home/mancha:/bin/bash
cecilia:PbcENyydKMFQo:502:100:Cecilia Estrada de Pavia:/home/cecilia:/bin/bash
petra:EnRaT.5l3w33s:503:100:Petra de la Parra Saucedo:/home/petra:/bin/bash
ruperto:JoNBYAhSOCenM:504:100:Ruperto Felgu\'erez P\'\i{}rez:/home/ruperto:/bin/bash
bill:AcU56dAK5xVKE:505:100:William Clinton:/home/bill:/bin/bash
cuau:OiuBXuoDFQOrc:506:100:Cuauht\'emoc C\'ardenas Sol\'orzano:/home/cuau:/bin/bash

Pues resultó que este archivo tiene más líneas de las que caben en la pantalla. Para poder visualizarlo pantalla por pantalla podemos usar un paginador, more, con el comando cat /etc/passwd | more. Si ejecutamos este comando veremos que tenemos manera de detener la salida hasta que demos un espacio y cambia de pantalla, pero qué fué eso de | more? Bueno, pues simplemente le estamos pidiendo al sistema operativo que la salida producida por el comando cat se la pase como entrada al comando more. Esta técnica se conoce como piping o ``entubado''. En la introducción hablábamos de que el diseño de Unix tenía en mente el reunir una colección de pequeños programas muy generales que nos permitan unirlos o conectarlos para realizar tareas más complejas. Este es el primer ejemplo al respecto, más adelante veremos construcciones complejas e interesantes.

Claro que si el usuario avezado lee la página del manual de more, podrá ver que no hace falta pasar por cat y el pipe, sino que directamente podemos usar more /etc/passwd, pero el ejemplo está basado a propósito en la manera Unix de hacer las cosas.

Los usuarios con experiencia en MS-DOS dirán que esto no es exclusivo de Unix, pero cabe aclarar en este punto que mientras que MS-DOS simula esta comunicación entre procesos utilizando archivos --ejecuta el primer programa guardando en un archivo la salida producida por éste y luego ejecuta el programa more sobre el archivo producido-- en Unix esto ocurre en memoria y en tiempo real. Esto es que mientras que en MS-DOS tiene que terminar la ejecución del primer programa (dado que no es multi tareas) para poder ejecutar al siguiente programa con la salida del primero, en Unix, ambos están siendo ejecutados simultáneamente.


next up previous contents
Next: Redireccionamientos Up: Sistema de Archivos Previous: Sistema de Archivos   Índice General
Ismael Olea 2001-04-21