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
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á bin
3.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.