Ideas basicas sobre UNIX - UTN - FRLP

Anuncio
Universidad Tecnológica Nacional
Facultad Regional La Plata
Carrera:
Ingeniería en Sistemas de Información
Cátedra:
Internetworking
Cursada:
1999
IDEAS BÁSICAS SOBRE
UNIX
1
1
Apunte original de las materias Sistemas Operativos y Computación II dictadas durante la cursada
1996. Ayudantes: Carlos Barcenilla, Fernando García, David Mauro Pendenza y Carolina Piboul.
14/02/99
Contenidos
1. IDEAS BÁSICAS SOBRE UNIX.....................................................................................................4
1.1........................................................................................................................... EL SISTEMA UNIX
4
1.2............................................................................................................. E STRUCTURA DE ARCHIVOS
5
1.3...................................................................................................................ARCHIVOS DEL SISTEMA
7
1.4.............................................................................................. SINTAXIS DE LA LÍNEA DE COMANDOS
8
1.5................................................................................ ABORTANDO LA EJECUCIÓN DE UN PROGRAMA
9
1.6.................................................................................... CONTROLANDO LA SALIDA EN LA PANTALLA
9
1.7...............................................................................................................................LOGIN EN UNIX
9
1.8............................................................................................................................ LOGOFF EN UNIX
10
1.9..............................................................................................................C AMBIANDO LA PASSWORD
10
1.10 MANUAL EN LÍNEA....................................................................................................................11
1.11 LOS COMANDOS WHO, FINGER ID Y TTY ....................................................................................11
1.12 CUESTIONARIO .........................................................................................................................13
2. ARCHIVOS .....................................................................................................................................15
2.1.................................................................................................. PERMISOS DE ACCESO A ARCHIVOS
15
2.2............................................................................LISTANDO LOS CONTENIDOS DE LOS DIRECTORIOS
18
2.3....................................................................................................CLASIFICACIÓN DE LOS ARCHIVOS
20
2.4...............................................................................MOSTRANDO LOS CONTENIDOS DE UN ARCHIVO
20
2.5................................................................................................................... ELIMINANDO ARCHIVOS
23
2.6.................................................................................................................. IMPRIMIENDO ARCHIVOS
23
2.7................................................................................................................ ESTADO DE LA IMPRESIÓN
23
2.8...........................................................................................CANCELANDO TRABAJOS DE IMPRESIÓN
24
2.9....................................................................................................................... COPIANDO ARCHIVOS
24
2.10 MOVIENDO ARCHIVOS ..............................................................................................................25
3. DIRECTORIOS...............................................................................................................................26
3.1..................................................................................................... RUTAS ABSOLUTAS Y RELATIVAS
26
3.2............................................................................................................. CREACIÓN DE DIRECTORIOS
27
3.3................................................................................................................... ELIMINAR DIRECTORIOS
27
3.4....................................................................................................................CAMBIAR DIRECTORIOS
28
3.5...........................................................................................................RENOMBRAR UN DIRECTORIO
28
3.6............................................................................. LOS DIRECTORIOS . (PUNTO) Y .. (PUNTO PUNTO)
29
3.7..............................................................................................PERMISOS DE ACCESO A DIRECTORIOS
30
4. COMUNICACIONES.....................................................................................................................30
4.1.................................................................................................. ENVIANDO CORREO ELECTRÓNICO
31
4.2.....................................................................................................LEYENDO CORREO ELECTRÓNICO
32
4.3...........................................................................................GUARDANDO EL CORREO ELECTRÓNICO
33
4.4..................................................................................................................... BORRANDO MENSAJES
34
4.5...................................................................................MENSAJES QUE NO HAN LLEGADO A DESTINO
35
4.6......................................................................................................................... EL UTILITARIO TALK
37
4.7....................................................................................................RECHAZANDO LA COMUNICACIÓN
38
3
4.8..........................................................................................................................LA UTILIDAD WRITE
39
4.9................................................................................................................................. CUESTIONARIO
40
1. Ideas básicas sobre UNIX
El sistema operativo UNIX es un conjunto de programas que actúa como enlace entre
la computadora y el usuario. El programa que asigna los recursos del sistema y coordina
los detalles internos de la computadora se llama kernel.
Los usuarios se comunican con el kernel mediante un programa conocido como shell.
El shell es un intérprete de línea de comandos; traduce los comandos que ingresa el
usuario a un lenguaje que el kernel puede comprender.
Hojas de cálculo
Sistemas de control
de inventarios
Formateadores
Compiladores
Shell
Kernel
E-mail
Hardware
DBMS
Agendas
Editores
Intérpretes
Procesadores de texto
FTP
Figura 1- Bloques básicos de un sistema UNIX
En la Figura 1 se muestra un diagrama de los bloques básicos de un sistema UNIX.
Los diseñadores de UNIX se basaron en las siguientes máximas cuando crearon este
sistema operativo:
1. Cada programa debe hacer solo una cosa, y hacerlo bien. Estos programas simples se
llaman “herramientas” (tools).
2. Se espera que la salida de un programa sea la entrada de otro programa.
3. No se debe perder tiempo en desarrollar nuevas “herramientas” para realizar un
trabajo. La biblioteca de herramientas debe tenerlas.
1.1 El sistema UNIX
Los conceptos principales que unen todas las versiones de UNIX son:
Kernel
El kernel es el corazón del sistema operativo. Se encarga de planificar tareas y
administrar el almacenamiento de datos. El usuario raramente interactúa directamente
con el kernel. El kernel es la porción del sistema operativo residente en memoria.
Shell
El shell es la utilidad que procesa sus requerimientos. Cuando escribe un comando en
su terminal, el shell interpreta el comando y llama al programa que desea. El shell
soportará múltiples usuarios, múltiples tareas y múltiples interfaces. El shell usa una
sintaxis estándar para todos los comandos. Hay dos shells muy populares, el
5
BourneShell (que incluye el System V) y el CShell (BSD UNIX). Dado que distintos
usuarios pueden usar distintos shells al mismo tiempo, el sistema puede parecer
diferente para cada usuario. Hay un shell conocido como KornShell que es muy popular
entre los programadores. En los sistemas GNU/LINUX es habitual el uso del shell bash,
un clon del BourneShell. Esta capacidad de proveer una interface personalizada es una
de las características más potentes de UNIX.
Comandos y utilidades
Pueden combinarse fácilmente distintas utilidades a fin de personalizar funciones y
salidas. Estos comandos son flexibles, adaptables, portables y modulares. Utilizan pipes
y filtros. Hay más de doscientos comandos estándares y muchísimos más provistos por
terceras partes.
Archivos y directorios
El sistema de directorios soporta una jerarquía multinivel. Los archivos y directorios
tienen protección de acceso y son accedidos mediante nombres de rutas de archivos
(pathnames). También un archivo soporta múltiples enlaces (links). Se pueden utilizar
sistemas de archivos removibles.
1.2 Estructura de archivos
En UNIX todos los datos están organizados en archivos. Todos los archivos están
organizados en directorios. Estos directorios están organizados en una estructura tipo
árbol llamada el “sistema de archivos” (filesystem). La Figura 2 describe la organización
/
(root)
bin
dev
etc
lib
tmp
usr
users
Figura 2- Organización de nivel superior del sistema
de archivos
de nivel superior del sistema de archivos de UNIX.
Estos directorios a su vez están organizados jerárquicamente, como se observa en la
Figura 3.
6
/
dev
dev
dsk
dsk
init.d
usr
rc0.d
mail
spool
adm
acct
sa
Figura 3- Organización jerárquica de directorios.
En este ejemplo, dev, etc, usr y adm son directorios. Los directorios contienen otros
archivos o directorios. Los archivos “planos” contienen textos o datos binarios y no
contiene información sobre otros archivos o directorios.
Los usuarios pueden utilizar esta misma estructura para organizar sus archivos, un
ejemplo se muestra en la Figura 4.
/
dev
users
bin
fgarcia
jperez
memos
memos
progs
progs
c
fisica
f77
mods
quimica
calc
tabla
forms
historia
arg
mundo
Figura 4- Directorios de usuarios.
Cada archivo tiene un nombre. Un nombre de archivo está compuesto de uno a
catorce caracteres2. Aunque se puede utilizar cualquier carácter en un nombre de
archivo, para evitar confusiones se recomienda utilizar caracteres incluidos en la
siguiente lista:
1. letras mayúsculas [A-Z]
2. letras minúsculas [a-z]
2
En las implementaciones actuales de UNIX suelen permitirse más de catorce caracteres para un
nombre de archivo.
7
3. números [0-9]
4. guión de subrayado (underscore) [_]
5. punto [.]
6. coma [,]
La única excepción es el directorio raíz, que siempre usa el símbolo /. Ningún otro
directorio o archivo puede usar este símbolo.
Dos archivos ubicados en el mismo directorio no pueden tener el mismo nombre.
Archivos ubicados en directorios diferentes pueden tener el mismo nombre.
Los nombres de archivos que elija deben tener algún significado. Muy a menudo se
utilizan nombres que no tienen un significado preciso y no ayudan a la hora de buscar un
determinado archivo. Utilice nombres de archivo que describan los contenidos del
mismo.
1.3 Archivos del sistema
Para que tenga un conocimiento básico de los contenidos de algunos de los
directorios del sistema, a continuación presentamos una lista de esos directorios y que
archivos suelen estar alojados en ellos:
/bin
Aquí se hallan los archivos ejecutables. Están disponibles para todos
los usuarios.
/dev
Aquí se alojan los manejadores de dispositivos (device drivers)
/etc
Archivos del supervisor, archivos de configuración, de arranque,
passwords, usuarios, grupos de usuarios, entre otros.
/lib
Bibliotecas de compilación.
/tmp
Archivos temporarios generados por distintos programas.
/bsd
Comandos Berkeley (solo en esa distribución).
/mnt
Utilizado para montar discos removibles.
/stand
Información de inicialización del sistema (boot).
/lost+found
Archivos huérfanos (perdidos luego de un corte de energía, por
ejemplo).
/unix*
Kernel booteable.
Esta no es una lista íntegra de los directorios que contienen información del sistema,
solo intenta despejar el misterio que existe sobre los directorios y tipos de archivos que
ellos contienen.
8
1.4 Sintaxis de la línea de comandos
Los usuarios ingresan los comandos a través del indicador (prompt) del shell. En el
BourneShell el prompt por defecto es el signo dólar ($). En general, el shell espera
recibir comandos con la siguiente sintaxis:
Formato del comando: comando opciones argumentos
Comando
Es el comando UNIX. A veces el comando es representativo de la
función. Por ejemplo, el comando para listar los contenidos de un
directorio es ls. Se utilizan la primera y la tercera letra de la palabra
inglesa “list”. Desafortunadamente, no siempre los nombres de los
comandos siguen este tipo de reglas.
Opciones
También se las conoce como “banderas” (flags). Su forma habitual
es:
-A
donde A es la abreviatura de la función opcional del comando. Por
ejemplo, el comando ls lista los contenidos de un directorio, mientras
que el comando ls -l emite una lista más detallada (l:long) y ls -C
emite el listado en columnas (c: columns). Se pueden combinar varias
opciones luego de un ‘-‘; por ejemplo -CF, o bien en forma separada
-C -F.
Argumentos
Pueden ser nombres de archivos, nombres de usuarios, una opción del
comando, etc...
Ejemplo:
$ls -CF jperez
El comando ls lista los contenidos del directorio, el guión (-) indica las opciones.
C
Salida en múltiples columnas con entradas ordenadas.
F
Adiciona una barra (/) luego de cada nombre de archivo si se trata de un
directorio o pone un asterisco luego del nombre si el archivo es ejecutable.
Jperez
Nombre del directorio a listar (puede ser una ruta absoluta o relativa).
Ejemplo:
$diff memo1 memo2
Diff
Comando para comparar diferencias entre archivos.
Memo1
Nombre de archivo a comparar.
Jmemo2
Nombre del segundo archivo a comparar.
Este comando indicará qué líneas difieren en ambos archivos.
9
Ejemplo:
$find . -atime +7 -print
Find
Localiza archivos.
.
El directorio de trabajo corriente.
-atime
Condiciona la selección a que el archivo haya sido accedido en n días (n es el
+7).
-print
Imprime el nombre del directorio actual.
Por lo tanto, este comando emitirá un listado de todos los archivos presentes en el
directorio actual que han sido accedidos en los últimos siete días.
Algunos comandos tienen varias opciones y/o argumentos; mientras que otros, como
passwd y mail, son interactivos y solicitarán al usuario información adicional.
1.5 Abortando la ejecución de un programa
A veces es necesario abortar la ejecución de un programa. UNIX puede estar
mostrando una lista que es muy larga para ser mostrada en su pantalla o por alguna otra
razón necesita terminar la ejecución. Para terminar la ejecución de un programa presione
la tecla DELETE ó CTRL-C. El sistema operativo envía una señal de interrupción al shell.
Cuando el shell recibe esta señal, muestra el prompt y espera que se ingrese otro
comando.
1.6 Controlando la salida en la pantalla
Hay varias formas de controlar el flujo de caracteres que se muestran en la pantalla
como resultado de la ejecución de un comando. A saber:
CTRL-S
Esta función del teclado suspenderá el flujo de caracteres hacia la
pantalla.
CTRL-Q
Esta función reanudará la salida hacia la pantalla.
HOLD SCREEN
Si su terminal tiene esta tecla (ej. VT200), puede presionarla una
vez para detener la salida. Para reanudar la salida presione
nuevamente esta tecla.
1.7 Login en UNIX
Para comenzar a utilizar un sistema UNIX el primer paso es “logonearse”, lo primero
que usted verá es un mensaje de este tipo:
10
login:
Para conectarse con un host, ingrese su nombre de usuario. Su nombre de usuario le
es asignado por el administrador del sistema, típicamente será su primera inicial y su
apellido. Solo suelen permitirse 8 caracteres.
Ejemplo:
login:jperez
Una vez que el nombre de usuario ha sido aceptado, el sistema le pedirá su clave de
acceso. En la pantalla aparecerá el siguiente mensaje:
Password:
Ingrese su password. Por razones de seguridad el sistema no mostrará su password
mientras la escribe.
Password: *******
Una vez que ha ingresado la palabra clave correcta. El procedimiento de login
continuará y aparecerá en el monitor una pantalla similar a la siguiente.
UNIX System V Release ax.2.2o ns32332
Copyright (c) 1984 AT&T
All Rights Reserved
$
En este punto ya está dentro del sistema. El signo $ es el prompt por defecto del
BourneShell.
1.8 Logoff en UNIX
Para salir del sistema puede utilizar uno de los siguientes métodos:
1.Presionar CTRL-D.
2.Tipear el comando exit (o logout en algunos sistemas).
1.9 Cambiando la password
El siguiente comando cambiará la password:
passwd
11
Se le pedirá que ingrese su clave actual. Luego se le solicitará su nueva clave dos
veces para verificar que se haya ingresado correctamente.
1.10 Manual en línea
La mayor fuente de ayuda en línea en UNIX son las “manual pages”. Las páginas
están divididas en distintas secciones.
Para acceder al manual en línea se debe utilizar el siguiente comando:
man <comando>
Comando
El comando UNIX acerca del cual usted necesita información.
Ejemplo:
$man ls
Este comando mostrará las páginas del comando ls.
Las páginas de cada comando comienzan con el nombre del comando y una sinopsis
de la sintaxis del mismo. Las características opcionales se encuentran entre corchetes.
Luego se incluye una descripción detallada de sus opciones y argumentos. La
descripción puede incluir ejemplos útiles. Al final se incluyen los comandos y archivos
relacionados.
1.11 Los comandos who, finger id y tty
una vez que haya ingresado al sistema puede ver quienes están “logoneados” con los
siguientes comandos:
who [opciones]
Opciones
Se detallan en las man pages de este comando.
La salida por defecto (sin opciones) de el comando who lista los nombres de
usuarios, terminales y el tiempo de en que los usuarios han estado en el sistema.
Ejemplo:
$who
jperez
mvlsdba
teacher
eholderf
dbowman
$
ttyp0
Aug 15 10:11
rt02190
Aug 15 09:25
rt020b0
Aug 15 11:07
rt021c0
Aug 15 11:03
rt01150
Aug 15 08:58
12
Un comando UNIX que da un poco más de información acerca de los usuarios que se
encuentran utilizando el sistema es finger.
finger [opciones] [usuario1]
Opciones
Se detallan en las man pages de este comando.
usuario1
Nombre del usuario.
El comando finger sin opciones listará el nombre del usuario, su nombre real
completo, su terminal, número telefónico, tiempo que ha permanecido en el sistema y
otros datos útiles.
Ejemplo:
$finger
Login
Jperez
mvlsdba
teacher
eholderf
dbowman
$
Name
TTY
Juan Perez
ttyp0
Motor Veh Lic rt02190
Teacher Acct *rt020b0
Eileen Holder rt021c0
Dale Bowman
rt01150
Idle
When
16 Wed 10:26
16 Wed 09:25
Wed 11:07
1 Wed 11:03
Wed 08:58
Office
MP
d7160
Para mostrar las identificaciones del usuario especificado puede usarse el comando
id.
id usuario
Este comando escribe como salida estándar un mensaje que contiene la identificación
del usuario especificado, el sistema de identificación esta formado por números que
representan usuarios y grupos de usuarios.
Contiene la siguiente información:
•nombre del usuario y id del usuario real.
•nombre del grupo de usuarios y id del grupo real.
•nombre del grupo de usuarios suplementario y id del grupo suplementario.
La información del grupo suplementario es escrita solo por el sistema que soportan
grupos multiusuarios y si el usuario especificado pertenece a el grupo especificado.
También muestra el usuario efectivo y el id del grupo, pero solo para el usuario que
ha invocado ale comando. Si la identificación efectiva y real de la invocación son
distintas, muestra:
•El usuario efectivo y la identificación efectiva.
•Nombre del grupo de usuario efectivo y la identificación del grupo efectivo.
Puede fracasar si el usuario especificado no existe o si el comando no puede leer la
información del usuario o del grupo.
13
Flags:
-G
solo muestra id del grupo real, efectivo y suplementario
-g
solo el id del grupo efectivo
-u
solo el id del usuario efectivo
-r
aparece el id real en lugar de id efectivo
-n
aparece el nombre en el lugar del número de id, combino con G,-g y -u
Ejemplo de salidas del comando id:
uid=1333(fer)
gid= 350(build)
euid= 0(root)
egid= 9(const)
group= 5(sist1), 12(sist2)
Para identificar la terminal sobre la cual está trabajando el usuario se usa el comando
tty.
tty [-s]
Si la entrada no es una terminal y no se especifica la flag -s, se obtiene un mensaje
estándar que no es tty.
Archivos:
/usr/bin/tty contiene el comando tty
/dev/tty contiene el seudodispositivo.
Muestra las estructuras de datos tipo tty, si no son especificados parámetros lista a
todas las terminales o a todas las tty abiertas que están trabajando.
1.12 Cuestionario
1.¿Qué organizaciones desarrolaron inicialmente UNIX?.
2.¿En qué lenguaje de alto nivel está escrito UNIX?.
3.Nombre algunas características de UNIX.
4.¿Qué parte de UNIX controla los detalles de la operación interna de la
computadora?.
5.¿Qué parte de UNIX permite al usuario comunicarse con la computadora?.
6.¿Cual es el nombre de la estructura arbórea en la cual se almacenan todos los
datos?.
7.¿Cual es el nombre del directorio de más alto nivel?.
8.¿Qué símbolo representa el directorio de más alto nivel?.
14
9.¿Cual es la forma general de la sintaxis de un comando de UNIX?.
10.¿Mediante qué comando se cambia la password en UNIX?.
2. Archivos
En UNIX, todos los datos se organizan en archivos. Un archivo ordinario (de texto)
es un memo, el código fuente de un programa o un script de shell. Un script de shell o el
código fuente de un programa pueden verse o editarse en cualquier terminal. Otros
archivos contienen datos binarios, como programas ejecutables; estos archivos no
pueden ser vistos ni editados en la terminal.
También se asignan nombres de archivos a dispositivos periféricos tales como discos,
unidades de cinta, impresoras y terminales. Estos archivos tiene características
“especiales”. Aunque la entrada y salida pueden ser redireccionadas a y desde un
archivo especial. No se puede “ver” el contenido de un archivo especial.
2.1 Permisos de acceso a archivos
Se trata de protecciones que pueden asignarse a archivos. Esta protección puede
prevenir un intento no autorizado de lectura o escritura sobre un archivo. También
pueden protegerse archivos, por ejemplo, para no ser borrados accidentalmente por uno
mismo.
Hay tres permisos de acceso a archivos:
r (read) examinar, leer o copiar datos de un archivo.
w (write) modificar o borrar un archivo.
x (execute) usar el archivo como un comando (ejecutarlo).
El universo de usuarios que potencialmente pueden acceder a un archivo se
particiona en tres subconjuntos:
u (user) el dueño del archivo.
g (group) usuarios del mismo grupo que el propietario.
o (other) todos los demás usuarios.
Al ejecutar el comando ls -l el primer campo que se visualiza consta de diez
caracteres en los cuales se describen los permisos de acceso para cada archivo. por
ejemplo:
rwxr-xr-x
De los nueve caracteres, los primeros tres describen los permisos para el dueño del
archivo, los próximos tres los referentes a su grupo, y los últimos tres a cualquier otro
usuario. En cada uno de estos grupos de tres caracteres el primer carácter especifica si se
encuentra activo el permiso de lectura (r), el segundo y el tercero hacen lo propio con
16
los permisos de escritura (w) y ejecución (x) respectivamente. La aparición de una letra
especifica que el acceso está permitido, un guión (-) indica que el acceso es denegado.
En el ejemplo anterior el usuario tienen permisos de lectura, escritura y ejecución.
Los miembros del grupo al que pertenece el dueño del archivo pueden leerlo o
ejecutarlo. Cualquier otro usuario también puede leerlo o ejecutarlo. El efecto de estos
permisos es que solo el dueño puede modificar el archivo, mientras que cualquiera
puede examinarlo, copiarlo o ejecutarlo.
Para cambiar los modos de acceso a un archivo o directorio se utiliza el comando
chmod.
chmod <permisos> <archivo1[archivon]>
Permisos
Permisos de acceso.
<archivo1[archivon]> Uno o más archivos a los cuales se les cambiarán los permisos..
Los permisos pueden expresarse en dos formas:
• Con letras: [ugo] [+-=] [rwx]
• Con números: [0-7] [0-7] [0-7]
Veamos cómo cambiar permisos utilizando letras. Las letras u, g y o representan
user, group y others respectivamente. El signo + (más) indica que se habilita el permiso
y el signo - (menos) que se deshabilita. El signo = (igual) significa que se coloquen los
permisos como se especifica. Las letras r, w y x significan read, write y execute
respectivamente.
Supongamos que crea un archivo llamado archivo1 que tiene los siguientes permisos:
rw-rwxrwx
y desea darse a si mismo (user) el permiso de ejecución y quitarle a cualquier otro
usuario (en este caso los miembros de group y others) el permiso de escritura. Para ello
debe ingresar:
$chmod u+x,g-w,o-w archivo1
$
Ahora si se ejecuta el comando ls -la los permisos para archivo1 se verán como:
rwxr-xr-x
Si desea fijar varios permisos de una sola vez utilice el signo igual. El siguiente
ejemplo fijará los permisos de lectura y escritura del usuario:
$chmod u=rx archivo1
$
17
El segundo método para cambiar los permisos es usar dígitos octales. los dígitos
octales 0 a 7 se representan en binario de la siguiente forma:
Octal Binario Permisos
0
1
2
3
4
5
6
7
000
001
010
011
100
101
110
111
----r
-w-wx
r-r-x
rwrwx
Note que cada vez que aparece un uno (1) en el número binario el permiso
correspondiente es activado, mientras que cada vez que aparece un cero (0) el permiso
es denegado. Por lo tanto, para cambiar los permisos del archivo del ejemplo anterior
debe ingresarse el siguiente comando:
$chmod 755 archivo1
$
El primer dígito octal (7) asigna al propietario (user) los permisos de lectura,
escritura y ejecución. El segundo dígito (5) asigna al grupo del propietario permiso de
lectura y ejecución. El último dígito (5) asigna a los demás usuarios permiso para leer y
ejecutar el archivo.
El comando chown permite cambiar el dueño de un archivo, solo podrá ser ejecutado
por el dueño del archivo o por el root.
chown nuevodueño archivo
Cambia el dueño especificado por el parámetro para un usuario especificado. El
parámetro del dueño puede especificarse como id del usuario o como el nombre de
acceso al sistema. Solo el root puede cambiar el dueño de un archivo. Se puede cambiar
el grupo de un archivo si es root o si es dueño del mismo. Aunque si se es dueño y no
root se debe pertenecer al nuevo grupo, esto se realiza con el comando chgrp.
chgrp nuevogrupo archivo
18
El permiso set-uid
El archivo que contiene las passwords de los usuarios de un sistema UNIX es el
siguiente:
$ ls -l /etc/passwd
-rw-r--r-- 1 root
$
5115 Aug 30 1983 /etc/passwd
Listemos ahora los detalles del archivo que contiene el código ejecutable del
comando passwd (que permite a un usuario cambiar su password).
$ ls -l /bin/passwd
-rwsr-xr-x 1 root
$
8454 Jan
4 1983 /bin/passwd
Para este ejemplo los permisos indican que cualquiera puede ejecutar el comando,
pero solo root puede cambiar el comando passwd. Sin embargo, la s en vez de una x en
el campo de ejecución para el dueño del archivo indica que, cuando el comando se
ejecuta, se le darán los permisos correspondientes al dueño del archivo, en este caso
root. Debido a que /bin/passwd tiene el atributo "set-uid", y root como dueño, cualquier
usuario puede ejecutar el comando passwd para editar el archivo de contraseñas
/etc/passwd ("set-uid" significa que el usuario "toma prestada" la identificación del
dueño mientras ejecuta el comando).
El bit de set-uid3 es una idea simple pero elegante que resuelve varios problemas de
seguridad. Por ejemplo, el autor de un programa de juegos puede hacer que el programa
tenga el atributo set-uid con el dueño, de manera que este pueda actualizar un archivo de
puntaje que estaría de otra manera protegido contra el acceso de otros usuarios. Sin
embargo el concepto de set-uid es potencialmente peligroso. /bin/passwd tiene que
funcionar correctamente; si no fuera así, podría destruir información del sistema bajo los
auspicios de root. Si éste tuviera los permisos rwsrwxrwx, entonces podría ser
modificado por cualquier usuario, quien podría reemplazar así el archivo con un
programa que hiciera cualquier cosa. Esto es particularmente serio para un programa
con atributo set-uid, ya que root tiene permisos de acceso a cualquier archivo en el
sistema. (Algunos sistemas UNIX apagan el bit set-uid cuando un archivo se modifica,
para reducir el peligro de una falla de seguridad.)
El bit set-uid es poderoso, pero se usa principalmente en pocos programas del
sistema, tales como passwd.
2.2 Listando los contenidos de los directorios
El comando ls se usa para mostrar nombres de archivos y sus características. Dado
que los nombres de archivos están alojados en directorios (que son archivos especiales),
3
El set-uid ha sido patentado por Dennis Ritchie.
19
el comando ls lee los archivos de directorios. Ejecutando ls sin opciones se listan los
nombres de los archivos que se encuentran en el directorio corriente, los archivos de
inicialización no serán listados.
ls [opciones] [dir1[dirn]]
opciones
Ver las man pages.
[dir1[dirn]]
Uno o más nombres de directorios.
La opción -a permite ver todos los archivos, incluidos los ocultos.
La opción -C muestra el listado en varias columnas.
La opción -F agrega un carácter al final del nombre de archivo, indicando con:
/
Indica que se trata de un directorio.
*
Indica que el archivo es ejecutable..
espacio en blanco
Indica que se trata de un archivo ordinario.
La opción -l muestra información detallada sobre los archivos, incluyendo:
• Tipo de archivo (directorio, especial de bloques, especial de caracteres, especial
fifo, enlace simbólico o archivo ordinario).
• Permisos de acceso.
• Número de enlaces (links).
• Propietario y grupo al que pertenece.
• Tamaño en bytes.
• Fecha y hora de la última modificación.
• Nombre de archivo.
Si no se especifica un nombre de archivo, ls muestra la información del directorio
corriente. Por defecto la salida está ordenada alfabéticamente.
Ejemplo:
$ls
El siguiente ejemplo muestra un listado con más datos:
$ls -l
20
Ejemplo:
$ls -la
total 975
drwxrwxr-x 4 teacher
drwxr-xr-x 60 root
-rwx------ 1 teacher
-rwxr-xr-x 1 teacher
$
class
class
class
2048
1536
4210
1948
Jul 16 17.56 .
Jul 13 14:18 ..
May 1 08:27 .profile
May 12 13:42 memo
2.3 Clasificación de los archivos
Por convención los archivos cuyo nombre se inicia con un punto (.) son archivos de
inicialización o “archivos ocultos”. También suelen llamarse “dot files” (del inglés dot:
punto).
A continuación se muestran extensiones4 utilizadas habitualmente para distintos tipos
de archivos:
.c
Código fuente de programas C.
.f
Código fuente de proframas Fortran.
.o
Programas objeto (compilados sin linkeditar).
2.4 Mostrando los contenidos de un archivo
El comando cat muestra los contenidos de un archivo. El comando cat es una
abreviación de la palabra inglesa catenate.
cat [opciones] [archivo1[archivon]]
opciones
Ver las man pages.
[archivo1[archivon]]
Uno o más nombres de archivos.
Si no se especifica ningún nombre de archivo, cat lee la entrada estándar.
Ejemplo:
$cat
Este es el ejemplo más simple. El comando cat obtendrá su entrada desde el teclado.
Todo lo que se tipea en el teclado se muestra en el monitor.
Si se especifica un archivo como argumento del comando se mostrará en el monitor.
4
Parte final del nombre de archivo.
21
Ejemplo:
$cat main.c
main ()
{
printf ("hello from main!\n\n");
printf ("calling function1!\n\n");
funct1();
printf ("back from function1!\n\n");
printf ("calling function2!\n\n");
funct2();
printf ("that's it!\n\n");
}
$
Se pueden mostrar varios archivos uno a continuación del otro separando los
nombres de archivos con un espacio.
Ejemplo:
$cat main.c main.f
main ()
{
printf ("hello from main!\n\n");
printf ("calling function1!\n\n");
funct1();
printf ("back from function1!\n\n");
printf ("calling function2!\n\n");
funct2();
printf ("that's it!\n\n");
}
program calling
write(6,100)
100
format('Hello from main!',/)
write(6,110)
110
format(' Calling subroutine1!',/)
call sub1
write(6,120)
120
format(t15' Back from subroutine1!',/)
write(6,130)
130
format(' Calling subroutine2!',/)
call sub2
write(6,140)
140
format(t15' Back from subroutine2!',/)
write(6,150)
150
format(' Thats all, folks!')
end
$
22
Si el archivo contiene más líneas de las que pueden presentarse en pantalla el archivo
irá pasando hasta que se haya mostrado la última línea y reaparezca el prompt. Esto
puede ser problemático a la hora de intentar leer el texto.
El comando pg muestra los contenidos de un archivo de a una pantalla por vez.
Permite que el usuario busque cadenas de caracteres y que vuelva hacia atrás.
pg [opciones] [archivo1[archivon]]
Opciones
Ver las man pages.
[archivo1[archivon]]
Uno o más nombres de archivos a ver por páginas.
El comando tail sirve para ver el final de un archivo sin tener que ver antes todo el
contenido del archivo.
tail [opciones] [archivo1]
Opciones
Ver las man pages.
[archivo1]
El archivo que se desea ver, si no se especifica se usa la entrada
estándar.
El comando tail muestra por defecto las 10 últimas líneas del archivo, sin embargo,
usando la opción -N mostrará las últimas N líneas.
Otro comando para examinar el contenido de uno o más archivos con la ventaja de
paginar cada uno para que el texto no corra sin control por la pantalla puede usarse el
comando more.
more archivo
Algunos comandos para ejercer un mayor control sobre el texto que se esta
observando son:
RETURN
Avanza una línea de texto
ESPACIO
Avanza una pagina de texto.
H
Ayuda.
.
Repite la ejecución del comando anterior.
=
Muestra el numero de línea que se esta desplegando.
Q
Sale del more.
Utiliza descripciones obtenidas en el directorio /usr/share/lib/terinfo para determinar
las características de las terminales y el tamaño de la ventana. En una terminal capaz de
mostrar 24 líneas, el tamaño de la ventana por defecto es de 22 líneas.
23
2.5 Eliminando archivos
El comando rm eliminará de un directorio las entradas de uno o más archivos. Si una
entrada fuese el último enlace a un archivo también se destruirá el archivo. Para eliminar
un archivo se necesita contar con permiso de escritura en el directorios, pero no es
necesario contar con permiso de lectura/escritura sobre el archivo.
El formato del comando rm es:
rm [opciones] [archivo1[archivon]]
Opciones
Ver las man pages.
[archivo1[archivon]]
Uno o más nombres de archivos a remover.
Ejemplo:
$ls
memo
tdata
subdir
$rm memo
$ls
tdata
subdir
$
2.6 Imprimiendo archivos
El comando lp envía una archivo a una impresora.
lp [-d<dest>] [-n<número>] [archivo1[archivon]]
Dest
Impresora destino (la fija por defecto el administrador)..
Número
Número de copias (por defecto es 1).
archivo1[archivon]
El o los archivos que desea imprimir.
Si no se especifica ningún archivo se imprime la entrada estándar. El orden en que se
imprimen los archivos se corresponde con el orden de aparición en el comando.
2.7 Estado de la impresión
El comando lpstat mostrará el estado actual del sistema de impresión.
lpstats [opciones] [-n<número>] [archivo1[archivon]]
Opciones
Se detallan en las man pages.
24
Ejemplo:
$lpstat
mtlzr-1274
$
teacher
22560
Jul 16 09:05 on mtlzr
El primer campo es el identificador del trabajo de impresión; el segundo es el nombre
de usuario; el tercero el tamaño del archivo; el cuarto la fecha y hora; y finamente el
nombre de la impresora.
Una de las opciones disponibles es -t. esta opción imprimirá toda la información
acerca del estado de impresión.
Ejemplo:
$lpstat -t
scheduler is running
system default destination: mt_600
device for mt_600: /dev/rlp000
device for mtlzr: /dev/rt0002
mt_600 accepting requests since Sep 19 16:09
mtlzr accepting requests since Sep 19 16:43
printer mt_600 is idle. enabled since Jul 3 16:52
printer mtlzr is idle. enabled since Jul 3 16:51
$
2.8 Cancelando trabajos de impresión
El comando cancel cancelará las solicitudes de impresión hechas a través del
comando lp. Los argumentos de la línea de comandos pueden ser o bien el identificador
de la solicitud (devuelto por el comando lp) o el nombre de la impresora. Si se
especifica el identificador cancel abortará el trabajo de impresión aún cuando esté
siendo impreso. Si se especifica el nombre de la impresora se aborta el trabajo que está
siendo impreso en ese momento. En cualquier caso, la cancelación de un trabajo que
está siendo impreso liberará la impresora para que pueda imprimir la siguiente solicitud.
cancel <[ids] [impresora]>
Ids
Identificadores de las solicitudes de impresión a cancelar.
Printer
Nombre de la impresora.
2.9 Copiando archivos
Un usuario puede copiar un archivo si tiene premiso de lectura para ese archivo. El
comando cp puede usarse para copiar los contenidos de un archivo a otro.
25
cp <archivo1[archivon]> <destino>
archivo1[archivon]
Nombres de uno o más archivos fuente.
Destino
Nombre de archivo o directorio destino.
archivo1 y destino no pueden el mismo. Si el destino es un archivo sus contenidos
son destruidos.
Si destino es un directorio, los contenidos de los archivos fuente son copiados a ese
directorio.
Ejemplo:
$cp contest memo
$
Esto copiará el archivo llamado contest a un archivo llamado memo. Si memo no
existe, será creado; Si ya existe será sobreescrito. El comando cp no es destructivo, o
sea que el archivo fuente no será modificado.
El comando cp también puede usarse para copiar varios archivos en otro directorio.
Ejemplo:
$cp archivo1 archivo2 /user0/teacher
$
Este ejemplo muestra cómo copiar dos archivos llamados archivo1 y archivo2 en el
directorio /user0/teacher. El usuario que ejecutó cp será el dueño de los nuevos
archivos.
2.10 Moviendo archivos
Un usuario puede mover un archivo solo si tiene permiso de escritura sobre el
mismo. el comando mv también puede usarse para renombrar un archivo.
mv <archivo1[archivon]> <destino>
archivo1[archivon]
Nombres de uno o más archivos fuente.
Destino
Nombre de archivo o directorio destino.
archivo1 y target no pueden ser iguales y si el destino es un
archivo se destruyen sus contenidos.
Si destino es un directorio, los contenidos de los archivos fuente
se mueven a ese directorio.
Ejemplo:
$mv contest memo
$
Este comando cambia el nombre del archivo contest a memo. Los permisos del
archivo quedarán igual. El comando mv es destructivo, esto significa que el archivo
fuente no existe más.
26
El comando mv también puede usarse para mover archivos de un directorio a otro,
por ejemplo:
$mv file1 file2 /user0/teacher
$
Los archivos file1 y file2 se enviaron al directorio /user0/teacher. Fueron "movidos"
y por lo tanto no residen más en el directorio corriente. El dueño sigue siendo el mismo.
3. Directorios
Un directorio es un archivo cuyo único fin es almacenar nombres de archivos y la
información relacionada con estos. Todos los archivos (sean estos ordinarios, especiales
o directorios) están contenidos en directorios.
El directorio en el cual uno se encuentra cuando se "logonea" es el home directory
del usuario. En este directorio uno puede hacer lo que quiera, incluyendo crear
subdirectorios.
3.1 Rutas absolutas y relativas
Los directorios están organizados jerárquicamente en forma de árbol con el directorio
(/) como raiz. La posición de un archivo en la jerarquía se describe mediante el nombre
de la ruta en la cual se encuentra. Los elementos de una ruta están separados por una
barra (/). Una ruta es absoluta si se describe en relación a la raiz, por lo tanto los
nombres de rutas absolutas siempre se inician con una /. Estos son ejemplos de rutas
absolutas:
/etc/passwd
/users/sjones/chem/notes
/dev/rdsk/Os3
Una ruta también puede ser relativa al directorio corriente. Los nombres de rutas
relativas nunca se inician con /. Si el usuario fgarcia (véase Figura 4) se encuentra en su
directorio personal /users/fgarcia, algunos ejemplos de rutas relativas son:
fisica/calc
historia/mundo
quimica
quimica/tabla
27
Para determinar cual es el directorio corriente puede usarse el comando:
pwd
Ejemplo:
$pwd
/user0/teacher
$
Este es un nombre de ruta absoluta, el del directorio corriente.
3.2 Creación de directorios
Los directorios se crean con el siguiente comando:
mkdir [opciones] <nombredirectorio>
Opciones
Vea las man pages para más detalles.
Nombredirectorio
Nombre del directorio a crear (ruta absoluta o relativa).
Si no se utiliza la opción que permite cambiar los permisos, el directorio tendrá por
defecto los permisos rwx para el dueño y r-x para el grupo y los demás usuarios. Los
archivos . (punto) y .. (punto punto) se crean automáticamente. Para poder crear un
directorio se debe tener permiso de escritura sobre el directorio padre. El identificador
de dueño y grupo para el directorio creado corresponde a los respectivos identificadores
del usuario que creó el directorio.
3.3 Eliminar directorios
Los directorios se eliminan usando el comando rmdir.
rmdir [opciones] <nombredirectorio>
Opciones
Vea las man pages para más detalles.
Nombredirectorio
El directorio a eliminar, debe estar vacío.
Ejemplo:
$pwd
/user0/teacher
$ls -la
total 5
drwxr-xr-x 2 teacher class
512 Jul 18 08:12 .
drwxrwxr-x 5 root
root
2048 Jul 1 13:14 ..
$rmdir teacher
rmdir:teacher:Directory does not exist
$
Normalmente los directorios de eliminan usando rmdir. Antes de que el directorio
pueda ser eliminado, debe ser vaciado; o sea que no debe contener ningún archivo (ni
subdirectorio). Fíjese que en el ejemplo anterior hay dos archivos . (punto) y .. (punto
punto). Recuerde que estos archivos se refieren al directorio corriente y a su padre; estos
no pueden ser eliminados.
28
Ejemplo:
$rmdir .
rmdir: .: Can't remove current directory or ..
$
Para los propósitos de eliminar un directorio, el directorio está vacío si contiene solo
dos archivos, llamados . (punto) y .. (punto punto).
3.4 Cambiar directorios
Para navegar por el sistema de archivos se utiliza el comando cd (change directory).
cd [nombredirectorio]
Nombredirectorio
Si no se especifica, se utiliza por defecto el valor de la variable
de shell $HOME.
Si se especifica una ruta absoluta ese directorio es el nuevo
directorio corriente de trabajo. También puede usarse un
nombre de ruta relativo.
Ejemplo:
$cd /user0/teacher
$pwd
/user0/teacher
$
Ahora el directorio corriente es /user0/teacher.
Ejemplo:
$cd memos
$pwd
/user0/teacher/memos
$
Este comando buscará un subdirectorio llamado memos en el directorio corriente
(/user0/teacher). Si lo encuentra, será el nuevo directorio corriente.
Los mensajes de error que comienzan con "cannot access file..." a menudo indican
que el nombre de archivo es incorrecto o está mal escrito.
3.5 Renombrar un directorio
El comando mv (move) también puede usarse para renombrar un directorio.
mv <nombredirectorio> <destino>
Nombredirectorio
Nombre del directorio fuente
Destino
Nombre del directorio destino.
29
Ejemplo:
$mv users newusers
$
Este comando cambia el nombre del directorio users a newusers. Los permisos del
directorio permanecen sin cambios.
3.6 Los directorios . (punto) y .. (punto punto)
El nombre de archivo . (punto) representa el directorio corriente; y el nombre ..
(punto punto) representa el directorio padre del directorio corriente. Si usamos el
comando ls para listar el directorio corriente usando las opciones -a (para listar todos los
archivos) y -l (para un listado completo) este es el resultado:
$ls -la
total 975
drwxrwxr-x 4 teacher
drwxr-xr-x 60 root
---------- 1 teacher
-rwxr-xr-x 1 teacher
$
class
class
class
2048
1536
4210
1948
Jul 16 17.56 .
Jul 13 14:18 ..
May 1 08:27 .profile
May 12 13:42 memo
El comando ls -la muestra los permisos, el número de enlaces5, el dueño, el grupo,
tamaño, etc. de los archivos de un directorio; pero también muestra las características
del directorio corriente y su padre.
En lugar de solicitar la información de todos los archivos de un directorio, se puede
pedir solo la información del directorio corriente.
Ejemplo:
$ls -ld
drwxrwxr-x
$
4
teacher
class
2048 Jul 16 17:56 .
Puede obtenerse la misma información sobre el directorio padre del directorio
corriente usando su nombre como argumento de ls.
Ejemplo:
$ls -ld ..
drwxr-xr-x
$
5
links.
60
root
root
1536
Jul 13 14:18 ..
30
Los nombres de directorio . y .. pueden usarse como argumentos de los comandos.
Para hacer que el directorio corriente sea el padre del actual directorio corriente, el
comando es:
$pwd
/user0/teacher
$cd ..
$pwd
/user0
$
3.7 Permisos de acceso a directorios
Los permisos de acceso para un directorio se listan y organizan en la misma forma
que para cualquier otro archivo. Hay unas pocas diferencias que deben ser mencionadas.
Lectura (read)
Este permiso significa que el usuario puede leer los contenidos del directorio. O sea
que el usuario puede ver los nombres de los archivos del directorio.
Escritura (write)
Este permiso significa que el usuario puede agregar o eliminar archivos del
directorio.
Ejecución (execute)
Este permiso en los directorios no significa ejecución; significa "búsqueda". El
permiso de ejecución de un directorio determina si puede buscarse o no un archivo en él.
Por lo tanto, es posible crear un directorio con permisos --x para otros usuarios, lo cual
significa que puedan acceder a cualquier archivo que conozcan en ese directorio, pero
no puedan ejecutar ls sobre él ni leerlo para ver que archivos tiene. En forma similar,
con permisos de directorio r-- los usuarios pueden ver (ls) pero no usar el contenido de
un directorio.
4. Comunicaciones
Este capítulo cubre el uso y funcionamiento de las diferentes utilidades que permiten
la comunicación entre dos o más usuarios. Algunas de dichas utilidades requieren que
otro usuario se encuentre "logoneado" al sistema.
El comando mail puede usarse para enviar mensajes a uno o más usuarios. No es
necesario que él o los usuarios destinatarios se encuentren "logoneados", dado que el
mismo sistema gestiona el envío de los mensajes entre otras maquinas UNIX, y asegura
que el mensaje llegue a destino.
Una vez ejecutado el comando mail, el mensaje se almacena en un archivo hasta ser
recibido por el destinatario, el cual será notificado de que tiene un mensaje pendiente al
31
momento de "logonearse". Los mensajes, luego de leídos, pueden ser almacenados o
borrados, y si así se requiere, puede enviarse un mensaje de respuesta al mismo.
El comando talk abre una sesión interactiva entre dos usuarios, que permite que
ambos se envíen mensajes simultáneamente. Ambos deben estar "logoneados" para
llevar a cabo dicha sesión. En la jerga telemática, esto se conoce como chat, y es muy
común en BBSs y en servidores de InterNet programados para tal fin.
El comando write es muy similar al mail, pero el destinatario debe estar "logoneado"
y recibirá el mensaje en forma instantánea.
4.1 Enviando Correo Electrónico
El formato básico de una línea de comando para mail es:
mailx [opciones] [nombre_usuario1] [nombre_usuario2]
Opciones
Consultar las man pages correspondientes para una lista
completa de opciones.
[nombre_usuario1]
Nombre de los usuarios destinatarios.
[nombre_usuario2]
Donde nombre_usuario es el nombre asignado por el administrador del sistema
UNIX al usuario destinatário (por ejemplo, jperez). El nombre de usuario puede incluir
además un nombre de sistema si el destinatario pertenece a otro sistema UNIX que
posea comunicación con el sistema original (Ej: sis2!jperez). Asumimos que el usuario
destinatário se encuentra en el mismo sistema que el emisario.
Ejemplo:
$mailx jperez(Enter)
Subject:
A continuación debe ingresarse el tema (subject) del mensaje seguido por (ENTER).
El cursor aparecerá en la línea siguiente, por lo cual ya podemos comenzar a escribir el
mensaje. Un problema que presentan estas herramientas (comunes a casi todos los
sistemas UNIX) es que no poseen la característica de wordwrap, o sea, cuando el cursor
alcance el final de una línea, el sistema no envía a la línea siguiente, ni acomoda las
palabras como sucede en editores de mensajes más avanzados (como el Elm, Pime, etc),
por lo tanto, al alcanzar el final de una línea, debe pulsarse ENTER para pasar a la línea
siguiente. Para finalizar el mensaje se presiona CTRL-D en una línea en blanco.
32
Ejemplo:
$mailx jperez(ENTER)
Subject: Planificación de trabajo(ENTER)
Por favor, revise los boletines de trabajo(ENTER)
para obtener la nueva planificación(ENTER)
(CTRL-D)
$
El prompt en la última línea indica que el mensaje ha sido almacenado y colocado en
una cola de espera listo para ser enviado.
4.2 Leyendo correo electrónico
Para leer los nuevos mensaje tipee:
$mailx
Al ejecutar este comando, y en el caso de que realmente haya nuevos mensajes para
usted, se ingresa a mailx en modo línea de comandos. En el caso de no poseer mensajes,
se presentará el en siguiente texto:
$mailx
No mail for jperez
$
Obviamente, su nombre de usuario aparecerá en lugar de "jperez".
En el caso de que ingresen nuevos mensajes a la casilla de correo del usuario se
presenta el siguiente mensaje:
you have mail
Ejemplo:
$mailx
mailx version 3.1 Type ? for help.
"/usr/mail/jperez": 3 messages 3 new
>N 1 bhood
Fri Jul 13 13:01
N 2 class2
Fri Jul 13 14:53
N 3 phajny
Fri Jul 13 16:53
?
21/324
15/211
11/272
Review session
Meeting notice
Reorganization
La primera línea indica la versión de mailx que se este usando en ese momento, en
este caso, versión 3.1. La segunda línea muestra la ruta de acceso del archivo usado
como input (por lo general, la misma que el nombre de usuario). y el total de mensajes
activos, junto con el estado de cada uno de ellos. Los mensajes son numerados
secuencialmente, presentando el último al final de la lista. A la derecha de los números
puede haber una "N" de new (nuevo) o una "U" de unread (no leído). El símbolo >
apunta al mensaje actual. Los otros campos indican, el nombre del emisario, así como el
día de la semana, fecha y hora en que fue enviado. El último campo es el tema (subject)
del mensaje.
Para leer los mensaje, puede realizar cualquiera de los siguientes pasos:
33
ENTER
El mensaje actual es mostrado en pantalla (Indicado por el signo
">")
p ENTER
Produce el mismo efecto que pulsar ENTER sin argumentos: el
mensaje actual es mostrado en pantalla.
p 2 ENTER
Muestra el mensaje número 2. Puede usarse "p" (de print) o "t" (de
type) seguido por el número de mensaje.
p jperez ENTER
Muestra todos los mensaje de jperez.
4.3 Guardando el correo electrónico
Todos los mensajes que no son marcados como borrados, son almacenados al
momento de salir de mailx. Los mensajes son guardados en un archivo llamado mbox en
el directorio privado del usuario (/home/usuario). Por defecto se utiliza el nombre de
archivo mbox, sin embargo el usuario puede elegir otro archivo a su conveniencia. Los
mensajes que no han sido leídos se almacenan temporalmente en la casilla de correo
electrónico (mailbox). El comando de mailx para guardar los mensajes tiene dos formas
diferentes.
S [lista_de_mensajes]
[lista_de_mensajes] = .
N
Número del mensaje a guardar
^
El primer mensaje luego del último eliminado.
$
El último mensaje.
*
Todos los menajes
n-m
Un rango númerico de mensajes (de n a m)
Usuario
Todos los mensajes que tienen a usuario como emisario.
/string
Todos los mensajes con la palabra "string" en el subject (se
ignora si son mayusculas o minusculas).
:c
Todos los mensajes de tipo c, a saber:
d - mensajes borrados
n - nuevos mensajes
o - viejos mensajes
r - mensajes leidos
u - mensajes no leidos
Los mensajes especificados en lista_de_mensajes son guardados en un archivo en el
directorio actual, con el nombre del autor del primer mensaje de la lista. Si el usuario
"jperez" envió el primer mensaje de la lista, y se ingresa el siguiente comando:
34
? S *
"jperez" [New file] 11/268
?
Los mensajes (en este caso, todos) serán almacenados en un archivo del directorio
actual llamado jperez. Si desea almacenar los mensajes en un archivo con otro nombre,
debe usar el segundo método para guardar mensajes.
s [lista_de_mensajes] [archivo1]
[lista_de_mensajes]
. Idem al caso anterior.
archivo1
Nombre del archivo en donde se almacenarán los mensajes.
4.4 Borrando mensajes
Para borrar un mensaje, ingrese una "d" en la línea de comandos seguido de una lista
de mensajes, que puede presentar las siguientes formas.
N
Número del mensaje a ser eliminado.
^
El primer mensaje luego del último eliminado.
$
El último mensaje.
*
Todos los mensajes.
n-m
Un rango de mensajes a ser eliminados (de n a m).
Usuario
Todos los mensaje que tiene a usuario como emisario.
/string
Todos los mensajes con la palabra "string" en el subject (se
ignora si son mayusculas o minusculas).
:c
Todos los mensajes de tipo c, a saber:
d - mensajes borrados
n - nuevos mensajes
o - viejos mensajes
r - mensajes leidos
u - mensajes no leidos
Por ejemplo, supongamos que desea borrar todos los mensajes de la lista. Lalínea de
comandos en este caso se vería de la siguiente forma:
35
$mailx
mailx version 3.1 Type ? for help.
"/usr/mail/teacher": 3 messages 3 new
>N 1 bhood
Fri Jul 13 13:01
N 2 class2
Fri Jul 13 14:53
N 3 phajny
Fri Jul 13 16:53
? d *
? q
$
21/324
15/211
11/272
Review session
Meeting notice
Reorganization
Todos los mensajes fueron eliminados. En realidad, los mismos no son físicamente
eliminados hasta que finalice la sesión de mailx. Para recuperar un mensaje previamente
borrado (en la misma sesión) se utiliza el comando "u" (por undelete) con los mismos
argumentos que el comando "d".
4.5 Mensajes que no han llegado a destino
Si se comete algún error al tipear el nombre del usuario destinatario, el comando
mail (o mailx) no puede enviar el mensaje. En ese caso, el mensaje original es
reenviado al emisario, con su texto completo, así como la razón por la cual el mensaje
no ha podido llegar a destino.
Ejemplo:
$mailx
mailx version 3.1 Type ? for help.
"/usr/mail/teacher": 1 message 1 new
>N 1 teacher
Fri Jul 13 13:45
25/655
Returned mail:User unkno
?
Message 1:
From teacher Fri Jul 13 13:45:57 1990
Received: by domax1.UUCP (5.51/)
id AA01997; Fri, 13 Jul 90 13:45:54 mdt
Date: Fri, 13 Jul 90 13:45:54 mdt
From: Mail Delivery Subsystem <MAILER-DAEMON>
Subject: Returned mail: User unknown
Message-Id: <[email protected]>
To: teacher
Status: R
----- Transcript of session follows ----550 snoopy... User unknown: No such file or directory
----- Unsent message follows ----Received: by domax1.UUCP (5.51/)
id AA01995; Fri, 13 Jul 90 13:45:54 mdt
36
Date: Fri, 13 Jul 90 13:45:54 mdt
From: Teacher Account D-7130 <teacher>
Message-Id: <[email protected]>
To: snoopy
Subject: Meeting notice
Meeting will be held at Charlie Brown's house.
July 13, 1990
7:30 p.m.
?
El signo "?" indica que mailx espera una acción por parte del usuario. Una lista
completa de comandos se puede obtener ingresando el comando "?".
Esta es una lista parcial de los comandos habilitados en una sesión de
mailx. Una descripción completa de cada uno de estos comandos puede ser
encontrada en las man pages del comando mailx.
? ?
type [msglist]
next
edit [msglist]
from [msglist]
delete [msglist]
undelete [msglist]
save [msglist] file
reply [message]
Reply [msglist]
preserve [msglist]
mail user
quit
xit
header
!
cd [directory]
list
top [msglist]
z [-]
mailx commands
print messages
goto and type next message
edit messages
give header lines of messages
delete messages
restore deleted messages
append messages to file
reply to message, including all recipients
reply to the authors of the messages
preserve messages in mailbox
mail to specific user
quit, preserving unread messages
quit, preserving all messages
print page of active message headers
shell escape
chdir to directory or home if none given
list all commands (no explanations)
print top 5 lines of messages
display next [last] page of 10 headers
[msglist] is optional and specifies messages by number, author,
or type.
The default is the current message.
?
37
4.6 El utilitario talk
Talk es un programa de comunicación visual, que copia líneas desde la terminal de
un usuario hacia la terminal de otro. Es similar al comando phone de las máquinas que
operan con OS/VMS, y las opciones de "chat" existentes en casi todos los sistemas online (BBSs, Internet, etc).
Una vez establecida la comunicación, ambos usuarios pueden tipear simultáneamente
dado que sus salidas (outputs) aparecen en ventanas separadas.
talk <usuario1> [nombre_de_tty]
usuario1
Si desea "chatear" con un usuario del mismo sistema, este
argumento es tan solo el nombre de usuario. Si desea "hablar"
con un usuario de otro sistema entonces usuario1 puede
escribirse de las siguientes formas:
sistema!usuario
sistema.usuario
sistema:usuario
sistema@usuario
[nombre_de_tty]
Si la persona con la cual desea "hablar" se halla "logoneada" en
más de una terminal, especifique el nombre de la terminal con
este argumento.
Como ejemplo, supongamos que desea hablar con el usuario student en la misma
máquina, el proceso sería:
En el originador de la llamada:
$talk student
En el receptor de la llamada:
Message from Talk_Daemon@domax1 at 17:36 ...
talk: connection requested by jperez@domax1.
talk: respond with: talk jperez@domax1
Cuando el usuario receptor tipee "talk teacher@domax1", el siguiente mensajese
presentará en la pantalla del usuario originador:
Connection established.
La pantalla será dividida al medio por una línea de guiones ('-'). En cada una de las
pantallas (originador/receptor), la parte superior corresponde al usuario local, o sea, lo
que el usuario local escriba en dicha zona aparecerá en la parte inferior del otro usuario.
Durante la comunicación, pulsando CTRL-L se borrarán los caracteres anteriores,
limpiando la zona del usuario.
38
Ejemplo (originador):
Hola Cacho!
Que te parece si nos juntamos a tomar un café hoy por la tarde
-------------------------------------------------------------------OK, pero acordate que a eso de las 18:00 tenemos que pasar
a buscar a Guille para el partido de fútbol.
Ejemplo(receptor):
OK, pero acordate que a eso de las 18:00 tenemos que pasar
a buscar a Guille para el partido de fútbol.
-------------------------------------------------------------------Hola Cacho!
Que te parece si nos juntamos a tomar un café hoy por la tarde
Una vez terminada la comunicación, con CTRL-D se procede a finalizar la sesión de
talk.
Ejemplo:
[Connection closing. Exiting]
4.7 Rechazando la comunicación
Si no desea interrumpir su trabajo por un requerimiento de talk, puede
rechazar la comunicación.
39
mesg [-[n][y]]
n
"no", produce que el usuario originador, pierda el permiso para
acceder a la terminal del receptor.
y
"yes", reestablece el permiso.
Utilizando el comando mesg sin argumentos, se puede obtener el estado actual de
dicho permiso sin cambiarlo.
Ejemplo:
$mesg
is y
$mesg -n
$mesg
is n
$mesg -y
$mesg
is y
$
Por defecto el permiso se encuentra activado. Algunos comandos UNIX, prohiben
estos mensajes, para no producir caracteres indeseados en la terminal del receptor.
4.8 La utilidad write
Este comando escribe mensajes en la pantalla de otro usuario:
write <usuario1> [nombre_de_tty]
usuario1
Nombre del usuario destinatario.
[nombre_de_tty]
Terminal a ser enviado (ej.: ttyS0)
Ejemplo (originador);
$write manolo
Hola Manolo,
pasaste por el depto. de compras a buscar la planilla?.
(CTRL-D)
$
Ejemplo (receptor);
$
Message from jperez on domax1 (rt021d0) [ Thu Jul 19 13:43:12 ]
Hola Manolo,
pasaste por el depto. de compras a buscar la planilla?.
<EOT>
$
Se podría establecer una analogía entre una comunicación con write y una
comunicación por radio. En este caso, se podría convenir en usar el comando "c" por
40
cambio, "cf"
por cambio y fuera, de esta forma, se evita que los mensajes se
superpongan.
4.9 Cuestionario
1.¿Cual es el comando para enviar un mensaje a otro usuario en el mismo
sistema?.
2.Una vez en la línea de comandos del comando mail, ¿cómo se puede obtener
ayuda?.
3.¿Que hace el comando d 5-9?.
4.¿Cual es el comando para salir de la utilidad mail y regresar al sistema operativo?.
5.¿Cual es el prompt del comando mailx?.
6.¿Cómo establece una comunicación con talk con el usuario fgarcia en el sistema
fisica?.
7.¿Qué comando en UNIX evita que un usuario sea interrumpido por alguien que
desea establecer una comunicación con talk?.
8.¿Usando el comando write, el usuario destinatario debe estar "logoneado"?.
Descargar