* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Manual del Programador Unix System V (Junio de 1974) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * PREFACIO La cantidad de instalaciones de UNIX es ahora superior a 50, y se esperan muchas mas. Ninguna de esta tiene el mismo complemento exacto de hardware y software. Por lo tanto, es bastante posible que este manual no cubra la inforamción apropiada para las instalaciones particulares. Los autores están agradecidos a Lorinda L. Cherry, L. A. Dimino, R. C. Haight, S. C. Johnson, Brian W. Kernighan, M. E. Lesk, y E. N. Pinson por sus contribuciones al software del sistema, y a L. E. McMahon por sus contribuciones al software y a este manual. Somos apreciativos particularmente de los esfuerzos técnicos, editoriales y administrativos de J. F. Ossanna, M. D. Mcllroy, y R. Morris. Todos contribuyeron grandemente al plantel de software UNIX y a este manual. Su inventiva, criticismo constructivo y apoyo irrestricto incrementó inmensamente nó solo cualquier éxito que podría contar el sistema UNIX, sino también nuestro disfrute en su creación. Iniciar Sesión ("LOGIN") Debe llamar a UNIX desde un terminal apropiado. UNIX puede ser utilizado desde terminales ASCII tipificadas por la TTY 37, la GE TermiNet 300, o la Memorex 1240, y varias terminales gráficas. También deberá contar con un Nombre de Usuario válido, que puede ser obtenido - junto con el número telefónico - por el administrador de sistema. El mismo número telefónico sirve a las terminales que operan a las velocidades estándares. Luego de establecer la conexión de datos, el procedimiento de inicio de sesión dependerá del tipo de terminal que utilice: - Terminales de 300 baudios. Tales terminales incluyen a la GE Terminet 300, la mayoría de las terminales de presentación en pantalla, Execuport, TI, y ciertas terminales Anderson-Jaconson. Estas terminales generalmente cuentan con un conmutador de velocidad que debe ser colocado en "300" (or "30" por 30 caracteres por segundo), y un interruptor de half/full dúplex, que debe ser colocado en "full-dúplex". (note que este conmutador a menudo deberá ser cambiado ya que muchos otros sistemas requieren half-dúplex). Al establecer la conexión, el sistema tipea "login:"; usted debe mecanografiar su nombre de usuario, segudo por la tecla "RETURN". Si cuenta con una contraseña, el sistema la solicitará y desconectará la impresora de la terminal de modo que su contraseña no quede impresa. Luego de que ha iniciado sesión, las teclas "RETURN", "NEW LINE" o "LINEFEED" obtendrán exactamente el mismo resultado. (Nota: en las teletipos estas tres teclas normalmente ofrecen resultados diferentes, la primera retorna el carro del impresor al principio de la línea de mecanografía, la segunda baja una línea nueva de mecanografiado, y la tercera transmite el contenido de la línea escrita actual a la línea de comunicación). - Terminal TTY 37: Cuando ha establecido una conexión de datos, el sistema imprimirá algunos caracteres basura (el mensaje "login:" a la velocidad de transmisión incorrecta). Presione la tecla "BREAK" (o "INTERRUPT"); estas producen una señal independiente de la velocidad de sincronismo y la envían a UNIX, significando con ello que está en uso una terminal de 150 baudios. El sistema imprimirá entonces "login:", esta vez a la velocidad de transmisión correcta; usted deberá responder con su nombre de usuario. Desde la terminal TTY 37 y cualquier otra cuya función "NEW-LINE" combine la acción de RETURN y LINE FEED), se terminará cada nueva línea que haya mecanografiado con la tecla "NEW-LINE" (no la tecla "RETURN"). En todas estas terminales es importante mecanografíar su nombre en minúsculas de ser posible; si lo mecanografía en letras mayúsculas, UNIX asumirá que su terminal es incapaz de generar letras en minúsculas y traducirá todas las mayúsculas subsiguientes a letras minúsculas. El inicio de sesión exitoso resultará evidenciado con un "%" que el programa Shell imprimirá para usted (el Shell se describe en la sección "Cómo ejecutar un programa"). Para mas información consulte getty (VIII), que discute la secuencia de inicio de sesión en mayor detalle, y tty (IV), que discute la E/S de la terminal impresora. Cerrar sesión ("LOGOUT") Existen tres maneras de cerrar sesión: - Puede simplemente colgar el teléfono. - Puede cerrar la sesión enviando una indicación de EOF (Caracter ASCII EOF, Ctrl+d) al programa Shell. El Shell finalizará y aparecerá nuevamente el mensaje "login:". - También puede abrir sesión directamente como otro usuario, introduciendo el comando login (I). Cómo comunicarse a través de la terminal Cuando le mecanografíe a UNIX, un gnomo oculto en las profundidades del sistema recolectará sus caracteres y los almacenara en un lugar secreto. Estos caracteres no le serán ofrecidos a un programa dado hasta que presione la tecla "RETURN" (o "NEW-LINE"), como se describió anteriormente en Iniciar Sesión. La Entrada/Salida de la terminal UNIX es full-dúplex. Cuenta con lectura anticipada completa, lo que significa que podrá mecanografiar en cualquier momento dado, incluso si un programa le está mecanografiando a usted. Por supuesto, si tipea mientras se produce la impresión hacia usted, dicha impresión resultará realizada con caracteres interepuestos. Sin embargo, cualquier cosa que mecanografíe resultará almacenado e interpretado en la secuencia correcta pensada (sin importar lo que resulte impreso). Existe cierto límite de la cantidad de caracteres que pueden resultar almacenados anticipadamente, pero esta cantidad es generosa, por lo que es improbableble que la exceda, a no ser que el sistema se encuentre en problemas. Cuando exceda el límite de lectura anticipada, el sistema UNIX descartará todos los caracteres almacenados. En la línea de entrada del terminal teletipo, el caracter "@" mata todos los caracteres mecanografiado previamente a él, de modo que los errores de mecanografiado pueden ser reparados en una sola línea gracias a su utilización. Asimismo, el caracter "#" borrará el último caracter mecanografiado. Los usos sucesivos de "#" borranm los caracteres hacia atrás, pero no más allá del comienzo de la línea. Es posible enviar "@" y "#" al programa si los precede con una "\". (de modo que para borrar una "\", debererá utilizar dos "#"s). El caracter ASCII "DELETE" (también conocido como RUBOUT") no es enviado a los programas, sino que genera una señal de interrupción. Esta señal generalmente provoca que el programa que esté ejecutando resulte terminado. Es utilizada típicamente para detener una impresión larga indeseada. Suele ser común que ciertos programas acepten o alternativamente ignoren dicha señal, o bien podrían ser notificados al recibirla (en lugar de terminar su ejecución). El editor - por ejemplo - intercepta dichas interrupciones y detiene lo que está haciendo (el lugar de terminar el programa entero), por lo que podrá utilizar una interrupción para detener la salida de impresión del editor sin perder por ello el fichero que se encuentra editando. La señal QUIT se genera mecanografiando el caracter ASCII FS. Esto no sólo provoca que el programa en ejecución termine, sino que también genera un fichero con la imagen del núcleo (NdT: volcado de memoria RAM, o núcleo) del proceso terminado. Esto es bastante útil para labores de depurado. Además de adaptarse a la velocidad de la terminal teletipo, UNIX también intenta de resultar inteligente al determinar si posee una terminal con la función de nueva línea, o si esta función debe ser simulada con la conjunción de retorno de carro y alimentar línea. En este último caso, todos los RETORNO DE CARRO recibidos como entrada son convertidos a caracteres de ALIMENTACIÓN DE LÍNEA (el delimitador estándar de línea), y se hace eco a la terminal tanto de un caracter de retorno de carro como uno de alimentación de línea. Si está en el modo incorrecto, el comando stty (I) lo rescatará. Los caracteres de TABULADO son utilizados libremente en el código fuente de los programas de UNIX. Si su terminal no tiene la función de tabulado, podrá arreglar que estos se conviertan en espacios durante la entrada, y recibir su eco como espacios durante la salida. El sistema asume que los TABULADO son enviados cada ocho columnas en blanco. Nuevamente, el comando stty (I) podrá activar o desactivar este modo. También, existe un fichero el cual, si resulta impreso en terminales TTY 37 o TermiNet 300, configurará las tabulaciones de forma correcta (tabs (VII)). La sección tty (IV) discute las E/S de teletipo más en detalle. La sección kl (IV) discute la consola de teletipo. Cómo correr un programa: el Shell. Una vez que ha iniciado una sesión exitosamente a UNIX, un programa llamado Shell comenzará a escuchar a su terminal. El Shell lee las líneas mecanografiadas, las divide en un nombre de órden y sus argumentos, y ejecuta dicha órden. Una órden es simplemente un programa ejecutable. El Shell busca primero en su directorio actual (ver sección siguiente) un programa con el nombre dado, y si no existe ninguno allí, lo buscará en el directorio de sistema. No hay nada especial en las órdenes provistas por el sistema a excepción de que se mantienen almacenadas en un directorio en el cual el Shell puede encontrarlos. El nombre de órden es siempre la primer palabra de la línea ingresada; ella y sus argumentos están separadas entre sí por espacios en blanco. Cuando un programa terminal, el Shell recibe nuevamente el control ordinario, e imprime un "%" para indicarle que se encuentra listo para recibir otra órden. El Shell tiene muchas otras capacidades, que se describen en detalle en la sección sh (I). El Directorio Actual. UNIX tiene un sistema de archivado ordenado siguiendo una jerarquía de directorios. Cuando el dministrador de sistema le otorgue un nombre de usuario, también creará un directorio para usted (ordenariamente, con el mismo nombre que su nombre de usuario). Cuando usted inicie sesión, cualquier nombre de fichero que mecanografíe será dispuesto por defecto en este directorio. Debido a que usted es el poseedor de dicho directorio, dispondrá de permisos completos para leer, escribir, alterar o destruir sus contenidos. Los permisos para ejercer su voluntad en otros directorios y ficheros podrán ser otorgados o denegados por sus respectivos poseedores. De hecho, pocos usuarios de UNIX protegen sus ficheros de la destrucción, mucho menos mal uso, por otros usuarios. Para cambiar al directorio actual (pero no el conjunto de permisos con los cuales fue consagrado al iniciar sesión) use el comando chdir (I). Nombres de Ruta. Para referirse a los ficheros que no se encuentran en el directorio actual, debe utilizar el nombre de Ruta. Los nombres de ruta completos comienzan con "/", el nombre del directorio de raíz de todo el sistema de archivado. Luego de la barra sigue el nombre de cada directorio que contiene al siguiente subdirectorio (seguido por una "/" hasta llegar finalmente al nombre de fichero. Ejemplo: /usr/lem/ficherox refiere al fichero ficherox en el directorio lem; lem en sí es un subdirectorio de usr; usr nace directamente desde el directorio raíz. Si su directorio actual cuenta con subdirectorios, el nombre de ruta de los ficheros contenidos en él comienzan con el nombre del subdirectorio (sin el prefijo de "/"). Sin excepción importante, un nombre de ruta puede utilizarse en clauquiera lugar que se requiera un nombre de fichero. Los comandos importantes para modificar los contenidos de los ficheros son cp (I), mv (I), y rm (I), los cuales copian, mueven (también renombran) o remueven ficheros respectivamente. Para conocer el status de los ficheros o direcotrios, use ls (I). Vea mkdir (I) para hacer subdirecotrios; rmdir (I) para destruirlos. Para una discusión más completa del sistema de archivado, vea "El sistema de tiempo compartido UNIX", por los autores presentes, que aparece en Communications of the ACM; también existe una versión disponible desde la misma fuente de este manual. Puede ser útil leer la Sección II de este manual, que discute las llamadas de sistema, incluso si no desea incursionar con el sistema a tal nivel. Escribir un programa Para ingresar texto de código fuente de un programa en un fichero de UNIX, use ed (I). Los tres lenguajes princiapels en UNIX son el lenguaje ensamblador (ver as (I)), Fortran (ver fc (I)), y C (ver cc (I)). Luego que ha ingresado el texto del programa a través del editor y lo ha escrito en un fichero, puede dar el fichero al procesadro de lenguaje apropiado como un argumento. La salida del procesador de lenguaje será dejada en un fichero en el directorio actual llamado "a.out" (si la salida es preciada, use mv para mudarla rápidamente hacia un nombre menos expuesto. Si escribe en lenguaje ensamblador, probablemente necesitará cargar el programa con las subrutinas de bibliotecas; ver ld (I). Los otros dos procesadores de lenguajes llamarán automáticamente al cargador. Cuando haya atravesado este proceso sin provocar diagnósticos, podrá ejecutar el programa resultante dando su nombre al Shell en respuesta a venia "%". El siguiente comando que necesitará es db (I). Como depurador, db es mejor que el premedio para los programas de lenguaje ensamblador, marginalmente útil para los programas en C (cuando esté terminado, cdb (I) será un boom), y virtualmente inútil para Fortran. Sus programas pueden recibir argumentos desde la línea de órdenes tal como lo hacen los programas de sistema. Ver exec (II). Procesado de Textos Casi todo el texto ingresado al editor. Las órdenes empleadas más a menudo para escribir texto en la terminal son cat, pr, rutt, nroff y troff, todas detalladas en la Sección I. El comando cat simplemente vuelca el texto en ASCII a la terminal, sin realizar procesado alguno. La orden pr pagina el texto, provee encabezados, y posee la facilidad de ofrecer salida de encolumnado. Troff u ntroff son programas de formato elaborado para texto, y requieren consideraciones cuidadosas para ingresar tanto el texto como las órdenes de formato en el fichero de entrada. Troff conduce una fotocomponedora de Graphic Systems; fue utilizada para producir este manual. Nroff produce salida para una terminal teletipo. Ruff (I) es un programa de formato de texto algo menos elaborado, y requiere menores consideraciones previas. Sorpresas Ciertas órdenes proveen comunicación inter-usuario. Será bueno conocer algo de ellas, incluso si no planeas utilizarñas, ya que alguien más podría querer utilizarlas contigo. Para comunicarse con otro usuario actualmente en sesión activa, se utiliza write (I); mail (I) podrá dejar un mensaje cuya presencia será anunciada al otro usuario la siguiente vez que inicie su sesión. Las correcciones al manual también sugieren cómo responder a los dos comandos si estos se utilizan para comunicarse con usted. Cuando inicie su sesión, un "mensaje del día" podría saludarlo antes de recibir su primer "%".