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"?.