Esta es la versión html del archivo http://redvip.homelinux.net/varios/cunix.pdf.
G o o g l e genera automáticamente versions html de los documentos mientras explora la web.
Para vincularse a esta página o para marcarla, utilice el siguiente url: http://www.google.com/search?q=cache:EFJlhsPeVVYJ:redvip.homelinux.net/varios/cunix.pdf+el%2Bservicio%2Bfinger&hl=es&gl=ve&ct=clnk&cd=91&lr=lang_es


Google no tiene relación con los autores de esta página ni es responsable de su contenido.
Se han resaltado estos términos de búsqueda:  servicio  finger 

Page 1
INTRODUCCION AL SISTEMA OPERATIVO
UNIX
Antonio Villalon Huerta <[email protected]>
Diciembre, 2001
”The bad reputation UNIX has gotten is totally undeserved, laid on by people who don’t understand,
who have not gotten in there and tried anything.”
Jim Joyce, owner of Jim Joyce’s UNIX Bookstore
This is 100% free of Micro$oft products. By L
A
T
E
X for Linux.
1

Page 2
CONTENTS
2
Contents
1 INTRODUCCION
4
1.1 ¿Que es un Sistema Operativo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.2 Historia del Sistema Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.3 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.4 Nociones basicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2 LA PRIMERA SESION
7
2.1 Nociones previas: login y password . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.2 Cambio de claves: la orden passwd . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.3 Los archivos /etc/profile y .profile . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.4 Fin de una sesion: exit y logout . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
3 COMANDOS BASICOS DE UNIX
10
3.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2 Comandos basicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4 AYUDA DEL MANUAL: man
19
4.1 La orden man . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5 COMUNICACION ENTRE USUARIOS
21
5.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.2 El comando write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.3 El comando talk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.4 El comando mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6 EL EDITOR DE TEXTOS vi
24
6.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.2 Comenzando con vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.3 Saliendo del editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.4 Tratamiento del texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.5 Otros comandos de vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.6 Comandos orientados a lıneas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
7 UNIX Y REDES: APLICACIONES
28
7.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
7.2 tin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
7.3 Uso de tin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
7.4 lynx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
7.5 Uso de lynx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
7.6 gopher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
7.7 ftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
7.8 telnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
7.9 finger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
7.10 elm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
7.11 pine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
8 CONCEPTOS DEL SISTEMA OPERATIVO UNIX
37
8.1 Ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
8.2 Permisos de los archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
8.3 Archivos ejecutables, imagenes y procesos . . . . . . . . . . . . . . . . . . . . . . . . 39
8.4 El shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
8.5 Programacion en shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
8.6 Organizacion de directorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
8.7 Planos de trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
8.8 Entrada y salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

Page 3
CONTENTS
3
9 SEGURIDAD BASICA DEL USUARIO
46
9.1 Sistemas de contrase˜nas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
9.2 Archivos setuidados y setgidados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
9.3 Privilegios de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
9.4 Cifrado de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
9.5 Bloqueo de terminales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

Page 4
1 INTRODUCCION
4
1 INTRODUCCION
1.1 ¿Que es un Sistema Operativo?
Un sistema operativo es simplemente un programa que actua como intermediario entre el usuario
y el hardware de un computador, y su proposito es proporcionar un entorno en el cual un usuario
pueda ejecutar otros programas de forma comoda y eficiente.
Un sistema operativo (a partir de ahora lo llamaremos S.O.) no lleva a cabo ninguna funcion
util por sı mismo; solo se limita a proporcionar un entorno donde los otros programas puedan de-
sarrollar sus trabajosutiles de cara al usuario. El S.O. controla la ejecucion de tales programas
para poder prevenir los errores y el uso inadecuado del ordenador. Por este motivo, se ha de estar
ejecutando permanentemente en la computadora (al menos el nucleo o kernel del S.O).
Ejemplos de SS.OO. son Unix, MS-DOS, Windows NT, Windows 95 (Windows 3.1 no es un S.O.,
solo un entorno grafico), OS/2 o Inferno (en desarrollo actualmente).
1.2 Historia del Sistema Unix
En 1964 diversos organismos estadounidenses (entre ellos el MIT, Massachusetts Institute of Tech-
nology) se propusieron dise˜nar un ambicioso sistema operativo denominado MULTICS (Multiplexed
Information and Computing System), capaz de proporcionar una gran potencia de computo y de
almacenar y compartir grandes cantidades de informacion. Como este proyecto era demasiado
ambicioso para laepoca, los trabajos sobre MULTICS fracasaron; sin embargo, las ideas usadas
en el desarrollo del sistema operativo sirvieron de base para el dise˜no de un nuevo sistema al que
ironicamente se denominarıa UNICS (Uniplexed Information and Computing System), nombre que
posteriormente desemboco en Unix.
Durante 1969, en los laboratorios Bell, Ken Thompson comenzo el dise˜no del sistema Unix so-
bre un viejo DEC PDP-7 apartado del uso. Poco mas tarde se le unieron otros cientıficos, como
Dennis Ritchie. Juntos escribieron un sistema de tiempo compartido (multitarea) de uso general,
lo bastante comodo y eficiente como para trasladarlo a una maquina mas potente (una PDP-11-20,
en 1970). Tres a˜nos mas tarde, Thompson y Ritchie reescribieron el nucleo del sistema operativo
en C (anteriormente lo estaba en lenguaje ensamblador), lo cual dio a Unix su forma esencial, tal
y como lo conocemos hoy en dıa.
Poco despues de tener el nucleo del sistema escrito en un lenguaje de alto nivel, Unix fue intro-
duciendose rapidamente en las universidades, con fines educacionales, hasta llegar a su uso comercial
en laboratorios, centros de procesamiento de datos, centros de operaciones en compa˜nıas telefonicas
estadounidenses, etc. La disponibilidad publica del codigo fuente del sistema, su portabilidad y su
potencia fueron factores claves en esta rapida expansion de Unix.
En estos primeros tiempos de Unix (Version 6), el cdigo fuente era facil de conseguir. Sin em-
bargo, a partir de la Version 7, el autentico ”abuelo” de los sistemas Unix modernos, AT&T se
comenzo a dar cuenta que tenıa entre manos un producto comercial rentable, por lo que se prohibio
el estudio del codigo fuente para no hacer peligrar la version comercial.
A finales de 1978, despues de distribuir la Version 7, la responsabilidad y el control administrativo
de Unix paso a manos de USG (Unix Support Group), integrado en AT&T, que saco al mercado
Unix System III (1982) y posteriormente el famoso System IV (1983), hasta llegar a Unix System
V Release 4 (SVR4), uno de los sistemas mas extendidos en la actualidad, y sus posteriores modi-
ficaciones.
Sin embargo, aunque AT&T deseaba tener el control absoluto sobre las distribuciones de Unix,
debido a la potencia de este sistema, muchos grupos de desarrollo ajenos a la compa˜nıa han traba-
jado en la mejora de Unix. Uno de estos grupos, posiblemente el que mas influencia ha tenido, ha
sido la Universidad de California en Berkeley, que desarrollo el sistema Unix hasta alcanzar 3BSD

Page 5
1 INTRODUCCION
5
(Berkeley Software Distribution), a principios de los 80 (tomado como estandar en el Departamento
de Defensa estadounidense y su red DARPANet), y que hoy sigue desarrollando software como Unix
4BSD en sus diferentes versiones.
Otras compa˜nıas que defienden o han defendido sus propias versiones de Unix pueden ser Mi-
crosoft (Xenix), DEC (Ultrix), IBM (AIX), etc. Cada una de ellas desarrolla diferentes sistemas;
sin embargo, las caracterısticas basicas son comunes en todos, por lo que conociendo cualquier tipo
de Unix mınimamente no es difıcil poder dominar otro tipo en poco tiempo. A continuacion se
presenta una tabla con los principales clones de Unix y la compa˜nıa que esta detras de cada uno:
Nombre
Compa˜nıa u organizacion
386BSD
Gratis en Internet
AIX
IBM
Artix
Action Inst.
A/UX
Apple
BSD
University of California at Berkeley
BSD-Lite
University of California at Berkeley
BSD/386
Berkeley Software Design (BSDI)
Coherent
Mark Williams Company
Dynix
Sequent
FreeBSD
Gratis en Internet
HP-UX
Hewlett-Packard
Hurd (GNU)
Free Software Foundation
IC-DOS
Action Inst.
Interactive Unix
Sun Microsystems
Irix
Silicon Graphics
Linux
Gratis en Internet
Lynx OS
Lynx RT Systems
Mach
Carnegie-Mellon University
Minix
Distribuido con el libro de
Tanenbaum (Bibliografıa)
MKS Toolkit
Mortice Kern Systems
NetBSD
Gratis en Internet
Nextstep
Next
OSF/1
Digital Equipment Corporation (DEC)
PC Xenix
IBM
QNX
QNX Software Systems
RTX/386
VenturCom
SCO Unix
Santa Cruz Operation
Solaris
Sun Microsystems
SunOS
Sun Microsystems
System V Unix
Varias versiones para PC
Ultrix
Digital Equipment Corporation (DEC)
Unicos
Cray Research
Unixware
Novell
V/386
Microport
V/AT
Microport
Xenix
Microsoft
1.3 Linux
Linux es uno de los muchos clones de Unix que actualmente estan en el mercado. En su origen,
el nucleo del sistema fue desarrollado por Linus Torvalds como su Proyecto Final de Carrera. Su
objetivo era crear un sustituto mejorado de Minix, otro clon de Unix para PC creado por Andrew
Tanenbaum. Programadores de todo el mundo han contribuido posteriormente a mejorar este S.O.
con aplicaciones y mejoras contınuas, por lo que se puede decir que Linux es fruto del trabajo de
todos sus usuarios.

Page 6
1 INTRODUCCION
6
Este sistema, considerado por muchos como el mejor para los PCs de la familia del i386, con-
tiene todas las caracterısticas que presenta un Unix normal: multitarea, protocolos para trabajo en
redes, memoria virtual, independencia de dispositivos, etc. Puede trabajar con cualquier procesador
386 o superior (no funciona en 286), con unos requerimientos mınimos de 10 Mb. de disco duro y
2 Mb. de memoria RAM.
Actualmente es muy facil encontrar cualquier informacion que necesitemos de Linux utilizando
INet, principalmente en grupos de noticias comp.os.linux.∗ o comp.unix.∗ ; en estos newsgroups
podemos encontrar respuesta a todas nuestras dudas sobre el sistema. Tambien tenemos a nues-
tra disposicion numerosa bibliografıa sobre el S.O., desde su uso basico a su administracion mas
avanzada.
1.4 Nociones basicas
El curso se va a desarrollar en una maquina Linux que denominaremos servidor, con un nombre
y una direccion IP determinados (por ejemplo, servidor.upv.es, 158.42.22.41). Esto significa
que todo lo que nosotros hagamos lo haremos en tal ordenador, no en el que estamos conectados.
Es decir, si guardamos un archivo en nuestro disco duro, este archivo estara en el disco del servidor,
no en el del ordenador desde donde conectamos a la maquina remota. Por tanto, en cuestion de
velocidad, rendimiento, espacio en disco. . . no dependera para nada el que estemos conectados desde
una u otra terminal: tan rapido (o tan lento) podremos trabajar si conectamos desde un 286 como
si lo hacemos desde un Pentium. Solo dependera de la carga que este soportando el servidor en
esos momentos.
Para poder acceder al servidor Linux, una vez hallamos arrancado el ordenador, debemos teclear
desde MS-DOS:
c:\> telnet servidor.upv.es
Si conectamos desde otra maquina Unix conectaremos de la misma forma:
rosita:$ telnet servidor.upv.es
De esta forma podremos conectar con el servidor y comenzar a trabajar, tal y como se explica en
el Capıtulo 2.

Page 7
2 LA PRIMERA SESION
7
2 LA PRIMERA SESION
2.1 Nociones previas: login y password
Una vez nos hemos conectado a una maquina Unix remota,esta nos pedira nuestro login, el nombre
por el que el ordenador sabe nuestra identidad, y nuestra contrase˜na o password, para verificar que
realmente somos nosotros y no otra persona. Esta clave personal, que trataremos mas adelante, no
aparecera en pantalla al escribirla, por cuestiones de seguridad.
Tras haber verificado nuestra identidad, se nos permitira el acceso al sistema. Despues de darnos
una cierta informacion, como la hora y el lugar desde donde nos conectamos laultima vez o si
tenemos o no correo electronico, la maquina quedara a la espera de que nosotros empecemos a
trabajar introduciendoleordenes. Para ello, nos mostrara el prompt de nuestro interprete de co-
mandos, tambien conocido como sımbolo del sistema, y ya estaremos listos para comenzar la sesion.
En la siguiente figura vemos un ejemplo real de todos estos detalles:
#####
####
####
#
#####
##
#
# #
# #
#
#
# #
#
# #
#
####
#
#
#
#
#####
#
#
#
#
#
######
#
#
#
# #
#
#
#
#
#
#
#
####
####
#
#
#
#
rosita login:root
(Nuestro nombre de usuario)
Password:
(Nuestra contrasenya, que no aparece en
pantalla)
Last login: Fri Oct 4 01:01:27 on tty1 (Ultima conexion)
Linux 1.3.50
(Version del S.O.)
You have mail.
(Tenemos correo?)
rosita:#
(Ahora podemos comenzar a introducir
ordenes al computador)
Una vez nos aparece en pantalla el prompt del sistema, ya podemos comenzar a trabajar:
2.2 Cambio de claves: la orden passwd
Una vez que estamos dentro de la maquina Unix lo primero que hemos de hacer, por motivos de
seguridad, es cambiar nuestra contrase˜na.Esta, por norma general, bien no existe (en cuyo caso no
se nos habrıa preguntado por el password), o bien coincide con nuestro nombre de usuario, el login.
Hemos de poner una nueva contrase˜na a nuestra cuenta en el sistema, utilizando para ello la orden
passwd:
rosita:$ passwd
Aunque trataremos el tema de la seguridad mas adelante, hemos de saber que si alguien es capaz de
adivinar nuestra clave podra tener acceso a nuestros documentos, trabajos, cartas, etc., podra
modificarlos, borrarlos, o simplemente leerlos. Como no deseamos que esto ocurra, hemos de
utilizar una clave que no sea una palabra comun (¡mucho menos nuestro nombre de usuario!).
Una combinacio de letras mayusculas y minusculas, y algun numero, serıa ideal. Hemos de huir
de claves como patata, internet, o beatles. Podrıamos utilizar una clave como 99Heyz0, cu43Co3
o W34diG. Sin embargo, esta clave la hemos de recordar para poder entrar de nuevo al sistema.
No conviene apuntarla en un papel; es mejor acordarse de ella de memoria, utilizar algo familiar
a nosotros que combine letras y numeros, como nuestras dos primeras iniciales seguidas de tres
numeros del DNI y otra letra mayuscula, o algo parecido. Aunque repetimos que trataremos el
tema de la seguridad mas adelante, la eleccion de una buena contrase˜na es fundamental para la
integridad y privacidad de nuestros datos. . .

Page 8
2 LA PRIMERA SESION
8
2.3 Los archivos /etc/profile y .profile
Con el shell estandar en la maquina Unix donde vamos a trabajar, el bash (Bourne Again Shell,
que trataremos mas adelante), cada usuario tiene definido un archivo que se llama .profile, y que
esta situado en el directorio $HOME de cada uno de nosotros, es decir, en el directorio donde nos
encontramos nada mas acceder al sistema (generalmente /home/cunixii).
Este archivo es simplemente un proceso por lotes que se ejecutara cada vez que conectemos a
la maquina (similar al autoexec.bat para MS-DOS), y en el que podemos introducir todos los
comandos cuyo resultado queremos obtener nada mas entrar en nuestra cuenta. Por ejemplo, si
siempre que conectemos queremos ver la fecha y la hora en la que nos encontramos, en el archivo
.profile incluiremos una lınea con la instruccion date; si ademas queremos ver quien esta conec-
tado en esos momentos en la maquina, tambien incluiremos el comando who. Tambien lo podemos
utilizar para recordar cosas que tenemos que hacer, mediante la orden echo (por ejemplo, podemos
teclear una lınea con la orden echo "HABLAR CON EL ADMINISTRADOR"; cada vez que entremos en
nuestra cuenta mediante telnet u otros procedimientos de acceso remoto, nos aparecera tal mensaje
en pantalla. . .
En este archivo podremos tener tantos comandos (de los muchos que veremos posteriormente)
como deseemos, y cada vez que conectemos con el servidor el resultado de lasordenes aparecera
en nuestra pantalla. Hemos de recordar que en una lınea solo hemos de llamar a una orden (no
vamos a ver aquı los separadores deordenes, como &&, || o ;), y que las lıneas que comiencen por
el sımbolo ‘#’ son comentarios, que seran ignorados.
Veamos un posible ejemplo de nuestro archivo .profile:
date
(Nos dira el dıa y la hora)
echo "Bienvenido de nuevo"
(Aparecera este mensaje en pantalla
#who
(Ignorado, ya que la lınea comienza por #)
fortune
(Nos hara un fortune - frase, comentario o
idea famosa o graciosa -. )
Otro archivo equivalente al .profile es el /etc/profile. Su funcion es analoga, con la diferencia
de que en /etc/profile se especificanordenes y variables comunes a todos los usuarios. Como
este archivo es administrado por el root del sistema, no entraremos en mas detalles conel.
2.4 Fin de una sesion: exit y logout
Existen muchas formas de finalizar una sesion en un sistema Unix, dependiendo del tipo de acceso
que se haya realizado: si hemos conectado utilizando un modem, podemos simplemente colgar el
telefono; tambien podemos pulsar repetidamente Ctrl-D hasta matar a nuestro interprete de co-
mandos, apagar el ordenador. . . Sin embargo, estas formas de terminar una sesion no son en absoluto
recomendables, tanto por motivos de seguridad como por la estabilidad del sistema. Para finalizar
correctamente nuestro trabajo en el ordenador, debemos desconectar con una orden implementada
para esta tarea, como pueda ser exit o logout. Estos comandos se encargaran de cerrar completa-
mente nuestra conexion y finalizar nuestros procesos (a no ser que hayamos especificado lo contrario
con nohup, que veremos mas adelante) de tal forma que no comprometamos al sistema completo;
esto se realiza, basicamente, enviando una se˜nal sigkill sobre nuestro interprete de comandos, que
es nuestro proceso principal. Siel muere, muere tambien la conexion establecida.
Utilizando el interprete de comandos bash, adjudicado por defecto bajo Linux, en el archivo
.bash logout tenemos la opcion de especificar ciertas tareas que queremos realizar siempre que
desconectemos del sistema (serıa el contrario al .profile, estudiado anteriormente). Si en lugar
de bash utilizaramos el interprete C-Shell, estas tareas a realizar antes de la desconexion se han
de definir en el archivo .logout, mientras que el equivalente al .profile en este caso se denomi-
narıa .cshrc. Ahondaremos sobre estas cuestiones cuando estudiemos los diferentes interpretes de
comandos disponibles en Unix.

Page 9
2 LA PRIMERA SESION
9
Para finalizar, hay que resaltar que tanto logout como exit son comandos internos del sistema,
es decir, no encontraremos ningun ejecutable en nuestro $PATH que se denomine exit o logout.
Aunque existen diferencias entre ambasordenes, nosotros no las vamos a contemplar (no son en
absoluto triviales), y podremos finalizar una sesion utilizando cualquiera de ellas.

Page 10
3 COMANDOS BASICOS DE UNIX
10
3 COMANDOS BASICOS DE UNIX
3.1 Introduccion
No vamos a entrar con mucho detalle en todas las posibilidades y opciones de cada comando, debido
a que los parametros de lasordenes pueden variar algo entre clones de Unix (por ejemplo, lo que
en Linux puede ser la orden ps -xua, en HP-UX el formato es ps -ef), y que la potencia de Unix
y la gran variedad de opciones de cada orden hacen imposible tratar con detalle cada uno de los
posibles parametros que se pueden dar a un comando.
En caso de duda sobre una opcion determinada, es conveniente consultar el manual on-line, tecle-
ando simplemente man <comando> (lo veremos en el siguiente capıtulo). En estas paginas encon-
traremos todas las caracterısticas de la orden para el sistema en que nos encontremos.
Aquı se presentan en orden alfabetico todos los comandos que estudiaremos, con mayor o pro-
fundidad, a lo largo de este curso. Aunque obviamente esta ordenacion va resultarutil a la hora de
consultar detalles de una orden determinada, no es la mejor para introducir al alumno en el sistema
operativo. Un orden mas logico para poder estudiar y conocer los comandos basicos de Unix serıa
el siguiente:
• Creacion y gestion de archivos y directorios:
ls, cd, mkdir, touch, cp, mv, ln, rm, rmdir, chmod, pwd
• Tratamiento basico de archivos:
file, cat, more, less
• Conocimiento del sistema:
id, who/whoami, date, last, ps, kill, du, df, mesg, uname
• Herramientas mas potentes para trabajar con archivos de texto:
head, tail, diff, cmp, grep, sort, wc, spell
• Busqueda de ficheros:
find, which
• Miscelanea:
echo, sleep, nohup, write, alias, gzip/gunzip
Como podemos ver, el S.O. Unix nos ofrece una gran cantidad de comandos orientados al trabajo con
todo tipo de ficheros. Esto no es casual: se suele decir (y no es una exageracion) que en un sistema
Unix habitual todo son archivos, desde la memoria fısica del ordenador hasta las configuraciones
de las impresoras, pasando por discos duros, terminales, ratones, etc.
3.2 Comandos basicos
• alias
El comando alias nos permite definir una especie de pseudonimo (un alias para algun co-
mando con sus opciones; si tecleamos alias sin ningun otro argumento se nos ofrecera una
lista de los pseudonimos que ya tenemos definidos. Generalmente este comando se usa para
no tener que teclearordenes largas que se pueden utilizar bastante a lo largo de una sesion.
Por ejemplo, imaginemos que solemos conectar desde nuestro sistema Unix a otra maquina
(en este caso, pleione.cc.upv.es) por terminal remota. La orden a utilizar serıa
rosita:# telnet pleione.cc.upv.es
Si hemos de realizar esta tarea demasiadas veces, puede serutil definir un alias del siguiente
modo:
rosita:# alias telple="telnet pleione.cc.upv.es"

Page 11
3 COMANDOS BASICOS DE UNIX
11
Ası, cada vez que tecleemos telple, el sistema interpretara la orden a la que hemos asignado
este alias.
Los aliases son una caracterıstica del interprete deordenes (bash en nuestro caso), y de-
saparecen al morireste, por ejemplo finalizando una sesion. Ası, puede resultarnosutil incluir
unas lıneas con nuestros aliases en el archivo .profile, a fin de tenerlos definidos en cada
una de las sesiones en que vayamos a trabajar sin necesidad de volver a teclearlos. Otra forma
de eliminar un alias, sin tener que salir y volver a entrar en el sistema, es mediante la orden
unalias:
rosita:# unalias telple
• cat
Concatena y muestra el contenido de archivos. La salida de la orden cat sera por defecto la
pantalla:
rosita:# cat hola.c
#include <stdio.h>
main(){
printf("Hola, mundo\n");
}
rosita:#
Sin embargo, podemos utilizar cat para unir un grupo de archivos de texto en uno solo,
redireccionando la salida a un fichero (tal y como veremos mas adelante):
rosita:# cat *.c >> programacion
• cd
La orden cd nos permite cambiar de directorio de trabajo. Su sintaxis es basica:
cd <nombre directorio>
. Usando el shell bash, como es el caso en nuestro sistema Linux, si simplemente tecleamos cd
volveremos a nuestro directorio $HOME. Si le pasamos como parametro una ruta (absoluta o
relativa) de un directorio, cambiaremos a tal directorio, siempre que los permisos lo permitan:
rosita:# cd /etc
rosita:/etc# pwd
/etc
rosita:/etc# cd
rosita:# pwd
/root
rosita:#
• chmod
Cambia los permisos de acceso del archivo o directorio que se le pone como referencia. Existen
dos formatos basicos para la orden: el primero, es simplemente chmod <modo><archivo>,
con el modo numerico de los permisos del fichero en octal. El segundo formato es algo mas
complicado: chmod <who> +|- <permiso><archivo>. Indicaremos, en el parametro who, la
identidad del usuario/s cuyos permisos queremos modificar (u-user, g-group, o-others); a con-
tinuacion ira un ‘+’ o un ‘-’, dependiendo si reseteamos el bit correspondiente o lo activamos,
y en permiso debemos colocar el permiso a modificar (r-read, w-write, x-exec).
Aunque trataremos con mas detalle los permisos de archivos y su formato en capıtulos pos-
teriores, veamos unos sencillos ejemplos de ambos formatos del comando, que comentaremos
en clase:
rosita:# chmod 700 .profile
rosita:# chmod 444 carta
rosita:# chmod o+x programa
rosita:# chmod u+rx proceso

Page 12
3 COMANDOS BASICOS DE UNIX
12
• clear
La orden clear limpia el texto de la pantalla, de una forma similar al comando cls en
MS-DOS.
• cmp
Compara el contenido de dos archivos, imprimiendo en pantalla por defecto la primera di-
ferencia encontrada (si existe). Esta orden recibe como parametros los dos nombres de los
archivos a comparar:
rosita:# cmp prova.c prova2.c
(Si no se produce ninguna salida, ambos ficheros son identicos)
rosita:# cmp prova.c prova3.c
prova.c prova3.c differ: char 10, line 3
(La primera diferencia esta en el decimo caracter de la tercera linea)
rosita:#
• cp
La orden cp copia un archivo indicado en el parametro origen en otro lugar del disco, indicado
en destino. Su sintaxis es cp <origen><destino>. Si el destino es un directorio, los archivos
de origen seran copiados en su interior. Debemos recordar que los shells de Unix aceptan
wildcards (comodines), que son los caracteres especiales ‘∗’ y ‘?’. Ası, una orden como
rosita:# cp *.h direc1
copiara todos los archivos que finalicen en .h en el directorio direc1, sieste existe. Debemos
recordar que en Unix el campo ‘.’ no separa el nombre de la extension de un fichero, como en
MS-DOS, sino que es simplemente un caracter mas.
Para copiar de forma recursiva podemos utilizar la opcion -r o tambien la orden xcopy (que
no suele existir en la mayorıa de Unices, pero sı en algunas versiones de Linux).
• date
Imprime en pantalla la fecha y la hora en que nos encontramos. Sus opciones para el usuario
normal, que no puede modificar los datos ofrecidos por date, solo hacen referencia al formato
de presentacion, por lo que nos limitaremos a invocar esta orden simplemente como date, sin
ninguna opcion:
rosita:# date
Thu Dec 19 04:42:12 CET 1996
rosita:#
• df
El comando df (disk free) nos informara acerca del espacio disponible en el sistema de archivos.
Para nosotros, no existiran parametros adicionales, sino que simplemente lo ejecutaremos
como df, y la salida ofrecida sera algo ası como:
rosita:# df
Filesystem
1024-blocks Used
Available Capacity Mounted on
/dev/hdb1
297842
206584
75362
73%
/
/dev/hda1
614672
146192
468480
24%
/mnt
rosita:#
Vemos que el sistema tiene dos discos ubicados en lugares diferentes. El primero tiene aproxi-
madamente 300 MB, de los cuales mas de 200 estan ocupados (el 73% del disco). El segundo,
de unos 615 MB, tiene disponibles alrededor de 470 MB.
• diff
Compara dos archivos, indicandonos las lıneas que difieren en uno del otro. La opcion basica
es -b, que ignora la cantidad de espacios en blanco en los ficheros (en el mismo lugar en ambos
archivos). Su sintaxis es diff [-b] <fichero1><fichero2>. Si ambos ficheros son iguales, no
producira ninguna salida en pantalla

Page 13
3 COMANDOS BASICOS DE UNIX
13
rosita:# diff file1 file2
rosita:#
(Ambos ficheros son iguales)
rosita:# diff file1 file3
1,2c1,2
< En un lugar de la Mancha
< de cuyo nombre ...
---
> En
un lugar de la Mancha
> de cuyo nobre ...
(Las unicas diferencias entre ambos archivos son la cantidad de
espacios entre dos palabras y un error, en la primera y segunda linea
de ambos)
rosita:# diff -b file1 file3
2c2
< de cuyo nombre ...
---
> de cuyo nobre ...
rosita:#
(Ahora solo se muestra el error de la segunda linea)
• du
La orden du nos indica la utilizacion del disco, generalmente descendiendo desde el directorio
actual (esto es, nos dice lo que ocupan los archivos del directorio actual y todos sus subdi-
rectorios). Tambien es posible indicarle otro directorio diferente del actual al final de sus
opciones; en cualquier caso, la sintaxis es comun: du [-opciones] <path>.
Las opciones masutiles para nosotros seran las siguientes:
-b: muestra el tama˜no en bytes.
-k: muestra el tama˜no en Kbytes.
-s: muestra total.
• echo
Imprime sus argumentos en la salida estandar. Aunque echo reconoce algunos caracteres espe-
ciales (\f,\t,. . . ), no los utilizaremos, limitando su uso al mas comun: por una parte, imprimir
el mensaje especificado como argumento (esta opcion se usa generalmente en shellscripts, ya
que en otros casos no tiene mucha utilidad visualizar el mensaje en pantalla), y por otra
visualizar el valor de variables de entorno:
rosita:# echo "Hola otra vez"
Hola otra vez
rosita:# echo $HOME
/home/toni
rosita:#
• file
Nos da informacion sobre el tipo de un archivo especificado como argumento. Una sola opcion
nos puede serutil: -f <farchivo> nos indica que en farchivo estan los nombres de los ficheros
a examinar. La sintaxis del comando es: file [-f <farchivo>] archivo.
• find
El comando find localiza archivos en el sistema de ficheros de la maquina. find realiza una
busqueda recursiva, por lo que si queremos que realmente intente localizar un fichero en todo
el sistema, habremos de indicarle como ruta el directorio raız (root, /), y tener en cuenta que
no podemos buscar en directorios en los que no tenemos permiso de lectura.
La sintaxis basica de find es: find <ruta><expresion>. Dentro del campo expresion, existen
multitud de opciones relacionadas con el nombre del fichero, sus permisos, su propietario, etc.

Page 14
3 COMANDOS BASICOS DE UNIX
14
Unos ejemplos del uso de find podrıan ser los siguientes:
rosita:# find -perm -700
rosita:# find -perm -4000 -o -2000
rosita:# find / -name prueba.c
Analizando el campo expresion con mas detalle, vemos las opciones generalmente masutiles
para el usuario:
– +/- <valor>: Con el signo +, find va a buscar archivos que contengan alguno de los
permisos especificados en valor activos; con signo -, se buscan archivos con un campo
de permisos superior, terna a terna, que el especificado. Si se omite el signo, buscara
archivos con ese valor exactamente.
– -name <archivo>: Indicara a find que busque archivos (o directorios) con el nombre
especificado en el parametro <archivo>.
– -empty: Busca archivos o directorios vacıos.
• grep
Busca un patron en un archivo. Generalmente, el comando grep es usado tanto en shellscripts
como enordenes directas al sistema, tanto como comando o como filtro de otros comandos.
Es una potente herramienta de Unix, por lo que muchas de sus opciones son de interes para
nosotros, en particular -v (imprime las lıneas que no coinciden con el patron), -i (no distingue
mayusculas/minusculas) y -c (imprime la cuenta de coincidencias). La sintaxis general del
comando sera grep [-opciones] <patron><archivo/s>.
Veamos unos ejemplos de su utilizacion:
rosita:# grep include stdio.h
rosita:# cat stdio.h |grep include
(Las dos ordenes anteriores son analogas)
rosita:# grep -i hola mensaje
• gzip/gunzip
Son compresores/descompresores de archivos. Cada archivo comprimido es guardado con
un .gz a˜nadido a su nombre original. De la multitud de opciones existentes, que crecen en
cada version del programa, nos interesan principalmente: -d (para la orden gzip, descomprime
analogamente a gunzip), -h (muestra la pantalla de ayuda), -l (lista los archivos especificados),
-r (movimiento de la estructura de directorios de forma recursiva), -t (testea la integridad de
los archivos comprimidos) y -v (muestra el nombre y porcentaje de cada archivo comprimido
o descomprimido). La sintaxis de estos comandos es
gzip [-opciones] <archivo a comprimir>
gunzip [-opciones] <archivo a descomprimir>
• head
Muestra las primeras lıneas de un archivo. La principal opcion de este comando es la que
especifica el numero de lıneas a visualizar (10, por defecto): -n <numero lineas>. Su sintaxis
es head [-n <numero lineas>] <archivo>, o simplemente head -< numero lineas><archivo>.
• id
Nos informa sobre nuestro UID (User IDentifier, identificador de usuario), y sobre nuestro
GID (Group IDentifier, identificador de grupo). El UID ha de ser diferente para cada usuario
del sistema (El UID 0 siempre corresponde al administrador), mientras el GID suele ser comun
para varios usuarios, englobados dentro de un mismo grupo que los defina: users, curso,...
Aunque generalmente la informacion que nos va a proporcionar id va a consistir simplemente
en nuestros UID y GID, en situaciones excepcionales nos va a ofrecer tambien nuestros EUID
y EGID (Effective UID y Effective GID, respectivamente), siestos difieren de los anteriores.
En este caso puede ser conveniente notificar el hecho al administrador del sistema, ya que
suele ser un signo de inestabilidad de la maquina.

Page 15
3 COMANDOS BASICOS DE UNIX
15
• kill
Para nosotros, esta orden mata un proceso. Su sintaxis es kill [-signo] <PID>. El PID
(Process IDentifier, identificador de proceso) de uno de nuestros procesos lo podemos hallar
mediante la orden ps, sin ningun argumento. El signo mas interesante para nosotros es 9, que
asegura la terminacion de un proceso sea cual sea su estado. Como ejemplo de la utilizacion
de kill, veamos una opcion interesante:
rosita:# kill -9 -1
Con estos parametros, kill mata todos los procesos excepto el shell, proceso basico en la
conexion
1
.
• last
Nos da informacin acerca de losultimos usuarios que han entrado en el sistema: lugar desde
donde conectaron, tiempo de conexion, hora,. . .
Es un comando especialmente potente cuando se acompa˜na de filtros como grep o cut. Sus
opciones mas interesantes son -t <tty > (tty, terminal de conexion), -h <hostname> (host-
name, lugar desde donde se conecto), y simplemente <name> (usuario del cual queremos ver
sus ultimas conexiones). La sintaxis de last es sencilla: last <opciones>. Si no se especifican
opciones, el comando imprime un registro de todas lasultimas entradas y salidas del sistema
(conviene filtrarlo con un |more para poder leer la informacin con comodidad).
• ln
Asigna (link) un nombre adicional a un archivo. Para nosotros, la opcion mas interesante sera
-s, que nos permitira crear enlaces simbolicos entre archivos del sistema; analizaremos los dos
tipos de enlaces de Unix (enlaces duros y enlaces simbolicos) mas adelante. La sintaxis basica
del comando es ln [-s] <fuente><destino>.
• ls
Lista el contenido de directorios del sistema. Existen infinidad de opciones para el comando
ls (-a, -l, -d, -r,...) que a su vez se pueden combinar dee muchas formas, y por supuesto
varıan entre Unices, por lo que lo mas adecuado para conocer las opciones basicas es consultar
el manual on-line (man ls). Sin embargo, de todasestas, las que podrıamos considerar mas
comunes son:
– -l (long): Formato de salida largo, con mas informacion que utilizando un listado normal.
– -a (all): Se muestran tambien archivos y directorios ocultos.
– -R (recursive): Lista recursivamente los subdirectorios.
Por ejemplo, un resultado tıpico obtenido al ejecutar ls con una opcion determinada puede
ser el siguiente:
rosita:/programas/prueba$ ls -l
total 5
drwxr-xr-x
2 toni
users
1024 Feb 27 00:06 Cartas
drwxr-xr-x
2 toni
users
1024 Feb 11 16:06 Datos
drwxr-xr-x
2 toni
users
1024 Nov 18 01:36 Programacio
-rwxr-xr-x
2 toni
users
1024 Feb 23 23:58 programa1
-rw-r--r--
1 toni
users
346 Oct 19 18:31 cunix.lista
rosita:/programas/prueba$
La primera columna indica las ternas de permisos de cada fichero o directorio. El segundo
campo hace referencia al numero de enlaces del archivo, mientras que los dos siguientes indican
el propietario y el grupo al que pertenece. El quinto campo corresponde al tama˜no del
fichero en bytes, y los siguientes dan la fecha y hora de laultima modificacion del archivo.
Obviamente, laultima columna indica el nombre del fichero o directorio.
1
Esto no es exactamente ası aunque a nosotros nos lo parezca. Es un mecanismo mucho mas complejo, imple-
mentado en el kernel del sistema operativo, que cae fuera del alcance de este curso.

Page 16
3 COMANDOS BASICOS DE UNIX
16
• mesg
Permite o niega mensajes al usuario. Tanto su sintaxis como su uso son sencillos: mesg n no
permitira que el usuario reciba mensajes que proceden de un write de otro usuario; mesg y
actua completamente al reves, y mesg sin opciones nos informa del estado del permiso actual.
• mkdir
Crea un directorio. No veremos las dos opciones de modo y directorios intermedios del co-
mando, por lo que la sintaxis sera simplemente mkdir <nombre directorio>. Para crear un
directorio hemos de tener en cuenta los permisos del directorio en que nos encontremos tra-
bajando.
• more
Visualiza un archivo pantalla a pantalla, no de forma continua. Es una especie de cat con
pausas, que permite una comoda lectura de un archivo. Al final de cada pantalla nos aparecera
un mensaje indicando --More--. Si en ese momento pulsamos Intro, veremos una o mas lıneas
del archivo; si pulsamos Space, veremos la siguiente pantalla, si pulsamos b la anterior, y si
pulsamos q saldremos de more. Su sintaxis es more <archivo>.
• mv
Renombra un archivo o directorio, o mueve un archivo de un directorio a otro. Dependiendo
del uso, su sintaxis variara: mv <archivo/s> <directorio> movera los archivos especificados
a un directorio, y mv <archivo1><archivo2> renombrara el primer fichero, asignandole el
nombre indicado en <archivo2>. Veamos unos ejemplos:
rosita:# mv hola.c prueba.c
(Renombra el archivo hola.c como prueba.c)
rosita:# mv *.c direc1
(Mueve todos los archivos finalizados en .c al directorio direc1)
• nohup
Mantiene la ejecucion deordenes aunque se desconecte del sistema, ignorando se˜nales de
salida y/o perdida de terminal. Su sintaxis es nohup <orden>. Nos permite dejar trabajos
realizandose aunque no estemos fısicamente conectados al ordenador, como sesiones FTP
largas, compilacion de grandes programas por modulos, etc.
• passwd
Como vimos en el Capıtulo 2, el comando passwd se utiliza para cambiar la clave de acceso
al sistema. Cuando cambiemos esta contrase˜na, habremos de repetir nuestra nueva clave dos
veces, y en ambas ha de coincidir; esto se realiza para evitar que un error al mecanografiar
nos asigne un password que no querıamos.
• ps
Informa del estado de los procesos en el sistema (Process Status). Sin opciones, ps nos
informara de los procesos en la sesion de trabajo. Con la opcion -ux, nos informara de todos
nuestros procesos en la maquina. Si queremos ver los procesos de todos los usuarios, la opcion
adecuada es -aux. ps nos da informacion acerca del usuuario que posee el proceso, de su estado,
de la memoria y CPU consumida, etc.
2
• pwd
Imprime en pantalla la ruta completa del directorio de trabajo donde nos encontramos actual-
mente. No tiene opciones, y es un comandoutil para saber en todo momento en que punto
del sistema de archivos de Unix nos encontramos, ya que este sistema es muy diferente a otros
operativos como MS-DOS, MacOS, etc.
• rm
Elimina archivos o directorios. Sus tres opciones son -r (borrado recursivo, de subdirecto-
rios), -f (no formula preguntas acerca de los modos de los archivos), y -i (interactivo, solicita
confirmacion antes de borrar cada archivo). Su sintaxis es muy sencilla: rm [-rfi] <archivo>.
2
En versiones nuevas de ps no es necesario incluir el signo ‘-’ antes de las opciones.

Page 17
3 COMANDOS BASICOS DE UNIX
17
• rmdir
Borra directorios sii estan vacıos. No veremos la opcion -p, por lo que la sintaxis de este
comando sera rmdir <directorio>. Si queremos borrar directorios que no esten vacıos, hemos
de utilizar rm -r <directorio>.
• sleep
Suspende la ejecucion durante un tiempo especificado como argumento, en segundos: sleep
<tiempo>. Esutil en shellscripts, no como comando directo, para ejecutar una determinada
orden despues de un cierto intervalo de tiempo.
• sort
Extrae, compara o mezcla lıneas de archivos de texto. Clasifica, segun un patron de clasifi-
cacion especificado, todas las lıneas de los archivos que recibe como parametro; por defecto,
este patron es la lınea completa. Las otras opciones de clasificacion que nos pueden resultar
utiles son:
-d: Ordenado segun el diccionario.
-f: Interpreta las letras minusculas como mayusculas.
La sintaxis que utilizaremos para el comando sort es
sort <-opciones clasificacion><archivos/s>.
• spell
Compara las palabras del archivo especificado con las de un diccionario en Ingles (por de-
fecto, aunque hay diccionarios en castellano y tambien para textos creados con L
A
T
E
X) y nos
indica de los posibles errores gramaticales. A este comando no esutil indicarle un archivo
en castellano (obviamente si estamos trabajando con un diccionario en otra lengua), o con
muchos nombre propios o tecnicismos, ya que nos dara contınuamente una serie de errores
que seran inexistentes.
La sintaxis que utilizaremos para la orden spell es muy sencilla (no habremos de especi-
ficar ni tan siquiera el diccionario a usar): spell <archivo>. Tras la ejecucion, cualquier
palabra que no se encuentre en la base de datos del sistema sera susceptible de ser sustituida
o aceptada por el usuario. El comando spell es un primitivo corrector ortografico, pero de tal
potencia y facilidad de uso que aun se encuentra en la mayorıa de sistemas Unix del mundo.
• tail
Visualiza el final de un archivo (es el comando ‘contrario’ a head). Launica opcion que nos
interesa es (como en head) -n <lineas> o simplemente -<lineas>, que fuerza al comando a
mostrar las nultimas lıneas del archivo (siendo ‘n’ el numero especificado en <lineas>). Si
no se especifica este parametro, el comando tail mostrara por defecto las diezultimas lıneas
del archivo.
Su sintaxis es tail [-opcion] archivo.
• touch
Actualiza la fecha y modificacion de un archivo, o crea un archivo vacıo si el fichero pasado
como parametro no existe. Con la opcion -c no crea este archivo vacıo. Su sintaxis es touch
[-c] <archivo>.
• uname
Imprime el nombre y algunas caracterısticas del sistema donde nos encontramos trabajando.
Unicamente trataremos la opcion -a (all), que engloba todas las demas: nos indicara el nombre
del sistema operativo, el nombre del nodo en la red de comunicaciones, la version del kernel
del S.O. y el modelo del microprocesador de la maquina. Su sintaxis es sencilla: uname -a.
• wc
Es un contador de lıneas, palabras y caracteres (Word Count). Es posible utilizarlo como
comando directo y como filtro, y tambien es una potente herramienta en shellscripts. Su
sintaxis como comando es wc [-opcion] <archivo>, siendo opcion una de las siguientes:

Page 18
3 COMANDOS BASICOS DE UNIX
18
– -l: cuenta lıneas.
– -c: cuenta caracteres
– -w: cuenta palabras.
Es igualmente posible utilizar combinaciones de las tres opciones; por defecto, wc asumira
todas: -lwc. Si no se indica un nombre de archivo, el comando espera datos de la entrada
estandar (el teclado).
• which
El comando which buscara el archivo especificado como argumento en todos los directorios
incluidos en nuestra variable $PATH, diciendonos donde es posible localizarlo, o indicando
que el archivo no se encuentra en ningun directorio del $PATH. Su sintaxis es muy sencilla:
which <fichero>.
• who
Informa sobre quien esta conectado en el sistema: lugar de conexion, terminal asignada,
usuario. . . No entraremos en sus muchas opciones, por lo que su sintaxis quedara simplemente
who.
• whoami
Analogo a who, me indica cual es mi nombre de usuario y algunas de las caracterısticas de mi
conexion. Sintaxis: whoami.
• write
Escribe a otro usuario, copiando lıneas entre terminales. Trataremos el comando write con mas
detalle en el capıtulo 5. De momento, solo conoceremos su sintaxis: write <usuario><tty>
establece una conexion con usuario, en la terminal tty.

Page 19
4 AYUDA DEL MANUAL: MAN
19
4 AYUDA DEL MANUAL: man
4.1 La orden man
La practica totalidad de los clones de Unix existentes en el mercado incorporan unos manuales
on-line en los que se describe la sintaxis, opciones y utilidad de los diferentes comandos del sistema.
Este manual es, por supuesto, man, que localiza e imprime en pantalla la informacion solicitada por
el usuario.
man se ha convertido en una orden indispensable para cualquier usuario, administrador o pro-
gramador de un sistema Unix. La gran variedad de clones han contribuido fuertemente a esta
utilidad del manual, ya que en diferentes sistemas las opciones de un determinado comando para
un mismo fin pueden variar ligeramente (por ejemplo, el ps -aux de ciertos sistemas Unix, como
Linux, es equivalente al ps -ef de otros, como Solaris o HP-UX); incluso en la sintaxis de funciones
del lenguaje C, el mas utilizado en entornos Unix, puede haber diferencias mınimas entre clones.
Conociendo el nombre del comando o funcion, y sabiendo manejar mınimamente las paginas del
manual, la transicion de un Unix a otro no implica ningun problema. La consulta del manual es
frecuentemente el camino mas corto hacia una solucion para una pregunta.
En nuestro sistema Linux, como en otros muchos Unix, las paginas del manual se organizan en
diferentes categorıas, atendiendo a la clasificacion de la llamada sobre la que se intenta buscar
ayuda (ordenes de usuario, juegos, llamadas al sistema, funciones de librerıa, etc.). Cada una de
estas categorıas se almacena en un directorio diferente del disco; si queremos saber la localizacion
de estos directorios, habremos de visualizar la variable de usuario $MANPATH. Para hacer rapida
esta tarea, en Linux tenemos implementado el comando manpath, que nos indicara la ruta donde
man va a buscar las paginas de ayuda que nosotros le pidamos.
Como hemos comentado varias veces ya, la sintaxis de man mas simple es man <comando>. Sin
embargo, tenemos una serie de opciones basicas que es necesario conocer:
-a: All. Fuerza a man a mostrarnos, una a una, todas las diferentes paginas para un mismo
comando o funcion; por ejemplo, si tecleamos
rosita:# man write
el sistema nos mostrara la primera seccion de ayuda encontrada (la correspondiente al comando
write). Sin embargo, al teclear
rosita:# man -a write
el sistema nos va a mostrar todas las paginas de ayuda diferentes que existan (en este caso, la del
comando write y la de la funcion C write()).
Si de antemano conocemos la seccion que queremos ver, podemos saltar el resto de paginas uti-
lizando man <seccion><comando>; si escribimos
rosita:\{}\# man 2 write
el sistema mostrara directamente la pagina de ayuda correspondiente a la funcion write(), omi-
tiendo el resto.
-w: Whereis. No imprime las paginas de ayuda en pantalla, sino que nos indica los archivos,
con su ruta absoluta, donde se encuentran tales paginas (que seran ficheros finalizados con la ex-
tension .gz, esto es, comprimidos con gzip para no ocupar espacio innecesario en el disco). En
combinacion con ‘-a’, nos dara la ruta de todas las paginas que queremos consultar.
-h: Help. Nos imprime una pantalla de ayuda sobre las opciones basicas de la orden man.
Hemos de recordar que man es tambien un comando de Unix, con su propia pagina de manual.
Por lo tanto, la orden man man nos dara informacion sobre la sintaxis completa y todas las opciones

Page 20
4 AYUDA DEL MANUAL: MAN
20
de man. Porultimo, saber que las teclas para desplazarnos entre las diferentes pantallas de ayuda
son las mismas que para la orden more, ya vista.

Page 21
5 COMUNICACION ENTRE USUARIOS
21
5 COMUNICACION ENTRE USUARIOS
5.1 Introduccion
En un mismo sistema Unix generalmente estaran conectados varios usuarios a la vez, tal vez
fısicamente muy lejos, pero logicamente compartiendo los recursos del ordenador. Existen oca-
siones en que nos interesa una comunicacion rapida y en tiempo real (escribiendo y leyendo ambas
partes al mismo tiempo) con un usuario por cualquier motivo, ya sea para enviar un mensaje ur-
gente, para pedir una informacion, o simplemente para charlar un poco.
Para este fin, los dos comandos basicos que suele proporcionar Linux son write y talk. Un tercer co-
mando que veremos mas adelante, mail, para enviar y gestionar primitivamente correo electronico,
no trabaja en tiempo real, pero su sencillez hace interesante el conocer su uso para comunicarnos
con otros usuarios de nuestro sistema o de cualquier otro conectado a una red.
5.2 El comando write
La orden write escribe a otro usuario de nuestro mismo sistema. Copia las lıneas desde nuestro ter-
minal al terminal del usuario especificado en la sintaxis del comando: write <usuario><terminal>.
El campo <terminal> nos serautil solo si el usuario con el que queremos comunicarnos tiene varias
sesiones abiertas en la maquina.
Imaginemos que queremos comunicarnos con el usuario luis. Una vez nos hayamos cerciorado
que esta conectado (con lasordenes w o who), teclearemos
rosita:# write luis
En la pantalla del terminal de luis, aparecera el mensaje
Message from root at tty1
Si luis quiere comunicarse con nosotros, tecleara a su vez
rosita:$ write root tty1
y ya tendremos establecida la conversacion. Podemos empezar a teclear nuestros mensajes, hasta
que uno de los dos interlocutores pulse Ctrl-D, para terminar la conversacion o se envıe una inter-
rupcion (Ctrl-C).
Hemos de recordar que si no deseamos recibir mensajes de otros usuarios, debemos utilizar la
orden mesg n.
5.3 El comando talk
A diferencia de write, talk nos va a permitir por norma general entablar una conversacion con un
usuario de otra maquina, no solo de nuestro propio sistema. Este programa divide la pantalla en
dos mitades; en la superior iremos escribiendo nosotros, y en la inferior podremos leer los mensajes
de nuestro interlocutor (lo que nosotros escribamos, ael le aparecera en la pantalla inferior, obvia-
mente).
Imaginemos que estamos en nuestra maquina, servidor.upv.es, y queremos comunicarnos con el
usuario root, del sistema rosita (si en lugar de con un usuario en otro ordenador quisieramos hablar
con alguien de nuestro propia maquina, simplemente eliminarıamos el nombre del host de los co-
mandos).
Para entablar esta comunicacion, teclearemos
servidor:$ talk root@rosita
Si el usuario root de rosita esta conectado en esos momentos, le aparecera un mensaje parecido a

Page 22
5 COMUNICACION ENTRE USUARIOS
22
Message from Talk Daemon@servidor at 03:57
talk: connected requested by toni@servidor
talk: respond with: talk toni@servidor
Si el usuario root decide contestarnos, tecleara
rosita:# talk toni@servidor
y ya tendremos establecida la conexion.
Existe un comando similar aeste, pero algo mas sofisticado. Se llama ytalk, y su utilizacion es
analoga a la de talk.
5.4 El comando mail
El comando mail se usa para el envıo y recepcion de correo entre usuarios. Aunque hoy en dıa, bajo
sistemas Unix, su uso se ha reducido notablemente debido a otros gestores de correo mas amigables,
como elm y pine (que veremos mas adelante), no esta de mas conocer algunas opciones basicas para
poder gestionar nuestro correo con mail, de una forma rapida y eficiente.
Veremos primero la llamada a mail especificando una direccion e-mail como argumento (p.e., mail
root@servidor). Este modo se utilizara para enviar una carta a la direccion especificada. En pan-
talla nos aparecera la opcion Subject: (que podıamos haber especificado en la lınea de comandos
con una orden como mail -s <subject> root@servidor). El subject de un e-mail es el tıtulo, el tema
tratado, algo que resuma en una lınea el contenido del mensaje. . .
Despues de introducir el subject, podemos comenzar a escribir nuestra carta sin mas. Cuando
hayamos finalizado con ella, teclearemos un punto (.) en laultima lınea para indicar el final de la
transmision (EOT, End of Transmission), y el sistema se encargara de enviar nuestro mensaje al
usuario especificado. Veamos un sencillo ejemplo:
rosita:# mail root@rosita
Subject: Test de correo
Hola !!
Esto es solo una prueba del uso de mail.
.
EOT
rosita:#
La segunda forma de utilizar mail que vamos a ver es la que trata basicamente la gestion (ordenacion,
lectura, borrado. . . ) del correo que nos hayan enviado a nosotros, y que estara almacenado en
nuestro buzon. Para ello, ejecutaremos mail sin argumentos. A partir de aqui, podremos empezar
a introducirordenes mail al programa.Estasordenes tienen el formato
<orden><lista de mensajes><argumento/s>
La lista de mensajes es el conjunto de mensajes a los que vamos a aplicar la orden dada, y la
podemos especificar como
• n: Mensaje numero n.
• .: Mensaje en curso (vendr marcado por > en el entorno de mail).
• $:Ultimo mensaje.
• ∗: Todos los mensajes.
• :n: Todos los mensajes nuevos.
• :u: Todos los mensajes no leıdos.
Lasordenes mail que utilizaremos son las siguientes:

Page 23
5 COMUNICACION ENTRE USUARIOS
23
• ?: Visualizar el resumen deordenes.
• copy <lista><archivo>: Copia los mensajes de <lista> en el archivo especificado.
• delete <lista>: Borra los mensajes de <lista> del buzon.
• edit <lista>: Edita los mensajes especificados.
• exit: Sale de mail sin efectuar cambios.
• file <archivo>: Lee en el archivo especificado.
• quit: Sale de mail.
• undelete <lista>: Recupera los mensajes indicados.
• write <lista><archivo>: Graba los mensajes de <lista> en el archivo especificado.

Page 24
6 EL EDITOR DE TEXTOS VI
24
6 EL EDITOR DE TEXTOS vi
6.1 Introduccion
Cualquier fichero de texto (un documento, el codigo fuente de un programa. . . ) puede ser creado,
visualizado y modificado utilizando un editor de textos. En la mayorıa de sistemas Unix existe una
gran variedad de editores disponibles para el usuario: pico, emacs, joe, ed, vi... Nosotros
nos vamos a centrar en elultimo, considerado el mas estandar dentro de Unix, y por extension
tambien en ed. vi estara disponible en cualquier clon del sistema operativo, desde Minix corriendo
en un 8086 hasta Unicos sobre una Cray; el resto no son tan usuales, por lo que no los trataremos
aquı.
vi es un editor de textos orientado a pantalla completa, mientras que ed es un editor de lıneas (lo
que serıa el antiguo edlin en los sistemas MS-DOS). Conel vamos a poder visualizar el contenido
del archivo de texto en pantalla, y el cursor nos va a indicar nuestra posicion dentro del fichero para
modificarlo. vi es un editor de textos demasiado potente para conocer su uso en unas horas; aquı
vamos a intentar aprender a realizar las operaciones basicas sobre archivos, pero hemos de insistir
en que la mejor forma de saber utilizarlo y aprovechar al maximo sus prestaciones es practicando
su uso mucho tiempo. Se suele decir que manejar vi es como tocar el piano: por muchos libros o
documentos que leamos, no aprenderemos a manejar el editor hasta que no lo utilicemos.
vi tiene dos modos de operacion diferentes: el modo comando, en el que las pulsaciones de teclas se
interpretan no como caracteres sino comoordenes al editor, y el modo edicion o insercion, en el que
podremos introducir el texto deseado, dependiendo de la orden de comandos que se este ejecutando.
Para cambiar entre modos utilizaremos la tecla ESC; sin importar que se este haciendo, vi se pone
en modo comando y queda listo para recibirordenes. De esta forma, cuando no recordemos el modo
en el que estamos, bastara con pulsar ESC (mucha gente pulsa ESC--ESC para cerciorarse que llega
al modo comando) y poder seguir trabajando.
6.2 Comenzando con vi
Para comenzar a trabajar con un fichero teclearemos vi <fichero>; de esta forma, el contenido
se volcara en pantalla; obviamente, si es un nuevo archivo,este estara vacıo. De cualquier modo, el
cursor se situara en la primera lınea, indicando que es la lınea actual.
Hemos de resaltar que al editar un archivo simplemente visualizamos una copia en memoria de
ese archivo; no se va a modificar hasta que grabemos los cambios con la opcion adecuada, que
veremos mas adelante.
Nada mas entrar en vi, estaremos en el modo comando del editor. Podremos desplazarnos por
el contenido del fichero utilizando las teclas de movimiento del cursor (llamadas tambien cursores,
indicadas con flechas), o alguna de las siguientes opciones:
• Movimiento entre caracteres:
h: Desplaza el cursor un caracter a la izquierda.
l: Desplaza el cursor un caracter a la derecha.
• Movimiento entre lıneas:
k: Desplaza el cursor una lınea hacia arriba.
j: Desplaza el cursor una lınea hacia abajo.
H: Desplaza el cursor a la primera lınea que se ve en pantalla.
L: Desplaza el cursor a laultima lınea que se ve en pantalla.
M: Desplaza el cursor a la lınea que vemos en la mitad de la pantalla.
<linea>G: (goto) Desplaza el cursor a la lınea indicada por el numero de :<linea>. En
versiones de vi, basta teclear el numero a continuacion de los dos puntos ( : ) para ir
directamente a esa lınea.
• Movimiento dentro de una lınea:
w: Desplaza el cursor una palabra hacia delante.
e: Desplaza el cursor al final de la palabra.
b: Desplaza el cursor al principio de la palabra.

Page 25
6 EL EDITOR DE TEXTOS VI
25
0: Mueve el cursor al principio de la lınea actual.
$: Mueve el cursor al final de la lınea actual.
• Para ver otro trozo diferente del fichero editado, podemos utilizar los comandos siguientes:
Ctrl-u: Desplaza la ventana media pantalla hacia abajo.
Ctrl-d: Desplaza la ventana media pantalla hacia arriba.
Ctrl-f: Desplaza la ventana una pantalla hacia abajo.
Ctrl-b: Desplaza la ventana una pantalla hacia arriba.
G: Situa el cursor en laultima lınea del documento.
6.3 Saliendo del editor
Las modificaciones que hemos realizado con vi en un fichero de texto no se han realizado sobre
el mismo fichero, sino sobre una copia que el sistema ha almacenado en la memoria principal. Al
salir del editor, podemos elegir grabar o no los cambios en el archivo, con uno de los siguientes
comandos:
• :x: Graba y sale al interprete de comandos. Hemos de pulsar Intro para ejecutar el comando.
• :wq: Al igual que :x, graba los cambios y sale del editor. Tambin hemos de pulsar Intro al
final.
• ZZ: Graba y sale, pero sin necesidad de pulsar Intro.
• :q!: Sale del editor y descarta todos los cambios realizados sobre el archivo (no se grabara
ninguna modificacion perceptible por el usuario).
6.4 Tratamiento del texto
Para a˜nadir texto nuevo en un archivo primero hemos de situar el cursor en la posicion deseada
(recordad que por defecto vi lo situara en la primera lınea y la primera columna), con las teclas
vistas en apartados anteriores.
Cuando el cursor ya este donde nosotros queremos, podremos introducir alguno de los siguientes
comandos; todos situaran a vi en modo edicion, y el editor estara en disposicion de recibir texto
hasta que se pulse <ESC>:
• i: Escribe texto antes de la posicion actual del cursor.
• a: Escribe texto despues de la posicion actual del cursor.
• s: Sustituye el caracter situado en la posicion del cursor por todos los que se tecleen a
continuacion.
• o: Abre una lınea por debajo de la actual y situa al editor en modo insercion.
• O: Abre una lınea por encima de la actual y situa al editor en modo insercion.
Una vez que ya sabemos introducir texto, vamos a aprender a borrar partes del archivo editado.
Para ello hemos de utilizar alguno de los siguientes comandos:
• dd: Borra la lınea actual completamente, sin importar la posicion del cursor dentro de tal
lınea.
• d<Intro>: Borra la lınea actual y la siguiente; al igual que con dd, no importa la posicion
del cursor dentro de la lınea actual.
• d<n lineas>: Borra n lineas lıneas a partir de la actual, sin contar aesta (por tanto, son
n+1 lıneas).
• dw: Borra la palabra en la que se encuentra el cursor; sieste se encuentra en la mitad de una
palabra, borrara desde ese punto hasta el final de la palabra.

Page 26
6 EL EDITOR DE TEXTOS VI
26
• x: Borra el caracter sobre el que se encuentra el cursor.
• d$: Borra desde la posicion actual de cursor hasta el final de la lınea.
• D: Como d$, borra desde donde esta el cursor hasta el final de la lınea.
• d0: Borra desde la posicion del cursor hasta el principio de la lınea actual.
Si lo que queremos no es introducir texto, sino sustituirlo, podemos hacerlo utilizando uno de los
siguientes comandos:
• r: Reemplaza el caracter en el que esta situado el cursor por el siguiente caracter pulsado.
• R: Reemplaza tantos caracteres como teclas se pulse; para finalizar la sustitucion, hemos de
pulsar <ESC> y volver a modo comando. Es similar al uso de la tecla <Insert> en un PC.
• S: Sustituye una lınea del fichero por las que se escriban a continuacion, comenzando la
sustitucion por la lınea actual. Su ejecucion finalizara tambien volviendo a modo comando.
• cw: Sustituye una palabra por el texto que se introduzca a continuacion. Para finalizar hemos
de pulsar <ESC>.
• C: Sustituye el texto desde la posicion actual del cursor hasta el final de la lınea actual.
Finaliza con <ESC>.
• cc: Sustituye completamente la lınea actual. Como todos los comandos de sustitucion, finaliza
volviendo al modo comando del editor.
6.5 Otros comandos de vi
Si nos hemos equivocado al ejecutar un comando y necesitamos deshacer los cambios realizados,
tenemos a nuestra disposicion dos comandos:
• u: Deshace solo el cambio realizado por elultimo comando, aunque afecte a muchas lıneas.
• U: Deshace varios cambios sobre una misma lınea, aunque no sea laultima modificacion
efectuada.
Si pulsamos la u dos veces, lo que estamos haciendo es deshacer elultimo cambio realizado, y luego
deshacereste otro cambio: en una palabra, volvemos a la situacion original. Esto no sucede con U;
una vez que se han desecho los cambios, pulsar U o u de nuevo no altera nada.
Otro comando de vi que nos va a resultar bastanteutil va a ser J, que simplemente va a unir
la lınea inferior con la actual.
Si lo que deseamos es buscar dentro del fichero una determinada cadena de caracteres, pulsare-
mos (siempre en modo comando) la tecla /, introduciendo a continuacion la cadena buscada. Al
pulsar la barra /, notaremos que el cursor va hasta el final de la pantalla y queda esperando la
introduccion de una cadena. Cuando encuentre el texto deseado, el cursor se movera a la posicion
dondeeste se encuentra por primera vez.
Si tras encontrar una determinada cadena queremos seguir buscando a lo largo del texto (vi nos
indicara la primera que encuentre, no el resto si no le indicamos lo contrario), pulsaremos la tecla n
o simplemente volveremos a pulsar /, esta vez sin necesidad de introducir de nuevo el texto a buscar.
Si queremos buscar en sentido inverso (desde la posicion actual del cursor hacia el principio del
archivo), en lugar de /, utilizaremos la tecla ?, de uso analogo a la primera.

Page 27
6 EL EDITOR DE TEXTOS VI
27
6.6 Comandos orientados a lıneas
Todos los comandos orientados a lıneas van a comenzar con dos puntos (:). Si pulsamos esta tecla,
el cursor se movera a la parte inferior de la pantalla y quedara a la espera de que nosotros intro-
duzcamos una orden.
Podemos ejecutar comandos del sistema operativo de esta forma; el formato sera
:!<comando>
Si lo que queremos es salir unos instantes al shell, ejecutaremos un interprete de comandos de Unix
disponible en el sistema, como
:!bash
De esta forma estamos en el shell para poder trabajar. Si queremos volver a vi, lo haremos con el
comando exit, visto ya.
Otra opcion que se nos ofrece con los comandos orientados a lıneas es la posibilidad de modi-
ficar las variables de entorno de vi, con la opcion :set. Una de estas variables es la numeracion de
todas las lıneas del archivo editado. Esto lo realizaremos con la orden
:set number
Los numeros de lınea no se grabaran como texto, por lo que si volvieramos a ejecutar vi no nos
aparecerıan directamente; habrıamos de ordenar de nuevo al editor que los indicase.
Para quitar la numeracion de lıneas, utilizaremos la orden
:set nonumber
que volvera el formato del texto a su formato original.
Otra variable de entorno susceptible de ser modificada es la diferenciacion entre mayusculas y
minusculas a la hora de buscar una cadena de caracteres. Para ello, usaremos la orden
:set ignorecase
o tambien
:set ic
Si queremos volver a diferenciar mayusculas de minusculas, restableceremos la forma original de la
variable tecleando
:set noignorecase
o
:set noic
Si lo que queremos es grabar el contenido del archivo modificado sin tener que salir del editor,
elegiremos
:w
Si a esta orden le indicamos un nombre de fichero diferente al que habıamos editado, nos realizara
una copia en el nuevo archivo. En el caso que este archivo ya exista, y deseemos sobreescribirlo,
utilizaremos el sımbolo ! a continuacin de la w:
:w texto2.txt
:w! texto2.txt
Lasordenes orientadas a lıneas tambien nos ofrecen la posibilidad de insertar en el archivo editado
el contenido de otro fichero; para ello utilizamos el comando
:r <fichero>
y el fichero indicado aparecera insertado a partir de la posicion actual del cursor.

Page 28
7 UNIX Y REDES: APLICACIONES
28
7 UNIX Y REDES: APLICACIONES
7.1 Introduccion
El principal uso del sistema Unix hoy en dıa se da en entornos de red, especialmente en la conocida
por Internet. Una red no es mas que un numero, mas o menos elevado, de ordenadores conectados
entre sı; la distancia entre ellos puede ser desde metros (una LAN, Local Area Network) hasta miles
de kilometros (WAN, Wide Area Network, que serıa el caso de Internet). Detras de cada uno de
estos ordenadores interconectados existe un determinado numero, mas o menos elevado, de usuarios
con los que nos puede interesar intercambiar informacion de cualquier tipo.
Las principales fuentes de informacion que podemos encontrar varıan desde paginas web, en las que
un determinado usuario ha expuesto un tema concreto, generalmente de una forma muy grafica,
hasta servidores de ftp anonimo, que no son mas que ordenadores que permiten un acceso para
obtener software de todo tipo. A lo largo de este tema veremos la relacion de Unix con todo este
tipo de utilidades de intercambio de informacion.
Tambien es otro punto muy interesante el estudio las herramientas que ofrece Unix para el in-
tercambio de correo electronico (e-mail, electronic mail) entre millones de personas alrededor de
todo el mundo, de una forma rapida y efectiva.
(a) Utilidades.
7.2 tin
UseNet es una red de proposito general que provee de un sistema de bases de datos (BBS, Bulletin
Board System) llamado netnews. Estas ‘noticias’ se organizan en newsgroups atendiendo al tema
del que tratan. Para ello se utilizara un determinado prefijo. Aquı damos una relacion de los mas
comunes para nosotros:
comp .................................. Computadoras e Informatica
rec ...................................... Recreacion, hobbies, aficiones...
sci ....................................... Ciencias
soc ...................................... Sociedad
talk ..................................... Discusiones
alt ....................................... Temas alternativos
es ....................................... Newsgroups espa˜noles
UPV ................................... Noticias locales de UPV
Cada prefijo ira seguido de un tema que distinguira a los grupos de noticias entre sı; por ejemplo,
en el grupo comp.security.unix se tratan temas referentes a la seguridad de los sistemas Unix, en
es.alt.chistes se cuentan chistes en castellano, y en UPV.anuncis se publican anuncios de interes
para la gente de la Universidad. . .
7.3 Uso de tin
Para poder leer los grupos de noticias en nuestra maquina, necesitaremos conectar a un servidor
de news, por lo que deberemos ejecutar el comando tin con la opcion -r (tin -r) o, lo que es lo
mismo, la orden ya implementada rtin. De esta forma, apareceran en nuestra pantalla todos los
grupos a los que tenemos acceso.
Una vez tengamos en la pantalla los nombres de los grupos, podemos empezar a leer y escribir
en cualquiera de ellos. Existen grupos de pruebas, para familiarizarse con rtin, y uno de ellos lo
vamos a utilizar nosotros para enviar mensajes y leerlos: su nombre es UPV.test. Para ir a cualquier
grupo de los existentes, pulsaremos la tecla ‘g’ (go to), y el programa nos pedira el nombre del
newsgroup que queremos visitar. Cuando el indicador este sobre UPV.test, pulsaremos Intro o Tab
para introducirnos en tal grupo. . .
Ahora ya estamos dentro del grupo de noticias. Podemos leer cada mensaje de los que existan,

Page 29
7 UNIX Y REDES: APLICACIONES
29
simplemente pulsando Intro de nuevo, desplazarnos entre mensajes con los cursores, enviar nue-
stros propios mensajes, etc.
Cada uno de esos mensajes puede tener varias respuestas. Para ir leyendolas, y una vez que
estemos en el visor de noticias, debemos pulsar la barra espaciadora, que servira tambien para leer
una nueva pantalla dentro del mismo mensaje. Debemos recordar que, en cualquier punto de la
ejecucion de rtin, podemos obtener ayuda pulsando la letra ‘h’ (minuscula).
Supongamos que uno de los mensajes leıdos es de nuestro interes, y deseamos grabarlo; rtin nos
permite varias formas de hacerlo. Una de estas formas es enviarlo por correo a nuestra direccion
e-mail; para esto, deberemos pulsar la letra ‘m’, y posteriormente indicar al programa nuestra
direccion. La segunda forma que veremos es save (con la letra ‘s’), que nos grabara el artıculo en
nuestro directorio /News. save nos pedira tanto el nombre que queremos poner al artıculo que
vamos a grabar como el proceso que debe seguir el grabado del artıculo: si es texto, la opcion
correcta sera ‘n’; si es una imagen o un binario uucodeado, deberemos elegir u, etc.
Supongamos ahora que nosotros tambien queremos enviar un comentario a cualquier grupo. Para
ello, una vez dentro del grupo deseado, deberemos pulsar la letra ‘w’ (write), e introducir el subject
de nuestro mensaje (como vimos al tratar el comando mail, el subject debe ser un indicador del
contenido del artıculo que vamos a escribir). Despues de esto, entraremos en el editor de textos
vi y podremos empezar a escribir, utilizando las opciones normales de tal editor. Para finalizar,
saldremos de vi (por ejemplo con ESC :wq), y el sistema nos pedira la confirmacion para enviar el
mensaje al grupo correspondiente.
Si lo que queremos hacer es responder a un mensaje enviado por otra persona, tenemos dos formas
basicas de hacerlo. La primera es enviar nuestra respuesta directamente a la direccion e-mail del
usuario que envio el mensaje al grupo, para lo que utilizaremos la opcion ‘r’ (reply), y podremos
comenzar a escribir nuestra respuesta. La segunda es a˜nadir el comentario que deseamos hacer en el
mismo grupo en que esta el original, y tambien en el mismo hilo de noticia. Para ello, utilizaremos
la opcion ‘f’ de rtin, y podremos a˜nadir nuestra respuesta en el newsgroup para que cualquiera
pueda leerla.
Cuando hayamos concluido nuestra sesion con rtin, podemos volver a la pantalla anterior o al
interprete de comandos simplemente pulsando ‘q’ o ‘Q’.
7.4 lynx
En muchos ordenadores los usuarios tienen paginas WWW (World Wide Web) con informacion so-
bre infinidad de temas; a ellas podemos acceder mediante los denominados programas navegadores,
como Netscape o Explorer, que nos mostraran por pantalla la informacion consultada en modo
grafico.
Pero como nosotros solo vamos a poder trabajar en modo texto, necesitamos otro tipo de navegador
para consultar las paginas que deseemos; este programa se denomina lynx. Su sintaxis basica es
lynx <URL>, donde <URL> indica la direccion de tal pagina. Esta URL generalmente ira pre-
cedida por http://, aunque no en todos los casos va a ser necesario. Ası, para consultar la web de
andercheran.aiind.upv.es, solo hemos de teclear
rosita:# lynx http://andercheran.aiind.upv.es
y acto seguido estaremos ya dispuestos a ‘navegar’ por las paginas del sistema y sus links (conexiones
a otros recursos WWW).
7.5 Uso de lynx
Si tras indicarle a lynx una URL no es capaz de conectar a tal direccion, por cualquier motivo, nos
lo indicara con un mensaje de alerta en la barra de estado de la parte inferior de la pantalla. Si no
hay ningun problema, y la conexion es correcta, ya estaremos viendo la pagina indicada en la lınea

Page 30
7 UNIX Y REDES: APLICACIONES
30
de comandos. En este punto, podemos introducirle a lynx las opciones necesarias para que realice
lo que nosotros deseemos. Veamos los comandos que nos van a interesar para desenvolvernos con
soltura entre los millones de paginas WWW de todo el mundo:
Los cursores nos van a permitir movernos por la pagina de arriba a abajo, y tambien acceder
a un link (podemos identificar los enlaces porque estn ‘sombreados’ de color blanco) con el cursor
de la derecha (→), o volver al link anterior con el de la izquierda (←).
Es posible que nos interese grabar, por cualquier motivo, la pagina que estamos viendo. lynx
nos permite hacerlo de tres formas diferentes, todas accesibles pulsando la tecla ‘p’. Si lo hacemos,
veremos las posibles opciones: grabar la pagina en un archivo, enviarla por correo a una direccion
determinada (obviamente, la nuestra), o imprimir la pagina en pantalla (estaultima opcion solo
suele serutil si estamos utilizando algun capturador de pantallas, como script - no visto en el te-
mario -). Si elegimos grabar el contenido de la pagina, lynx nos preguntara el nombre que deseamos
ponerle; por defecto, nos dara el queesta ya tiene. Si nos interesa otro nombre, pues simplemente
borramos el de defecto y tecleamos el deseado. Al elegir enviar por correo la pagina, se nos va a
preguntar por la direccion deseada. Introduciremos nuestro e-mail, y en unos instantes tendremos
la pagina en nuestro buzon.
Si estamos visitando una WWW, y sin salir de lynx deseamos cambiar a otra direccion, hemos
de pulsar ‘g’ (Go). El programa nos preguntara por la nueva URL que deseamos visitar. Tambien
es posible que despues de seguir varios links deseemos volver al principio de nuestro viaje, a la
pagina principal, para seguir otro camino diferente. Para ello podemos pulsar las veces necesarias
el cursor de la izquierda, o, de una forma mas comoda y rapida, elegir la opcion ‘m’.
Existen paginas muy extensas, y quizas no queramos perder el tiempo leyendo todo su contenido,
sino ir directamente a una parte que nos pueda interesar; lynx nos permite buscar una determi-
nada cadena de caracteres dentro de una pagina: pulsamos ‘/’ y el programa nos preguntara por
la cadena seleccionada. Ası, si sabemos que en la pagina hay informacion sobre Unix, por ejemplo,
nos bastara indicar la cadena unix , para que automaticamente nos lleve a la parte donde estan los
datos buscados.
Acabamos de decir que despues de estar un rato siguiendo links a traves de la red es posible que
andemos algo perdidos con relacion al lugar donde nos encontramos en estos momentos; pulsando
backspace, lynx nos mostrara el camino que hemos seguido hasta este instante.
Finalmente, cuando hayamos concluido nuestro viaje, pulsaremos ‘q’ para abandonar lynx y volver
al prompt de nuestro sistema.
7.6 gopher
El gopher de Internet es un servicio de intercambio de informacion que permite a sus usuarios
explorar, buscar y recibir documentos situados en diferentes servidores de todo el mundo. Esta in-
formacion aparece frente al usuario como un sistema de archivos y directorios, que aunque pueden
encontrarse fısicamente a miles de kilometros del servidor al que hemos conectado, nos va a parecer
que viene del mismo lugar.
El tipo de informacion que podemos encontrar en un servidor gopher varıa desde archivos de texto
hasta binarios, imagenes, sonidos. . . Los links que tiene un servidor hacia otros constituyen el denom-
inado gopherspace, una red de intercambio de informacion alrededor de todo el mundo. En muchos
aspectos, gopher es equiparable al modo de intercambio de informacion utilizado por WWW, pero
en el gopherspace no vamos a disponer de informacion en modo grafico como nos permitirıan tener
los servidores WWW.
Desde nuestro entorno Unix vamos ser capaces de acceder a servidores gopher publicos, utilizando
para ello el comando gopher, al que indicaremos la direccion del server que nos interese: gopher
<direccion>. Una vez hayamos conectado a un servidor, veremos que el menu que se nos presenta
hace muy facil moverse por el gopherspace, recibir ficheros, visualizar documentos, etc. Por tanto,

Page 31
7 UNIX Y REDES: APLICACIONES
31
y tambien porque ya conocemos otro metodo de acceder a servidores de informacion WWW, que
ya hemos comentado que son en muchos puntos similares a los servidores gopher, no vamos a entrar
con detalle en el manejo de gopher; como ejemplo de su facilidad de manejo, basta decir que casi
todo lo que deseemos hacer sera posible utilizando los cursores e Intro.
7.7 ftp
FTP significa File Transfer Protocol, y como su nombre indica no es mas que un protocolo para
transferencia de ficheros implementado para casi todos los sistemas operativos, y por supuesto
tambien para Unix.
En un determinado momento nos puede interesar un archivo que esta en una maquina remota,
o simplemente copiar en disquetes el contenido de nuestro directorio en la maquina Unix donde
trabajamos; para ambas cosas habremos de utilizar ftp.
La sintaxis del comando ftp es sencilla: ftp <direccion>. Despues de esto, ftp nos pedira un
login y un password para acceder al sistema deseado, y si ambos son correctos ya estaremos en
disposicion de transferir ficheros de un lugar a otro.
Si lo que queremos es copiar en un disco archivos que estan en la maquina remota donde tra-
bajamos, desde el PC, y bajo MS-DOS, teclearemos
C:\> ftp servidor.upv.es
introduciremos nuestro nombre de usuario y nuestra clave, y podremos empezar a trabajar con los
archivos.
Si por el contrario estamos conectados a una maquina Unix, y deseamos transferir ficheros desde
otro sistema, el mecanismo a seguir sera por lo general algo distinto; existen infinidad de servi-
dores FTP que permiten un acceso publico para conseguir determinados archivos. Este tipo de
ordenadores se denominan de ftp anonimo, ya que cualquiera puede acceder a ellos para transferir
ficheros entre las dos maquinas. En este caso, como el acceso es publico pero esta limitado a unos
ciertos archivos, ya que no somos usuarios de ese sistema, nuestro login sera anonymous o ftp por
lo general, y como clave introduciremos nuestra direccion de correo electronico.
En ambos casos disponemos de los mismos comandos basicos para tratar los archivos, aunque
estos dependen del cliente ftp utilizado; veamos cuales son:
• !: Suspende la sesion ftp y vuelve al interprete de comandos de nuestro sistema.
• ASCII: Establece un modo ascii de transferencia de archivos; este modo sera el que utilizare-
mos para trabajar con ficheros de texto.
• BELL: Activando esta opcion, escucharemos un pitido cada vez que se finalice la ejecucion de
un comando.
• BINARY: Establece, contrariamente a ASCII, un modo binario de transferencia de archivos;
lo usaremos para trabajar con archivos binarios principalmente, pero es lo habitual para
transferir archivos de cualquier tipo
• BYE/QUIT/CLOSE/DISCONNECT: Finaliza la sesion ftp y volvemos al interprete de co-
mandos de nuestro sistema. No hemos de confundir con la orden ‘!’, que solo suspende la
sesion para retornar posteriormente a ella tecleando exit en el prompt.
• CD: Cambiamos de directorio en la maquina a la que hayamos conectado mediante ftp.
• LS/DIR: Lista los archivos del directorio actual del sistema al que hemos conectado.
• GET: Sirve para recibir un archivo desde el servidor ftp hasta nuestro sistema. Antes de
transferir ficheros, es conveniente establecer el modo correcto (ascii o binario) para evitar
errores en la transmision.

Page 32
7 UNIX Y REDES: APLICACIONES
32
• HASH: Imprime en pantalla el sımbolo ‘#’ por cada Kbyte transferido de un sistema a otro.
• ?/HELP: Nos ofrece ayuda de los comandos disponibles en el servidor al que hayamos conec-
tado; si tecleamos help <comando>, nos ofrecera ayuda acerca del comando especıfico que
indiquemos.
• LCD: Cambiamos el directorio local, esto es, el directorio de la maquina desde la que hemos
iniciado la sesion, no del servidor.
• MGET: Utilizaremos mget para recibir multiples archivos. Si la opcion prompt, que veremos
mas adelante, esta activa, nos preguntara que confirmemos la transferencia de cada uno de
los ficheros.
• MPUT: Contrario a mget, sirve para enviar archivos al sistema al que hayamos conectado
mediante ftp; generalmente, si es un servidor de ftp anonimo, solo podremos escribir en un
directorio llamado /incoming.
• OPEN: Si en el prompt de nuestro sistema hemos tecleado solamente ftp, sin indicar una
direccion, el comando open nos servira para abrir una conexion con un servidor; su sintaxis
es sencilla: open <direccion>.
• PROMPT: Activa o desactiva la confirmacion para los comandos que trabajan con multiples
archivos, como mput o mget.
• PUT: Contrario a get, envıa un archivo desde nuestro sistema hasta el servidor. Como antes,
hemos de tener cuidado con el modo de transferencia que vayamos a utilizar.
• PWD: Imprime el directorio actual del servidor.
• REGET: Si nos hemos quedado a medias al intentar recibir un archivo, no es necesario volver
a empezar la recepcion: reget nos permite continuar desde el punto en que se perdio la
conexion.
• RSTATUS: Si hemos establecido una conexion, rstatus nos indicara nuestras variables de
estado (modo ascii/binario, prompt on/off. . . ) en el servidor.
• SIZE: Nos da el tama˜no de un archivo en el servidor.
• STATUS: Nos indicara nuestro estado en la maquina local, hayamos o no conectado a un
servidor.
• USER: Si durante una sesion ftp queremos cambiar nuestro nombre de usuario en el servidor
sin salir deel, teclearemos user <nuevo nombre>.
Para finalizar el estudio de ftp, cabe destacar que su uso se esta limitando cada dıa mas a procesos
lanzados con nohup (sin control de terminal), es decir, sin el usuario conectado fısicamente. Esto
es debido a que con lynx podemos realizar tambien transferencia de ficheros en muchos servidores
de ftp anonimo, indicando ftp:// al principio de lo que serıa la URL.
7.8 telnet
telnet nos va a permitir conectar con un servidor remoto para iniciar una sesion de trabajo en el
sistema Unix; ya hemos utilizado telnet para acceder al ordenador servidor.upv.es, donde estamos
realizando el curso, desde nuestro PC. Una vez dentro del sistema Unix, puede ser que nos interese
ejecutar de nuevo telnet para acceder a otro sistema.
Una vez realizada una conexion, telnet actua como un intermediario entre nosotros y el orde-
nador al que hemos llamado; cuando pulsemos una tecla,esta se enviara al sistema remoto, y cada
vez que este sistema remoto produzca una respuesta se envıa a nuestra terminal. De esta forma,
nos va a parecer que nuestro teclado y monitor estan conectados directamente al host que hemos
llamado.

Page 33
7 UNIX Y REDES: APLICACIONES
33
Si ejecutamos el comando sin indicar ninguna direccion de maquina, entraremos en el modo comando
de telnet; entonces podremos empezar a comunicarnos con el sistema introduciendo cualquiera de
las diferentes opciones. Veamos las que nos van a ser masutiles:
• C/CLOSE: Cierra una conexion que hayamos establecido previamente con un sistema.
• L/LOGOUT: Desconecta del sistema remoto y cierra completamente la conexion.
• O/OPEN <DIRECCION>: Conecta a la direccion especificada. Hemos de recordar que
necesitamos un login y una clave para acceder al sistema que hayamos indicado.
• Q/QUIT: Sale del modo comando de telnet y vuelve al prompt del sistema en el que hemos
ejecutado la orden.
• Z: Suspende momentaneamente la ejecucion de telnet y retorna al sistema; para volver a
telnet, podemos teclear fg (foreground, cuyo uso veremos mas tarde).
• H/HELP/?: Nos da una ayuda de los diferentes comandos que admite la orden telnet.
7.9 finger
El servicio finger permite conseguir informacion acerca de casi cualquier persona conectada a In-
ternet. Decimos ‘casi’, porque si al administrador de nuestro sistema no le interesa que alguien vea
nuestra informacion no va a permitir que la maquina en que estamos trabajando tenga un servicio
finger de cara al exterior, tanto por motivos de seguridad como para evitar trafico en la red.
Vamos a ver aquı diferentes formas de utilizar finger para conocer datos de un sistema en gen-
eral o de un usuario de ese sistema, saber lo que significa la informacion proporcionada, y tambien
utilizar nuestra propia informacion de cara al resto de usuarios.
Si ejecutamos finger en nuestro prompt, sin pasarle ningun argumento, nos va a informar de
los usuarios conectados al servidor en esos momentos; podemos conocer informacion mas especıfica
de un usuario determinado indicandole a finger el identificador (login) de tal usuario:
rosita:# finger
Login Name
Tty Idle When Where
root El Spiritu Santo
1
03:23
toni
Toni Villalon
2
01:23
toni Toni Villalon
p0
10
01:45 localhost
rosita:# finger toni
Login name: toni In real life: Toni Villalon
Phone:
Directory: /home/toni Shell: /bin/bash
Last login Wed Oct 30 on ttyp0
No unread mail
No plan
rosita:#
Vemos como al indicar un nombre de usuario la informacion proporcionada por finger es mas
precisa que si no lo hacemos. Se nos va a indicar el nombre verdadero del usuario, el telefono, el
directorio $HOME, el interprete de comandos que utiliza por defecto, cuando fue laultima vez que
se conecto, si tiene o no correo, y cual es su plan (hablaremos mas adelante sobre los ficheros .plan
y .project). Esta informacion en manos de un potencial intruso podrıa ser comprometedora, por
lo que, como hemos comentado anteriormente, el servicio finger no siempre va a estar disponible en
un sistema.
Hasta ahora hemos visto la utilidad de finger dentro de nuestro propio sistema; tambien podemos
conocer datos de otro ordenador que posea este servicio, simplemente indicando como argumento
a finger la direccion IP o el nombre del sistema que deseemos analizar, precedido por el sımbolo
de la arroba (‘@’), o la direccion de correo de un usuario, si es que queremos conocer algo sobreel.
Veamos un sencillo ejemplo:

Page 34
7 UNIX Y REDES: APLICACIONES
34
rosita:# finger @marilyn
Login
Name
Tty
Idle
When
Where
root
El Spiritu Santo
1
03:23
toni
Toni Villalon
2
01:23
toni
Toni Villalon
p0
10
01:45
localhost
rosita:# finger toni@marilyn
Login name: toni
In real life: Toni Villalon
Phone:
Directory: /home/toni
Shell: /bin/bash
Last login Wed Oct 30 on ttyp0
No unread mail
No plan
Podemos ver que la salida es analoga a cuando hacıamos un finger dentro de nuestro sistema. La
unica diferencia es que hemos de indicar con la arroba el sistema destinatario de nuestro finger. Si
no lo hacemos de esta manera, finger pensara que estamos refiriendonos a un usuario de nuestro
ordenador, y nos dara una salida parecida a la siguiente:
rosita:# finger pleione.cc.upv.es
Login name: pleione.cc.upv.es
In real life: ???
rosita:#
(b) Gestores de correo.
7.10 elm
elm es un gestor de correo interactivo disponible en la mayorıa de clones de Unix, por supuesto
tambien en Linux. Esta orientado a pantalla, y por su potencia ha superado como gestor usual
tanto a mail como a mailx.
Aunque existen varias formas de invocar a elm, vamos a ver la mas comun: simplemente habremos
de teclear el nombre del gestor en nuestro prompt. De esta manera, entraremos en el programa y
podremos comenzar a gestionar nuestro correo, tanto el que hemos recibido como el que vamos a
enviar.
La primera vez que ejecutemos elm, se van a crear en nuestro directorio $HOME un par de subdi-
rectorios, Mail/ y .elm/, que van a ser necesarios para almacenar nuestro correo y para mantener
una configuracion personalizada del gestor (por ejemplo, definiendo cabeceras para los mensajes o
aliases de alguna direccion con la que nos comuniquemos a menudo).
Si al entrar en el entorno que nos proporciona elm tenemos correo en nuestro buzon electronico (un
archivo con nuestro identificador de usuario situado en el directorio /var/spool/mail/), apare-
ceran ante nosotros los subject de los mensajes junto con su remitente, marcando el actual con
un ‘sombreado’ blanco; esta marca la podremos desplazar entre los mensajes, utilizando para ello
los cursores y tambien los caracteres ‘+’ (aparece la siguiente pagina delındice de mensajes), ‘-’
(aparece la pagina anterior a la actual), ‘J’ (avanza al siguiente mensaje) o ‘K’ (retrocede al men-
saje anterior al actual); si introducimos un numero y luego pulsamos Intro, el mensaje actual sera
el marcado con el numero pulsado.
Podremos operar siempre sobre el mensaje que tengamos marcado como actual en ese momento.
La primera accion que nos puede interesar realizar sobreel seguramente sera leer su contenido
(denominado body o cuerpo del mensaje). Para ello pulsaremos Intro o la barra espaciadora, y el
mensaje aparecera paginado en nuestra terminal.
Una vez hemos leıdo un mensaje, podemos responder a su remitente. Esto lo conseguimos me-
diante la tecla ‘r’. elm nos preguntara si queremos copiar el original en la respuesta; contestar ‘y’
nos va a serutil para recordar a quien la lea la respuesta el origen de nuestros comentarios.

Page 35
7 UNIX Y REDES: APLICACIONES
35
De esta forma vamos a ir trabajando: moveremos el indicador del mensaje actual para ir leyendo
todo el contenido de nuestro buzon, respondiendo mensajes, etc. Cuando hayamos leıdo un men-
saje, es posible que nos interese grabarlo en un archivo donde podemos ir almacenando los mensajes
referentes a un mismo tema. Este archivo se llama folder, y para grabar el mensaje en un folder
determinado, elegiremos la opcion ‘s’, tras la cual elm nos preguntara por el nombre del archivo
donde deseamos grabarlo; otra forma de hacer esto es con la opcion ‘>’ de elm, a la que indicaremos
el folder adecuado. Si mas tarde deseamos visualizar los archivos grabados en un fichero, habremos
de abrirlo. elm siempre abre por defecto nuestro buzon, y le hemos de indicar si queremos leer de
otro lugar con la opcion ‘c’, para cambiar de folder (los folders estaran almacenados en nuestro
directorio $HOME/Mail).
Es posible que aparte de responder a un mensaje deseemos enviar una copia del original a algun
amigo. Esto se llama enviar un forward, y lo podremos realizar con la opcion ‘f’; incluso podremos
modificar algo del mensaje antes de enviarlo.
Tambien necesitaremos borrar mensajes que no nos interese conservar. Ello se consigue simple-
mente pulsando ‘d’, lo que marcara el mensaje actual como borrado. Antes de abandonar elm, con
la opcion ‘q’, el programa nos preguntara si deseamos borrar los mensajes marcados (que tendran
una ‘D’ al lado del nombre del remitente). Si despues de marcarlo, deseamos conservarlo, ‘u’ realiza
un undelete del mensaje actual.
Si lo que nosotros deseamos no es gestionar el correo recibido sino enviar el nuestro propio, debemos
elegir la opcion m de elm. Entonces, el programa nos preguntara los datos del mensaje a enviar
(destinatario, tema. . . ), tras lo cual entraremos en un editor de texto (en nuestro caso sera vi), en
el que teclearemos nuestro mensaje.
Para finalizar con el uso del gestor de correo elm, hemos de recordar que en todo momento podemos
conseguir ayuda acerca de las opciones disponibles pulsando la tecla ‘?’, y que podremos redefinir
algunas variables de usuario a nuestro gusto tecleando ‘o’.
7.11 pine
Mas que como un gestor de correo, pine se suele definir a menudo como un gestor de mensajes, ya
que su configuracion permite tanto trabajar con el e-mail habitual como con las news de Usenet.
Sin embargo, como nosotros ya sabemos utilizar el lector de noticias tin, solo vamos a aplicar pine
para gestionar, al igual que hemos hecho con elm, nuestro correo electronico.
pine se puede configurar de muchas formas, atendiendo principalmente al conocimiento que el
usuario tenga de su uso; para nosotros, las opciones elementales van a ser las mismas que nos
ofrecıa elm, aunque dentro de un entorno mucho mas amigable queeste.
En primer lugar, vamos a ver cuales son las utilidades a las que podemos acceder desde el menu
principal, el que se nos muestra en pantalla inmediatamente despues de ejecutar pine:
• HELP: Nos muestra el fichero de ayuda del gestor.
• COMPOSE MESSAGE: Se utiliza para editar y enviar un mensaje a una determinada direccion.
• FOLDER INDEX: Nos permite acceder a los mensajes del folder actual.
• FOLDER LIST: Mediante este servicio vamos a poder seleccionar un determinado folder (alma-
cenados en $HOME/mail) o nuestro buzon, que se llamara INBOX por defecto
(/var/spool/mail/<usuario>).
• ADDRESS BOOK: Aunque nosotros no vamos a utilizar una lista de direcciones, esta opcion nos
permite crear una especie de agenda con direcciones de correo que utilicemos frecuentemente.
• SETUP: Nos permite definir un entorno personalizado para pine: editor a utilizar, nombre que
deseamos que aparezca como remitente cuando enviemos mail, etc.

Page 36
7 UNIX Y REDES: APLICACIONES
36
• QUIT: Sale de pine.
A cada una de estas opciones podremos acceder pulsando las teclas ‘?’, ‘C’, ‘I’, ‘L’, ‘A’, ‘S’ o
‘Q’, respectivamente, desde casi cualquier menu de pine.
Para nosotros, la opcion mas interesante y la que mas vamos a utilizar va a ser Folder List (L), ya
que nos va a permitir seleccionar un folder y trabajar con los mensajes contenidos enel; si elegimos
esta opcion, veremos en pantalla una lista con todas las carpetas de correo que tenemos. Tras selec-
cionar una determinada, veremos el remitente y el tema de todos los mensajes grabados en el archivo.
En este punto podemos comenzar a realizar acciones sobre un determinado mensaje. Si elegi-
mos uno como actual (con los cursores, o las teclas ‘-’, barra espaciadora, ‘p’ o ‘n’, que nos
desplazan de una a otra ventana o mensaje), podremos leerlo (Intro o ‘v’), realizar un forward
(‘f’), responder al remitente (‘r’), marcarlo como borrado (‘d’), desmarcarlo (‘u’) o grabarlo
en un folder (‘s’). Estaultima opcion automaticamente marcara el mensaje como borrado, para
evitar tener el mismo texto en varios lugares a la vez; de cualquier forma, antes de abandonar pine
(‘q’), el programa nos preguntara si realmente queremos borrar los mensajes marcados. Cuando
terminemos de trabajar con los mensajes de un folder, podemos tanto volver al menu principal
(‘m’) como a la lista de folders (‘l’).
No vamos a ahondar mas en el uso de pine, ya que este gestor puede llegar a admitir un uso
muy complicado, y ademas en cada pantalla el programa nos informa de las opciones que tenemos
disponibles, generalmente pulsando ‘?’.

Page 37
8 CONCEPTOS DEL SISTEMA OPERATIVO UNIX
37
8 CONCEPTOS DEL SISTEMA OPERATIVO UNIX
8.1 Ficheros
Logicamente, un archivo es un conjunto de datos relacionados de alguna forma entre sı; fısicamente,
para el sistema Unix, un archivo no va a ser mas que un conjunto de bytes almacenados en un disco
del sistema o en cualquier otro medio de almacenamiento secundario.
En nuestra maquina Linux vamos a encontrar tres tipos basicos de ficheros: ficheros planos, direc-
torios, y ficheros especiales. Un fichero plano es aquel que contiene informacion generada durante
una sesion de trabajo de cualquier usuario, ya sean programas, documentos, ejecutables. . . Un di-
rectorio es una especie de catalogo de archivos planos manipulado por el S.O. para presentar una
estructura arborescente del sistema de archivos. Para nosotros, un directorio va a ser un fichero
especial que va a contener archivos de todo tipo: planos, otros directorios (llamados subdirectorios)
o ficheros especiales. Siempre existiran dos archivos dentro de cualquier subdirectorio, denominados
‘.’ y ‘..’, que hacen referencia al propio directorio (‘.’) y a su directorio padre (‘..’).
Los ficheros especiales pueden ser de varios tipos; en primer lugar, encontramos los archivos de
dispositivos. Para Unix, cualquier parte del computador (disco, cinta, tarjeta de sonido, impresora,
memoria. . . ) es un archivo especial. Existen dos tipos basicos de archivos de dispositivo: orien-
tados a caracter (que realizan sus operaciones de I/O caracter a caracter, como impresoras o
ratones) y orientados a bloque (realizan esas mismas operaciones en bloques de caracteres; los
mas comunes son los discos y las cintas).
Otro tipo de archivo especial es el link o enlace, que no es mas que una copia de un archivo
determinado en otro lugar del almacenamiento, una especie de segundo nombre del archivo refer-
enciado. Podremos distinguir dos tipos de enlaces: los duros y los simbolicos; mientras que los
primeros realizan una segunda copia del archivo enlazado, los segundos son simplemente apunta-
dores a ese archivo.
Porultimo existen dos tipos de archivos especiales que no vamos a tratar con detalle, ya que
suelen ser solo usados en programacion o por el propio sistema operativo: son los sockets y los
pipes o FIFOs (First In First Out). Los primeros son una especie de ‘agujeros negros’ que reciben
y dan informacion, mientras que los segundos son las denominadas ‘tuberıas’ del sistema: los datos
que entran por un extremo salen en el mismo orden por el extremo contrario.
Podremos distinguir entre sı los diferentes archivos a partir de su primer bit de descripcion (que
en realidad no es un solo bit); los ficheros planos se denotaran por ‘-’, los directorios por ‘d’, los
dispositivos orientados a caracter por ‘c’, los orientados a bloque por ‘b’, los pipes por ‘p’, y los
sockets por ‘s’. Veamos un ejemplo, al listar el contenido de un directorio con ls -al:
rosita:i$ ls -al
Estos directorios son el actual y el padre:
drwxr-xr-x 15 toni users 2048 Nov 2 03:49 ./
drwxr-xr-x 5 root root 1024 Jun 9 02:45 ../
Directorios normales: vemos la ”d” al principio de los permisos:
drwxr-xr-x 2 toni users 1024 Oct 26 15:18 .pgp/
drwxr-xr-x 2 toni users 1024 Oct 26 17:11 programacio/
Archivos planos: al principio, tenemos ”-”:
-rw-r-xr-x 1 toni users 155 Nov 2 03:49 test
-rwxr-xr-x 1 toni users 349 Oct 3 05:14 server
Pipes: vemos su indicador, ”p”:
prw-r-xr-x 1 toni users 155 Nov 2 03:49 .plan
prwxr-xr-x 1 toni users 369 Oct 3 12:12 pipetest
Archivos especiales orientados a caracter o a bloque:
crw-r-xr-x 1 toni users 0 Nov 2 06:29 caractest
brwxr-xr-x 1 toni users 0 Oct 2 08:14 blocktest
Enlaces simbolicos; su indicador es la ”l”:

Page 38
8 CONCEPTOS DEL SISTEMA OPERATIVO UNIX
38
lrwxrwxrwx 1 toni users 10 Oct 2 22:25 magic -> /etc/magic
lrwxrwxrwx 1 toni users 11 Oct 2 22:25 passwd -> /etc/passwd
8.2 Permisos de los archivos
En este apartado vamos a intentar explicar que es el modo de un fichero, como se interpreta y como
se modifica (aunque estoultimo lo vimos en el capıtulo 3, al estudiar la orden chmod).
En Unix existen tres tipos de acceso a un fichero:
• Lectura (Read): Permite visualizar el contenido de un archivo.
• Escritura (Write): Permite modificar o borrar tal contenido.
• Ejecucion (eXec): Permite ejecutar un archivo (binario o proceso por lotes); sobre un direc-
torio, permite utilizar su nombre como parte del camino de un archivo.
Dentro de un mismo fichero, existen tres niveles para los tipos de acceso anteriores:
• Due˜no del fichero (User): Aplicable al creador del archivo.
• Grupo del fichero (Group): Correspondiente al grupo al que pertenecıa el due˜no en el momento
de crear el archivo.
• Otros (Others): Resto de usuarios.
De esta forma, los permisos sobre un archivo van a componerse de tres ternas, nueve componentes
que corresponden a los tipos de acceso y a sus niveles:
r w x
r w x
r w x
Terna 3: Correspondiente al nivel others
Terna 2: Correspondiente al nivel group
Terna 1: Correspondiente al nivel de due˜no
Cada uno de los elementos de la terna es el tipo de acceso definido para el nivel determinado (Read,
Write, eXec). Si alguno de los permisos no esta activo, aparecera un guion (-) en su lugar (pe.,
rwxr-xr-x).
El modo de un archivo puede representarse mediante una mascara binaria, con un 1 si esta ac-
tivo, o un 0 si no lo esta; a su vez, cada tres bits pueden representarse por su dıgito octal, por
ejemplo para cambiar el modo de un fichero. Veamos un ejemplo:
rwx r-x r-x
En binario, tendrıamos una mascara para este modo de archivo que serıa
111 101 101
Si pasamos este numero binario al sistema de numeracion octal, tenemos
7 5 5
Luego el modo del archivo es el 755: su due˜no puede leerlo, modificarlo y ejecutarlo; los usuarios
pertenecientes a su grupo pueden leerlo y ejecutarlo, al igual que el resto de usuarios. Si el nombre
del fichero fuera file.txt, por ejemplo, es posible que su due˜no hubiera realizado un cambio de su
modo hasta conseguir el 755:
rosita:# chmod 755 file.txt
Podrıamos cambiar el modo del archivo para conseguir que nadie lo pueda leer, para que solo lo
puedan ejecutar los miembros de nuestro grupo, etc. Veremos ejemplos en clase para estudiar el
modo de un fichero y las posibilidades que ofrece tanto a su due˜no como al resto de usuarios de un
sistema Unix.

Page 39
8 CONCEPTOS DEL SISTEMA OPERATIVO UNIX
39
8.3 Archivos ejecutables, imagenes y procesos
Un archivo ejecutable es simplemente un programa que puede procesarse en la computadora. En
Unix encontramos dos tipos de ejecutables: shellscripts, que no son mas que archivos en los que
hemos especificado una serie de comandos del sistema para que se ejecuten en orden, y binarios,
que son ficheros planos con codigo maquina interpretado directamente por el procesador (generados
a partir de un codigo fuente, un compilador y un montador o linker).
Cuando ejecutamos cualquier archivo capaz de ser procesado por el ordenador, se carga en memo-
ria principal una imagen de ese fichero, que no es mas que una copia del archivo o de un trozo
deeste. En realidad, una imagen tambien esta compuesta por el entorno que proporciona el sis-
tema para llegar a ejecutar el archivo, peroeste es un tema demasiado complejo para abordarlo aquı.
Hemos explicado ya que Unix es un S.O. multitarea y multiusuario. Normalmente, en la maquina
estaran conectados varios usuarios, cada uno trabajando con una serie de ejecutables, y tambien
existiran trabajos del sistema, imagenes en memoria susceptibles de ser ejecutadas. Por tanto, la
CPU ha de cambiar constantemente entre tareas, ejecutando una porcion de cada una durante uno
o varios ciclos de reloj. De esta forma, ante nosotros parecera que nada mas introducir un comando
el sistema directamente nos va a dar una respuesta, aunque en realidad lo que esta haciendo es
ejecutar varias tareas a la vez, cambiando rapidamente entre ellas, para poder dar a todos los
usuarios la misma sensacion de dedicacion plena. Cuando la CPU ejecuta un trozo de imagen, esta
imagen se convierte en un proceso . Como en un intervalo de tiempo mas o menos reducido se
van a ejecutar todas las imagenes que coexisten en el sistema, por extension del lenguaje se suele
confundir el concepto de proceso con el de imagen (por ejemplo, la orden ps no deberıa ser Process
Status sino Image Status).
8.4 El shell
El shell no es mas que el interprete de comandos, un programa del sistema que nos va a permitir
comunicarnos con la maquina ordenandole cosas.
Linux, como cualquier Unix, nos va a ofrecer distintos procesadores deordenes, aunque nosotros
solo vamos a comentar las posibilidades de los mas comunes: el Bourne Shell, el Bourne Again
Shell y el Korn Shell. El C Shell, tambien muy popular, no lo vamos a tratar, ya que su uso es mas
adecuado para los programadores de Unix. Una tabla resumen de los distintos shells podrıa ser:
Programa
Interprete
sh
Bourne Shell
tcsh
C Advanced Shell
ash
Shell reducido
zsh
Z Shell
bash
Bourne Again Shell
csh
C Shell
ksh
Korn Shell
pdksh
Public Domain Korn Shell
El Bourne Shell es el interprete de comandos fundamental en todo sistema Unix, ofreciendose siem-
pre de serie. Sabremos que lo estamos utilizando porque su indicador, su prompt, sera el sımbolo
‘$’ (aunqueeste sımbolo corresponde tambien al Bourne Again Shell, y ademas es facilmente mod-
ificable por el usuario).
El Korn Shell es una extension del Bourne Shell, que mejora aesteultimo. Todo lo que fun-
cione con sh lo hara tambin con ksh. Sus prestaciones son similares al C Shell, incorporando
historico deordenes, control de tareas y creacion de aliases.
El bash es el interprete de Free Software Foundation, una asociacion con fines no lucrativos cuyo
objetivo es desarrollar y suministrar a todo el mundo sistemas Unix gratuitos. Amplıa las posibil-
idades del Bourne Shell, incorporando mejoras como el rodillo deordenes (posibilidad de repetir

Page 40
8 CONCEPTOS DEL SISTEMA OPERATIVO UNIX
40
cualquier comando anterior utilizando el cursor hacia arriba). Dadas sus excelentes caracterısticas,
va a ser el shell que nuestra maquina Linux (no ası otros Unices) nos va a proporcionar por defecto.
8.5 Programacion en shell
Como ya hemos comentado, el shell de Unix es un interprete de comandos. Como cualquier
interprete o traductor, define un lenguaje de programacion que tiene unas caracterısticas como:
• Variables.
• Metacaracteres (palabras y caracteres reservados).
• Procedimientos (shellscripts).
• Estructuras de control de flujo, como if o while.
• Manejador de interrupciones.
Aquı no vamos a intentar profundizar mucho en la programacion utilizando el shell, ya que serıa
imposible en tan solo unas horas. Sin embargo, sı que vamos a pretender conocer mınimamente
esta programacion y poder interpretar programas sencillos.
Lasordenes que ha de ejecutar el shell pueden ser leıdas desde el teclado o desde un fichero
(shellscript). Las lıneas de este fichero que comienzan por el sımbolo ‘#’ son interpretadas como
comentarios. El formato de un shellscript no difiere mucho a la secuencia deordenes que habrıamos
de introducir por teclado; veamos un sencillo ejemplo:
#!/bin/sh
# Esto es un comentario
echo "Los usuarios conectados son:"
who
La primera lınea indica al shell que va a ejecutar un script y para ello va a usar un interprete
definido (en este caso, sh, que es el que se utiliza por defecto si esta primera lınea se omite).
Podemos ejecutar este fichero de varias formas:
• (a) Creando un shell no interactivo y redireccionando su entrada:
rosita:# sh <fichero
• (b) Creando un shell no interactivo y pasandole el script como argumento:
rosita:# sh fichero
• (c) Dando permiso de ejecucion al shellscript y ejecutandolo:
rosita:# chmod 700 fichero
rosita:# fichero
Podemos crear scripts para muchas necesidades basicas que como usuarios vamos a tener. Sin
embargo, el estudio en profundidad de la programacion bajo el shell se escapa del tiempo y los
propositos de este curso. No podemos entrar en la posibilidad de recibir argumentos en un script,
ni en el uso de las variables en la programacion shellscript, etc. Simplemente hemos de saber como
interpretar algun programa sencillo (para ello basta conocer mınimamente lasordenes de Unix), y
saber como crear los nuestros propios (tambien conociendo los comandos del sistema).

Page 41
8 CONCEPTOS DEL SISTEMA OPERATIVO UNIX
41
8.6 Organizacion de directorios
La estructura de directorios que proporciona Unix nos va a permitir gestionar nuestros propios
archivos. Esta estructura consiste en una serie jerarquica de niveles de directorios; todos parten del
directorio ‘/’, llamado raız, y se ramifican con archivos o subdirectorios.
La jerarquıa de directorios y archivos logica puede implantarse en diferentes medios fısicos (dis-
cos), ya que Unix es un sistema independiente de dispositivo (no como MS-DOS, por ejemplo). De
esta forma, el directorio /home/toni/programacio/ puede estar en un disco y el directorio
/home/toni/security/ puede estar en otro diferente, sin que nosotros notemos el cambio de disco
al pasar de un directorio a otro.
Los nombres de los directorios del sistema Linux (no los que nosotros vayamos a crear como usuar-
ios) tienen un nombre definido que da una idea de los archivos planos contenidos en el directorio.
Veamos algunos ejemplos:
• /dev/ (device): Dispositivos del sistema (impresoras, discos, modems. . . ).
• /bin/ (binary): Ejecutables basicos para los usuarios.
• /sbin/ (super binary): Ejecutables basicos para el superusuario (root).
• /lib/ (libraries): Librerıas del sistema.
• /home/ : Directorio del que van a ‘colgar’ los directorios asignados a los diferentes usuar-
ios. Por ejemplo, /home/toni/ es el directorio al que el usuario toni entra por defecto, y
/home/mbenet/ es al que mbenet entra por defecto.
• /etc/ : Directorio para almacenar programas del sistema (configuracion, servicios. . . ) que
no tienen una localizacion especıfica en otro directorio.
• /proc/ : Dispositivos hardware del sistema (memoria, procesador . . . ). Podremos ver carac-
terısticas del sistema haciendo un cat sobre algunos de ellos (la mayorıa).
• /usr/ (user): Directorio del que ‘cuelgan’ subdirectorios con aplicaciones para usuarios; por
ejemplo, en /usr/bin/ hay archivos ejecutables, en /usr/include ficheros de cabecera para
programacion en C, etc.
• /var/ (varios): Directorio del que parten subdirectorios con contenidos diversos, desde archivos
de administracion del sistema hasta correo de usuarios.
En clase veremos con algo mas de detalle el contenido de cada uno de estos directorios.
Hemos comentado que cada usuario del sistema tiene un directorio de trabajo al cual ira por
defecto cada vez que conecte a la maquina. Este directorio de conoce como $HOME (‘$’ indica que
es una variable de entorno), y esta especificado en el archivo /etc/passwd. Si ejecutamos cd sin
ningun argumento, iremos a nuestro $HOME sin importar nuestra localizacion actual. Ası mismo,
para ir al directorio $HOME de un usuario (si los permisos asignados lo permiten), bastara con
teclear cd<usuario>:
rosita:/usr/include/linux$ cdtoni
rosita:$
Porultimo, veamos lo que representa la variable de entorno $PATH. El path o ruta de un archivo
es el camino que se ha de seguir a lo largo de la jerarquıa de directorios hasta llegar al fichero;
por tanto, cada path va a representar siempre a un archivo y solo a uno (aunque Unix permite que
un mismo archivo tenga varios nombres en la jerarquıa de directorios, como vimos al estudiar el
comando ln, el estudio en profundidad de estos conceptos escapa al contenido del curso).
Quizas nos hemos hecho la siguiente pregunta: cuando nosotros ejecutamos un mandato, sin in-
dicar el path de la orden, ¿como sabe el sistema donde buscar el fichero para ejecutarlo?. Ası, si
ejecutamos la orden passwd, ¿como sabe el sistema que nos estamos refiriendo a /bin/passwd y no

Page 42
8 CONCEPTOS DEL SISTEMA OPERATIVO UNIX
42
a /etc/passwd? Pues bien, el sistema lo sabe simplemente porque nosotros se lo hemos dicho, le
hemos indicado donde ha de buscar los ficheros para ejecutarlos. Esto se lo hemos dicho en forma
de una variable llamada $PATH. Siempre que indiquemos un comando al sistema,el buscara un
ejecutable con el mismo nombre en cada uno de los directorios del $PATH, hasta encontrar el que
buscabamos y ejecutarlo. Esta busqueda se realiza por orden, por lo que si nuestro $PATH es como
el que sigue,
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11/bin:/usr/andrew/bin:
/usr/openwin/bin:/usr/games:/usr/local/bin/varios:
/usr/local/bin/xwpe-1.4.2:.
y hay un archivo ejecutable llamado tester en el directorio actual, y otro en el directorio
/usr/local/bin/, y tecleamos simplemente tester, se ejecutara /usr/local/bin/tester, y no
./tester. Esto es una importante medida de seguridad para los usuarios.
8.7 Planos de trabajo
En cualquier sistema Unix vamos a tener dos planos de trabajo diferenciados entre sı: el plano
principal (foreground) y el segundo plano (background).
Los trabajos o procesos que tengamos trabajando en segundo plano lo van a hacer generalmente
con menos prioridad que los del plano principal; ademas, si tenemos que interactuar con la tarea
del segundo plano (a traves del teclado, por ejemplo), va a ser necesario ‘subir’ el trabajo al plano
principal; por tanto, el background nos va a ser de utilidad solo si el proceso no tiene accion con el
usuario o si esta accion es cada bastante tiempo (como a la hora de acceder a un servidor WWW
cuando hay bastante trafico en la red). En segundo plano podremos tener tantos trabajos como
queramos (o como el sistema nos permita), pero en foreground solo podremos tener una tarea.
Existen varias formas de dejar trabajos en uno u otro plano y de moverlos entre ellos; vamos a ver
aquı las mas comunes:
Si ejecutamos un comando, sin indicarle nada especial al sistema, pasara a ejecutarse en foreground.
Si durante la ejecucion queremos moverlo al segundo plano, lo habremos de detener (Ctrl-Z), y luego
pasarlo con la orden bg %<numero trabajo>. El argumento del comando bg es opcional; si no lo
indicamos, bajara a background elultimo trabajo lanzado. Si tenemos varios trabajos en segundo
plano, y queremos seleccionar uno diferente delultimo para subirlo al plano pincipal, veremos sus
numeros con la orden jobs, ası como si tenemos diferentes trabajos parados y queremos dejar uno
de ellos en background o foreground.
En el mismo prompt del sistema, podemos dejar directamente un trabajo en background tecle-
ando al final del comando y sus opciones el sımbolo ‘&’; se nos indicara el identificador de proceso
(PID), y el trabajo comenzara a funcionar en segundo plano. Luego podemos subirlo a foreground
de nuevo con la orden fg, pero sin necesidad de suspenderlo. Vamos a ver un ejemplo que nos
aclarara las dudas:
rosita:/myprog$ ls
mysocket.h
add
fsi.c
pingkrc.c
serversock
trans.c
add.c
hora
serversock.c ttylock
addus.c
hora.c
ttylock.c
asker
log
asker.c
log.c
quest
dimoni.h
log2.c
quest.c
sysinfo.c
rosita:/myprog$ cc -o server serversock.c
Lanzamos un trabajo en foreground.
rosita:/myprog$ server &
[1] 106
Ahora hemos lanzado un trabajo, nuestro numero [1], en background, con el sımbolo &;

Page 43
8 CONCEPTOS DEL SISTEMA OPERATIVO UNIX
43
se nos indica el PID: 106.
rosita:/myprog$ jobs
[1]+ Running server &
Vemos nuestra lista de trabajos; solo tenemos uno.
rosita:/myprog$ fg
server
[1]+ Stopped server
Subimos el trabajo a foreground con fg (podrıamos haberlo hecho con fg %1) y lo paramos
con Ctrl-Z.
rosita:/myprog$ bg
[1]+ server &
Lo dejamos en background de nuevo, con bg (o bg %1).
rosita:/myprog$ cc -o server2 serversock.c &
[2] 107
Ejecutamos una tarea directamente en background; su numero es el 2, y su PID el 107.
rosita:/myprog$ fg %2
cc -o server2 serversock.c
Dejamos el segundo trabajo en el plano principal.
rosita:/myprog$ jobs
[1]+ Running server &
Una vez que ha finalizado el trabajo anterior, volvemos a tenerunicamente una tarea
ejecutandose.
Con este ejemplo ha de quedar ya completamente claro el concepto de los planos de Unix, y como
manejarlos. Ahondaremos mas en este tema en clase.
8.8 Entrada y salida
En nuestro sistema vamos a tener definidas una entrada estandar (stdin, teclado), una salida
estandar (stdout, pantalla), y una salida de errores (stderr, tambien la pantalla). Sin embargo,
es posible que en algun momento nos interese enviar el resultado de una orden a un fichero, o los
errores al compilar un trabajo a otro; entonces habremos de redireccionar las salidas y/o entradas,
utilizando para ello los sımbolos ‘<’ (menor que) y ‘>’ (mayor que).
Para redireccionar stdout, habremos simplemente de ejecutar el comando deseado, y al final de
la lınea de orden, especificar > fichero para enviar la salida a un archivo; si este archivo ya existe,
con ‘>’ se sobreescribira; si no deseamos sobreescribir el fichero, utilizaremos ‘>>’, en lugar de ‘>’.
Si lo que deseamos es redireccionar la entrada, para que en lugar de leer comandos del teclado
el sistema los lea desde un archivo, utilizaremos el sımbolo ‘<’ al final del comando y sus opciones
en la lınea del interprete deordenes.
Para redireccionar la salida de errores, lo haremos analogamente a stdout, pero habremos de indicar
un 2 (el identificador de stderr) antes de los sımbolos ‘>’ o ‘>>’.
Si lo que deseamos es enviar ambas salidas a un mismo fichero, una forma facil de hacerlo es
utilizando el sımbolo ‘>&’ (no hay que confundir ‘&’ con el indicador de lanzamiento de un pro-
ceso en segundo plano).
Veamos unos ejemplos que aclaren todos estos conceptos:
rosita:# ls

Page 44
8 CONCEPTOS DEL SISTEMA OPERATIVO UNIX
44
mail seguridad Unix documentos
Redireccionamos la salida y sobreescribimos ”fichero”:
rosita:# ls >fichero
El contenido de ”fichero” es simplemente el resultado de ejecutar el comando ls, analogo
a lo obtenido antes en pantalla.
rosita:# cat fichero
mail seguridad Unix documentos
Volvemos a redireccionar, a˜nadiendo a ”fichero”:
rosita:# ls >>fichero
Ahora ”fichero” tiene su contenido anterior y el nuevo:
rosita:# cat fichero
mail seguridad Unix documentos
mail seguridad Unix documentos
fichero
Redireccionamos ahora la entrada:
rosita:# ftp <entrada &
[1] 129
Ahora redireccionamos stderr, la salida de errores:
rosita:# cc -Wall -o test test.c 2>errores
El contenido de ”errores” es el resultado de compilar el fichero test.c:
rosita:# cat errores
Line 3: Undefined symbol Int.
Line 5: Warning: fopen() redefined.
rosita:#
Si ahora queremos redirigir ambas salidas al mismo fichero, lo conseguimos de la siguiente forma:
rosita:# cc -Wall -o test test.c >& ambas
Ademas de esta capacidad para redirigir la salida o la entrada a archivos (o a dispositivos como
discos flexibles o cintas magneticas, ya que recordemos que en Unix estos perifericos son archivos),
podemos realizar sobre la salida de un comando lo que se denomina un filtrado: en lugar de obtener
directamente el resultado de un comando por pantalla, podemos aplicarle antes otra orden y mostrar
ası el resultado final. Recursivamente, este nuevo resultado tambien podrıamos pasarlo por otro
programa antes de mostrarlo en pantalla, o redirigirlo a un archivo exactamente tal y como hemos
hecho antes.
Para realizar este filtrado en Unix disponemos de lo que se llama pipes o tuberıas, utilizando
el sımbolo ‘|’. La salida de la orden a la izquierda de ‘|’, compuesta por un conjunto de comandos
o por uno solo, es filtrada por la orden a la derecha del sımbolo antes de mostrarse en pantalla.
Veamos un ejemplo, recordando que el comando sort sin argumentos ordenaba alfabeticamente, y
la orden cat volcaba el contenido de un fichero a la salida estandar:
Volcamos el contenido del fichero telefo y lo mostramos:
rosita:$ cat telefo
Antonio 3423243
Luis
977895
Juan
3242143

Page 45
8 CONCEPTOS DEL SISTEMA OPERATIVO UNIX
45
Amalio 332210
Joaquin 234234
Pepa 336544
Ana 91-555234
Ahora, en lugar de mostrar el resultado en pantalla directamente, lo ordenamos
antes utilizando sort:
rosita:$ cat telefo|sort
Amalio 332210
Ana 91-555234
Antonio 3423243
Joaquin 234234
Juan
3242143
Luis
977895
Pepa 336544
En lugar de mostrar el resultado ordenado en pantalla, guardamos el resultado
en un fichero:
rosita:$ cat telefo|sort >telefo.ordenado
rosita:$
En el uso correcto de tuberıas encontramos una de las fuentes de potencia del sistema operativo: en
una sola lınea de comando podemos conseguir cosas que desde otros operativos requerirıan un gran
trabajo o simplemente serıa imposible realizar. Utilizar Unix correctamente reside muchas veces
en saber cuando y como resolver problemas mediante la combinacion de programas utilizando el
filtrado.

Page 46
9 SEGURIDAD BASICA DEL USUARIO
46
9 SEGURIDAD BASICA DEL USUARIO
9.1 Sistemas de contrase˜nas
Para verificar la identidad de cada usuario de una maquina Unix se utilizan passwords, contrase˜nas
establecidas por el propio usuario y que soloel debe conocer para evitar que otra persona pueda en-
trar haciendose pasar porel, ya que todo lo que el intruso hiciera estarıa bajo la responsabilidad del
usuario atacado. Para no caer en los errores tıpicos de muchos libros al tratar el tema de la seguridad
del sistema, no llamaremos a los intrusos ni hackers ni crackers, sino simplemente piratas o intrusos.
Una de las actividades predilectas de muchos piratas novatos es conseguir el archivo de contrase˜nas
del sistema, normalmente /etc/passwd, en el que se guardan las claves cifradas de todos los usuar-
ios. El criptosistema usado por Unix es irreversible, esto es, no podemos ‘descifrar’ las claves. Sin
embargo, existen muchos programas capaces de comparar palabras de un diccionario o combina-
ciones deestas con todas las contrase˜nas de los usuarios, avisando si una comparacion es correcta.
Por tanto, la seguridad del sistema depende en buena medida de las claves utilizadas por sus usuar-
ios.
El archivo de contrase˜nas normal de un Unix ha de tener permiso de lectura para todo el mundo,
para que al intentar acceder a la maquina, el programa login pueda comparar la clave introducida
con la almacenada en el fichero. Sin embargo, y debido al enorme agujero de seguridad que esto
representa, se han dise˜nado alternativas a este sistema que no permitan a los usuarios leer direc-
tamente el archivo de passwords. La mas conocida de estas alternativas es la conocida como bf
shadow password.
En sistemas con shadow, el archivo /etc/passwd no contiene ninguna clave, sino un sımbolo
(normalmente ‘∗’ o ‘+’) en el campo correspondiente. Las claves reales, cifradas, se guardan en
/etc/shadow, un archivo que solo el superusuario puede leer. De esta forma, aunque un intruso
consiga el archivo /etc/passwd no podra intentar un ataque contra las contrase˜nas cifradas para
romper la seguridad de la maquina. Una entrada tıpica en el archivo /etc/passwd de un sistema
shadow puede ser
toni:∗:34:101:Toni Villalon:/home/toni:/bin/bash
Vemos que en el segundo campo, el reservado a la clave encriptada, no aparece nada que el intruso
pueda violar.
Otra medida, bastante menos utilizada que la anterior, consiste en la tecnica denominada aging
password, que se puede utilizar independientemente o en combinacion con el shadow password.
El aging password por sı mismo aun permite la lectura de las claves encriptadas en /etc/passwd.
Sin embargo, las claves van a tener un periodo de vida (en el caso mas extremo una contrase˜na
servira simplemente para unaunica sesion, habiendo de cambiarla en la siguiente). Gracias a esto,
se consigue que un intruso que haya capturado una clave no pueda acceder de forma indeterminada
al sistema.
Cada cierto tiempo, el sistema va a ordenar a cada usuario cambiar su contrase˜na. Despues de
cambiarla, existira un periodo en el que no la podra volver a cambiar, para evitar que vuelva a
poner la vieja inmediatamente despues de cambiarla. Despues de este periodo, se permite un cam-
bio de forma voluntaria durante otro intervalo de tiempo, al finalizar el cual se obliga al usuario de
nuevo a realizar un cambio. Graficamente, lo podemos ver como:
6
6
(a)
(e)
(b)
(c)
(d)

Page 47
9 SEGURIDAD BASICA DEL USUARIO
47
(a): Cambio de clave obligado por el sistema.
(b): Periodo sin posibilidad de cambiar la contrase˜na.
(c): Periodo de cambio voluntario.
(d): Periodo de cambio obligatorio.
(e): Si al finalizar el periodo anterior el usuario no ha cambiado su clave, se le deniega el acceso al
sistema (por norma general).
Hemos hablado antes de las herramientas utilizadas por intrusos para conseguir claves del sis-
tema. Para evitar que puedan conseguir nuestro password, es conveniente utilizar una contrase˜na
aceptable. No debemos utilizar palabras que puedan estar en un diccionario de cualquier idioma.
Debemos utilizar una combinacion de sımbolos, mayusculas, minusculas y numeros para dificultar
ası el trabajo de un posible atacante. Aunque las herramientas usadas por los piratas son cada dıa
mas potentes, elegir una buena contrase˜na puede dar al sistema un minimo de seguridad y fiabilidad.
A nadie le gusta que alguien fisgue en sus archivos, aunque no llegue a destruir nada; serıa como si
una persona leyera nuestras cartas y no las quemara, sino que las volviera a guardar como si nada
hubiera pasado: no hemos de apoyar nunca a alguien dedicado a acceder a sistemas de forma no au-
torizada, aun cuando nos parezca un genio. Generalmente, nadie con unos mınimos conocimientos
se dedica a estas actividades (aunque, como en todo, siempre hay excepciones. . . ).
9.2 Archivos setuidados y setgidados
Un archivo setuidado (o setgidado) no es mas que un fichero con el bit setuid (respectivamente, set-
gid) activo. ¿Que significa esto? Simplemente que quien lo ejecute tendra los privilegios del due˜no
o del grupo del due˜no, dependiendo de si es setuidado o setgidado, durante un cierto intervalo de
tiempo.
Este tipo de archivos es una gran fuente de problemas para la integridad del sistema, pero son
completamente necesarios. Por ejemplo, imaginemos que /bin/passwd no tuviera el bit setuid ac-
tivo; no nos permitirıa cambiar nuestra clave de acceso, al no poder escribir en /etc/passwd, por lo
que cada vez que desearamos cambiar la contrase˜na habrıamos de recurrir al administrador. Esto
serıa imposible para un sistema Unix medio, con aproximadamente quinientos o mil usuarios.
Casi todos los medios de acceso no autorizado a una maquina se basan en algun fallo de la progra-
macion de estos archivos. No es que los programadores de Unix sean incompetentes, sino que es
simplemente imposible no tener algun peque˜no error en miles de lıneas de codigo.
Para aumentar la fiabilidad del sistema, es conveniente reducir al mınimo indispensable el numero
de ficheros setuidados o setgidados. En el servidor seguramente no tendremos, por ejemplo, la posi-
bilidad de cambiar nuestro shell, o nuestro campo de informacion de usuario en /etc/passwd, ya
que el bit setuid de los comandos chsh y chfn, respectivamente, ha sido reseteado.
Para crear un archivo setuidado hemos de cambiar el modo del fichero a un 4XXX (XXX indica el
modo normal; hemos de anticipar el 4), y para crear uno setgidado hemos de establecer un modo
2XXX al fichero; veamos unos ejemplos:
rosita:# chmod 4755 test
rosita:# chmod 2755 test2
rosita:# ls -al
-rwsr-xr-x
1 root
root
155 Nov 3 05:46 test
-rwxr-Sr-x
1 root
root
349 Oct 3 05:14 test2
rosita:#
Vemos que un archivo setuidado tendra una ‘s’ en el campo de ejecucion del propietario, y un set-
gidado una ‘s’ en el campo de ejecucion del grupo al que pertenece el creador del fichero. Si lo que
encontramos en cualquiera de estos campos es una ‘S’, este dato nos esta indicando que, aunque el
archivo ha sido setuidado o setgidado, no se ha activado el permiso de ejecucion correspondiente,
por lo que no vamos a poder ejecutar el fichero.

Page 48
9 SEGURIDAD BASICA DEL USUARIO
48
Como ejemplo de la comparticion de privilegios, si alguien tuviera un shell setuidado con nue-
stro UID, habrıa conseguido un interprete de comandos con todos nuestros privilegios, lo que le
permitirıa borrar nuestros archivos, leer nuestro correo, etc.
9.3 Privilegios de usuario
Cada usuario de la maquina Unix tiene una serie de privilegios sobre unos determinados archivos y
directorios. Existe un usuario, llamado root, que tiene acceso a toda la informacion del sistema, ya
que actua como administrador de la maquina.
Nosotros, como usuarios normales, vamos a tener capacidad para escribir en nuestro directorio
$HOME, cambiar su modo, borrar sus archivos y subdirectorios, etc. Sin embargo, nuestro acceso a
ciertos directorios o archivos del sistema a ser limitado (lectura, ejecucion, o a veces ni tan siquiera
eso. . . ). Podremos acceder al $HOME de otros usuarios, siestos lo han permitido, y leer alguno de
sus archivos, pero generalmente no vamos a poder modificar su contenido.
Tampoco vamos a poder leer ciertos archivos que estan dedicados a registrar actividades del sistema,
a modo de auditorıa de seguridad, como pueden ser /var/adm/syslog o /var/adm/messages, o
cualquier otro fichero de uso interno de la administracion del sistema (como /etc/sudoers).
Existe, sin embargo, un directorio aparte de nuestro $HOME en el que sı vamos a poder escribir y
guardar nuestros ficheros: se trata de /tmp, dedicado a uso temporal por parte de todos los usuarios
del sistema, en el que podremos guardar durante un tiempo informacion que nos sea de interes.
Aunque todos pueden escribir en /tmp, solo nosotros y el administrador vamos a poder borrar los
archivos que hayamos creado; esto se consigue gracias al sticky bit, o bit de permanencia, del di-
rectorio (si lo listamos con ls -l, veremos que su modo es drwxrwxrwt;estaultima ‘t’ es el sticky
bit).
La funcion del sticky bit en un archivo va a ser ligeramente diferente: va a indicarle al sistema
que el fichero es frecuentemente ejecutado y por ello es conveniente que este la mayor parte del
tiempo en memoria principal. Para evitar problemas en el sistema, aunque cualquier usuario puede
conseguir que el bit aparezca en sus ficheros,este solo va a ser realmente efectivo cuando ha sido el
administrador el que lo ha activado.
9.4 Cifrado de datos
El cifrado de la informacion es la tecnica mas utilizada para garantizar la privacidad del los datos.
La Criptologıa es la ciencia ocupada del estudio de los cifrados en todas sus variantes, desde los
ataques hasta el desarrollo de nuevos metodos de encriptacion (criptosistemas).
La encriptacion de un fichero hace imposible a un intruso la lectura de los datos si no posee una
clave para desencriptar el archivo; por tanto, garantiza la privacidad de una informacion. Su uso es
hoy en dıa muy importante, no solo ya en sistemas militares o de inteligencia, sino en el comercio
a traves de redes o en los sistemas de dinero electronico.
En Unix, se utiliza el cifrado de datos principalmente en la proteccion de las contrase˜nas (ya
hablamos de ello en el primer apartado de esta seccion). En algun momento nos puede interesar
cifrar un archivo para que nadie mas que el poseedor de una clave pueda leer su contenido. Para
ello, tenemos a nuestra disposicion varios sistemas, todos ellos demasiado complejos para ser trata-
dos en este curso. En muchos servidores esta instalado PGP, un sistema de firma electronica que
garantiza la privacidad e integridad de la informacion. En otras redes de computadores mas com-
plejas es posible encontrar sistemas de verificacion como Kerberos, en los cuales todo el trafico de
la red viaja cifrado, lo que hace inutil algunas actividades comunes entre los intrusos, como el uso
de sniffers, programas que capturan los paquetes de informacion que transitan por un ordenador.
Como ejemplo del cifrado de las transmisiones, tenemos disponible en nuestra maquina accesos por
SSH (Secure Shell) o SSL-Telnet (Secure Socket Layer Telnet).

Page 49
9 SEGURIDAD BASICA DEL USUARIO
49
9.5 Bloqueo de terminales
No es conveniente dejar nuestra conexion abierta si abandonamos, aunque sea momentaneamente,
el ordenador o la terminal desde el que hemos conectado. Cualquiera podrıa, por ejemplo, copiar en
unos segundos todos nuestros ficheros, borrarlos, o conseguir un shell setuidado con nuestro UID,
que como comentamos en el apartado 2, le darıa todos nuestros privilegios permanentemente.
Por tanto, la mejor solucion si nos vemos obligados a abandonar el ordenador desde el que estamos
trabajando es salir del servidor. Si por cualquier motivo no nos interesa salir del sistema, existen
a nuestra disposicion unos programas que bloquean el teclado hasta que introduzcamos una clave
determinada. Para el modo texto en el que vamos a trabajar, en nuestro caso tenemos termlock, que
nos va a preguntar una clave para posteriormente desbloquear la terminal. De este modo, vamos
a evitar que alguien aproveche nuestra ausencia para modificar de cualquier forma nuestra sesion
de trabajo. Trabajando en consola, la terminal principal del sistema, o con sistemas graficos como
X-Window, tenemos bloqueadores de terminal mucho mas complejos, aunque el objetivo principal
siempre va a ser el mismo: evitar dejar una conexion abierta sin un usuario responsable a la otra
parte del teclado.

Page 50
REFERENCES
50
References
[1] Blanco Linux: Instalacion, administracion y uso del sistema
Ra-Ma, 1996
[2] Hahn Internet. Manual de referencia
McGraw-Hill, 1994
[3] Kernighan,Pike The Unix programming environment
Prentice Hall, 1984
[4] Poole, Poole Using Unix by example
Addison Wesley, 1986
[5] Ribagorda, Calvo, Gallardo Seguridad en Unix: Sistemas abiertos e Internet
Paraninfo, 1996
[6] Rosen, Rosinski, Host Best Unix tips ever
McGraw-Hill, 1994
[7] Salus A quarter century of Unix
Addison Wesley, 1994
[8] Silberschatz, Peterson, Galvin Sistemas Operativos. Conceptos fundamentales
Addison Wesley, 1994
[9] Siyan Internet Firewalls and Network Security
Prentice Hall, 1995
[10] Stevens Unix Network Programming
Prentice Hall, 1990
[11] Tanenbaum Sistemas Operativos: Dise˜no e implementacion
Prentice Hall, 1987
[12] Welsh, Kauffman Running Linux
OReilly and Associates, 1995
Hosted by www.Geocities.ws

1