Вы находитесь на странице: 1из 189

Manual de Unix

Manual de Unix

1.1 HISTORIA
Unix fue desarrollado en los Laboratorios Bell de AT&T, sin embargo, la historia de Unix es casi nica, ya que sus avances son aportaciones de personas individuales con ideas creativas singulares. MULTICS (antecesor directo de Unix), un sistema desarrollado por varias compaas entre las que destacan AT&T y General Electric, ha influido en gran medida el diseo de los sistemas modernos. Un sistema multiusuario, l incorporaba la mayora de las ideas que aparecen en los sistemas operativos actuales. Desgraciadamente result mucho ms complejo y pesado de lo que era necesario. Multics estuvo parado durante algunos aos bsicamente por dos problemas: Necesitaba mucha memoria Los programas no acababan de funcionar bien con l

Unix fue diseado por un grupo de personas que eran representantes de AT&T en el desarrollo de Multics, en el MIT (Instituto Tecnolgico de Massachussets). A finales de los sesenta, AT&T abandono el proyecto Multics. Sin embargo, Dennis Ritchie y Ken Thompson, dos investigadores de los laboratorios Bell, quienes haban participado en el proyecto, decidieron construir el sistema basado en un diseo que ellos mismos haban elaborado junto con Rudd Canaday. Ms tarde se les unieron otros informticos capaces como J. F. Ossanna y R. Morris. Adquirieron una Digital Equipment Corp (DEC) PDP-7 de desecho, una computadora con solo 18 kilobytes de memoria, y se pusieron a desarrollar. Como muchos proyectos interesantes, ste empez con la creacin de un juego: Thompson y Ritchie desarrollaron un juego de "Viaje espacial" para la PDP-7. Luego crearon una nueva estructura de sistemas de archivos y nuevo software. Le aadieron un entorno de procesos con planificacin y completaron un sistema operativo rudimentario. Al resultado se le nombr UNIX pues era una simplificacin de MULTICS. La primera versin de UNIX se codifico en lenguaje ensamblador. En 1970, un ao despus, Ritchie instal el sistema en una DEC PDP-11, y el runoff, el predecesor del troff, se convirti en el primer procesador de texto de UNIX. Al contemplar el desarrollo de Unix, Ritchie y Thompson expusieron sus diseos en una conferencia internacional donde varios de los participantes les pidieron una copia de este sistema. En esta poca, BTL haba perdido un juicio, y como parte de los dictmenes del Juez estaba la prohibicin de incorporarse a cualquier negocio que no fuera el de las telecomunicaciones. Debido a esto, a BTL le era imposible entrar en el negocio de los sistemas operativos.

Manual de Unix

La presin de los investigadores en obtener una copia de Unix motiv a los ejecutivos de BTL a licenciar su uso como una herramienta de investigacin. La licencia de Unix era muy barata para las universidades y bastante cara para la industria. En 1971, UNIX recibi reconocimiento oficial de AT&T cuando la firma lo us para escribir manuales. La segunda edicin, realizada en 1971, dio forma al UNIX moderno con la introduccin del lenguaje de programacin C. A finales de 1973, despus de que Ritchie aadi soporte para variables globales y estructuras, se us el lenguaje C para continuar el desarrollo de UNIX, con lo que se rompi con la tradicin de escribir sistemas operativos en lenguaje ensamblador. Solo algunas subrutinas de alto rendimiento dentro del ncleo del sistema estn escritas en ensamblador. Escrito en C, el entorno UNIX pudo ser relativamente fcil de trasladar a diferentes plataformas hardware. Lo que le dio gran portabilidad y popularidad. Las aplicaciones escritas en C pudieron ser fciles de transportar entre diferentes variantes de UNIX. En esta situacin naci el primer criterio de sistema abierto. La portabilidad de UNIX se convirti en el modelo de transportar aplicaciones en C desde un sistema UNIX a otro. Muchos integrantes del equipo de los Laboratorios Bell se interesaron en Unix y despus de dos o tres aos, estaba corriendo en varias mquinas diferentes. El sistema Unix se consolid con el desarrollo de las PDP-11 superiores, como la PDP-11/45 y la PDP-11/70, a mediados de los setenta. En 1974, la quinta edicin de UNIX fue realizada para que estuviera disponible para las universidades. El precio de la versin 5 fue suficiente para recuperar los costos de las cintas y manuales. Se inform de los errores directamente a Thompson y Ritchie, quienes los reparaban a los pocos das de la notificacin. En 1975, la sexta edicin de UNIX fue desarrollada e iniciada para ser ampliamente usada. Durante este tiempo, los usuarios se hicieron activos, los grupos de usuarios fueron formados, y en 1976, se estableci el grupo de usuarios USENIX. En 1977, Interactive System Corp. inici la venta de UNIX en el mercado comercial. Durante este tiempo, UNIX tambin adquiri ms poder. AT&T distribuy copias de Unix a universidades de todo el mundo y con la creciente popularidad de los microprocesadores, otras compaas trasladaron el UNIX a nuevas mquinas, pero su simplicidad y claridad tent a muchos a aumentarlo bajo sus puntos de vista, resultando muchas variantes del sistema bsico. Las dos familias ms importantes de versiones de UNIX son BSD y System V. En el perodo entre 1977 y 1982, en los laboratorios Bell se trabajaba para fortalecer y optimizar a Unix con un enfoque comercial. En 1982 se lanza la primera versin comercial de Unix, UNIX System III. El lanzamiento hizo dudar a los usuarios, ya que no se saba que partes pertenecan realmente a Unix y cuales a alguna de sus variantes.

Manual de Unix

Sin embargo los Laboratorios Bell ms tarde aadieron muchas caractersticas nuevas al UNIX System III, lo que unifico todo lo anterior, llamando al nuevo producto UNIX System V. La unificacin prometa mantener compatibilidad con sus futuras versiones. En enero de 1983 AT&T anunci su apoyo oficial al System V. El sistema IV se utiliz dentro de los laboratorios Bell, pero se consider un producto de transicin. AT&T normaliz el nombre de sistema V y sus versiones recientes se denominan sistema V revisin 3 y sistema V revisin 4, que con frecuencia se abrevian como SVR3 y SVR4, respectivamente. Una de las universidades que adquiri la licencia Unix fue la Universidad de California en Berkeley. La motivacin principal era poder experimentar con el primer sistema operativo que inclua cdigo fuente. Al poco tiempo, la gente de Berkeley haba escrito varios programas utilitarios para Unix que otros investigadores podran encontrar tiles. La universidad decidi desarrollar su propia implementacin: BSD (Berkeley Software Distribution), para mquinas VAX, la cual es ampliamente utilizada. Este cdigo fue distribuido entre la comunidad universitaria. La implementacin BSD dominaba en los ambientes universitarios y tcnicos. A pesar que al principio las distribuciones de Berkeley consistan principalmente en herramientas para los usuarios, muy pronto comenzaron a cambiar la forma en que el propio sistema operativo funcionaba. Implementaron el manejo de memoria virtual y programaron el soporte para los protocolos del Arpanet que luego se convertira en el conocido Internet. Todos estos cambios eran distribuidos como BSD a quienes tenan una licencia de Unix de la divisin de BTL encargada de administrar este sistema (AT&T). Las versiones BSD fueron la plataforma dominante para experimentacin en conceptos de red. El primer experimento importante en redes de rea extensa, el ARPANET, fue orientado a UNIX. Al incrementarse la velocidad y potencia de las microcomputadoras y con la disminucin de su costo, estas pudieron soportar el sistema UNIX. Cuando los sistemas SVR3 y SVR4 estuvieron disponibles en mquinas de arquitectura PC-AT a finales de los ochenta, creci mucho la popularidad de UNIX. A mediados de los aos ochentas, Richard Stallman, entonces en el Instituto Tecnolgico de Massachussets (MIT) decidi dedicarse a la construccin de lo que denomin software libre. El razonamiento de Stallman era que los mayores progresos en la industria del software surgen cuando se coopera entre programadores. Segn Stallman, las industrias de la poca estaban atentando contra la libertad de los usuarios y programadores de compartir el software, as que decidi programar un sistema parecido a Unix y regalarlo. A este sistema le llam GNU, un acrnimo recursivo que significa Gnu's Not Unix (GNU no es Unix). Para este entonces, varias compaas estaban ya en el negocio de Unix. Microsoft distribua Xenix, una versin de Unix para el procesador 80386. Sun Microsystems utilizaba BSD como base para su SunOS. Digital Equipment Corporation inclua otro sistema operativo basado en BSD con sus workstations, Ultrix.

Manual de Unix

Otro paso importante fue la aparicin del sistema de ventanas X. X fue un prototipo de un proyecto de investigacin en el MIT a mediados de los ochenta, luego lo adaptaron algunas compaas, lo mejoraron y estabilizaron para poder hacerlo comercial. Actualmente, la mayora de los paquetes de aplicaciones comerciales para UNIX corren bajo el entorno X. En las ltimas revisiones de SVR3 se inici una mezcla de las tres variantes principales del sistema UNIX. Como resultado de acuerdos entre AT&T, Sun Microsystems y Microsoft, los sistemas BSD y XENIX estn fundidos dentro del sistema V. Al tiempo de la fusin entre BSD y el sistema V, otros vendedores de sistemas UNIX se preocupaban de que un sistema mixto diera predominio a AT&T y Sun Microsystems en el mercado. Estos vendedores, principalmente Hewlett-Packard y DEC, formaron un consorcio para desarrollar una variante que no estuviera bajo el control de AT&T o Sun. Este grupo, llamado Open Software Foundation (OSF), ha desarrollado varios productos importantes para el sistema UNIX, el principal de ellos, la interfaz de usuario Motif. A principios de los aos noventa, la Universidad de California en Berkeley haba cambiado tanto a Unix que decidieron distribuirlo incluso a personas que no tuvieran una licencia de AT&T. Esto motiv a algunas personas a iniciar una empresa para distribuir BSD (como ahora le llamaban a Unix de Berkeley) comercialmente. A esta empresa le llamaron Berkeley Software Design, Inc. (BSDI). Cuando BSDI comenz a vender BSD establecieron un nmero de acceso telefnico gratuito para sus clientes, este nmero era 1-800-ITS-UNIX. Para este entonces, BTL ya haba sido desmembrado en varias compaas, una de ellas AT&T que de acuerdo a los nuevos arreglos legales ya poda comercializar Unix. En efecto, AT&T haba creado una divisin llamada Unix System Laboratories (USL) con el propsito de vender Unix a la industria. USL haba incorporado el cdigo de BSD en el Unix de AT&T adems de haber desarrollado algunos otros subsistemas. Cundo AT&T se enter que BSDI estaba compitiendo en este mercado lanz una demanda legal contra BSDI. BSDI compareci ante el Juez e indic que su producto no estaba basado en el Unix de AT&T sino en el Unix de Berkeley, que al final de cuentas la Universidad regalaba sin necesidad de una licencia. Al darse cuenta AT&T que no tena oportunidad de ganar una demanda contra BSDI decidi demandar a la Universidad de California en Berkeley por distribuir cdigo basado en el Unix de AT&T a personas que no posean una licencia de AT&T. La Universidad de California a su vez, demand a AT&T por incorporar cdigo desarrollado en la Universidad sin dar el crdito debido a los autores. Adems de la iniciativa comercial de BSDI, haban surgido ya las primeras distribuciones gratuitas del Unix de Berkeley. Bill Jolitz haba porteado BSD al procesador Intel 80386 y le haba llamado a su port 386BSD. El grupo NetBSD haba sido fundado para continuar porteando BSD a nuevas plataformas. FreeBSD haba tomado el cdigo de 386BSD que Bill Jolitz no tena tiempo de mantener y estaba ahora distribuyndolo gratis para el Intel 80386. Lamentablemente, a raz de la demanda de AT&T a Berkeley, todas estas distribuciones fueron detenidas hasta que se arreglaran los aspectos legales de Berkeley, si BSD era en efecto un sistema operativo que no necesitaba licencia de AT&T.

Manual de Unix

Para las personas deseosas de correr Unix en las ahora populares PCs, quedaba nicamente una alternativa, Minix. Minix era un sistema operativo parecido a Unix desarrollado por el Profesor Andrew Tanenbaum para ensearles a sus alumnos acerca del diseo de sistemas operativos. Sin embargo, debido al enfoque puramente educacional de Minix, Tanenbaum no permita que este fuera modificado demasiado ya que esto complicaba el sistema y no permita que sus estudiantes lo entendieran en un semestre. Un estudiante de Finlandia, Linus Torvalds, al ver que no era posible extender Minix, decidi escribir su propio sistema operativo compatible con Unix. Miles de personas que queran correr Unix en sus PCs vieron aqu su nica alternativa debido a que a Minix le faltaban demasiadas cosas y BSD, a pesar de tener toda la funcionalidad esperada, tena problemas legales. El proyecto GNU que Stallman haba iniciado haca ya casi diez aos haba producido para este entonces un sistema casi completo a excepcin del kernel, que es el programa que controla el hardware de la mquina. Torvalds decidi utilizar el casi completo sistema GNU y completarlo l mismo con su propio kernel, al resultado le llam Linux. Richard Stallman insiste an que el sistema debiera ser llamado GNU/Linux, ya que incluye ms cdigo del proyecto GNU que del proyecto Linux. A mediados de los aos noventa, AT&T vendi Unix a Novell, quin tom como prioridad primaria resolver las demandas. El acuerdo fue que la Universidad de California eliminara todo el cdigo residual de AT&T y lanzara una ltima distribucin de BSD totalmente libre de problemas de licenciamiento. Esta distribucin fue el 4.4-BSD Lite2. Quien quisiera distribuir BSD debera basar su distribucin en 4.4-BSD Lite2 para no tener problemas legales. Inmediatamente los distribuidores de BSD reiniciaron sus labores de distribucin migrando lentamente sus sistemas al 4.4-BSD Lite2. Para este entonces, Linux se haba convertido ya en el Unix ms popular entre la gente que buscaba alternativas al Windows de Microsoft.

Manual de Unix

En la siguiente tabla se describen brevemente los hechos ms importantes en la historia de Unix. Ao 1965 1969-71 1972-73 Descripcin Bell Telephone Laboratories y General Electric Origen Company intervienen en el proyecto MAC (del MIT) para desarrollar MULTICS. El primer UNIX llamado Versin 1 o Primera edicin, Infancia del UNIX nace de las cenizas de MULTICS. En la Versin 2 el soporte del lenguaje C y los pipes son Nace el C aadidos. En la Versin 4 el ciclo se completa con la reescritura de UNIX en C. Las Versiones 5 y 6 de UNIX se distribuyen a las universidades. La Versin 6 circula en algunos ambientes comerciales y gubernamentales. AT&T El momento impone ahora pagar una licencia, a pesar de que no puede promocionar UNIX por las duras regulaciones de EEUU del monopolio telefnico de AT&T. Interactive Systems es la primera compaa comercial UNIX como producto que ofrece UNIX. 1BSD incluye un Shell Pascal, dispositivos y el editor Nace BSD ex. La Versin 7 de UNIX incluye el compilador completo Versin 7 K&R con uniones y definiciones de tipos. Versin 7 tambin aade el Bourne Shell. BSD acrecentado por BBN incluye soporte para trabajar Trabajo en Red en red. Implementacin para microcomputadoras ampliamente Nace XENIX distribuido en hardware de bajo coste. Memoria Virtual La capacidad de memoria virtual se aade en 4BSD. Nace ULTRIX DEC realiza una versin de UNIX basado en BCD. Licencias en AT&T La distribucin de licencias abre el mercado. Atraccin de los Soporte importante para procesos de transacciones negocios desde UNIX System Development Lab. Nace System V La versin ms comn de AT&T obtiene sus bases. AT&T desata la versin ms popular de System V hasta Salida de SVR3 ahora. Sistemas por ventanas rivales son anunciados por OSF y Motif vs Open Look UI. Siguiente paso Un UNIX grfico usa el Kernel Mach. Versiones rivales de UNIX son anunciadas por OSF y OSF/1 vs SVR4 UI. OSF/1 abandona la escena; SVR4 se convierte en el estndar; Sun vende ms estaciones de trabajo para Socializacin usuarios de Motif que para usuarios de Open Windows; y crece Windows/NT de Microsoft. Evento

1974-75

1977 1977 1979 1979 1979 1980 1980 1980 1982 1983 1984 1988 1988 1990

1992-95

Manual de Unix

1.2 VERSIONES
Las dos familias ms importantes de versiones de UNIX son BSD y System V. BSD dio nacimiento a SunOS, quien se ha convertido ahora en el progenitor de muchas pequeas variantes en el mercado de las SPARC. Tatung, por ejemplo, ofert SPARC-OS, y Solbourne Computers ofert SolOS. Con la adquisicin de la divisin de sistemas operativos de Interactive Systems, Sun ha trasladado tambin SunOS a las arquitecturas Intel 386 y 486. System V es la versin ms ampliamente usada de UNIX. Es el descendiente directo del UNIX desarrollado por AT&T en 1969. Est actualmente en la revisin 4.1 y a menudo es referenciado como SVR4, o System V Release 4. Ejemplos de descendientes de System V son ZEUS, XENIX (desarrollado por Microsoft), Idrix, LINUX,... El nfasis de los grupos que distribuyen BSD es:

FreeBSD: el nfasis de este sistema operativo est en la facilidad de uso del sistema. Entre otras metas estn la eficiencia del uso de recursos y el rendimiento del sistema. nicamente soportan las plataformas i386 y Alpha aunque ya han iniciado un port a la arquitectura SPARC. Recientemente se han anunciado planes de integrar el cdigo fuente de FreeBSD con el de BSD/OS distribuido por BSDI. Esto proporcionara una ventaja tecnolgica an ms grande al grupo de FreeBSD. Gracias a su modo de emulacin de Linux, puede correr una variedad de software escrito para este ltimo. NetBSD: el nfasis de este grupo es la portabilidad del sistema operativo. Actualmente existen ports para casi cualquier plataforma, desde las antiguas VAX hasta las modernas iMac. OpenBSD: el nfasis de este grupo es en la seguridad, han hecho una auditoria de todo el cdigo fuente buscando errores y fallas de seguridad. Incorporan sistemas criptogrficos en su sistema operativo. TrustedBSD: este es un muy reciente sistema operativo, basado en FreeBSD y con la meta de alcanzar la certificacin B1 del libro naranja del Departamento de Defensa de Estados Unidos.

Manual de Unix

Manual de Unix

La figura 2.1 se describe la arquitectura de alto nivel de UNIX. El sistema operativo interacta directamente con el hardware, suministrando servicios comunes a los programas y aislndolos de la particularizacin del hardware. Viendo el sistema como un conjunto de capas, el sistema operativo es comnmente llamado como ncleo del sistema o kernel.

Como los programas son independientes del hardware que hay por debajo, es fcil moverlos desde sistemas UNIX que corren en diferentes mquinas si los programas no hacen referencia al hardware subyacente. Por ejemplo, programas que asumen el tamao de una palabra de memoria ser ms difcil de mover a otras mquinas que los programas que no lo asumen. Los programas como el shell y los editores (ed y vi) mostrados en la capa siguiente interacta con el kernel invocando un conjunto bien definido de llamadas al sistema. Las llamadas al sistema ordenan al kernel realizar varias operaciones para el programa que llama e intercambiar datos entre el kernel y el programa. Varios programas mostrados en la figura 2.1 estn en configuraciones del sistema estndares y son conocidos como comandos, pero los programas de usuario deben estar tambin en esta capa, indicndose con el nombre a.out, el nombre estndar para los archivos ejecutables producidos por el compilador de C. Otros programas de aplicaciones pueden construirse por encima del nivel bajo de programas, por eso la existencia de la capa ms exterior en la figura 1. Por ejemplo, el compilador de C estndar, cc, est en el nivel ms exterior de la figura: invoca al preprocesador de C, compilador, ensamblador y cargador, siendo todos ellos programas del nivel inferior. Aunque la figura muestra una jerarqua a dos niveles de programas de aplicacin, los usuarios pueden extender la jerarqua a tantos niveles como sea apropiado. En realidad, el estilo de programacin favorecida por UNIX estimula la combinacin de programas existentes para realizar una tarea.

10

Manual de Unix

Muchos programas y subsistemas de aplicacin que proporcionan una visin de alto nivel del sistema tales como el shell, editores, SCCS (Source Code Control System) y los paquetes de documentacin, estn convirtindose gradualmente en sinnimos con el nombre de "Sistema UNIX". Sin embargo, todos ellos usan servicios de menor nivel suministrados finalmente por el kernel, y se aprovechan de estos servicios a travs del conjunto de llamadas al sistema. Hay alrededor de 64 llamadas al sistema en System V, de las cuales unas 32 son usadas frecuentemente. Tienen opciones simples que las hacen fciles de usar pero proveen al usuario de gran poder. El conjunto de llamadas al sistema y los algoritmos internos en los que se implementan forman el cuerpo del kernel. En resumen, el kernel suministra y define los servicios con los que cuentan todas las aplicaciones del UNIX.

11

Manual de Unix

Figura 2.2 Bloques funcionales del sistema operativo UNIX.

El sistema operativo UNIX se compone de bloques funcionales que se encuentran representados en la figura 2.2 y sern comentados en los apartados que siguen.

12

Manual de Unix

2.1 ORGANIZACIN DE LA INFORMACIN


El sistema operativo UNIX est diseado para manejar informacin contenida normalmente en discos. Para que esta manipulacin sea realmente efectiva, es necesario que la informacin est organizada de alguna forma eficiente. La manera estndar de organizar la informacin es en archivos. Los archivos son localizados dentro del disco porque son apuntados desde un lugar determinado, a este lugar se le denomina directorio.

Figura 3. Estructura del sistema de archivos. Sin embargo en UNIX no se utiliza un nico directorio para apuntar a todos los archivos del sistema, sino que se crea una estructura jerrquica de directorios conocida como estructura en rbol. Se muestra un ejemplo de esta estructura jerrquica en la figura 2.3. Aunque en un principio pueda parecer una estructura excesivamente complicada por la amplia ramificacin de los directorios, esta organizacin permite agrupar los archivos de los diferentes usuarios e incluso de las diferentes aplicaciones en directorios separados, con lo que se evita el que se interfieran entre s. Por otro lado, un mismo usuario puede organizar su propia informacin separando los archivos en diferentes directorios de acuerdo a su contenido.

13

Manual de Unix

2.2 CONCEPTO DE ARCHIVO


La estructura fundamental que utiliza el UNIX para almacenar informacin es el archivo. El UNIX mantiene la pista de cada uno de los archivos asignndole a cada uno, un nmero de identificacin (i-number) que apunta a la tabla de i-nodos. Sin embargo, el usuario se referir a cada archivo con el nombre que le haya asignado el propio usuario. El UNIX mantiene toda la informacin propia del archivo, excepto su nombre, en su inodo correspondiente. El nombre se encuentra en la entrada correspondiente del directorio al que pertenece. Todos los archivos UNIX son tratados como una simple secuencia de bytes (caracteres), comenzando en el primer byte del archivo y terminando con el ltimo. Un byte en concreto dentro del archivo, es identificado por la posicin relativa que ocupe en el archivo. La organizacin de los archivos en registros o bloques de una longitud fija, corresponde a la forma tradicional de organizacin de los datos en el disco. El UNIX protege especficamente al usuario del concepto de registros o bloques. En su lugar, el UNIX puede permitir que el usuario divida al archivo en registros, de acuerdo a un byte o conjunto de bytes especiales. Los programas son libres para organizar sus archivos, con independencia de la forma en que los datos estn almacenados en el disco.

14

Manual de Unix

2.3 DIRECTORIOS
Prcticamente para todos los efectos, un directorio se comporta como un archivo, con la caracterstica de que sus registros son de longitud fija. A pesar de lo comentado anteriormente, el contenido de los directorios no apunta directamente a los bloques de datos de los archivos o subdirectorios que dependen de l, sino a unas tablas (i-nodos) separadas de la estructura. Es desde estas tablas desde las que se apunta a los bloques fsicos de los archivos dentro del disco. Cada registro en el directorio tiene una longitud de 16 bytes de los que: Los dos primeros contienen un apuntador (en binario) a la tabla de los i-nodos (i-number). Los catorce restantes contienen el nombre del archivo o subdirectorio (el nmero bytes por registro depende de la versin del UNIX, ya que hay versiones en que la longitud del nombre de un archivo puede llegar a 255 bytes). Cualquier directorio contiene un mnimo de dos entradas: Una referencia a s mismo (.). Una referencia al directorio de que dependo o directorio padre (..), salvo en el directorio raz que, al ser el comienzo de la estructura, esta referencia es tambin sobre s mismo.

Figura 4. Estructura de un directorio.

15

Manual de Unix

2.4 SISTEMA DE ARCHIVOS


El conjunto formado por la estructura de archivos y directorios y las tablas de i-nodos, se denomina Sistema de Archivos o File System. Cada sistema de archivos est residente en un soporte fsico, normalmente disco magntico, pero si el disco es de gran capacidad puede dividirse en varios discos lgicos o "particiones", cada uno de los cuales sera un sistema de archivos independiente. En el caso de que el sistema disponga ms de un disco fsico, cada uno ser forzosamente un file system. Por lo tanto se puede asociar el concepto de sistema de archivos al de disco lgico o particin de disco. Es importante no perder la idea de que, aparte de otros componentes que se vern ms adelante, cada sistema de archivos dispondr de su propia tabla de i-nodos que apuntarn a los bloques de datos de los archivos y directorios contenidos en l. El sistema de archivos que contiene el directorio raz (normalmente el primer disco o la primera particin del primer disco en su caso) es el principal. En principio, cuando se carga el sistema operativo, la nica parte accesible de la estructura es la contenida en el file system principal. Para poder acceder a la informacin contenida en los restantes sistemas de operacin es necesario realizar una operacin denominada "montaje". Esta operacin consiste en enlazar cada sistema de archivos con directorios vacos de la estructura principal. A partir de ese momento, los archivos y directorios de los sistemas de archivos secundarios figurarn dentro de la estructura, colgando del directorio de montaje. Una vez montado todos los sistemas de archivos, la estructura es nica, por lo que el disco o la particin en que est fsicamente un determinado archivo, es transparente para el usuario. La funcin de montaje y desmontaje de los sistemas de archivo es, normalmente, realizada por el administrador del sistema. El sistema de archivos, o file system, de UNIX est caracterizado por: Una estructura jerrquica, Tratamiento consistente de los datos, La habilidad de crear y borrar archivos, Crecimiento dinmico de archivos, La proteccin de los datos, E tratamiento de los dispositivos perifricos como archivos. Cada sistema de archivos consta fundamentalmente de las siguientes partes: Bloque de carga: Este bloque, que es el primero de cada sistema (bloque cero), est reservado para un programa de carga. El bloque cero no tiene ningn significado en el sistema de archivos. Toda la informacin del sistema comienza en el bloque uno del dispositivo. Slo se utiliza en el sistema de archivos principal.

16

Manual de Unix

17

Manual de Unix

Sper bloque: El sper bloque es el bloque uno del dispositivo. Este bloque contiene informacin sobre el sistema de archivos, tales como su tamao en bloques, el nombre del sistema de archivos, nmero de bloques reservados para i-nodos, la lista de i-nodos libres y el comienzo de la cadena de bloques libres. Tambin contiene el nombre del volumen, momento de la ltima actualizacin y tiempo del ltimo backup. Siempre reside en un bloque de 512 bytes. I-nodos: A continuacin del sper bloque estn situados los bloques que contienen los inodos. El nmero de bloques de i-nodos vara dependiendo del nmero de bloques del sistema de archivos. El nmero de i-nodos est especificado en el sper bloque. Es una tabla que contiene informacin sobre las caractersticas de los archivos. Esencialmente es el bloque de control de los archivos. Hay un i-nodo por cada directorio y archivo del sistema de archivos. El i-nodo contiene una descripcin del directorio o archivo, as como el lugar fsico que ocupan sus bloques de datos. Los i-nodos slo apuntan a los archivos o directorios de su mismo sistema de archivos. Bloques de datos: El resto del espacio del dispositivo lgico consta de bloques de datos. Bloques de datos que contienen los datos actualmente almacenados en los archivos. Algunos bloques de datos sirven como bloques indirectos, conteniendo nmeros de bloques (direcciones) de grandes archivos.

Figura 5. Estructura de un Sistema de Archivos.

El sistema de archivos est organizado en una estructura jerrquica. Este sistema jerrquico permite agrupar la informacin de los usuarios de una forma lgica. Permite manipular eficientemente un grupo de archivos como una sola unidad. No tiene ninguna limitacin en su desarrollo, permitiendo un crecimiento dinmico tanto en su nmero como en su tamao. El UNIX trata a los archivos de entrada o de salida del mismo modo que cualquier otro archivo. Los usuarios debern "caminar" a travs del rbol hasta encontrar el archivo deseado. Dentro del UNIX el usuario puede acceder a siete clases de archivos:

18

Manual de Unix

Directorios. Ordinarios. De dispositivos tipo bloque. De dispositivos tipo caracter. Fifo (Pipes). Ligas

Los directorios y los archivos ordinarios han sido ya comentados. Los archivos especiales se vern ms adelante.

19

Manual de Unix

2.5 MANEJO DE LOS I-NODOS


Cuando se intenta acceder a la informacin contenida en un archivo, el sistema accede al directorio al que pertenece y busca su nombre secuencialmente. Una vez encontrado toma el inumber asociado a ese archivo y con l accede a la entrada correspondiente a la tabla de i-nodos, que contendr toda la informacin correspondiente a ese archivo excepto su nombre. Con esta informacin ya puede acceder fsicamente a los bloques de datos dentro del sistema de archivos. Esta forma de acceder fsicamente a los bloques de datos puede parecer ms compleja que la utilizada en otros sistemas operativos en los que se accede directamente con la informacin existente en el directorio, sin necesidad de tablas de i-nodos ni nada por el estilo, sin embargo presenta algunas ventajas. Por ejemplo, si en un directorio se aade una entrada con un nombre de archivo cualquiera, pero con un i-number ya utilizado en otro directorio, se podr acceder a los mismos bloques de datos desde los dos directorios e incluso con diferentes nombres de archivos. En este caso se dice que existe un enlace entre ellos. El UNIX mantiene la siguiente informacin para cada archivo; en la tabla de i-nodos: Localizacin. Tamao. Cuntos enlaces tiene el archivo. Propietario. Permisos de acceso. Identificacin de si es o no archivo. Fecha de creacin. Fecha de modificacin. Fecha de ltimo acceso.

Figura 2.6. Contenido de un i-nodo.

20

Manual de Unix

Adems, cada i-nodo contiene diez punteros directos con la direccin de los diez primeros bloques de datos, un puntero indirecto simple con la direccin de un bloque que contiene punteros directos, que a su vez apuntan a bloques de datos; un puntero indirecto doble que apunta a un bloque con punteros indirectos simples, que apuntan a bloques con punteros directos y stos a bloques de datos; y un puntero indirecto triple. En la figura 2.7 se ve un ejemplo grfico de esta estructura.

Figura 2.7. Estructura de los punteros.

21

Manual de Unix

2.6 ARCHIVOS ESPECIALES


Adems de los archivos normales de datos, dentro de la estructura de un sistema UNIX existen unos archivos especiales. Los nombres de estos archivos identifican los dispositivos fsicos hardware del equipo: Discos magnticos Cintas magnticas Terminales Lneas de comunicaciones Etc.

Cada tipo de dispositivo tiene un controlador responsable de comunicarse con este dispositivo. Dentro del sistema hay una tabla que apunta a los diferentes controladores de los dispositivos. Todos los dispositivos son tratados como archivos. Existen archivos especiales para cada lnea de comunicaciones, disco, unidad de cinta magntica, memoria principal, etc. Estos archivos en realidad estn vacos. Tienen por misin asociar entre s los dispositivos y sus respectivos drivers. El sistema emplea dos nmeros enteros, denominados nmero principal (14 bits) y nmero secundario (18 bits) y almacenados en el i-nodo del archivo, para acceder al dispositivo asociado. El nmero principal identifica una clase de dispositivo (en realidad identifica al driver de dicha clase como pueden ser terminales, impresoras, discos, etc.) y el nmero secundario identifica a un elemento de dicha clase (un terminal especfico, un disco concreto, ...). Las ventajas de tratar las unidades de entrada/salida de esta forma son: Los archivos y dispositivos son tratados lo ms similarmente posible. Los nombres de ambos son pasados a los programas de la misma forma. Los archivos especiales estn sujetos al mismo tipo de proteccin de acceso que los archivos y directorios ordinarios.

Figura 2.8. Relacin de un archivo especial.

22

Manual de Unix

2.7 PRINCIPALES DIRECTORIOS


En la siguiente tabla se describen brevemente los contenidos y/o las utilidades de los seis principales directorios de UNIX Directorio /bin /usr/bin /usr/include /dev /etc /tmp Contenido y/o funcin Contiene muchos de los archivos ejecutables correspondientes a los comandos. Contiene tambin ejecutables del mismo tipo. Contiene libreras de lenguaje C. Muy til para los programadores. Contiene archivos especiales asociados con dispositivos de entrada/salida. Contiene entre otros, archivos ejecutables usados por el administrador. Utilizado para crear archivos temporales y de pruebas. Es borrado peridicamente por el sistema de forma automtica.

23

Manual de Unix

2.8 PERMISOS DE ARCHIVOS Y DIRECTORIOS


Cada archivo y directorio creado en UNIX tiene un propietario, normalmente la persona que lo ha creado. Ese propietario pertenece adems a un grupo de usuarios. El propietario del archivo o directorio puede asignar varios tipos de permisos, para permitir o denegar el acceso al archivo o directorio. Los tipos de permisos de acceso son:

Archivos:

Lectura (r) Escritura (w) Ejecucin (x)

Permitira su acceso para lectura. Permitira su actualizacin. Permite que el archivo pueda ser usado como comando shell.

Lectura (r) Permite ver su contenido. Directorios: Escritura (w) Permite crear o borrar archivos bajo l. Ejecucin (x) Permite accederse a l. Cada usuario puede especificar el permiso de acceso a sus archivos, seleccionando la adecuada combinacin de tipos de permisos, con el fin de permitir o denegar el acceso a tres niveles de usuarios (propietario, usuarios de su grupo, y el resto de usuarios). Ms adelante se explica en detalle como se otorgan estos permisos o se niegan.

24

Manual de Unix

2.9 CONTROL DE PROCESOS


En UNIX pueden ejecutarse varios procesos simultneamente (esta caracterstica es denominada algunas veces como multiprogramacin o multitarea) sin un lmite lgico en el nmero de ellos, y varias instancias del mismo programa pueden existir simultneamente en el sistema. Algunas llamadas al sistema permiten a los procesos crear nuevos procesos, acabar procesos, sincronizar niveles de ejecucin de procesos y controlar la reaccin de algunos sucesos. Sujeto a sus propias llamadas al sistema, los procesos son independientes de los dems. Generalmente, las llamadas al sistema permiten al usuario escribir programas que realicen sofisticadas operaciones, y como resultado, el kernel del sistema UNIX no contiene muchas funciones que son parte del "kernel" en otros sistemas. Estos programas, incluyendo compiladores y editores, son programas a nivel de usuario en el sistema UNIX. El principal ejemplo de estos programas es el shell, el intrprete de comandos que los usuarios ejecutan normalmente de entrar en el sistema. El ncleo del sistema operativo UNIX conoce la existencia de un proceso a travs de su bloque de control del proceso, donde se describe el proceso y su entorno, constituyendo un contexto consistente en: Espacio de direccionamiento y entorno de ejecucin: Variables que utiliza el proceso. Contenido de los registros hardware: Contador de programa, registro de estado del procesador, puntero de la pila y registros de propsito general. Contenido de las estructuras del ncleo relacionadas con el proceso: Tabla de proceso, reas, regiones, etc.

Si congelamos el estado del procesador y del proceso que est en ejecucin en un determinado momento, obtendramos lo que se conoce como imagen esttica del programa. En caso de producirse una interrupcin o cambio de proceso, se almacena la imagen del que est en ejecucin en ese mismo instante. Cada proceso se reconoce dentro del sistema por un nmero que lo identifica unvocamente y que se conoce como Identificador del Proceso o PID. Todos los procesos, excepto el proceso 0, son creados por otro proceso; es decir, el sistema de creacin y gestin de procesos en UNIX es jerrquico.

25

Manual de Unix

El proceso que se genera con el PID 0 es un proceso especial creado en el momento de arrancar el sistema. A continuacin se genera un proceso init que ser el antecesor de todos los procesos que se generen en el sistema. A partir de aqu se generan tantos procesos como terminales existan (se dar una descripcin ms adelante). Los procesos que atienden a los terminales crearan otros con el fin de identificar y controlar el acceso de los usuarios al sistema, los cuales, una vez que inicien la sesin, ejecutarn un proceso intrprete de comandos Shell que ser el que genere el resto de programas solicitados por el usuario.

26

Manual de Unix

27

Manual de Unix

El sistema UNIX maneja a todo como si estuviese tratando con archivos, y de stos reconoce tres tipos: Directorios y archivos ordinarios Procesos y archivos estndar Manipulacin de texto Un archivo ordinario es un contenedor de datos. ste cuenta con un nombre para referenciarlo. Las rdenes que se trabajan sobre su nombre en realidad se ejecutan en su contenido, y stas pueden ser para borrarlo, verlo, copiarlo o moverlo. Un directorio es un archivo que contiene informacin sobre otros archivos y directorios. Dentro de un directorio pueden hallarse ms directorios y a stos se les llama subdirectorios.

28

Manual de Unix

3.1 MANEJO DE ARCHIVOS Y DIRECTORIOS.


En este captulo se darn a conocer los comandos ms comunes que se utilizan en el manejo de archivos y directorios. Empecemos con los referentes a los directorios:

3.1.1 Visualizacin del directorio actual


Comando: pwd (print working directory) Descripcin: Imprime la ruta completa del directorio actual. Cuando a un usuario se le da de alta en el sistema, tambin se le crea un directorio propio, que es al que se accesa directamente al entrar en sesin. Para lograr ver la ruta de acceso a l se teclea el comando y sta se imprime en pantalla:
$pwd /users/ptc/nancy $

3.1.2 Listado de archivos de un directorio.


Comando: ls (list) Descripcin: Imprime en pantalla los nombres de los archivos contenidos en el directorio especificado. Si al ejecutar esta orden no se da un nombre de directorio, por default se ven los nombres de los archivos del directorio actual. Si en el directorio no hay archivos creados an por el usuario, entonces, slo aparecer el prompt del sistema:
$ls $

En caso de que existan archivos en el directorio probablemente se ver algo como esto:
$ls carri $ clase nuevo

29

Manual de Unix

3.1.2.1 Opciones de ls.


Opcin: -l (large) Descripcin: Da informacin completa acerca de los archivos del directorio: Si se desea tener informacin detallada acerca de un archivo, esta opcin es muy til para lograrla. Al teclear el comando se ve lo siguiente:
$ls -l total 16 -rwxr--r--rw-r--r-drwxr-xr-x $

1 1 2

nancy nancy nancy

ptc ptc ptc

163 379 64

Mar 4 11:00 Mar 4 10:24 Mar 4 10:56

carri clase nuevo

Revisemos el significado de los campos que aparecen al listar con ls.

-rwxr--r-- 1 nancy ptc 163 Mar 4 11:00 carri


Permisos del archivo Nombre Nombre del del Tamao archivo dueo del Nmero archivo de ligas Nombre Hora y fecha de del ltima modificacin grupo

En la primer columna se da informacin acerca del tipo de archivo que se trata archivo regular (-), directorio (d), archivos de dispositivos tipo bloque (b), archivos de dispositivos tipo carcter (c), fifo (f), socket (s) o liga (l), y permisos de usuario, grupo y otros. En la segunda se muestra el nmero de ligas que tiene el archivo. En la tercera se puede ver el nombre del propietario del archivo. En la cuarta se puede ver el nombre del grupo al que se pertenece. En la quinta muestra el tamao del archivo en bytes, si se tratara de un archivo de texto, este nmero indica el nmero de caracteres que contiene. En la sexta se especifica la fecha y hora de la ltima modificacin. En la ltima columna se muestra el nombre del archivo.

30

Manual de Unix

Opcin: -a (all) Descripcin: Al utilizar esta opcin de ls se le pide al sistema que muestre todo tipo de archivos, incluso los ocultos. Si tecleamos al comando con esta opcin combinada con la opcin -l en el directorio anterior aparece esto:
$ ls -la total 29 drwxr-xr-x drwxr-xr-x -rwxr--r--rw-r--r-drwxr-xr-x $

7 24 1 1 2

nancy root nancy nancy nancy

ptc ptc ptc ptc ptc

1024 1024 163 379 64

Mar Feb Mar Mar Mar

6 23 4 4 4

14:29 11:32 11:00 10:24 10:56

. .. carri clase nuevo

Ahora notamos que aparecen dos archivos nuevos "." y "..". Estos dos nombres se refieren al directorio actual y al directorio padre respectivamente. Sin importar en qu lugar se est trabajando, "." hace referencia al directorio en el que se est y ".." al inmediatamente superior en la jerarqua del sistema.

Opcin: -x Descripcin: Lista los nombres de archivo por lnea en orden alfabtico. Si el directorio contiene un nmero considerable de archivos, esta opcin ayuda a ahorrar espacio, colocando un nombre tras de otro. Probemos esta opcin en el directorio padre del actual:
$ls -x .. antonio argos invent jess rody seiya $

david doom morfeo nancy sergio skid

falcon firebird navajo pcs steeler yumbe4

gork gus ptcweb raq

Opcin: -C Descripcin: Coloca los nombres de archivos del directorio especificado por orden alfabtico en forma de columnas. Ejecutando la opcin -C con el directorio anterior se obtiene el siguiente resultado:

31

Manual de Unix

$ls -C /users/ptc antonio doom gork jess navajo raq sergio yumbe4 argos falcon gus morfeo pcs rody skid david firebird invent nancy ptcweb seiya steeler $

Opcin: -p Descripcin: Indica si un nombre de archivo es directorio o no. Esta opcin es muy til si no se quiere el listado largo del directorio si no slo saber los subdirectorios que existen en l. Al ejecutar la opcin se indica que es un subdirectorio sealndolo con un "/" al final del nombre del archivo: Ejecutando la opcin -p se obtiene el siguiente resultado:
$ls -p carri $

clase

nuevo/

Opcin: -F Descripcin: Indica qu archivos son subdirectorios y tambin cules son ejecutables. Al usar esta opcin, los archivos ejecutables y los directorios se sealan con un * y con un /, respectivamente. Al igual que en la opcin anterior, estos smbolos no forman parte del nombre del archivo.
$ls -p carri* $

clase

nuevo/

Opcin: -t Descripcin: Ordena a los nombres de archivos por su fecha de ltima modificacin. Al usar esta opcin es conveniente combinarla con l, para poder observar los resultados del comando. Al usarse en el directorio que se est trabajando muestra algo como esto:

32

Manual de Unix

$ls -lt -rw-r--r-drwxr-xr-x -rw-r--r-$

1 2 1

nancy nancy nancy

ptc ptc ptc

163 64 379

Mar 4 11:00 Mar 4 10:56 Mar 4 10:24

carri nuevo clase

Como se puede ver, ahora los archivos no han sido ordenados alfabticamente, sino por el penltimo campo que es el de fecha y hora.

Opcin: -u Descripcin: Al usar esta opcin los archivos se listan por la ltima fecha en la que se acceso a ellos. Al combinar esta opcin con -l se ve la siguiente pantalla:
$ls -lu -rw-r--r--rw-r--r-drwxr-xr-x $

1 1 2

nancy nancy nancy

ptc ptc ptc

163 379 64

Mar 5 15:36 Mar 4 10:24 Mar 7 13:06

carri clase nuevo

La diferencia con la opcin anterior radica en la operacin efectuada sobre el archivo. La modificacin implica forzosamente escritura, mientras que el acceso puede hacer referencia a una simple lectura o ejecucin.

Opcin: -r Descripcin: Entrega el listado de archivos en orden inverso al normal. Cuando se utiliza una opcin como -t o -u, el orden en que aparecen los nombres de archivos es por la ltima fecha de modificacin o acceso. Si se quisiera ordenarlos por la primera fecha de modificacin o acceso debe usarse esta opcin. Al usarse esta opcin se despliega algo como esto:
$ls -ltr -rw-r--r-drwxr-xr-x -rw-r--r-$

1 2 1

nancy nancy nancy

ptc ptc ptc

379 64 163

Mar 4 10:24 Mar 4 10:56 Mar 4 11:00

clase nuevo carri

33

Manual de Unix

3.1.3 Cambio de directorios.


Comando: cd (change directory) Descripcin: Sita al usuario en otro directorio de trabajo. /

users

bin

etc

dev

ptc

local

sh

date who

passwd

tty00

tty01

nancy

bin

archivo El siguiente ejemplo muestra el uso del comando:


$cd /etc $pwd /etc $

Se puede utilizar el comando para ir a cualquier parte del rbol de jerrquico, el directorio que se encuentra encima de un archivo o un directorio es el directorio padre y se representa con .. (punto-punto). El directorio en el cual nos ubiquemos es representado por . (un punto). Es conveniente que cada vez que se haga un cd se verifique el directorio en el que se est para evitar problemas que podran ser graves, como el borrar archivos que no se queran borrar. Cuando se encuentra en un directorio que no es el propio se puede regresar a l fcilmente tecleando slo cd. Esta orden lo llevar ah automticamente:
$pwd /etc $cd $pwd /users/ptc/nancy $

34

Manual de Unix

3.1.3.1 Rutas completas y rutas relativas.


Existen dos formas de accesar a un archivo o a un directorio, la primera es escribiendo el nombre de la ruta completa (absoluta) y la segunda es utilizando una ruta relativa. Ruta Absoluta. Al mencionar ruta completa se quiere decir que hay que especificar el nombre de los directorios y subdirectorios por los que hay que pasar para llegar a archivo especificado comenzando desde la raz del sistema. Ruta Relativa. La ruta relativa se refiere a cmo llegar a ese archivo desde el directorio en que se est trabajando. Para el uso de este tipo de desplazamiento por el sistema de archivos, es de mxima importancia el conocimiento y compresin de los operadores . y ... /

users

bin

etc

dev

ptc

local

sh

date who

passwd

tty00

tty01

nancy

bin

archivo Utilizando el rbol jerrquico, se puede llegar a un sub directorio /users/local/bin haciendo uso de su ruta completa, esto es comenzando desde la raz ( / )
$pwd /users/ptc/nancy $cd /users/local/bin $pwd /users/local/bin $

Ahora haciendo lo anterior pero con ruta relativas, primero subimos dos niveles y posteriormente se bajan dos:

35

Manual de Unix

$cd $pwd $/users/ptc/nancy $cd ../../local/bin $pwd /users/local/bin $

En este segundo ejemplo se ve como se hace referencia al directorio padre del actual (ptc), con los dos punto ( .. ). Luego al padre del padre (users), que es donde esta el subdirectorio local, y, por ltimo se da el nombre del directorio al que se quera llegar. En este ejemplo tal vez parezca que es incmodo usar las rutas relativas, pero no sera as si al subdirectorio que se quisiera llegar estuviera en el directorio padre.

3.1.4 Examinar archivos


Comando: cat Descripcin: Muestra el contenido de un archivo en pantalla. Para que el resultado de la ejecucin de este comando tenga significado, debe de utilizarse sobre un archivo de texto. El siguiente ejemplo muestra el uso de cat sobre un archivo ya creado en el directorio /usr/pub:
$cat |000 |010 |020 |030 |040 |050 |060 |070 |100 |110 |120 |130 |140 |150 |160 |170 $ /usr/pub/ascii nul|001 soh|002 bs |011 ht |012 dle|021 dc1|022 can|031 em |032 sp |041 ! |042 ( |051 ) |052 0 |061 1 |062 8 |071 9 |072 @ |101 A |102 H |111 I |112 P |121 Q |122 X |131 Y |132 ` |141 a |142 h |151 i |152 p |161 q |162 x |171 y |172

stx|003 nl |013 dc2|023 sub|033 " |043 * |053 2 |063 : |073 B |103 J |113 R |123 Z |133 b |143 j |153 r |163 z |173

etx|004 vt |014 dc3|024 esc|034 # |044 + |054 3 |064 ; |074 C |104 K |114 S |124 [ |134 c |144 k |154 s |164 { |174

eot|005 np |015 dc4|025 fs |035 $ |045 , |055 4 |065 < |075 D |105 L |115 T |125 \ |135 d |145 l |155 t |165 | |175

enq|006 cr |016 nak|026 gs |036 % |046 - |056 5 |066 = |076 E |106 M |116 U |126 ] |136 e |146 m |156 u |166 } |176

ack|007 so |017 syn|027 rs |037 & |047 . |057 6 |067 > |077 F |107 N |117 V |127 ^ |137 f |147 n |157 v |167 ~ |177

bel| si | etb| us | ' | / | 7 | ? | G | O | W | _ | g | o | w | del|

Esta tabla muestra los valores ascii de todos los caracteres en notacin octal.

36

Manual de Unix

Cuando se teclea mal el nombre de un archivo o ste no existe, en la pantalla se ve un mensaje que dice:
$ cat cari cat: cannot open cari: No such file or directory $

Si al examinar un archivo resulta que su contenido es muy largo, se puede abortar el comando con la combinacin CTRL-S o CTRL-Q.

3.1.4.1 Redireccionamiento.
Existen tres operadores que sirven para el direccionamiento del contenido de un archivo, los operadores son: > Enva la salida hacia un archivo. Si el archivo no existe lo crea, si el archivo ya existe lo sobre escribe. >> Enva la salida hacia un archivo. Si el archivo no existe lo crea, si el archivo ya existe va a concatena la salida al final del archivo. < Toma como entrada el archivo. Para redireccionar la salida de cat de un archivo a otro podemos hacer lo siguiente:
$ cat /usr/pub/ascii > ascii $ls carri clase nuevo ascii $

ls se us slo para verificar la ejecucin del comando anterior. En el ejemplo se puede ver, cat cre el archivo ascii, que no exista. Si el archivo hubiera existido, su contenido anterior habra desaparecido y la salida de cat se le habra copiado. Como UNIX maneja a los dispositivos como archivos, tambin se puede direccionar un resultado a una terminal:

37

Manual de Unix

$ tty /dev/ttyp2 $cat ascii > |000 nul|001 |010 bs |011 |020 dle|021 |030 can|031 |040 sp |041 |050 ( |051 |060 0 |061 |070 8 |071 |100 @ |101 |110 H |111 |120 P |121 |130 X |131 |140 ` |141 |150 h |151 |160 p |161 |170 x |171 $

/dev/ttyp2 soh|002 stx|003 ht |012 nl |013 dc1|022 dc2|023 em |032 sub|033 ! |042 " |043 ) |052 * |053 1 |062 2 |063 9 |072 : |073 A |102 B |103 I |112 J |113 Q |122 R |123 Y |132 Z |133 a |142 b |143 i |152 j |153 q |162 r |163 y |172 z |173

etx|004 vt |014 dc3|024 esc|034 # |044 + |054 3 |064 ; |074 C |104 K |114 S |124 [ |134 c |144 k |154 s |164 { |174

eot|005 np |015 dc4|025 fs |035 $ |045 , |055 4 |065 < |075 D |105 L |115 T |125 \ |135 d |145 l |155 t |165 | |175

enq|006 cr |016 nak|026 gs |036 % |046 - |056 5 |066 = |076 E |106 M |116 U |126 ] |136 e |146 m |156 u |166 } |176

ack|007 so |017 syn|027 rs |037 & |047 . |057 6 |067 > |077 F |107 N |117 V |127 ^ |137 f |147 n |157 v |167 ~ |177

bel| si | etb| us | ' | / | 7 | ? | G | O | W | _ | g | o | w | del|

El comando tty despliega el nombre de las terminales en las que est en sesin el usuario, en este caso fue ttyp2. Al redireccionar la salida de cat a la terminal, apareci el archivo, como se esperaba. Un ejemplo con >> es el siguiente:
$ cat arch1 En este ejemplo se va a concatenar un archivo al final otro, este es el primero $ cat arch2 Este es el segundo archivo y este quedara al final del ch1, para esto se utiliza >>. $ cat arch2 >> arch1 $ cat arch1 En este ejemplo se va a concatenar un archivo al final otro, este es el primero Este es el segundo archivo y este quedara al final del ch1, para esto se utiliza >>.

de

ar

de ar

En este ejemplo tenemos dos archivos, y el segundo fue concatenado al primero, si envs de utilizar >>, se hubiera utilizado > los dos archivos tendran el mismo contenido. Una forma de utilizar el < es la siguiente
$ mail jim < nota

38

Manual de Unix

En este ejemplo, el contenido del archivo nota es utilizado como entrada para la orden mail jim (ms adelante se explica el comando mail). Como consecuencia, Jim recibir el fichero en su correo electrnico. Se puede redirigir tanto la entrada como la salida estndar al mismo tiempo, como se muestra aqu:
$ cat < nota > n.copia

Este ejemplo hace que el shell ejecute la orden cat con el fichero nota como entrada y que enve la salida al fichero n.copia. El shell exige que el nombre de la orden sea lo primero que aparezca en la lnea, con los operadores de redireccin a continuacin. Tambin podra escribirse de la siguiente forma:
$ cat > n.copia < nota

3.1.4.2 Combinacin de archivos.


Otra utilidad del comando cat que tiene una forma muy fcil de concatenar archivos. Por ejemplo, si se quisiera que en un archivo se copiara el texto de otros dos, tendramos que teclear algo semejante a esto:
$cat /usr/pub/ascii /usr/pub/eqnchar >> ascii $

Esta lnea copiar los archivos ascii y eqnchar, en ese orden, del directorio /usr/pub al final del archivo ascii, situado en el directorio actual.

3.1.4.3 Creacin de archivos.


Con el comando cat se pueden crear archivos de texto de una forma muy fcil, pero esta es la manera que ofrece menos control sobre el formato de lo escrito, pues se trata de un editor de texto. La forma de hacerlo es la siguiente:

39

Manual de Unix

$cat > nuevo Este es un archivo nuevo. ^D $

cat toma del teclado, que es la entrada por default en el redireccionamiento, lo que se escriba en l y lo manda al archivo nuevo. Para guardar el archivo slo se oprimen las teclas Ctrl-D en la ltima lnea y el archivo se crea. Para agregar texto al final del archivo nuevo se tecleara:
$cat >> nuevo Agrego ms texto al archivo nuevo. ^D $

Al teclear una lnea en el archivo y pulsar enter, esa lnea ya no se podr modificar. Slo se podrn borrar caracteres en la lnea que se est escribiendo.

3.1.5 Contenido de archivos.


Comando: pg Descripcin: Lista el contenido de un archivo en pantalla. Cuando se tiene un archivo demasiado largo, con el comando cat slo se alcanza a ver el final de l en la pantalla. El comando pg tambin visualiza el contenido del archivo, pero con la diferencia de que si se tiene una pantalla de 24 lneas, esta orden desplegar slo 23 lneas del contenido y en la ltima esperar una nueva orden con los dos puntos :. En el siguiente ejemplo se muestra el uso del comando pg sobre el archivo passwd, ubicado en el directorio /etc. En el ejemplo se muestra lo descrito en el prrafo anterior y si se teclea una h despus de los dos puntos aparecer un men de opciones como aqu:
$pg /etc/passwd ... prebe03:x:203:101:Precandidato Becario:/users/precand/prebe03:/bin/ksh :h ------------------------------------------------------h help q or Q quit <blank> or \n next page l next line d or ^D display half a page more . or ^L redisplay current page f skip the next page forward n next file

40

Manual de Unix

p $ w or z s savefile /pattern/ ?pattern? or ^pattern^ !command

previous file last page set window size and display next page save current file in savefile search forward for pattern search backward for pattern execute command

Most commands can be preceded by a number, as in: +1\n (next page); -1\n (previous page); 1\n (page 1). See the manual page for more detail. ------------------------------------------------------:q $

3.1.5.1 Ver el final de un archivo.


Comando: tail Descripcin: Permite ver las ltimas lneas especificadas de un archivo. El comando tail se utiliza para mirar al final, del archivo especificado como argumento. Est escribe por omisin las diez ltimas lneas del fichero sobre la salida estndar como se muestra
$tail /etc/profile if [ $LOGNAME != root] then news n fi ;; -su) : ;; esac export PATH; trap 1 2 3 $

Tambin puede llevar un nmero a continuacin del argumento opcin -, para especificar un nmero de lneas distinto a diez que visualizar. Por ejemplo:
$tail 4 /etc/profile ;; esac export PATH; trap 1 2 3 $

41

Manual de Unix

Si el nmero se antecede por un -, entonces se mostrarn las ltimas lneas especificadas. Si el nmero se antecede por un +, se ven las ltimas lneas a partir del nmero de lnea tecleado. Adems, el nmero puede ir seguido de una letra para contar en unidades distintas a lneas.

Opcin: -c Descripcin: Al utilizar esta opcin se tomaran los ltimos n caracteres del archivo.

Opcin: -b Descripcin: Al utilizar esta opcin se mostrarn los ltimos n bloques del archivo.

Opcin: -f Descripcin: Cuando un programa esta escribiendo un archivo, y se requiere vigilar el final, esta opcin es muy eficiente. Con esta opcin visualiza caa nueva lnea que entra al fichero conforme se escribe. Esta opcin no finaliza por s misma, se debe eliminar presionando la tecla DEL cuando haya terminado de ver el final del archivo.

3.1.5.2 Ver el inicio de un archivo.


Comando: head Descripcin: Visualiza en pantalla las primeras lneas de un archivo. Este comando acta como tail, pero muestra el comienzo de un archivo en lugar del final. Este comando acepta una lista de nombre de ficheros como argumentos, o lee de su entrada estndar si no se especifican los archivos. Por omisin head muestra las diez primeras lneas de cada fichero de entrada, pero se puede cambiar esto aadiendo un nmero a la lnea de orden de la siguiente forma:
$ head 4 /etc/profile #ident @(#)/etc/profile.sl 1.1 4.0 12/26/89 60576 AT&T-SF trap 1 2 3 umask 022 # define mascara implcita de creacin de ficheros . /etc/TIMEZONE $

42

Manual de Unix

Este comando a diferencia con el tail, es que solamente puede mostrar las primeras lneas, cuando con tail depende del signo que antecede al nmero, en este solo se coloca -. Est al igual que el anterior el nmero puede ir seguido de una letra para contar en unidades distintas a lneas. Estas letras (banderas) son las mismas que tiene el comando tail. Obviamente no se puede utilizar -f para hacer un seguimiento de la cabeza de un fichero.

3.1.6 Determinacin del tipo de archivo.


Comando: file Descripcin: Determina de qu tipo es un archivo. Cuando se utilizan los comandos para ver el contenido de un archivo, si el escogido no es uno de texto, se ver algo inentendible en la pantalla. Para evitar esto se puede usar el comando file, que dice de qu tipo es un archivo. En el siguiente ejemplo se aclara su funcin:
$file nuevo clase nuevo: directory clase: ascii text $

Si el archivo nombrado no existe o no se tienen permisos de lectura sobre l aparecer un mensaje de error en la pantalla.

3.1.7 Metacaracteres.
Antes de continuar sera conveniente describir una de las caractersticas ms potentes del Sistema V de UNIX, que es su capacidad de utilizar una notacin abreviada para hacer referencia a conjuntos de caracteres. Esto se logra utilizando un conjunto de caracteres especiales llamados comodines o metacaracteres. stos se utilizan para hacer una correspondencia con nombres de archivos o con partes de nombres de ellos. Su equivalencia es la que sigue: * : Representa a toda una cadena de caracteres o a la cadena nula. ?: Representa a cualquier caracter simple.

[abc]: La correspondencia es cualquier caracter encerrado entre los corchetes, es decir, una a, una b o una c, en este caso. Si las letras entre los corchetes se separan por un -, la correspondencia ser cualquier caracter entre ese rango especificado. Por ejemplo, [0-9] corresponder a cualquier caracter entre 0 y 9, inclusive.

43

Manual de Unix

En los siguientes ejemplos se muestra el uso de la correspondencia de estos caracteres.


$ ls -l /etc/x* -rwxr--r-- 1 root -rwx------ 1 bin -rwx--x--x 2 bin -r-xr-xr-x 1 bin -r-xr-xr-x 1 bin -r-xr-xr-x 1 bin -rw-r--r-- 1 root $

sys bin bin bin bin bin other

2729 Mar 07 1993 /etc/xdaemon.rc 2481 Mar 15 1993 /etc/xinstall 25716 Mar 10 1993 /etc/xnstatus 110926 Mar 12 1993 /etc/xntpd 98518 Mar 12 1993 /etc/xntpdc 58618 Mar 12 1993 /etc/xntpres 823 Mar 18 11:53 /etc/xtab

Este ejemplo muestra a todos los archivos de /etc cuyos nombres comienzan con la letra x. Si por ejemplo deseramos conocer los archivos de /etc que tienen una d al principio y una s al final usaramos la siguiente orden:
$ ls -l /etc/d*s -rw-rw---- 1 bin $

terminal

0 Mar 15

1993 /etc/dialups

Si quisiramos listar a todos los archivos del directorio /etc simplemente teclearamos ls * y ya est. Para el uso del caracter ? supongamos que necesitamos conocer los archivos del /etc que comienzan con a y les sigue cualquier caracter y despus una t con cualquier otra cadena, entonces teclearamos:
$ ls -l /etc/a?t* -rwx------ 2 bin -rwx------ 2 bin $

bin bin

2966 Mar 15 2966 Mar 15

1993 /etc/asktime 1993 /etc/asktimerc

Usar los corchetes tiene mucha ventaja, ya que con ellos podemos manejar rangos o selecciones. Por ejemplo, si queremos conocer el nombre de archivos y directorios que comienzan con las letras t, u, v, w, x, y o z de ese mismo directorio, tendramos que teclear:
$ls -dx /etc/[tuvwxyz]* /etc/talkd /etc/tcbck /etc/termcap /etc/tftpd /etc/traceroute /etc/trpt_data /etc/tz.form /etc/uadmin /etc/unlink /etc/updateds /etc/uucpd /etc/uuinstall /etc/wall /etc/wdnsetup

/etc/tcp /etc/timed /etc/ttytype /etc/umount /etc/utmp /etc/vcabort /etc/whodo

/etc/telnetd /etc/timedc /etc/tz /etc/umountall /etc/utmp_getty /etc/volcopy /etc/winenv.def

44

Manual de Unix

/etc/wtmp /etc/xntpd /etc/yp /etc/ypxfrd $

/etc/xdaemon.rc /etc/xinstall /etc/xnstatus /etc/xntpdc /etc/xntpres /etc/xtab /etc/ypbind /etc/yppasswdd /etc/ypserv

Esta misma tarea se hubiera podido hacer con estas otras rdenes:
$ ls -dx /etc/[t-z]* /etc/talkd /etc/tcbck /etc/tcp /etc/termcap /etc/tftpd /etc/timed /etc/traceroute /etc/trpt_data /etc/ttytype /etc/tz.form /etc/uadmin /etc/umount /etc/unlink /etc/updateds /etc/utmp /etc/uucpd /etc/uuinstall /etc/vcabort /etc/wall /etc/wdnsetup /etc/whodo /etc/wtmp /etc/xdaemon.rc /etc/xinstall /etc/xntpd /etc/xntpdc /etc/xntpres /etc/yp /etc/ypbind /etc/yppasswdd /etc/ypxfrd $ $ $ ls -dx /etc/[!a-s]* /etc/TIMEZONE /etc/X0.hosts /etc/X1.hosts /etc/X3.hosts /etc/X4.hosts /etc/X5.hosts /etc/X7.hosts /etc/_fst /etc/talkd /etc/tcp /etc/telnetd /etc/termcap /etc/timed /etc/timedc /etc/traceroute /etc/ttytype /etc/tz /etc/tz.form /etc/umount /etc/umountall /etc/unlink /etc/utmp /etc/utmp_getty /etc/uucpd /etc/vcabort /etc/volcopy /etc/wall /etc/whodo /etc/winenv.def /etc/wtmp /etc/xinstall /etc/xnstatus /etc/xntpd /etc/xntpres /etc/xtab /etc/yp /etc/yppasswdd /etc/ypserv /etc/ypxfrd $

/etc/telnetd /etc/timedc /etc/tz /etc/umountall /etc/utmp_getty /etc/volcopy /etc/winenv.def /etc/xnstatus /etc/xtab /etc/ypserv

/etc/X2.hosts /etc/X6.hosts /etc/tcbck /etc/tftpd /etc/trpt_data /etc/uadmin /etc/updateds /etc/uuinstall /etc/wdnsetup /etc/xdaemon.rc /etc/xntpdc /etc/ypbind

Como se puede ver, la ltima orden selecciona no slo a los archivos o directorios que empiezan con las minsculas requeridas, sino tambin los que comienzan con esas letras, pero maysculas. El caracter ! dentro de los corchetes, como se puede ver, invierte la correspondencia de los caracteres. En estos ejemplos se uso slo el comando ls pero metacaracteres se pueden utilizar con cualquier comando, no slo con ste.

45

Manual de Unix

3.1.8 Borrado de archivos.


Comando: rm (remover) Descripcin: Borra los archivos especificados. La orden rm suprime silenciosamente el archivo y luego regresa al shell por una nueva orden. El uso de este comando es sencillo, slo se da el nombre del archivo o archivos que se quieren borrar, delante de la orden y ya est, los archivos son suprimidos. Una cosa muy importante al usar este comando es saber con certeza el directorio actual de trabajo ya que si se da una orden de borrado de todos los archivos que se encuentren y no se est en el directorio en el que se pensaba, se pueden tener sorpresas desagradables. El siguiente ejemplo ilustra el uso de esta orden:
$pwd /users/ptc/kyo $cd textos $ls hola hola2 mensaje $rm * $ls $

el comando ha borrado todos los archivos de este subdirectorio, como se puede ver. En el sistema UNIX no hay modo de recuperar un archivo una vez que ha sido suprimido con rm. Puesto que el comando rm es tan potente, sera deseable recibir una peticin de confirmacin antes de suprimir un archivo. Por las limitaciones anteriores, se tienen las siguientes opcines.

3.1.8.1 Opciones de rm
Opcin: -i (interactive) Descripcin: Antes de borrar, el sistema pregunta para confirmar la accin. Para cada archivo en la lista de borrado se pregunta si en realidad se desea efectuar la operacin. Si los archivos del directorio textos no se hubieran borrado y se utilizara ahora rm con la opcin -i, se vera lo siguiente:
$cd $rm -i textos/hola textos/hola2 textos/mensaje textos/hola: ? n textos/hola2: ? y textos/mensaje: ? y $

46

Manual de Unix

Lo que ser obtiene como resultado de las lneas anteriores es que el archivo hola no se borra, mientras que el archivo hola2 y mensaje son eliminados. Opcin: -f (forzado) Definicin: Forza la eliminacin de archivos, sin verificar aun cuando estos no tengan permisos de escritura. Opcin: -r (recursivo) Definicin: Esta opcin busca hacia abajo en el rbol del directorio y va borrando archivos y subdirectorios desde el directorio actual en adelante. Al utilizar esta opcin se debe tener cuidado para no borrar algo que no se deseaba suprimir. El comando es muy silencioso, est puede ser una operacin muy peligrosa. Para que no se vallan a eliminar archivos que no corresponden,es recomendable utilizar la opcin -i para que pregunte siempre.

3.1.9 Creacin de directorios.


Comando: mkdir (construir un directorio [make dir]) Definicin: Permite crear contenedores de archivos (directorios). Ya vimos que cuando existe un usuario en un sistema UNIX a este se le da un directorio de trabajo. Cada usuario es responsable del contenido de su directorio y en l puede crear tantos archivos y subdirectorios como necesite. El comando indicado para crear directorios es el mkdir. En el prximo ejemplo se ve el uso de este comando:
$mkdir programs textos $cd programs $mkdir c pascal $cd $ls l

Este proceso pudo hacerse tambin de la siguiente forma:


$mkdir programas textos programs/c programs/pascal $ls -l total 5 drwxr-xr-x 4 kyo ptc 64 Mar 18 15:35 programs drwxr-xr-x 2 kyo ptc 32 Mar 18 15:35 textos $

47

Manual de Unix

Si antes de crear el directorio programs se hubiera intentado crear los subdirectorios c y pascal, el sistema hubiera mandado un mensaje como este:
mkdir: cannot acces programs/ $

Debe tenerse cuidado al crearse directorios de estar en el directorio casa para evitar problemas con los permisos y confusiones.

3.1.10 Borrado de directorios.


Comando: rmdir (remove dir) Descripcin: Con este comando se logra el borrado de los directorios especificados. Para que un directorio pueda ser borrado con este comando es indispensable que est vac, si no la operacin no podr ejecutarse. Por ejemplo, si se quisiera borrar el directorio programs/c sucedera lo siguiente:
$pwd /users/ptc/kyo $rmdir programs/c rmdir: programs/c: Directory not empty $

Para lograr lo que se quera en las lneas anteriores se debe hacer lo siguiente:
$cd programs/c $rm * $cd .. $rmdir programs/c $ls pascal $

Si se quiere borrar un archivo que no existe, se mandar un mensaje que dice:


$rmdir uno rmdir: uno: Directory does not exist $

48

Manual de Unix

3.1.11 Copiado de archivos.


Comando: cp (copy) Descripcin: Crea una copia del archivo indicado. Utilice la orden cp para crear una copia exacta de un fichero de la siguiente forma:
$ ls LEEME dir1 $ cp nota nota.copia $ ls LEEME dir1 $

nota

nota

nota.copia

En este ejemplo, el primer argumento es el archivo existente y el segundo argumento el nuevo fichero a crear. Para los argumentos, se puede dar la ruta relativa o absoluta, como en este ejemplo:
$ cp nota /home/steve/nota.copia

Si el fichero o camino destino ya existe, la orden cp suprimir el fichero antiguo y crear luego la copis sin nunguna advertencia, por lo que debe tenerse cuidado de que el nombre de fichero destino sea correcto. Si el camino destino es un directorio existente en lugar de un nombre de archivo, la copia se coloca en ese directorio, manteniendo el mismo nombre que el archivo fuente del modo siguiente:
$ pwd /home/steve $ ls dir1 dir2 adios $ cp nota dir1 ls dir1 dir2 adios $

hola

hola

nota

La orden cp tambin acepta una lista de nombres de ficheros como fuente y copiar todos esos archivos al destino. Cuando se especifican mltiples nombres como fuente, debe darse un directorio y no un nombre de archivo como destino, o si no se producir un error; cp copiar todos los archivos designados como fuentes en el directorio destino, como en el siguiente ejemplo:

49

Manual de Unix

$ pwd /home/steve/dir1 $ ls dir2 abajo arriba $ cp hola adios dir2 ls dir2 Abajo adios $

hola

arriba

No se puede utilizar un directorio como nombre fuente. Si se desea copiar el contenido de un directorio a un nuevo directorio, debe designar cada uno de los ficheros que se desea copiar, ya sea explcitamente o con el metacaracter * , como en el ejemplo:
$ pwd /home/steve $ cp dir1/* . $

Para poder copiar un archivo completo se utiliza la R, por lo que el ejemplo anterior quedara:
$ pwd /home/steve $ cp R dir1 . $

Cuando se copia un archivo tambin se copian los permisos que tena, el de origen. El nombre de la copia puede ser el mismo que el original, si la copia no estar en el mismo directorio, de lo contrario se producir un error.

3.1.12 Cambiar un archivo de directorio y de nombre.


Comando: mv (move) Definicin: Cambia de nombre o de directorio a un archivo. Este comando puede cambiar de nombre a un archivo, igual que copy, con la diferencia de que el archivo fuente ser borrado. Tambin puede cambiar de directorio a un archivo con la opcin de conservar el nombre o de cambiarlo. En los siguientes ejemplos se muestra su uso:

50

Manual de Unix

$ls hola $mv hola mensaje $ls mensaje $

En las lneas anteriores se cambi el nombre del archivo hola por el de mensaje. Como se ve hola desapareci.
$ls mensaje textos $ mv mensaje ./textos/hola2 $ls textos hola hola2 mensaje $ls textos $

En la accin anterior se cambi de directorio y de nombre al archivo mensaje. Al igual que con el comando cp, la orden mv puede mover varios archivos a un mismo directorio en la misma lnea de comando. El proceso es anlogo a como se vi en cp. Es necesario decir sobre mv que si el nombre del archivo destino existe y tiene permisos de escritura, entonces ser borrado sin preguntar y su contenido anterior se perder. Si no, el sistema preguntar si se quiere seguir con el proceso..

3.1.13 Permisos de un archivo o directorio.


El sistema UNIX da una forma de permitir o restringir accesos a una archivo o directorio por parte de un usuario. Estos permisos slo pueden ser dados por el creador del archivo o por el administrador del sistema. Para ver los permisos que tiene un archivo se utiliza el comando ls -l, como ya se vi antes. Los permisos de un archivo son de tres tipos y se les pueden otorgar a tres clases distintas de usuarios. Los tipos de permisos son de lectura, de escritura y de ejecucin. Los permisos se pueden otorgar al usuario (quien cre el archivo), al grupo (usuarios con el mismo directorio padre del propio) y a otros (usuarios de otros grupos).

51

Manual de Unix

El permiso de lectura se refiere a que un usuario tiene acceso al archivo para ver su contenido. El de escritura sirve para poder modificar un archivo. El de ejecucin es para que se pueda usar el archivo como comando del sistema. Para un directorio los significados son ligeramente diferentes: acceso de lectura significa que el sujeto tiene permitido examinar el contenido del directorio. El acceso de escritura significa que el usuario puede crear un archivo en el directorio y acceso de ejecucin que el usuario puede atravesar el directorio en su bsqueda de subdirectorios.

permiso de lectura

permiso de escritura

permiso de ejecucin

- r w x

r w x

r w x

permisos para el usuario Permisos para el grupo

permisos para otros

Si un archivo carece de algn permiso, esto se nota al listarlo con la opcin -l. Si en lugar de la letra que indica el permiso aparece un -, esto significa que ese permiso est restringido para el bloque en el que aparezca (para el usuario, para el grupo o para otros). El sistema Unix proporciona varias rdenes para manipular la propiedad y los permisos de los ficheros y directorios. Los permisos de un archivo o un directorio slo pueden ser modificados por su creador. Para cambiar permisos a un archivo o directorio, y la propiedad, se tienen los siguientes comandos:

3.1.13.1 Cambio de permisos.


Comando: chmod (cambiar modo) Descripcin: Sirve para modificar los permisos de un archivo o directorio. Se puede modificar los permisos de un fichero de su propiedad utilizando el comando chmod. Se sabe que un archivo tiene tres grupos de permisos de usuario, de grupo, y otros. Estos son conocidos como u, g y o, respectivamente. Cada una de estas tres categoras de usuario

52

Manual de Unix

pueden tener acceso de lectura, escritura, o ejecucin de un archivo, los cuales se representan por r, w y x, respectivamente. Puede utilizarse esta abreviatura para crear varias rdenes chmod, como los siguientes:
$ ls l nota -rw-rw-rw- 1 $ chmod w nota $ ls l nota -r--r--r-- 1 $ chmod +w nota $ ls l nota -rw-rw-rw- 1 $ chmod w nota $ steve other 227 Apr 5 19:33 nota

steve

other

227 Apr 5 19:33

nota

steve

other

227 Apr 5 19:33

nota

El primer ejemplo especifica chmod con el argumento opcin w, el cual le dice que suprima los permisos de escritura del archivo. El segundo ejemplo restaura los permisos de escritura del archivo. El uso de + como opcin es una excepcin al uso normal de -, pero el significado es: se utiliza - para suprimir un permiso, y + para aadirlo. Se puede cambiar ms de uno de los tres permisos en la misma orden del modo siguiente:
$ chmod w+x nota $ ls l nota -r-xr-xr-x 1 steve $ chmod wx nota $ ls l nota -r--r--r-- 1 steve $

other

227 Apr 5 19:33

nota

other

227 Apr 5 19:33

nota

En todos los ejemplos, chmod modifica los permisos de las tres clases de usuarios. Tambin se pueden efectuar cambios para cualquier clase individual mente aadiendo una letra delante del - o +, como en el siguiente ejemplo:
$ ls l nota -rw-rw-rw- 1 steve $ chmod uw nota $ ls l nota -r--rw-rw- 1 steve $ chmod go+wx nota $ ls l nota -r--rwxrwx 1 steve $

other

227 Apr 5 19:33

nota

other

227 Apr 5 19:33

nota

other

227 Apr 5 19:33

nota

53

Manual de Unix

La sintaxis de chmod es clase de usuario (u, g, o), seguido de accin a tomar (- o +), seguido de permiso a modificar (r, w, x). La lista de nombres de ficheros o directorios afectados sigue al final de la lnea de comandos. Para hacer cambio de todos los permisos en los tres diferentes usuarios se asignar varias rdenes de cambio a un archivo o archivos, para esto se tienen que separar por una coma los permisos, como en los siguientes ejemplos:
$chmod a=r,u+w,u+x programs textos $ls -ld programs textos drwxr--r-- 4 kyo ptc 64 Mar 18 15:35 programs drwxr--r-- 2 kyo ptc 80 Mar 18 18:46 textos $

Otra forma de hacer lo anterior hubiese sido tecleando estas lneas:


$chmod go=r,u+rwx programs textos $ls -ld programs textos drwxr--r-- 4 kyo ptc 64 Mar 18 15:35 programs drwxr--r-- 2 kyo ptc 80 Mar 18 18:46 textos $

Adems, chmod puede establecer permisos s y t, utilizados por algunos progrmas ejecutables para modificar sus entornos de ejecucin, no son utilizados por los usuarios individuales. Este comando tambin acepta el cambio de permisos empleando un nmero octal. Un modo fcil de manejar los permisos en forma octal es ayudndose con el siguiente esquema:

r w x
400 200 100

r w x
20 40 10

r w x
4 2 1

As, si se desea dar permiso de slo lectura, a los tres bloques se suman los valores de dichos permisos: 400+40+4=444

54

Manual de Unix

Por lo que el comando para cambiar a esos permisos al archivo, ser:


$ ls l nota -rw-rw-rw- 1 $ chmod 444 * $ ls l nota -r--r--r-- 1 $ steve other 227 Apr 5 19:33 nota

steve

other

227 Apr 5 19:33

nota

Slo se hace un ls l al archivo nota, pero todos los archivos tienen los mismos permisos. Si se le quisiera cambiar los permisos a un archivo a lectura, escritura y ejecucin a un usuario, lectura al grupo y lectura a otros se sumaran 744 y se tecleara:
$ ls l nota -rw-rw-rw- 1 $ chmod 744 nota $ ls l nota -rwxr--r-- 1 $

steve

other

227 Apr 5 19:33

nota

steve

other

227 Apr 5 19:33

nota

3.1.13.2 Permisos iniciales.


EL sistema UNIX proporciona automticamente al creador de un archivo la propiedad del mismo, y asigna al archivo el grupo de su creador. Aunque esto no puede ser modificado, se puede declarar una variable del sistema asociado con el id de presentacin que establecer los permisos de un archivo sin accin explicita por parte del usuario. Esta variable del sistema se denomina umask (mascara de usuario). Comando: umask (user mask) Descripcin: Sirve para cambiar los permiso iniciales de un archivo o directorio. Si se deseara ver los permisos iniciales actuales slo se teclearia umask, sin argumentos:
$umask 000 $

El resultado son tres dgitos octales que se refieren a los permisos del propietario, el grupo y los otros, de izquierda a derecha. A este nmero se le denomina mscara ya que cada dgito se resta de un permiso implcito global del sistema que todos los nuevos archivos obtienen. Como los tres dgitos con cero, esto significa que los archivos al crearse tienen permisos rw-rw-rw (666) y que los directorios tendrn rwxrwxrwx (777).

55

Manual de Unix

Cada dgito octal de la umask contiene un bit binario que borra un permiso: un 1 borrar el permiso de ejecucin, un 2 borrar el permiso de escritura y un 4 borrar el permiso de lectura. Si se quisiera cambiar los permisos iniciales a permisos de lectura y escritura para el usuario y slo de lectura para los dems (644) tendra que hacer primero: 666 -644 022 permisos actuales permisos requeridos modo final

y despus teclear el comando:


$umask 022 $

Con esto los nuevos archivos a crear adquirirn permisos rw-r--r-- (644) y los nuevos directorios rwxr-xr-x (755). Para declarar la umask se utiliza la orden umask con el cdigo octal como argumento. La nueva mscara creada en una sesin ser substituida por la que el sistema maneja por defecto al apagar la mquina, as que si se quiere tener la mscara deseada cada vez que se entre al sistema, se deber modificar el perfil de sesin.

3.1.14. Cambio de dueo de archivos y directorios.


Se puede ceder la propiedad de un fichero con la orden chown (por cambiar de propietario), suponiendo que el fichero fuese del usuario. He aqu un ejemplo:
$ ls l nota -rw-rw-rw 1 $ chown nota jim $ ls l nota -rw-rw-rw 1

steven

other

227

Apr 5 19:33

nota

jim

other

227

Apr 5 19:33

nota

La orden chown acepta un nombre de archivo o una lista de nombres de archivos como argumentos, junto con el id de presentacin del usuario al que se desea ceder el o los ficheros. El usuario destino es siempre el ltimo argumento. El usuario a quien se cede el fichero debe ser un id de presentacin legal para alguien en el sistema. Recuerde que una vez que haya cedido el fichero no puede utilizar chown para recuperarlo!

56

Manual de Unix

3.1.14. Cambio de grupo de archivos y directorios.


Analgicamente con chown, puede utilizar la orden chgrp para cambar el grupo al que pertenece un fichero, suponiendo que usted sea el propietario del fichero y miembro del grupo al que pertenece. Pro ejemplo:
$ ls l nota -rw-rw-rw 1 $ chgrp nota bin $ ls l nota -rw-rw-rw 1

steven

other

227

Apr 5 19:33

nota

steven

bin

227

Apr 5 19:33

nota

Una vez ms, cuando usted haya cedido el fichero a alguien, ya no le pertenecer, por lo que no puede recuperarlo.

3.1.15 Encontrar archivos.


Comando: find. Descripcin: Localiza archivos desde un directorio o directorios especificados y hacia abajo. Esta poderosa herramienta del sistema permite escudriar en cada directorio especificado excepto en los que no se tiene permiso de lectura.

3.1.15.1 Opciones de find.


El comando find es una de las ms potentes entre todos los otros comandos, tambin tiene una de las estructuras de lnea de comandos ms difcilies. El comando find desciende a lo largo de una jerarqua de directorios localizando todos los ficheros que satisfacen criterios especiales sobre los ficheros que en cuentre. Su lnea de comando es bsicamente:
$ find lista-de-caminos expresiones

donde lista de caminos, es la lista de directorios a buscar. La lista puede incluir uno o ms directorios, con rutas relativas o absolutas. Las expresiones son los operadores que describen los criterios de seleccin para los ficheros que se desea localizar y la accin que se desea que find efecte cuando un fichero cumpla los criterios de seleccin. Este comando tiene las siguientes banderas:

57

Manual de Unix

Opcin: -name. Descripcin: Esta opcin es la que permite dar el nombre del archivo que se desea encontrar. Con esta bandera slo los archivos que posean el nombre del archivo buscado se encontrarn. Por ejemplo:
$ find / -name *profile print /etc/profile $

Opcin: -print. Descripcin: Se utiliza esta opcin para indicarle al comando que imprima en pantalla la ruta completa del resultado de la bsqueda. Si no se usa esta opcin, el sistema no dir si se encontr el archivo. Por ejemplo, si se est buscando un archivo que se llama eqnchar pero no se sabe en que subdirectorio est se podra escribir lo siguiente para conocer su ruta de acceso:
$find / -name eqnchar -print ... /usr/pub/eqnchar ... $

En este ejemplo la bsqueda comienza desde la raz y de ah a todos los subdirectorios. Si se quisiera encontrar los archivos que tuvieran por ejemplo, la cadena tex al principio de su nombre, en el directorio de casa y en el directorio del grupo se tecleara:
$ find . .. -name tex* print

Opcin: -perm Descripcin: Le indica al comando que busque los archivos que tienen el patrn de permisos establecidos en notacin octal.
El siguiente ejemplo muestra el uso de esta opcin: $ find . -perm 700 print | pg ...

58

Manual de Unix

Opcin: -type. Definicin: Encuentra los archivos por tipo, ya sean directorios, archivos, etc. Por ejemplo, para encontrar a los que son directorios se teclea:
$ find . -type d print

Opcin: -user. Descripcin: Esta opcin le indica al comando que restrinja la bsqueda a slo los archivos que pertenecen al usuario especificado:
$ find . -type f -user nancy print

Opcin: -group. Descripcin: Esta opcin le indica al comando que restrinja la bsqueda a slo los archivos que pertenecen al grupo especificado:
$ find . -type f group ptc -print

Opcin: -size. Descripcin: Encuentra a los archivos con la longitud especificada en bytes. Si se coloca size n se seleccionan los archivos de exactamente n bloques de tamao, con n se seleccionan archivos menores de n bloques, con +n archivos mayores a n bloques. Opcin: -atime. Descripcin: Encuentra a los archivos que no han sido accesados desde el plazo indicado, en das. Opcin: -mtime. Descripcin: El comando mtime n selecciona los ficheros modificados hace n das. La expresin mtime n selecciona los archovos modificado dentro de los ltimos n das y mtime +n selecciona los ficheros modificados hace ms de n das.encuentra a los archivos que hayan sido modificados en el plazo elegido, tambin en das. Si se coloca

59

Manual de Unix

Estas son slo algunas opciones de las que el comando find tiene, sin embargo, aqu slo se sealan las ms comunes. Tambin se pueden negar las banderas, si el nombre del comando viene precedido de un ! y un espacio, el operador se convertir en falso cuando normalmente seria cierto, y viceversa. Por ejemplo
$ find / ! print

Se niega la impresin de la lista. El carcter ! debe ir entre espacios en blanco en lnea de orden y slo niega la bandera que va inmediatamente a continuacin.

60

Manual de Unix

3.2 MANEJO DE TEXTO


Una muy buena parte del trabajo con una computadora tiene que ver con el manejo de archivos de texto. Hay muchas utilidades en UNIX para la manipulacin de textos, en esta parte se trabajar en algunos comandos que sirven para ello.

3.2.1 Ordenamiento de archivos de texto.


Comando: sort Descripcin: Es un comando que permite el ordenamiento de archivos de texto en forma alfabtica o numrica. Por omisin utilizar la secuencia de cortejo ASCII para determinar el orden de clasificasin, empezando de la lnea.

3.2.1.1 Ordenamiento por criterio alfabtico.


Para ver el uso de este comando crearemos un archivo con nombres de personas y un nmero al final para identificarlas.
$cat > nombrescch Juan Vite 101 Alicia Camacho 120 Alfredo Arevalo 000 Carolina Medina 110 Lilia Meza 111 Adolfo Franco 099 Lourdes Munguia 200 Carlos Gallardo 100 Araceli Vazquez 088 Joel Martinez 001 ^D $

Ahora veamos el uso de sort sobre ese archivo:

61

Manual de Unix

$ sort nombrescch Adolfo Franco 099 Alfredo Arevalo 000 Alicia Camacho 120 Araceli Vazquez 088 Carlos Gallardo 100 Carolina Medina 110 Joel Martinez 001 Juan Vite 101 Lilia Meza 111 Lourdes Munguia 200 $

Por default, se listan los registros (lneas) de un archivo con sort en orden alfabtico con respecto al primer campo. Un campo, en UNIX es un conjunto de caracteres separados por otro caracter especificado, as como un registro es un conjunto de campos separados por un return (de ah que tambin se les llame lneas). Por default, el separador de campos en sort es el caracter blanco (espacio). Como se vio en el ejemplo anterior, se listaron las lneas del archivo en orden alfabtico respecto al nombre (primer campo). Sin embargo, lo ms adecuado al listar nombres es ordenar alfabticamente por apellidos, veamos como se puede hacer esto con sort:
$ sort +1 nombrescch Alfredo Arevalo 000 Alicia Camacho 120 Adolfo Franco 099 Carlos Gallardo 100 Joel Martinez 001 Carolina Medina 110 Lilia Meza 111 Lourdes Munguia 200 Araceli Vazquez 088 Juan Vite 101 $

Esto quiere decir que sort debe saltarse un campo para poder ordenar. Es decir, debe empezar en el segundo campo. Con la opcin f permite ignorar la diferencia entre maysculas y minsculas en la comparacin de clasificacin. Analgicamente, la opcin d suprime la clasificacin sobre puntuacin u otros caracteres especiales. La opcin M hace que sort considere los tres primeros caracteres de la lnea como meses, de mos que enero ir antes de febrero.

62

Manual de Unix

3.2.1.2. Ordenamiento por criterio numrico.


Opcin : -n (number) Descripcin: Esta opcin le indica a sort que el criterio de ordenamiento ser numrico. Si quisiramos ordenar numricamente al archivo, debemos teclear:
$ sort +2n nombrescch Alfredo Arevalo 000 Joel Martinez 001 Araceli Vazquez 088 Adolfo Franco 099 Carlos Gallardo 100 Juan Vite 101 Carolina Medina 110 Lilia Meza 111 Alicia Camacho 120 Lourdes Munguia 200 $

3.2.1.3 Ordenamiento inverso.


Opcin: -r (reverse) Descripcin: Invierta el ordenamiento normal del comando sort. El ordenamiento, tanto alfabtica como numricamente, es, por default, ascendente, si se quisiera invertir este proceso, se tendra que usar la opcin -r:
$ sort +2n -r nombrescch Lourdes Munguia 200 Alicia Camacho 120 Lilia Meza 111 Carolina Medina 110 Juan Vite 101 Carlos Gallardo 100 Adolfo Franco 099 Araceli Vazquez 088g Joel Martinez 001 Alfredo Arevalo 000 $

63

Manual de Unix

3.2.1.4 Mezcla de archivos ordenados.


El uso del comando sort no se limita a un slo archivo a la vez, puede actuar sobre varios al mismo tiempo. Por ejemplo, suponga que se tiene otro archivo llamado nombresfi, y que se desea combinar estos dos archivos pero ordenadamente de acuerdo a sus nmeros de identificacin (tercer campo) y guardar el resultado en otro archivo llamado todos, entonces se tendra que teclear:
$ sort +2nr +1 nombres*>todos $

El +1 le indica a sort que si en el tercer campo hay nmeros iguales, entonces el segundo criterio de ordenamiento es el alfabtico ascendente, por apellidos, en este caso. Opcin : -m Descripcin: Mezcla archivos ya ordenados. Si se tienen archivos ya ordenados, entonces para mezclarlos y ordenarlos con sort se usa esta opcin que lo nico que hace es ahorrarle trabajo al comando.
$sort nombrescch>nombres1 $sort nombresfi>nombres2 $sort -m nombres1 nombres2>nombres $

3.2.1.5 Supresin de lneas duplicadas.


Opcin: -u Descripcin: Elimina la repeticin de lneas en una combinacin de archivos. Por ejemplo, si listamos el resultado del ejemplo anterior obtendremos:
$cat nombres ... Carolina Medina Joel Martinez Joel Martinez Jose Mendieta ... $

110 001 001 099

64

Manual de Unix

Se puede ver como algunas lneas que eran iguales en los dos archivos, se repiten en el que se gener cuando se combinaron. Para poder evitar esto se puede usar la opcin -u, obtenindose el siguiente resultado:
$sort -u nombresfi nombrescch ... Carlos Gallardo 100 Carolina Medina 110 Joel Martinez 001 Jose Mendieta 099 . $

3.2.1.6 Separador de campo.


Opcin: -t Descripcin: Indica el caracter separador de campo para ordenar un archivo. Como ya se dijo, el separador de campo por default es el espacio, sin embargo, a sort se le puede indicar qu carcter debe tomar como separador, si as se desea, y para esto se usa la opcin -t. El siguiente ejemplo muestra el uso de esta opcin:
$sort +5t: /etc/passwd ... pegaso:x:908:103:zamora gonzalez rogaciano:/users/alum/pegaso:/bin/ksh victor1:x:1308:103:zamora guerrero victor:/users/alum/victor1:/bin/csh itzany:x:673:103:zavala gomez sandra ines:/users/alum/itzany:/bin/ksh clauza:x:1019:103:zavala rosado claudia:/users/alum/clauza:/bin/ksh tonozs:x:404:104:zepeda sanchez antonio:/users/profes/tonozs:/bin/ksh $

Esta orden le pide al sistema que ordene alfabticamente el archivo /etc/passwd tomando en cuenta el 5to. campo, que es el que contiene los nombres reales de los usuarios del sistema, como criterio de ordenacin y teniendo como separador de campo el caracter :.

3.2.2 Contador wc.


Comando: wc (word counter). Descripcin: Sirve para el nmero de lneas, palabras y caracteres de un archivo de texto.

65

Manual de Unix

En el siguiente ejemplo se muestra el uso del comando:


$wc nombres 11 30 $

211 nombres

El primer nmero del resultado indica el nmero de lneas del archivo, el segundo nmero es la cantidad de palabras que contiene y el tercero son los caracteres contados en l. En la ltima columna se puede ver el nombre del archivo .

3.2.2.1 Opciones
Opcin: -c (character) Descripcin: Cuenta solamente el nmero de caracteres de un archivo. Opcin: -w (word) Descripcin: Cuenta nada ms el nmero de palabras de un archivo. Opcin: -l (lines) Descripcin: Cuenta slo el nmero de lneas que hay en un archivo. Usar cualquier combinacin de las opciones hace que los nmeros aparezcan en el orden en que fueron escritas, por ejemplo si se teclea:
$ wc -cwl nombres 211 30 $

11 nombres

Se consiguen los mismos nmeros que si se tecleara slo el comando, pero la diferencia es que el orden en que aparecen es el orden en que se escribieron las opciones. Si se quisiera conocer las estadsticas de varios archivos a la vez se podra obtener de una forma similar a la siguiente:

66

Manual de Unix

$ wc

nom* todos 11 30 211 11 30 211 11 33 275 22 63 486 55 156 1183

nombres nombrescch nombresfi todos total

La ltima lnea del resultado indica la suma de las estadsticas de los cuatro archivos.

3.2.3 Localizacin de patrones de texto en un archivo.


Comando: grep Descripcin: Encuentra la cadena especificada e imprime las lneas en donde se encontr la ocurrencia. Est es un filto que permite buscar cadenas en archivos, utilizando expresiones regulares para especificar la cadena coincidente. Est comando lee de la entrada estndar o de una lista de archivos especificados como argumentos y escribe en la salida estndar aquellas lneas que contegan la cadena coincidente. El primer argumento para el comando grep es el padn a buscar. La forma de emplear este comando es: Algunas veces el proceso de bsqueda puede tardar demasiado, as que algo que se puede hacer es aprovechar la caracterstica de UNIX de ser un sistema multitarea y ejecutar dicho proceso en background, es decir realizarlo como un trabajo asncrono. Una lnea de comandos se puede ejecutar en background si al final de ella se le agrega un smbolo & (ampersand), por ejemplo:
$ grep un-patron archivos

La cadena de bsqueda un-patron puede ser cualquier expresin regular. En su forma ms sencilla, la expresin regular puede ser una simple secuencia de caracteres, como por ejemplo: Algunas veces el proceso de bsqueda puede tardar demasiado, as que algo que se puede hacer es aprovechar la caracterstica de UNIX de ser un sistema multitarea y ejecutar dicho proceso en background, es decir realizarlo como un trabajo asncrono. Una lnea de comandos se puede ejecutar en background si al final de ella se le agrega un smbolo & (ampersand), por ejemplo:$ grep mundo fich.Viejo

67

Manual de Unix

hola mundo $

Cada lnea que contenga el patrn va a ser la salida de grep. En la bsqueda de estas ocurrencias se distinguen dos tipos, la bsqueda de cadenas fijas y la de expresiones regulares.

3.2.3.1 Bsqueda de cadenas de caracteres fijas.


Comando: grep (global regular expression printer). Descripcin: Encuentra en un archivo de texto las cadenas que se le especifiquen e imprime en pantalla la lnea donde se encuentra tal expresin. El patrn ms simple para grep es una cadena fija. Por ejemplo, si se deseara saber el nombre real del usuario que tiene como login kyo, simplemente se buscara en el archivo /etc/passwd
$ grep kyo /etc/passwd
kyo:x:1271:100:martinez alvarado joel:/users/ptc/kyo:/bin/ksh

Como se puede ver, el resultado del comando, es la lnea completa donde se encuentra el patron kyo, y el nombre real es el que est en el 5to. campo. Si quisiramos verificar la existencia de una cadena en varios archivos lo haramos de la siguiente manera:
$ grep Joel nom* todos nombres:Joel Martinez nombrescch:Joel Martinez nombresfi:Joel Martinez todos:Joel Martinez $

001 001 001 001

Al inicio de la lnea donde se encuentra la cadena pedida se da el nombre del archivo donde se encontr.

68

Manual de Unix

Si se desear buscar una cadena compuesta por ms de una palabra, entonces se debe encerrar entre comillas, ya que si no se hace esto, el comando buscar la primera palabra que se teclee despus de grep en los nombres de archivos que son las siguientes palabras tecleadas despus de la primera:
$grep "Lilia Meza" nom* todos nombres:Lilia Meza 111 nombrescch:Lilia Meza 111 todos:Lilia Meza 111 $

3.2.3.1.1 Opciones
Opcin: -v Descripcin: Imprime en pantalla todas las lneas donde no se encuentra la cadena:
$grep -v Veronica nombresfi Norma Ochoa 119 Manuel Camacho 110 Jose Mendieta 099 Victor Izquierdo 088 Susana Amaro 120 Nancy Pacheco 111 Minerva Jimenez 110 Ana Solorzano 000 Josue Mendoza 101 Joel Martinez 001 $

Opcin: -c Descripcin: Da como salida el nmero de lneas donde se encontr la cadena especificada.
$ grep -c Joel todos 2 $

Opcin: -n Descripcin: Antepone al resultado de la bsqueda el nmero que ocupa la lnea en el texto.

69

Manual de Unix

$ grep -n Joel todos 18:Joel Martinez 001 19:Joel Martinez 001 $

Opcin: -i Descripcin: No distingue entre maysculas ni minsculas en la bsqueda de una cadena.


$grep -i lilia nom* todos nombres:Lilia Meza 111 nombrescch:Lilia Meza 111 todos:Lilia Meza 111 $

3.2.3.2 Bsqueda de expresiones regulares.


Una expresin regular es una especie de plantilla que contiene las caractersticas de un conjunto de ocurrencias que son similares. As pues podemos buscar todas las palabras de cuatro letras que comiencen con d, todas las palabras con una misma terminacin, etc. Algunos elementos que sirven para la construccin de estas plantillas son los llamados metacaracteres, los cuales funcionan como comodines en una expresin.

3.2.3.2.1 Expresiones al principio y al final de una lnea.


Los metacaracteres que sirven para buscar la lnea donde se encuentra una ocurrencia al principio o al final de sta son el ^ y el $, respectivamente. Por ejemplo:
$grep -i ^a todos Alicia Camacho 120 Adolfo Franco 099 Araceli Vazquez 088 Alfredo Arevalo 000 Ana Solorzano 000 $

encuentra a todas las lneas del archivo todos que empiecen con la letra a o A. Y si se teclea:

70

Manual de Unix

$grep 099$ todos Adolfo Franco 099 Jose Mendieta 099 $

grep encuentra todas las lneas que terminen con la cadena 099.

3.2.3.2.2 Correspondencia de cualquier carcter con .


El punto es el metacarcter que corresponde a cualquier carcter. Por ejemplo:
$grep -i ^j... todos Josue Mendoza 101 Juan Vite 101 Jose Mendieta 099 Joel Martinez 001 $

Encuentra todas las lneas que comienzan con una cadena de cuatro caracteres que empiezan con j o J .Si se quisiera encontrar a todas las lneas que terminan con un punto entonces se debe usar el carcter de escape \ para quitarle el significado especial al punto.

3.2.3.2.3 Buscar entre un rango de caracteres.


Cuando se encierran varios caracteres entre corchetes grep busca una cadena que contenga uno de ellos o un rango de esos caracteres. Para especificar, por ejemplo, que se desea encontrar una lnea que comience con cualquier caracter a,b,c,x,y,z se tecleara, por ejemplo:
$grep ^[abcxyz] /etc/passwd o $grep ^[a-cx-z] /etc/passwd

En este ejemplo el caracter ^ va fuera de los corchetes con lo que se le indica al comando que se encuentren todos las lneas que comiencen con ese patrn. Si se hubiera puesto dentro de los corchetes:
$grep [^a-cx-z] /etc/passwd

71

Manual de Unix

El proceso de bsqueda hubiera encontrado todas las lneas que no comenzaran con ese patrn.

3.2.3.2.4 Correspondencia de cualquier cadena.


El metacarcter * indica a grep que busque cualquier cadena en la que se repita el carcter que le anteceda una o ms veces, inclusive los espacios. Por ejemplo:
$grep ^k.*die /etc/passwd karo:x:397:105::/users/die/karo:/bin/ksh $

Le indica al comando que encuentre las lneas que comiencen con k y que les siga cualquier cantidad de caracteres hasta encontrar die.

3.2.4 Bsqueda rpida de cadenas fijas.


Comando: fgrep (fast grep) Descripcin: Localiza slo cadenas fijas dentro de un archivo. Este comando slo maneja cadenas fijas como patrones de texto, no puede aceptar comodines, por esta razn, si se desea buscar una cadena fija se debe usar esta orden para hacer ms rpido el proceso.
$fgrep Ana todos Ana Solorzano $

000

En fgrep tambin se pueden usar algunas opciones de las mencionadas para grep, estas son las que sirven para encontrar cadenas fijas, por ejemplo v, o c.

72

Manual de Unix

3.2.5 Bsqueda de expresiones regulares completas.


Comando: egrep (extended grep). Descripcin: Encuentra expresiones regulares ms completas en un archivo. Este comando es una extensin ms completa del comando grep bsico. Est permite un conjunto ms rico de operadores en expresiones regulares que grep. Aunque ms lenteo que grep, est optimizado para bsquedas ms complejas. En la mayora de las situaciones, el grep original resulta der un buen compromiso entre estas posibilidades. Est comando dispone de algunos operadores adicionales de expresiones regulares que se diferencian ligeramente de los operadores grep. Adems el operador *, utilizado para designar cero o ms osurrencias de un patrn de un solo carcter, egrep preporciona el operador +, que denota una o ms ocurrencias del carcter. Por ejemplo, en grep se escribira:
[0-9][0-9]*

para cualquier secuencia de dgitos de cualquier longitud. Esto funciona con egrep, pero tambin se podra escribir:
[0-9]*

para indicar lo mismo. Analgicamente, el operador ? denota cero o una ocurrencia del patrn. Por ejemplo:
^[0-9]?a|b

se corresponder con una lnea que comience por un digito opcional y luego contenga una a o una b. En egrep el operador | denota cualquiera de un par de expresiones regulares. Por ejemplo:
^a|b

se corresponder con una lnea que comience con el carcter a o con el carcter b. La orden egrep tambi permite un operador parntesis para agrupar expresiones regulares multicarcter. El comando:
$ egrep ([0-9]+ab)*1234 .fichero

73

Manual de Unix

encontrar las cadenas que comiencen con una secuencia de uno o ms dgitos, seguidos de ab, seguidos de una secuencia de uno o ms dgitos, seguido de ab, y as sucesivamente para cualquier nmero de estos patrones, hasta que aparezca la cadena 1234. En egrep se puede utilizar la opcin de lnea de comando f nombre.fichero, que acepta la expresin regular desde el fichero especificado tras la opcin f en lugar de desde la lnea de comandos.

3.2.6 Corte de campos en un archivo.


Comando: cut (cortar). Descripcin: Toma los campos o columnas mostrndolos en pantalla. indicados y los separa del resto del archivo,

Est comando es utilizado con frecuencia como filtro. Est slo copia ciertas partes de cada lnea de la entrada estndar a la salida. Est comando tiene dos maneras de cortar, una es indicando por ejemplo, que se quiere un rango de ellos, y la otra es especificando cules, aunque no sean contiguos. Para trabajar con los archivos se recurre a las siguientes banderas:

3.2.6.1 Opciones de cut


Opcin: -c (column). Descripcin: Le indica al comando que lo que se va a cortar sern columnas. Por ejemplo, la siguiente lnea:
$ cut -c 18-20 nombrescch 101 120 000 110 111 ... $

Le pide al comando que corte las columnas 18,19 y 20 del archivo nombrescch que son las que contienen el nmero de identificacin de los nombres. Esta tarea se hubiera realizado tambin con la instruccin:

74

Manual de Unix

$cut -c 18,19,20 nombrescch

Opcin: -f (field). Descripcin: Le indica a cut que lo que se va a cotar ser un campo. Opcin: -d Descripcin: Esta opcin indica cul es el carcter a tomar como delimitador de campo. El sistema UNIX utiliza varios caracteres delimitadores de campo en diferentes situaciones. Tres caracteres que se utilizan comnmente como delimitadores son el tabulador, el espacio y los dos puntos. Por default, el delimitador de campo en cut es el tabulador. Si quisiramos tomar slo los apellidos, los identificadores o nombres del archivo nombrescch y guardarlos en otros diferentes, podramos hacerlo tecleando:
$cut -f2 -d nombrescch > apellcch $cut -f1 -d nombrescch > npilacch $cut -c 18-20 nombrescch > cch_id

De esta forma los diferentes campos del archivo nombrescch quedan guardados en otros archivos. Veamos que fue lo que se obtuvo al teclear la primera lnea:
$cat apellcch Vite Camacho Arevalo Medina Meza Franco Munguia Gallardo Vazquez Martinez $

Podemos ver que en la ltima lnea de comando no se indic cortar por campo, ya que del apellido al nmero de identificacin hay variables nmeros de espacios.

75

Manual de Unix

3.2.7 Empalme de lneas.


Comando: paste Descripcin: Toma la entrada de varios ficheros y combina sus entradas para formar una lnea de salida.

3.2.7.1 Opciones.
Opcin: -d Descripcin: Indica cul ser el caracter para separar los campos de entrada en la salida. Por ejemplo si quisieramos, reconstruir el archivo de nombrescch a partir de npilacch, apellcch y cch_id podramos hacerlo tecleando:
$ paste npilacch apellcch cch_id Juan Vite 101 Alicia Camacho 120 Alfredo Arevalo 000 Carolina Medina 110 Lilia Meza 111 Adolfo Franco 099 Lourdes Munguia 200 Carlos Gallardo 100 Araceli Vazquez 088 Joel Martinez 001 $

Como se puede ver, la reconstruccin no fue del todo bien hecha, orden los campos como se deseaba pero no con la misma separacin. Veamos como podemos ayudarnos para mejorar esta presentacin:
$ paste -d",\t" Vite,Juan Camacho,Alicia Arevalo,Alfredo Medina,Carolina Meza,Lilia Franco,Adolfo Munguia,Lourdes Gallardo,Carlos Vazquez,Araceli Martinez,Joel $ apellcch npilacch cch_id 101 120 000 110 111 099 200 100 088 001

Al indicar el separador de los campos (en este caso fueron dos), se le indica a paste que entre el primer y el segundo campos habr una coma, y que entre el segundo y el tercero se colocar un tabulador. En este comando el default de separador de campo es el tabulador.

76

Manual de Unix

3.3 COMANDO SOBRE LA GESTION DE PROCESOS


El archivo de control utilizado por cron es coincido como crontab (por tabla cron). Originalmente era un nico archivo con el nombre de camino /etc/crontab. Slo el sper usuario tenia permitido la modificacin de este archivo, y por tanto el cambio de la planificacin del sistema. Algunas versiones ms antiguas utilizan todava esta ubicacin de archivo. Las versiones ms recientes del sistema UNIX proporcionan una facilidad, crontab ampliada dentro del directorio /var/spool/cron/crontabs, como se muestra aqu
$ ls f /var/spool/cron/crontabs adm root sys $

Cada usuario que haya especificado algunos trabajos para planificar por la facilidad cron tendr un fichero en este directorio con el nombre del id de presentacin del usuario que cre el fichero. Se utiliza para manipular las instrucciones del demonio tab (tareas programadas). Sirve para programar una tarea a una hora determinada.
$ crontab l $ crontab u $ crontab e ( muestra lista de las tareas programadas). ( muestra las tareas programadas de otros usuarios). ( edita el crontab del usuario).

El formato de crontab es:


0-59 min 0-23 hora 1-12 mes 1-31 da 0-6 comando da/semana

Los usuarios individuales pueden crear trabajos planificados con la orden crontab. La orden crontab est diseada para ayudar a la creacin y modificacin de archivos crontab individuales. Para crear una nueva planificacin crontab, se crea un fichero crontab con un editor, se copia un fichero crontab existente a un nuevo fichero para editarlo. Cuando el fichero est correcto, puede ser aadido al directorio crontab con la orden
$crontab nombrearchivo $

77

Manual de Unix

donde nombrearchivo es el nuevo archivo que se ha creado. La planificacin se crea bajo el id del usuario que ejecuta la orden, por lo que diferentes usuarios pueden tener sus propias planificaciones sin que interfieran unas con otras. Solamente se permite un archivo crontab por cada usuario. La orden crontab tambin puede leer la entrada estndar para la planificacin, por lo cual se permite redireccin. Sin embargo, si se introduce la orden crontab sin nombre de fichero y sin fichero redirigido para entrada, hay que tener cuidado de terminar con la tecla DEL en vez de con CTRL-D, ya que la marca fin-de-fichero har que crontab carge un fichero vacio en la panificacin, lo cual probablemente no es lo que se pretende. La orden crontab suprimir una planificacin si se le da la orden r (por retirar) del modo siguiente:
$ crontab r $

78

Manual de Unix

3.4 FILTROS.
Los comandos ms potentes del sistema son los llamados filtros. Se les llama filtros porque segn va pasando la informacin de entrada en uno de estos comandos sta sufre una serie de selecciones y manejos hasta que se da como salida slo aquella que supera a todas las transformaciones de los comandos. Todo este proceso se lleva a cabo sin modificar la entrada original de informacin.

archivo original

filtro

contenido del archivo con ciertas caractersticas

3.4.1 Interconexin de comandos.


Otra caracterstica de mucha utilidad del sistema UNIX es el uso de salidas de comandos como entradas para otros, esto no slo se puede hacer con el direccionamiento ya visto antes, sino tambin con el entubamiento. Se conoce en UNIX como entubamiento a la interconexin entre comandos para pasar la salida de uno de ellos como la entrada de otro. Con esta caracterstica se pueden hacer filtros mucho ms poderosos que los ya vistos.

entrada filtro

salida filtro

entrada

salida salida

Demos un ejemplo de lo fcil que puede ser el manejo de datos usando el entubamiento. Por ejemplo, si se deseara tener una lista ordenada de los usuarios que pertenecen al grupo ptc (100, en el /etc/passwd) en un archivo llamado nptc, se hara normalmente lo siguiente:
$ grep :100: /etc/passwd > nptc cut -f5 -d":" nptc >nptc.tmp sort nptc.tmp>nptc rm nptc.tmp $

Como se ve, es fcil lograrlo, sin embargo, puede serlo an ms si se usa la interconexin de comandos:

79

Manual de Unix

$grep :100: /etc/passwd|cut -f5 -d:|sort > nptc $

Al comparar los archivos en los que se guardo la salida se ve que no hay diferencia entre ambos. Lo que hace el filtro es lo siguiente: primero busca la cadena :100: que corresponde al grupo ptc en el archivo /etc/passwd, despus, toma de la primer salida slo el quinto campo, que es el nombre del usuario, usando los dos puntos como separador de campo y, por ltimo, ordena esta salida por orden alfabtico y el resultado se guarda en el archivo nptc. Ms ejemplos: Por ejemplo, si se deseara saber qu usuarios estn en sesin y tener slo el login de ellos, ordenados alfabticamente se usara el siguiente filtro:
$who|cut -f1 -d |sort -u falcon galoed gus horace jaimer jumaga kyo mikeai pancho yumbe

80

Manual de Unix

81

Manual de Unix

4.1 INTRODUCCIN
Existen otros muchos editores para UNIX, pero el nico que es seguro encontrar en cualquier sistema UNIX es vi. El editor vi es un editor de texto a pantalla completa que maneja toda la pantalla, proporcionando una ventana al fichero entero que se retiene internamente dentro del buffer de vi. EL cursos de pantalla est siempre en la lnea actual y la mayor parte de las operaciones de edicin tienen lugar en ese punto. Sin embargo, vi no es un procesador de textos ni un sistema de autoedicin; no formatea texto ni soporta grficos integrados. Por otro lado, vi es independiente de la terminal, por lo que puede ser utilizado igualmente bien sobre la consola del sistema o desde una terminal remota. El editor vi es un subconjunto de un editor mayor denominado ex y parte de la documentacin se refiere a las edenes de ex. El editor vi no es el editor ms fcil de usar. vi es un editor pequeo (ocupa pocos recursos) y potente, pero muy difcil de usar. Sin embargo, una vez que uno se acostumbra a l, la edicin es muy rpida. Usted invoca a vi desde el shell con una lista opcional de ficheros como argumento, como se muestra aqu:
$ $ $ $ vi fich.viejo vi fich.nuevo vi fich.nuevo fich.viejo vi

Todas stas son edenes aceptables. Si el fichero designado no existe ya, vi lo crear. Este es el mtodo normal para crear nuevos ficheros en el sistema UNIX. Si usted incluye ms de un nombre de fichero en la lista de argumentos, vi editar los ficheros uno a uno, cargando el primero en el buffer de texto cuando usted inicie el programa. Hay rdenes previstas para conmutar ficheros, pero vi no puede editar mltiples ficheros simultneamente. El nombre del fichero actual es accesible con una orden vi. Si usted ejecuta vi sin ningn nombre de fichero como argumento, vi funcionar correctamente, pero usted tendr que designar un fichero antes de escribir el buffer de texto de vuelta en el sistema de ficheros. Dadas las rdenes anterior, vi comenzara por la primera lnea del fichero como lnea actual. Adems de los nombres de ficheros, vi permite otros varios argumentos en la lnea de orden. Se puede utilizar la opcin + seguido de un nmero de lnea para especificar la lnea actual. Por ejemplo:
$ vi +45 fich.viejo

82

Manual de Unix

har que la lnea 45 del fichero fich.viejo sea la lnea actual inicial. La orden:
$ vi +$ fich.viejo

se utiliza para iniciar vi al final del fichero. Tambin puede utilizarse la forma:
$ vi +/cadena fich.viejo

para hacer que vi busque cadena y haga de la primera ocurrencia de cadena la lnea actual. De hecho se puede usar cualquier orden de vi despus de + y sta ser interpretada antes de que vi dibuje la pantalla por primera vez. La ~ marca una lnea no utilizada en la pantalla de texto vi. Cuando usted cargue vi con un fichero nuevo o sin nombre de fichero, toda la pantalla tendr tildes a la izquierda, ya que no hay texto en el buffer.
El cursor de pantalla aparece sobre un carcter visualizado en la pantalla. La lnea que ste ocupa es la lnea actual, y el carcter en el que se encuentra es la posicin actual sobre la lnea. La mayora de las operaciones de edicin utilizan la lnea actual o la posicin del cursor; vi dispone de rdenes para mover el cursor y cambiar la lnea actual.

Durante su operacin, vi tiene tres modos. Los modos son estados diferentes en los que el editor puede estar en diferentes momentos. Los modos en los que puede estar vi son: En el modo comando, vi espera comandos propios para trabajar con los archivos o cambiar a los otros modos. Prcticamente la mayora de las rdenes que se pueden dar en este editor tienen slo uno o dos caracteres, aunque existe alguno de ms y muchos de ellos aceptan parmetros. En el modo insercin se insertar, se eliminar y en general se editar el texto, que en realidad el modo ms normal de trabajo. Para pasar del modo rdenes al modo insercin basta con dar una coma de edicin como a de aadir o i de insertar. Del modo de insercin podemos salir en cualquier momento pulsando la tecla <Esc>. El modo ultima lnea es un modo especial que se utiliza para dar a vi una serie de rdenes especficas, y aparecen en la ltima lnea de la ventana de edicin. Estos comandos suelen ser de carcter general y de gran utilidad. Para entrar en este modo slo tenemos que pulsar la tecla : , tras lo que damos la orden y pulsamos <Enter> para ejecutarla. Entre estos comandos podemos encontrar rdenes como q que nos permite abandonar el vi o q! para salir del vi sin guardar los cambios.

83

Manual de Unix

El modo ultima lnea se utiliza para introducir una sola lnea de comando en la lnea inferior de la pantalla. Cuando ese comando se completa, vi regresa al modo de comandos, por lo que el modo de ltima lnea tiene una vida breve; sin embargo, los otros dos modos permanecen activos hasta que explcitamente se cambia a otro. Cuando se est en modo entrada, se puede pasar a modo comandos presionando la tecla esc. Al modo de entrada se pasa desde el modo de comandos utilizando uno de los comandos de texto que se muestran ms adelante. Cada modo acta de forma diferente y tiene su propio conjunto de comandos. Los comandos del modo de ltima lnea se visualizan en la ltima lnea cuando se teclean, pero la entrada al modo comandos no produce eco. El editor vi trabaja con un buffer en memoria, por lo que la informacin no se lleva a disco hasta que el usuario as lo indique. Por este motivo se recomienda guardar el archivo cada cierto tiempo para evitar perder todo el trabajo realizado durante una gran cantidad de tiempo.

84

Manual de Unix

4.2 COMANDOS BSICOS


Comandos de insercin
Aadir texto despus de la posicin del cursor. Se pone en modo entrada y aade texto al final de la lnea actual. Insertar texto delante de la posicin del cursor. Se pone en modo entrada e inserta texto al principio de la lnea actual. Inserta una lnea por debajo de la lnea actual para aadir texto. Inserta una lnea encima de la lnea actual para aadir texto. a A i I o O

Movimiento de cursores
Una lnea abajo Una lnea arriba Un carcter a la derecha Un carcter a la izquierda Salto de lnea Avanza una palabra Va al principio de la palabra actual Va al final de la palabra actual Mover el cursor al principio de la lnea Mover el cursor al final de la lnea Ir a la primera lnea de la pantalla Ir a la lnea situada en mitad de la pantalla Ir a la ltima lnea de la pantalla Ir a ensima lnea Avanza una pantalla Retrocede una pantalla j k h l Retorno de carro w b e 0 (cero) $ Mays-h Mays-m Mays-l nG ctrl.-f ctrl.-b

85

Manual de Unix

Comandos para borrar texto


Borrar un carcter en la posicin del cursor Borrar n caracteres en la posicin del cursor Suprime una palabra. Suprime n palabras desde la posicin del cursos hacia el final. Suprime texto desde la posicin del cursor hasta el final de la lnea. Suprime texto desde el principio de la palabra hasta la posicin del cursor Al igual que d$, suprime el resto de la lnea actual. Suprime la lnea actual entera, independiente de la posicin del cursor en la lnea. Elimina n x nx dw ndw d$ d0 Mays-d dd ndd

Comandos de sustitucin
Sustituir un carcter Reemplaza una secuencia de caracteres. Cambia una palabra Cambia una palabra Igual que cw, pero hacia atrs. Copia el nmero n de palabras. Corta hasta el final de una lnea. Corta hasta el inicio de una lnea. Pega debajo del cursor. Pega arriba del cursor. Copia la lnea. Copia n lneas hacia abajo. r Mays-r cw ce cb cnb c$ c0 p Mays-p yy nyy

Accin modo texto


Deshacer ltimo cambio Deshacer todos los cambios de la lnea u U

86

Manual de Unix

Comandos para salir y guardar cambios


Salir del vi Guardar cambios Guardar cambios en el archivo Guardar cambios y sobrescribir el archivo Guardar cambios y salir Guardar cambios y salir Guardar cambios y salir Salir sin guardar cambios :q! :q :w :w nombre_de_archivo :w! nombre_de_archivo :wq ZZ :x

Comandos de bsqueda
Busca la cadena hacia delante. Busca la cadena hacia atrs. Vuelve a busca en la direccin actual. Vuelve a buscar en a direccin opuesta Busca el patrn x. Va al siguiente. Va a el anterior. Muestra el nmero de lnea. Para quitar set number. Muestra los caracteres ocultos. Para quitar set list. Reemplaza en una lnea. Reemplaza en todo el documento. Para reemplazar, pregunta si se quiere cambiar o no. set number set nonumber set list set no list s/lo que busco/lo que reemplazo/c s/lo que busco/lo que reemplazo/g s/lo que busco/lo que reemplazo/band n Mays-n /x /n /b /cadena ?cadena

87

Manual de Unix

4.3 ECRITURA DE ARCHIVOS


El modo ltima lnea proporciona rdenes para leer y escribir ficheros entre el buffer de texto interno de vi y los ficheros permanentes del sistema de ficheros. El editor vi no realiza escrituras o copias de seguridad automticas mientras edita. Es posible cambiar el nombre del fichero durante la operacin de escritura especificando un nombre de camino tras el comando :w, como se muestra continuacin:
:w fich.nuevo

Esto crea un nuevo fichero de nombre fich.nuevo en el directorio actual y escribe en l el buffer editado. Luego vi informa sobre el tamao del fichero que ha sido escrito. Por ejemplo:
:w fich.nuevo fich.nuevo 4 lneas, 96 characters

Este mensaje aparece en la ltima lnea en lugar de la orden :w. Si el fichero ya existe, vi dar un aviso, donde dice que el archivo ya existe, que se use :w! para forzar la escritura. Puede escribirse una parte del buffer especificando un rango de lneas con la operacin w. Introduzca la primera lnea que desee escribir despus del :, seguido de una coma, y luego la ltima lnea que desee escribir, como en el siguiente ejemplo:
:3,6w fich.nuevo

88

Manual de Unix

4.4 CAMBIO DE ARCHIVOS


Si al entrar a vi se da el nombre de dos o ms archovos, se crea un bufer por cada nombre de archivo. Para poder moverse en estos archivos, pasar de uno a otro y regresar, existen tres comandos: Para ir al siguiente archivo Para ir al archivo anterior Para ir a un archivo determinado se utiliza n N e

Sin embargo, vi no permite editar ms de un archivo a la vez; siempre que se quiera cambiar de archivo se tienen que guardar los cambios, de lo contrario vi no permitir ir al otro, amenos que que se utilice el ! para hacer forzado el cambio, pero vi no guardara los cambios que se hayan realizado en el bufer. Si se necesita ver qu fichero es el actual, puede utilizar el comando de ltima lnea :f, o el operador de modo comandos CTRL.-G para visualizar el nombre y tamao del fichero actual.

89

Manual de Unix

4.5 ARCHIVO . exrc


Con vi se puede crear el archivo .exrc, est da la presentacin de todos los archivos que se abrirn con el editor vi. Por ejemplo, si abrimos el archivo y colocamos el comando set number, todos los archivos que se abran estarn numeradas la lneas. El archivo .exrc es activado cuando se inicia la sesin, as que no se necesita cargarlo, el sistema se encarga de eso. Pero si no se quiere en un archivo especifico la misma configuracin, entonces es recomendable que en el mismo archivo se cancele o se activen los comandos necesarios. En caso de que todos los archivos deban tener otra configuracin es ms eficiente cambiar el archivo .exrc . En este archivo se puede guardar la configuracin que queramos darle a los archivos, aun que hay que aclarar que nicamente la configuracin es para el editor vi; si se llega ha abrir el mismo archivo en otro editor no conservar la configuracin.

90

Manual de Unix

4.6 AYUDA
VI no facilita una ayuda interactiva, pero siempre se puede consular la ayuda suministrada por el manual (man). VI es un programa sobre EX. Es EX quien maneja muchos de los comandos de ltima lnea en VI. Por lo tanto, adems de leer la pgina de manual para VI, es conveniente ver la de EX tambin.

91

Manual de Unix

92

Manual de Unix

Otra de las tantas herramientas que ofrece el sistema UNIX es la interaccin que permite entre sus usuarios permitindoles la comunicacin entre s. Esta comunicacin puede darse de varias maneras, comunicndose interactivamente o dejando mensajes guardados en el sistema, y dentro de estos tambin existen varias formas de hacerlo. Veamos el uso de algunas herramientas para la comunicacin en el sistema.

93

Manual de Unix

5.1 COMUNICACIN INTERACTIVA


El sistema UNIX tiene varios comandos que permiten que los usuarios establezcan comunicacin entre s en un momento determinado e interactivamente. Entre estas rdenes estn write, talk y ytalk. A continuacin describiremos su funcionamiento.

5.1.1 Envo de mensajes con write.


Este comando permite enviar un mensaje al usuario indicado, justo en el momento de su escritura, siempre y cuando el destinatario est habilitado para recibirlos y est conectado al sistema. En seguida viene un ejemplo sencillo de cmo usar esta orden:
$write nancy como te llamas? ^D $

Despus de haber tecleado el comando write, el sistema slo est esperando que se le teclee algo para enviarlo. En este momento se puede escribir todo lo que se desee hasta oprimir simultneamente las teclas CTRL-D. Lo que se recibe en la pantalla del usuario a quien se escribi es lo que sigue:
$ Message from kyo (ttyr7) [ Thu Apr 25 14:37:27 ] quien eres? <EOF> $

El EOF al en el ltimo rengln le indica al receptor que el usuario que le escribi ha terminado su mensaje. Si se hubiera querido establecer una comunicacin entre ambos, entonces el primero que escribi debi haber esperado a que el segundo contestara:
$write nancy

94

Manual de Unix

y en el lado de nancy debi haberse escrito:


$ Message from kyo (ttyr7) [ Thu Apr 25 14:37:27 ] write kyo

y entonces la conversacin por medio de write hubiera comenzado y slo se habra terminado hasta que uno de los dos hubiese tecleado CTRL-D. Sin embargo, el uso de este comando para comunicarse mutuamente puede ser muy difcil si no se establece quien escribe y quien espera, ya que se podran traslapar letras escritas de un lado con las del otro ocasionando que no se entiendan los mensajes. Si se hubiera tratado de comunicar con un usuario que no est conectado al sistema se hubiera recibido un mensaje como este:
$write mine mine is not logged on. $

y la orden write termina. Si se hubiera equivocado de usuario o el nombre tecleado no existiese en el sistema entonces se habra obtenido el mismo mensaje. Sera conveniente que antes de tratar de establecer contacto con alguien primero se verificara si est conectado al sistema, esto se puede hacer utilizando la orden who, descrita anteriormente. Cuando se le escribe a un usuario, en realidad se le est mandando el mensaje a la terminal que est usando en ese momento. Si el usuario con el que desea comunicarse est trabajando en ms de una terminal, entonces write escoger la terminal con el nmero ms bajo de las que el receptor est ocupando. Si se le mandara un mensaje a un usuario que est en ms de una terminal con write, se podra ver un mensaje parecido al este:
$write mteran mteran is logged on more than one place. You are connected to "pty/ttysb". Other locations are: ttyr0 ttyrb

95

Manual de Unix

Para enviar un mensaje a una terminal determinada entonces debe de especificarse sta despus del nombre de usuario:
$write mteran ttyr0

y entonces el mensaje se recibir en esa terminal. Para ver en que terminales est un usuario conectado, se puede usar el comando who que da el nmero de terminal en el segundo campo de su salida. En el caso de que se tuviera que enviar un mensaje ms largo, podra prepararse primero en un editor de texto y luego enviarse direccionando la Entrada Estndar:
$ write nancy < mensaje

Al usar write de esta manera el receptor recibir el contenido del archivo mensaje de un sla vez. Sin embargo, sera mejor que para mensajes largos se usara alguna de las rdenes para envo de correo, as el receptor lo leera cuando lo considere conveniente. Otra caracterstica de write es que las lneas que comienzan con el smbolo ! son interpretadas como comandos, y se ejecutan. La salida de estas rdenes no se ven en la pantalla de quien recibe el mensaje. Se puede, inclusive, direccionar la salida estndar para no ver el resultado en pantalla. Veamos el uso de esta herramienta dentro de write:
$write nancy Message from nancy (pty/ttysa) [Thu Apr 25 15:59:35] ... Hola! Ya terminaste el programa en C? Si, y tu? Aun no. Pasamelo Tienes permisos en tu home? Si Ya lo tienes? !ls Mail mail prog1.c nsmail textos images mbox mensaje programs ! Ya, gracias. Nos vemos adios ^D $

96

Manual de Unix

Lo que aparece en la ventana de nancy es lo siguiente:


$ Message from kyo on (ttyp0) [Thu Apr 25 16:54:10] ... write kyo Hola! Ya terminaste el programa de C? Ya, y tu? No. Pasamelo Tienes permisos de escritura en tu home? Si. !cp prog.c /users/ptc/kyo ! Ya lo tienes? <EOF> $

Al terminar su cometido un comando el sistema responde con otro !, indicando que la tarea ha terminado.

5.1.2 Cmo negar la aceptacin de mensajes.


Cuando se est trabajando es a veces muy molesto el ser interrumpido al recibir un mensaje que alguien se quiere comunicar con nosotros, ocasionando que aparezca texto indeseado en pantalla. La forma para evitar estas situaciones es haciendo cambiando el estado de la variable mesg. Esta variable habilita al sistema para recibir o no mensajes de cualquier tipo. Por default, el estado de dicha variable es y, lo que indica que se est en condicin de aceptar los mensajes que se manden al usuario. Para modificar esta variable se escribe:
$mesg n $

Una vez hecho lo anterior, al usuario que intente comunicarse de cualquier manera con nosotros se le desplegar en pantalla un mensaje que dice:
Permission denied.

97

Manual de Unix

Si se deseara ver el valor de esta variable se debera teclear mesg, sin parmetros y entonces se devolvera :
$mesg is n $

la salida nos indica si el comando esta o no habilitado.

5.1.3 Comunicacin con talk.


Ya vimos lo inadecuado que puede llegar a ser el establecer contacto con otro usuario ayudndose de write. En el caso de que se desee hacer una conversacin ms larga es mejor hacer uso del comando talk. Veamos un ejemplo para ver cmo usarlo:
$talk nancy [Waiting for your party to respond]

sto es lo que se vera en la pantalla de quien est pidiendo la comunicacin, mientras que en la pantalla del otro usuario se vera lo siguiente:
$ Message from Talk_Daemon@aries.fidieec.unam.mx at15:50... talk: connection requested by kyo@aries.fib.unam.mx. talk: respond with: talk kyo@aries.fi-b.unam.mx $

Si el usuario al que le aparece la peticin de comunicacin, desea contestar slo basta con teclear talk kyo@aries.fi-b.unam.mx, como lo indica el sistema. La primer palabra hasta antes de la @ es el nombre de usuario de quien solicita la comunicacin, la segunda hasta antes del primer punto es el nombre del servidor al que se encuentra conectado, las ltimas tres son la especificacin de dnde se encuentra el servidor, siendo la ltima la abreviacin del pas de su origen.

98

Manual de Unix

En el caso de encontrarse en el mismo servidor, bastar con contestar con la orden talk, seguida del nombre de usuario. Despus de que se establece contacto se limpian las pantallas de los dos usuarios y se dividen en dos partes siendo la mitad de arriba la que corresponde al usuario de la terminal y la otra, de quien se recibe mensaje. El comando talk, a diferencia de write, les permite a los usuarios escribir simultneamente sus mensajes y los textos aparecen en la ventana correspondiente a cada uno:
(Terminal de nancy) que pasa? o estoy capturando un documento que me pidio Edwin o En Word y le estoy anexando unas tablas que hice en Excel o Hasta luego ^D -----------------------------------------------nada, solo queria saber que hacias o ah, en que los estas haciendo? o Bueno, entonces te dejo seguir trabajando Hasta luego. oo ^D $

(Terminal de kyo) nada, solo queria saber lo que hacias o ah, en que los estas haciendo? o Bueno, entonces te dejo seguir trabajando Hasta luego. oo ^D -----------------------------------------------que pasa? o estoy capturando un documento que me pidio Edwin o En Word y le estoy anexando unas tablas que hice en Excel o Hasta luego ^D $

99

Manual de Unix

Como se puede ver, es mucho mejor usar este comando cuando se quiere tener un contacto interactivo.

5.1.4 Comunicacin entre mas de dos usuarios con ytalk.


La comunicacin interactiva con talk se ve limitada a slo dos usuarios, pero UNIX permite el establecimiento de contacto de un nmero mayor de ellos. Esto se logra haciendo uso del comando ytalk. Una vez que es La forma de establecer comunicacin con esta herramienta es exactamente igual que con talk, la nica diferencia es que la ventana de cada usuario se dividir en tantas partes como usuarios estn comunicndose. Cuando se usa este comando, si un usuario est en contacto con otro y un tercero intenta comunicarse con uno de ellos con ytalk, el mensaje de peticin de establecer comunicacin aparece en las terminales de quienes ya estaban en contacto, as que si uno de los dos acepta la insercin de ste, la comunicacin se establece entre los tres.

100

Manual de Unix

5.2 EL SISTEMA DE CORREO ELECTRNICO


UNIX cuenta con varias herramientas por medio de la cual los usuarios pueden enviarse mensajes entre s. Estos mensajes se pueden almacenar en un buzn que est en alguna parte del sistema. Entre estas herramientas estn mail, mailx y pine. Ahora describimos el uso de estas rdenes.

5.2.1 Envo de correo con el comando mail.


El uso de este comando es sencillo, se usa de igual manera que write, primero el comando, despus el nombre del usuario, y a continuacin el sistema espera el mensaje del teclado. ste se enva cuando se teclea en la ltima lnea CTRL-D:
$mail mine Recuerda que el prximo viernes tendremos una Reunin en el cubculo del PTC, nos vemos alli a las 3:00 pm. No se te olvide llevar lo que te toc. ^D $

Si el usuario al que se le enva el mensaje est conectado en ese momento al sistema, se le notifica de que tiene correo cuando se termina la ejecucin del comando que estuviera realizando una tarea, si ese fuera el caso. Si no, el mensaje se guardara en el fichero buzn y se le notificara de que tiene mensajes. En cualquiera de los dos casos, el aviso es con un letrero que dice:
You have mail.

Si el mensaje fuese demasiado largo, se podra primero pasar por algn editor de texto y despus direccionar la Entrada Estndar, para mandarlo. Tambin se puede mandar un mensaje a varios usuarios a la vez. Una combinacin de lo anterior sera sta:
$mail mine sampras nancy < recordatorio $

Donde recordatorio es un archivo que contiene el mensaje que se desea mandar.

101

Manual de Unix

Mensajes de error
Si se intenta mandar un mensaje a un usuario que no existe en el sistema o se teclea mal el nombre, mail responde con algo as:
$mail namcy ... ^D mail: cant send to namcy Mail saved in dead.letter $

Si el correo se envi a ms de un usuario, y uno de estos es inexistente en el sistema, el mensaje se guardar en el dead.letter en su directorio.

5.2.1.1 Revisar el correo.


Para leer los mensajes recibidos en el buzn slo se teclea la orden mail, sin parmetros. Si se tiene un solo mensaje en l este se imprime en la pantalla, si hay ms de uno, slo se ve el primero. Los otros mensajes no se pierden, se imprimirn despus. El comando mail muestra los mensajes de ltimo en llegar, primero en abrir. Si se lee un mensaje aparecer en la pantalla algo como esto:
$ mail mail Revision:70.7 92/04/16 15:39:44 Type ? for help. "/usr/mail/kyo": 2 messages 2 unread >U 1 utlem@cronos.fi-b.unam.mx Mon Apr 29 15:46 14/413 U 3 sampras@cronos.fi-b.unam.mx Mon Apr 29 15:49 16/571 ?

Al mostrar el mensaje, mail espera una orden, para ejecutarla. Al final de la pantalla se muestra el carcter ? indicando la espera, si se teclea otro ? o un *, se imprimir un men con las opciones que tiene este comando: Por ejemplo, para guardar un mensaje se hara lo siguiente:

102

Manual de Unix

$mail mail Revision:70.7 92/04/16 15:39:44 Type ? for help. "/usr/mail/kyo": 2 messages 2 unread >U 1 utlem@cronos.fi-b.unam.mx Mon Apr 29 15:46 14/413 U 3 sampras@cronos.fi-b.unam.mx Mon Apr 29 15:49 16/571 ?3 From sampras@cronos.fi-b.unam.mx Mon Apr 29 15:49 CST1996 Received: by cronos.fi-b.unam.mx Return-Path: <sampras@cronos.fi-b.unam.mx> From: pea ruiz manuel <sampras@cronos.fib.unam.mx> To: martinez alvarado joel <kyo@cronos.fib.unam.mx> Status: RO Este es un mail de prueba para el manual de unix ?

Esta orden puede hacer varias cosas: si el nombre de archivo para guardar el mensaje no existe, ste se crea y el mensaje con todo y cabecera se guarda en l; si ya existe, el mensaje se aade al archivo y se borra del buzn, visualizndose el siguiente mensaje; si ya no hay ms mensajes, mail termina y sale al promp del sistema. Otra forma de guardar mensajes es usando la orden w, la nica diferencia de usar sta es que no guarda la cabecera del mensaje como lo hace el comando mail. Si no se da el nombre de algn archivo las dos rdenes guardan los mensajes en uno llamado mbox. Si no se tiene permiso de escritura en el directorio desde donde se est leyendo el correo, mail manda un mensaje de error:
Permission denied!

Por eso es mejor leer el correo cuando se encuentre en el directorio propio. Otra de las caractersticas de mail es que si se antepone a una orden el carcter !, se interpreta como un comando para el shell y se ejecuta, igual que con write. As puede uno asegurarse de guardar el correo en el lugar indicado. Se pueden hacer ms cosas desde mail, por ejemplo, suponga que est leyendo el siguiente mensaje :
From nancy Fri Apr 26 12:58:43 1086 El prximo lunes es el ltimo da para entregar tu curriculum, no se te olvide llenarlo y entregarlo a Carlos, a Jos o a m. $

103

Manual de Unix

Al terminar de leerlo se podra mandar una respuesta con otro mensaje:


? !mail nancy Gracias por recordrmelo, pero ya pas a dejarlo en el cubculo. ^D ! ?

Para borrar mensajes inmediatamente despus de leerlos se usa la operacin d, dentro de mail. Si no se hace esto, el mensaje aparecer la prxima vez que entre a mail. Para ver el siguiente mensaje sin borrar o guardar el actual, se puede usar el carcter + o simplemente presionar la tecla RETURN. Si no hay ms mensajes se termina la ejecucin de mail. Si un mensaje es demasiado largo para leerlo en una sola pgina, se puede teclear p y aparecer slo el contenido que quepa para verlo en una sola. Para continuar vindolo se puede oprimir la tecla BREAK. Para ver mensajes anteriores slo basta con pulsar - y se retroceder de mensaje en mensaje, ya que no se puede ver uno en especfico.

5.2.1.2 Reexpedicin de correo.


Para mandar el mensaje que se est viendo actualmente a otro o a otros usuarios slo basta usar el operador m seguido por los usuarios a quienes se les desea mandar el mensaje. Si no se escribe el argumento para m, el mensaje no se toca. Inmediatamente despus de reexpedir el mensaje, este se borra del archivo buzn. En el caso de quien lo recibe, pueden ver que es reexpedido con el letrero (forwarded) y indicando el nombre de quien lo mand.

5.2.1.2 Salir de mail.


Se sale de mail de varias maneras: La primera es si se est leyendo el ltimo o el nico mensaje y al ? se le contesta presionando ENTER. La segunda es para salir en cualquier momento presionando las teclas CTRL-D. Tambin se sale inmediatamente despus de contestar con q. Otra forma para abandona el correo, es pulsando x.

104

Manual de Unix

Al teclear q o CTRL-D se sale de mail y los mensajes borrados se eliminan mientras que los no borrados y no ledos se almacenan. Si se usa x, el mail no hace los cambios que se hicieron mientras se estuvo dentro de l, es decir, si se borraron mensajes, stos no se eliminarn. Con f se puede especificar el archivo de donde se quiere hacer la lectura de mensajes. Por ejemplo, suponga que se tienen varios mensajes guardados en el archivo correo, para leerlos se tecleara:
$mail -f correo ...

5.2.2 Envo de correo con mailx


El envo de correo con este comando es mucho mejor que con mail, ya que cuenta con caractersticas ms potentes para poder enviar mensajes. El siguiente es un ejemplo de cmo mandar un mensaje a un usuario con mailx:
$mailx mine Subject: recordatorio Este mensaje es solo para recordarte que al terminar el semestre vamos a celebrar junto con los demas chavos del grupo. Que no se te olvide. ^D Cc: nancy utlem tenorio $

En la lnea de comando se escribe el comando, seguido por el nombre del usuario al que se le desea mandar el mensaje. Despus se pedir el ttulo del mensaje (con subject). Despus de darle esto, se comienza a escribir el cuerpo del documento y se termina con CTRL-D. Lo ltimo que pide el comando es a qu usuarios se les debe mandar una copia del mensaje (Cc), estos nombres deben estar separados por espacios o por comas. Al igual que con mail, slo se puede editar la lnea de escritura actual. As que si se desea enviar un mensaje demasiado grande es mejor escribirlo en un editor de texto. Despus de guardar el mensaje en un archivo, este se enva de la siguiente forma:
$mailx nancy < mensaje $

105

Manual de Unix

5.2.2.1 Escapes.
Una de las caractersticas que hacen la gran diferencia entre mandar mensajes con mailx y no con mail es que se puede hacer uso de los llamados escapes. Un escape es una herramienta de mailx que permite la interaccin entre mailx y el usuario. Algunos de los escapes ms tiles son los siguientes: Escape: ~v Descripcin: Permite el uso del editor vi dentro de mailx para la escritura del mensaje que se va a enviar. Este escape es muy til cuando se quiere mandar un mensaje muy largo, ya que permite la edicin de un texto usando vi. En el siguiente ejemplo se muestra como se utiliza:
$ mailx sampras Subject: peticion ~v "/tmp/Re3326" 0 lines, 0 characters He sabido que la prxima semana dars un curso de redes UNIX a los prebes, por lo que quiero pedirte que me aceptes en tu grupo como alumno. Contesta el mensaje mandndome hora, lugar y fecha de la imparticin de tu clase. Por favor, no dejes de contestar... ...kyo ~ ~ "/tmp/Re3326" 7 lines, 274 characters (continue) ^D Cc: $

Escape: ~r Definicin: Permite el envo de un archivo como parte del mensaje que se desea mandar. Cuando se carga un archivo dentro del mensaje para enviarlo a otro usuario, al igual que con el escape ~v, lo que se teclee despus de ejecutar la operacin ser aadido al escrito hasta que se oprima CTRL-D:

106

Manual de Unix

$mailx nancy Subject: despierta ~r men "men" 24/684 despierta! ^D Cc: $

Escape: ~c. Definicin: Con este se puede aadir un usuario al que se le desea mandar una copia del correo que se est escribiendo actualmente: Escape: ~p. Decripcin: Imprime en la pantalla el contenido del encabezado junto con lo que se haya escrito del mensaje hasta el momento. Escape: ~s. Descripcin: Con este escape se permite aadir la cadena que se especifique como encabezado de mensaje. Escape: ~?. Descripcin: Otorga una ayuda acerca de los escapes de tilde.

5.2.2.2 Lectura de correo.


Para leer el correo slo se tiene que teclear la orden mailx, sin parmetros y entonces aparecer algo como esto:
$ mailx mailx Revision: 70.7 Date: 92/04/16 15:39:44 Type ? for help. "/usr/mail/kyo": 7 messages 4 new 1 utlem@cronos.fi-b.unam.mx Mon Apr 29 15:46 15/425 2 utlem@cronos.fi-b.unam.mx Mon Apr 29 15:46 15/425

107

Manual de Unix

3 sampras@cronos.fi-b.unam.mx Tue Apr 30 17:19 58/2867 >N 4 kyo@cronos.fi-b.unam.mx Tue Apr 30 20:21 15/579 N 5 MAILER-DAEMON@cronos.fi-b.unam.mx Tue May 7 14:08 56/1020 Returned mail: User unknown U 6 kyo@cronos.fi-b.unam.mx Tue May 7 14:37 33/991 N 7 kyo@cronos.fi-b.unam.mx Tue May 7 16:31 13/340 que onda? ?

Los smbolos N, U, > tienen los siguientes significados: N indica que el archivo es nuevo, y que no ha sido visto anteriormente. U quiere decir que el mensaje no se ha ledo. Slo se ha visto el encabezado de l. > Este carcter seala el primer mensaje nuevo de la lista.

Los dems campos de una lnea que corresponde a un mensaje son el nmero de mensaje, el nombre de quien lo mand, fecha y hora de cundo fu enviado, el nmero de caracteres y lneas que contiene el mensaje y por ltimo, una copia del encabezado del mensaje. Al igual que con mail, mailx espera una orden, indicndolo con el carcter ?. Si se le responde con otro smbolo ? o con help, se muestra una pantalla de ayuda con los comandos de lnea para mailx:
? help mailx commands type [msglist] next edit [msglist] from [msglist] delete [msglist] undelete [msglist] save [msglist] file reply [message] recipients Reply [msglist] preserve [msglist] reply to the authors of the messages preserve messages in mailbox 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

108

Manual de Unix

mail user quit exit header ! cd [directory] list top [msglist] z [-] headers

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 [previous] page of 10

[msglist] is optional and specifies messages by number, author, subject or type. The default is the current message. ?

Estas acciones se manejan de igual manera que las que ya se explicaron con mail en la seccin pasada

5.2.2.3 Creacin de flders.


El uso de esta herramienta est destinado a la organizacin de mensajes para hacer un acceso ms fcil a ellos. Se pueden crear tantos flders como el usuario necesite y estos estn contenidos en un slo directorio. El directorio en el que se guardarn ser especificado en el archivo .mailrc. Esta especificacin se hace agregndole la siguiente instruccin:
set folder=correo

donde correo es el nombre del directorio donde se guardarn los folders.De esta forma, si se desea guardar un mensaje en un flder slo se teclear:
?s +ptc ?

Esto le indica a mailx que grabe el mensaje actual en el flder ptc. Si el flder no fue creado con anterioridad, ste ser creado al momento de intentar guardar el mensaje. Para hacer una copia de un flder en el archivo mbox del directorio de casa slo se hace lo siguiente:

109

Manual de Unix

... ?co +ptc ?

Si se deseara hacer la lectura de los mensajes de otro flder, entonces se debera escribir:
... ?fold +ptc ?

Para saber cual es el flder que se est leyendo, se teclea fold, sin parmetros. Para tener una lista de los flders que se tienen en el directorio se teclea:
... ?&folders ... ?

5.2.2.4 Opciones de mailx.


Opcin: -s (subject). Descripcin: Permite agregar un encabezado cando se direcciona un archivo para enviarlo como mensaje:
$mailx -s peticin sampras <mensaje $

Despus de la opcin -s se teclea el ttulo para subject seguido del nombre del usuario al que se le mandar el mensaje y por ltimo se direcciona el archivo donde se tiene el mensaje. Opcin -f (folder) Descripcin: Especifica el nombre del folder del que se leern los archivos del correo. Cuando se tienen mensajes en archivos que sean flders del directorio de correo, se usa esta opcin. La orden completa sera as:
$mailx -f +ptc ...

110

Manual de Unix

111

Manual de Unix

Un proceso es uno o ms comandos tecleados al shell. Procesos ms complicados consisten en ms de un comando escritos en un tubo. Por ejemplo:
$ps -ef|grep kyo > kyo.proc $

El shell asocia cada proceso con un nmero de proceso. Una vez que este es creado, este se puede controlar o manipular.

112

Manual de Unix

6.1 Monitoreo de Procesos


El shell guarda una tabla de todos los procesos actuales y de sus nmeros. Para ver un listado de esa tabla se teclea :
$jobs [1] + [2] $

Running Done

find / *txt*|sort> find.txt & ps -ef|grep kyo > kyo.proc

El nmero del proceso es desplegado entre corchetes. + seala a un proceso como el que se est ejecutando actualmente y - indica a un proceso como el anterior. Done, Running o Stopped indican el estado actual del proceso.

113

Manual de Unix

6.2 Suspensin de procesos.


Suspender un proceso permite detener a la mitad un proceso y regresar el control de la terminal para otros trabajos. Ms tarde se puede reanudar el proceso o ejecutarlo en background. Para suspender un proceso se necesita teclear CTRL-Z (si el caracter susp est definido como ^Z). Existen varias causas por las que se requiere suspender un proceso, y en ocaciones no se puede utilizar CTRL-Z, en estos casos existe un comando dentro del shell, kill, el cual se revisar ms adelante.

114

Manual de Unix

6.3 Poniendo un proceso en Background/Foreground.


Existe una forma de liberar una terminal y al mismo tiempo seguir ejecutando procesos demasiado largos. Un proceso as puede ponerse en background. Un proceso en background es uno que corre invisiblemente al usuario. Un proceso que est corriendo visiblemente al usuario est corriendo en foreground. El shell pone un proceso en background cuando al final de una lnea de comandos se le termina con un smbolo (el metacarcter &). Si la opcin set -o monitor est activada, un proceso enva un mensaje a la terminal de la forma:
[2] Done ps -ef|grep kyo > kyo.proc

Esto identifica al proceso por su nmero y muestra que el proceso ha sido terminado. Existen dos comandos que permiten manipular a los procesos para ponerlos en background o en foreground: el comando bg que los pone en background y el comando fg que los pone en foreground. Para poner un proceso visible en la pantalla se teclea:
$fg %num_proceso

O escribir %% o %+ si se trata del proceso actual. Si el proceso fuera el anterior, se tecleara %-. Para poner a un proceso en background se teclea :
$bg %num_proceso

115

Manual de Unix

6.4 Matando procesos.


Algunas veces cuando se ha empezado un proceso y se ve que es incorrecto lo que se est haciendo se desea que ya no se siga ejecutando. En este tipo de situaciones se puede destruir o matar un proceso. Supngase que se ha empezado el siguiente proceso:
$ lsf /* |sort archs & [1] 9305

y que despus de empezarlo no se quisiera listar el sistema de archivos completo, sino slo el directorio raz, y se decide terminar el proceso. Esto se logra usando el nmero del proceso ( [1]):
$kill %1 $

El comando kill mata el proceso y el metacarcter % especifica su nmero. Pero si el proceso que desea matarse no est en background entonces se debe buscar su nmero asociado. Esto se logra usando el comando ps. Para listar los procesos de un usuario en especfico que se estn corriendo en una terminal se usa algo parecido a esto:
$ps ef | grep kyo kyo 9326 8830 3 19:04:38 ttys3 kyo 8830 8829 1 17:56:40 ttys3 kyo 9325 8830 18 19:04:38 ttys3 $

0:00 grep kyo 0:00 -ksh 0:00 ps -ef

La primer columna da el nombre de usuario de quien est ejecutando el proceso, la segunda da el nmero del proceso, la tercer el nmero del proceso que mand ejecutar a ese proceso. Para matar, por ejemplo el proceso -ksh entonces se puede ejecutar el comando:
$kill -9 8830

Con lo que se terminar con la sesin de trabajo actual. Si solamente se teclear el comando kill entonces apareceran todas las banderas que puede utilizar el comando.

116

Manual de Unix

6.5 Comando .-ps


Descripcin: Este comando se utiliza para ver en un instante dado, cul es el estado de los procesos que se estn ejecutando en el sistema. Si no se especifica ninguna opcin da informacin sobre los procesos del intrprete de comandos en el que se ejecuta. Este comando es muy til para averiguar el pid (identificador del proceso) de los procesos que se quieren matar con el comando kill. La informacin que facilita el comando ps sobre los procesos, se presenta en formato de columnas y dependiendo de las opciones nos muestra la siguiente informacin, en sus correspondientes columnas: ADDR F Direccin de memoria del proceso. Flags del proceso 1: Proceso trazado. 2: El proceso est asignado al procesador. 3: El proceso no est asignado. PID PPID PRI SIZE RSS WCHAN: S: S W R Z T TTY PAGEIN identificador del proceso. identificador del proceso padre que lo cre. Prioridad del proceso. Espacio en nmero de pginas que ocupa el proceso en memoria. Tamao del proceso en kilobytes que est realmente en memoria en este instante. Evento sobre el que el proceso est esperando. Estado del proceso El proceso no existe. Durmiendo. En espera de algn evento. En ejecucin. I: Recin creado. Zombi. Trazado. Terminal del proceso Cantidad de faltas de pgina que ha causado.

117

Manual de Unix

TIME UID SWAP

Tiempo de CPU consumido por el proceso. Identificador del usuario que lanz el proceso. Cantidad de kilobytes del proceso en la memoria SWAP

Para este comando existen las siguientes opcines:


-e -f -l Muestra todos los procesos. Muestra el UID, PID y PPID, C (nivel de utilizacin), STIME (hora a la que se inici el proceso), y TTY (la terminal asociada al proceso). Muestra una lista larga de los procesos.

Ejemplos:
$ ps ef UID PID root 1 root 2 root 3 root 4 root 5 bin 441 root 468 root 520 root 529 root 543 root 557 root 601 root 616 root 630 nobody 641 nobody 647 root 648 root 744 root 745 root 746 root 747 root 748 . .. .. . PPID 0 1 1 1 1 1 1 1 1 1 1 1 1 1 630 630 1 1 1 1 1 1 STIME May22 May22 May22 May22 May22 May22 May22 May22 May22 May22 May22 May22 May22 May22 May22 May22 May22 May22 May22 May22 May22 May22 TTY ? ? ? ? ? ? ? ? ? ? ? ? ttyS0 ? ? ? ? tty1 tty2 tty3 tty4 tty5 TIME 00:00:08 00:01:05 00:00:00 00:00:05 00:00:00 00:00:00 00:00:00 00:00:31 00:00:00 00:00:00 00:00:04 00:00:05 00:00:00 00:00:03 00:00:02 00:00:02 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 CMD init [3] [kupdate] [kpiod] [kswapd] [mdrecoveryd] [portmap] /usr/sbin/automount --timeout 60 syslogd -m 0 [klogd] crond inetd sendmail: accepting connections gpm -t ms httpd httpd httpd /usr/local/sbin/sshd2 /sbin/mingetty tty1 [mingetty] [mingetty] [mingetty] [mingetty]

Muestra todos los procesos que se estn realizando en ese momento. Los campos que se muestran son: UID, PID, PPID, CMD, TIME.

118

Manual de Unix

6.6 Commando kill


Descripcin: Comando utilizado generalmente para detener procesos que se estn ejecutando, comnmente se llama matar a un proceso a esta accin. En general, la accin que se realiza con el comando kill es mandar seales a los procesos en ejecucin. Slo podemos matar al proceso si se es el usuario que lanz el proceso o el usuario root.
kill [-seal] pid

Opciones:
-seal Seal que se quiere enviar a proceso, generalmente es la seal SIGKILL o seal 9, que es la que mata al proceso sin remisin. Existen 31 tipos de seales: las seales son las siguientes: 1) SIGHUP 4) SIGILL 7) SIGBUS 10) SIGUSR1 13) SIGPIPE 17) SIGCHLD 20) SIGTSTP 23) SIGURG 26) SIGVTALRM 29) SIGIO pid -l 2) SIGINT 5) SIGTRAP 8) SIGFPE 11) SIGSEGV 14) SIGALRM 18) SIGCONT 21) SIGTTIN 24) SIGXCPU 27) SIGPROF 30) SIGPWR 3) SIGQUIT 6) SIGIOT 9) SIGKILL 12) SIGUSR2 15) SIGTERM 19) SIGSTOP 22) SIGTTOU 25) SIGXFSZ 28) SIGWINCH 31) SIGSYS

Nmero identificador del proceso al que se pretende mandar la seal. Muestra una lista con las seales que podemos mandar a los procesos. Ejemplo:
$kill 9 543 $

Eliminar al proceso cuyo pid es el 543, slo podemos matar al proceso si se es el usuario que lanz el proceso o el usuario root.

119

Manual de Unix

120

Manual de Unix

Cuando se hace un programa que posteriormente se puede usar como comando, es muy practico tener un manual para poder saber con exactitud que hace el comando. El hacer una pgina de manual puede parecer una perdida de tiempo, pero si se hace un programa con ciertas caractersticas y se deja de usar, cuando se vuelva a requerir, es ms fcil leer el manual que empezar por entender que hace el programa. Cuando se entrega un proyecto, se debe tener la documentacin adecuada, para no perder los derechos sobre est, una forma de hacer la documentacin con cierta presentacin es utilizando las pginas de manual. Las etiquetas que se utilizan para crear una pgina de manual vienen a continuacin con una descripcin de su uso. Etiquetas y descripcin .TH Es el encabezado del manual. Aqu se suele poner el nombre del comando en mayusculas y su seccin entre parentesis .TB Es el pie de pgina del manual. Aqu se incluye la numeracin de pgina, la versin y otras cosas. .SH Esto es cada una de las secciones del manual .ad l Ajusta el margen izquierdo .ad r Ajusta el margen derecho .ad c Centra el prrafo .aa b/n Justificado el prrafo. Las dos posibilidades son por compatibilidad con nroff. .ce [N] Centra la N lneas siguientes. .ls [N] Establece un espaciado de N entre las lneas del prrafo. .us [N] Da un espaciado vertical de N puntos. .CU [N] Pone en cursiva (subraya) el texto de N lneas siguientes. Este comando solo funciona para nroff. .UL [N] Pone en cursiva (subraya) el texto de N lneas siguientes. Este comando solo funciona para ncroff. .ft [RIBS] Deja el tipo de letra times normal (R) o en smbolos griegos o matemticos. .B El texto a continuacin estar en negritas

121

Manual de Unix

.I .R .BI

El texto a continuacin estar en cursivas El texto a continuacin estar en normal Coloca la primera palabra en negritas, la siguiente en cursivas y se va alternando. Se pueden hacer combinaciones con B, R, I en el orden que se quiera. Un ejemplo de una pgina es el siguiente:
$ vi migrep.txt

.TH .SH

MIGREP.SED migrep.sed migrep.sed - Hace la emulacion del comando grep .SH SINOPSIS .B migrep.sed - Busca el patrn introducido que se proporciono en el teclado del archivo. .SH ARCHIVOS - No usa ningn. .I "sed" .SH VERSION - Realizada el 20 de mayo de 2003 .SH AUTOR - Jazmn Espinosa

* Nota: Cuando se hace la pgina de manual, es necesario que al inicio del rengln se comience con las banderas, en el caso contrario no las tomara como banderas Para hacer la pgina
nroff -man migrep.txt > migrep

otra forma de hacer la pgina es


groff -t -man -Tascci migrep.txt > migrep

donde -t procesa -man carga la pgina -Tascciprepara la salida para poder usar la man page.

122

Manual de Unix

Para ejecutar la pgina se utiliza


more ./migrep

Postscrip Se puede hacer con la misma forma un postscrip, con una pequea diferencia en la creacin, para hacerlo se utiliza el comando:
groff -man migrep.txt > migrep.sp

esta se ejecuta igual que la pgina.


more ./migrep.sp

123

Manual de Unix

124

Manual de Unix

8.1 INTRODUCCIN
8.1.1 Qu son los shells?
Se puede decir que un shell es el programa que acta como interfase entre el usuario y el sistema. El shell interpreta el texto que se teclea y las teclas que se presionan y le indican al sistema operativo cual es la accin apropiada que debe seguir. Un shell puede servir tambin como un lenguaje de programacin.

8.1.2 Qu es Bourne Shell?


El Bourne shell es el shell ms viejo de todos, fue hecho por Stephen Bourne en los Laboratorios Bell. Este shell es el de default para los usuarios de sistemas HP-UX. Este shell no cuenta con las caractersticas interactivas ni con las complejas construcciones de programacin de cshell o kshell.

8.1.3 Qu es C shell?
Este shell se desarroll por Bill Joy en la Universidad de California en Berkeley. La sintaxis de este shell es idntica a la del lenguaje de programacin C, de ah su nombre. Tiene caractersticas interactivas muy poderosas tales como una historia de comandos y COMPLEMENTO de nombres de archivos.

8.1.4 Qu es Korn shell?


ste es el shell ms reciente. Fue desarrollado por David Korn en los Laboratorios Bell y es compatible con muchas de las caractersticas de Bourne Shell. Cuenta con las herramientas interactivas de C Shell, pero con la ventaja de que tiene una ejecucin ms rpida. Adems tiene la capacidad de edicin en la lnea de comandos.

125

Manual de Unix

8.2 CAMBIO DE SHELL


Para poder saber con qu shell se est trabajando cuando se entra en sesin se puede escribir:
$echo $SHELL

El comando echo imprime en pantalla el valor del contenido de la variable llamada SHELL. sta variable contiene el nombre del archivo que indica que shell se est usando actualmente.

8.2.1 Cambio temporal del shell.


A menos que se est trabajando en un shell restringido, se puede hacer un cambio temporal de ste con slo teclear en la lnea de comandos el nombre del archivo del shell al que se quiere cambiar, por ejemplo, si se est trabajando en kshell y se desea cambiar a cshell se debe hacer esto:
$/bin/csh %

Como se puede observar, el prompt cambi de $ que es el prompt por default de ksh a % que es el de csh. Para salir del shell en uso simplemente se teclea en la lnea de comandos la palabra exit.

8.2.2 Cambio permanente del shell.


Comando: chsh (change shell) Descripcin: Este comando sirve para cambiar el shell de un usuario en forma permanente. Para cambiar el shell que se tiene por default al entrar en sesin en forma permanente se debe usar el comando chsh seguido por el nombre del usuario al que se le desea cambiar y por el nombre del shell al que se quiere cambiar, por ejemplo si el usuario navajo deseara cambiar su shell a csh tecleara lo siguiente:

126

Manual de Unix

$chsh navajo /bin/csh $

Para que tenga efecto este comando se debe salir de la sesin actual y al entrar la prxima vez el shell en uso ser el que se especific.

8.2.3 Usando ksh.


Una vez que se entra en sesin, el shell est listo para recibir comandos y esto se indica mediante el despliegue en pantalla de un prompt que en el caso de ksh es el caracter $ (signo de pesos), por default.

8.2.3.1 Variables de ambiente y las del Shell.


Las variables de ambiente son parmetros globales del shell que crean un ambiente especial para los subshells y para cualquier comando que se invoque. Este ambiente se desactiva hasta que el usuario salga de sesin. Por su parte, las del shell son parmetros que son locales al shell por default y no pasan a los subshells o a los subprocesos que se ejecuten. Ambos tipos de variables se inicializan en los archivos .profile y $ENV (normalmente llamado .kshrc). Cuando ksh es el shell por default, se ve si existen los archivos /etc/profile y .profile, si el primero existe, se ejecuta e inicializa las variables de ambiente, en el caso del segundo, se busca en el directorio propio y se ejecuta despus de entrar en sesin. Cuando se ejecuta el .profile se toma el contenido de la variable $ENV y se ejecuta, si el archivo nombrado ah existe. Por convencin, este archivo se llama .kshrc.

8.2.3.2 Inicializando variables en el .profile.


El archivo .profile establece el ambiente en el que se trabajar al definir variables, comandos, y parmetros al entrar en sesin. Los valores de stos son globales y disponibles para subshells y subprocesos si son exportados. Un ejemplo de un .profile es este:
PATH=/bin/posix:/usr/bin/:/usr/lib:/users/ptc/kyo:. MAIL=/usr/mail/kyo HOME=/users/ptc/kyo EDITOR=/usr/bin/vi ENV=~/kshrc TERM=hp2392 export ENV START EDITOR TERM PATH MAIL HOME

127

Manual de Unix

stty sane susp ^Z if mail -e then echo you have mail fi PS1=$

PATH define la ruta en el sistema de archivos de bsqueda para la ejecucin de comandos. Cada directorio en el PATH se separa por :. Cuando se quiere ejecutar un comando, el shell busca en cada uno de los directorios especificados en el PATH, para encontrar el comando. MAIL nombra el archivo en el cual se entrega el correo. La sentencia if checa si ha llegado nuevo correo y lo notifica. HOME establece el directorio de casa donde el shell te colocar al ejecutar el comando cd sin opciones. EDITOR define el editor por default, que en este caso es vi. As, cada vez que se necesite hacer cambios en la lnea de comandos, se entrar al modo vi. ENV esta variable est asignada normalmente a ser .kshrc y se ejecuta siempre que un shell es creado. TERM define el tipo de terminal para el cual la salida se preparar. El comando export hace globales los valores de estos parmetros para que los subprocesos tengan acceso a ellos. El comando stty define las caractersticas de la terminal los valores por default, por ejemplo susp ^Z (CTRL-Z) especifica la combinacin de teclas con la que se podr suspender un proceso. Cuando se define un .profile de verdad se utilizan muchas ms variables para hacer el ambiente de trabajo ms amigable. La siguiente tabla muestra algunas otras variables y parmetros :

Parmetro #

Definicin Representa el nmero, en decimal, de los parmetros dados al shell.

128

Manual de Unix

Parmetro - (dash)

Definicin Representa las banderas u opciones dadas al shell en algn comando. Representa el valor decimal (valor de salida) regresado al sistema por el ltimo comando ejecutado. Representa el nmero del proceso del ltimo shell invocado. Da el nmero del proceso del ltimo proceso en background ejecutado.

$ !

_ (subguin) Representa el ltimo argumento de la lnea de comando previa. CDPATH COLUMNS Contiene la ruta de bsqueda para el comando cd. Da el tamao de la ventana de edicin, en columnas, para los editores y para la impresin de listados. Contiene el editor que se usar cuando se invoque al comando set -o. Si este parmetro contiene el nombre de algn un shell script ste se ejecutar al invocar un nuevo shell. Especifica el nombre del editor que se usar al ejecutar el comando fc. Internal Field Separator (usualmente el espacio, tab y enter). Se usa para separar los comandos cuando se utiliza la sustitucin de parmetros y cuando se usa el comando read. Contiene el nombre del archivo que se usar como almacn de la historia de comandos. Este es por default el .sh_history. Contiene el nmero de comandos guardados en el .sh_history. El default es 128. Es el directorio casa. Contiene el directorio al que se trasladar al ejecutar el comando cd. Determina el tamao de la ventana de edicin en lneas. Si este parmetro contiene el nombre de un archivo y el parmetro de MAILPATH no est definido, el shell notifica que el correo que ha llegado est en el archivo nombrado aqu.

EDITOR

ENV FCEDIT

IFS

HISTFILE

HSTSIZE

HOME

LINES MAIL

129

Manual de Unix

Parmetro

Definicin

MAILCHEC Este parmetro especifica qu tan frecuentemente (en segundos) el shell verificar la llegada de un nuevo mensaje. El K default es 600 s. MAILPATH Cuando el shell se da cuenta de que ha llegado correo, este notifica que se encuentra en el archivo nombrado ah. PATH PPID Contiene la ruta de bsqueda para la ejecucin de comandos. Contiene el nmero del proceso padre del shell actual. Cuando se ejecuta el comando ps -ef, se ve este nmero. Asociado con este PPID est un PID, que es el nmero del proceso actual. Define el prompt primario del shell. El default es $. Si se precede este smbolo por un !, el prompt desplegar tambin el nmero del comando actual. Define el prompt secundario. El default es >. Este aparece cuando se escribe un script en la lnea de comandos. Es el prompt que utiliza el comando select. El default es #?. Contiene el nombre del directorio de trabajo actual. Contiene el nombre del directorio de trabajo anterior inmediato. Cuando se hace uso de este comando se genera un nmero entero aleatorio. Este parmetro se define por los comandos read y select cuando no se dan argumentos en la lnea de comandos de select. Regresa el nmero de segundos desde que se invoc el ltimo shell. Contiene la ruta del shell que se est ejecutando actualmente. Si este parmetro contiene un valor mayor que cero, el shell terminar sino se teclea algn comando o se pulsa un enter dentro de ese nmero de segundos. Cuando esta variable contiene algn parmetro como vi, entonces las opciones del comando set -o se activan.

PS1

PS2

PS3 PWD OLPWD RANDOM

REPLY

SECONDS

SHELL TMOUT

VISUAL

130

Manual de Unix

8.2.3.3 Definiendo el $ENV.


Este shell script define valores, tales como rutas de bsqueda y alias. Estos valores pueden ser tomados por subprocesos del shell. Un archivo ENV puede ser como este:
rl=/abreviacin/del/nombre/de/una/ruta/larga alias who=who|sort set -o monitor

La primera lnea del archivo define el contenido de rl como el directorio especificado a su derecha. As, al ejecutar el comando:
$ cd $rl

este colocar al usuario en el directorio especificado en rl. Se debe notar que el uso de $ antes de rl, designa que se usar el contenido de ese parmetro. El comando alias crea un nuevo comando, basado en los existentes en el shell. En el caso de este archivo, indica que el comando who ser ahora el mismo comando pero que adems, la salida se mostrar ordenada. Cada usuario puede crear su propio .kshrc utilizando un editor, pero el nombre del archivo creado debe ser defindo en la variable ENV en el .profile, de otro modo este archivo no se leer cuando se invoque un shell. Por ejemplo, si se usa el archivo .kshrc, una lnea en el .profile debe verse como esta:
export ENV=$HOME/.kshrc

8.2.3.4 El comando set.


Existe un comando que despliega el valor actual de cada una de las variables de ambiente, este es el comando set. Si se teclea set, entonces aparecer una lista de las variables definidas con sus contenidos:
EDITOR=/usr/bin/vi ... TMOUT=0 VISUAL=vi

131

Manual de Unix

8.2.3.5 Terminando el shell.


Hay dos maneras para salir: tecleando exit o CTRL-D. La opcin ignoreeof pone a CTRLD en activado o desactivado. El valor de ignoreeof se asigna con el comando set -o (i.e. al teclear set -o ignoreeof). Para determinar el valor actual de ignoreeof se teclea :
$set -o Current option settings allexport off bgnice on emacs off errexit off gmacs off ignoreeof on interactive on keyword off markdirs off monitor on noexec off noclobber off noglob off nolog off nounset on privileged off restricted off trackall off verbose off vi on viraw off xtrace off $

En este ejemplo ignoreeof esta activado, si ignoreeof esta desactivado, se debera teclear exit para salir del shell.

Usando exit.
Normalmente se sale de sesin usando exit o CTRL-D. Si se tratara de salir del shell usando CTRL-D estando ignoreeof desactivado el sistema responde con :
Use exit to logout

132

Manual de Unix

8.2.3.6 Ejecutando un logout script.


Si se deseara implementar una accin especial al salir de sesin, se podra hacer usando el comando trap y el shell script .logout. Si el archivo .logout existe y la siguiente sentencia aparece en el .profile:
trap HOME/.logout O

al salir de sesin el shell script .logout se ejecuta. Este archivo podra contener lneas como:
clear echo HASTA LUEGO

Comandos que se ejecutarn despus de teclear exit o CTRL-D.

8.2.3.7 Separadores y terminadores de comandos.


Algunos meta caracteres usados por el shell para separar o terminar comandos en una lnea as como para indicarle funciones especiales al shell. Por ejemplo:
date;ls &

donde ; es un separador y & es un terminador. Esta lnea le indica al shell que se ejecute el comando date y que despus se ejecute el comando ls en background. La siguiente tabla muestra los separadores y terminadores de comandos y da un ejemplo de cada uno de ellos:

Carcte Ejemplo r $whoami;ls ; kyo Mail html mail nptc programs vuefile correo images men nsmail textos $

Descripcin. Separa comandos que son ejecutados en secuencia. En este ejemplo, ls se ejecuta solamente despus de que el comando whoami se termina.

133

Manual de Unix

Carcte Ejemplo r $ find / text* >buscar & & [1] 22719 $echo hola hola

Descripcin. Indica que el comando debe ser ejecutado como un proceso asncrono. Eso significa que se pueden ejecutar otros comandos inmediatamente en la terminal mientras el otro comando se ejecuta invisiblemente en background. En este ejemplo el comando find se ejecuta en background dejando libre la terminal para ejecutar otros procesos. Es un separador de comandos. Le indica al shell que el segundo comando slo se ejecutar si el primero se ejecuta con xito, esto es, si su estado de salida es 0. En este ejemplo, si el comando ls falla al encontrar el archivo .kshrc, entonces echo no se ejecuta. Es un separador de comandos. En este caso, el segundo comando se ejecuta slo si el primero falla, esto es, que su estado de salida es diferente de 0. En este ejemplo, ls file* se ejecut porque no haba correo.

&&

$ls .kshrc && echo adis .kshrc adis $

||

$mail || ls file* No mail file1 file2 file3 $

134

Manual de Unix

8.3 CAPACIDADES DE SUSTITUCIN


8.3.1 Sustitucin con tilde.
Si una palabra comienza con una ~, la expansin con tilde es representada para esa palabra. Se debe notar que la expansin con tilde es slo para aquellas palabras que comienzan con una tilde, es decir, find /~pbm/abc no tiene una representacin con tilde. La expansin con tilde esta dada de acuerdo con las siguientes reglas: Una tilde por s misma o despus de un / se remplaza por la ruta definida en la variable HOME:
echo $HOME /users/ptc/kyo $ echo ~ /users/ptc/kyo $

Una tilde seguida por un + se remplaza con el valor de la variable PWD.


$ echo $PWD /users/ptc/kyo/textos $ ls ~+/May* /users/ptc/kyo/textos/May20 /users/ptc/kyo/textos/May25

/users/ptc/kyo/textos/May30

Una tilde seguida por un - se remplaza con el valor de la variable OLDPWD:


$echo $OLDPWD /users/ptc/kyo $ls ~-/n* /users/ptc/kyo/nptc /users/ptc/kyo/nsmail: Inbox

Si una tilde es seguida por muchos caracteres y despus por un /, el shell checa si los caracteres coinciden con el nombre de un usuario en el archivo /etc/passwd. Si coinciden, la secuencia de caracteres es remplazada por la ruta de entrada de ese usuario.

135

Manual de Unix

$ ls ~nancy bailarina.jpg dead.letter mbox carri hola men clase mail nancy $

nuevo pag pag.html

8.3.2 Sustitucin de parmetros.


Un parmetro es una entidad que puede tomar un valor. Los dos tipos de parmetros usados aqu son los parmetros con nombre, tales como HOME o IFS y los parmetros posicinales como 1, 2 3. La sustitucin paramtrica se da cuando el shell reemplaza en una lnea de comandos a los parmetros que encuentra en ella con sus valores, por ejemplo, cambia :
echo $HOME

por
echo /users/ptc/kyo

Y entonces, despus de la sustitucin paramtrica, la lnea es ejecutada. El comando echo no lee $HOME, es el shell el que hace la sustitucin. Como se vio en el ejemplo anterior, se puede accesar al contenido de un parmetro con nombre anteponindole el signo $, donde este smbolo especifica la sustitucin del valor del parmetro. Otro ejemplo es este:
$x=1 $echo $x 1 $

Los parmetros posicinales se pasan a un comando o a un shell script con el comando set. Los parmetros posicinales siguen al comando o al shell en la lnea de comandos. Entonces a cada uno de los argumentos separados con un espacio se le da un nombre de parmetro posicional 0, 1, 2, 3, etc. Estos nmeros corresponden directamente a los argumentos dados en la lnea de comando: 0 es nmero asociado al comando o script a ejecutar, 1 el nmero del primer argumento y as sucesivamente. El siguiente ejemplo aclarar el uso de este tipo de parmetros:

136

Manual de Unix

$ function print_args >{ >typeset -i x=0 #inic. x=0;declara a x como entero >while [ x -le $# ] # -le es menor o igual que >do > echo "El parametro posicional $x es: $(eval echo \$$x)" > let x=x+1 >done >} $ print_args uno dos tres El parametro posicional 0 es: print_args El parametro posicional 1 es: uno El parametro posicional 2 es: dos El parametro posicional 3 es: tres $

El comando set puede usarse para definir los parmetros posicinales para el shell, como en el siguiente ejemplo:
$ set -- primero segundo tercero $ echo $1 $2 $3 primero segundo tercero $

Lo anterior define al parmetro posicional 1 como primero, al parmetro posicional 2 como segundo y al parmetro posicional 3 como tercero.

8.3.3 Convenciones para la sustitucin paramtrica.


Un adecuado uso de la sustitucin paramtrica se da cuando se siguen las siguientes reglas: ${parmetro} Las llaves se requieren cuando un parmetro es seguido por una letra, dgito o subguin que no se quiere que sea interpretado como parte del nombre del parmetro, por ejemplo: ls /tmp/${file}_txt Si parmetro est definido y no es nulo, su valor se sustituye, de otro modo, se sustituye palabra. Por ejemplo: $unset x $echo ${x:-x esta vaca} x est vaca $

${parmetro:palabra}

137

Manual de Unix

Si parmetro no esta definido o es nulo, su valor ser el valor de palabra Si parmetro est definido y no es nulo, se sustituye por su valor; de otro modo, se imprime palabra y se sale del shell. Si se omite palabra, se imprime un mensaje por default. ${parmetro:+palab Si parmetro est definido y no es nulo, se sustituye palabra, de otro modo no se sustituye algo. ra} ${parmetro#patrn Si el patrn del shell coincide con el comienzo del parmetro, se sustituye el valor de parmetro con el } ${parmetro##patr patrn coincidente; de otra manera, se conserva el valor del parmetro. Por ejemplo: n} ${parmetro:=palab ra} ${parmetro:?palabr a $prog=/users/ptc/kyo/text $nombre_base=${prog##*/} $echo nombre_base text $ En la primer forma el patrn coincidente ms pequeo se borra, en la segunda el ms largo. ${parmetro%patr Si el patrn del Shell coincide con el final del valor del parmetro, entonces el valor del parmetro se n} ${parmetro%%pat sustituye con la parte que no coincide del patrn: rn} $prog=/users/ptc/kyo/text $prefijo=${prog%/*} $echo $prefijo /users/ptc/kyo $ Para los casos en que la sustitucin lleva :, si se omiten stos, no se checa si el parmetro es nulo.

8.3.4 Parmetros especiales.


$@ o $* Si el parmetro es * o @, entonces todos los parmetros posicinales , empezando con $1, son sustituidos: $comando arg1 arg2 arg3 ... $echo $@ arg1 arg2 arg3 $

138

Manual de Unix

${arreglo[*]}

${#parmetro}

${#arreglo[*]}

Si el parmetro describe un arreglo de elementos * o @, entonces se sustituye el valor de cada uno de los elementos. El # especifica que se sustituir el nmero de caracteres en el parmetro. Si el parmetro es * se sustituye el nmero de parmetros posicinales en la lnea de comandos. Con esto se sustituye el nmero de elementos que contiene el arreglo.

8.3.5 Sustitucin de comandos.


Este mtodo utiliza la salida de un comando para reemplazarla en la ejecucin de ese comando. La sintaxis para la sustitucin de comandos es $(comando). Por ejemplo:
$echo "Usuarios en sesion:\n$(who)" Usuarios en sesion: luisg ttyrc Jun 24 14:26 root console Jun 24 12:51 sergio pty/ttys0 Jun 24 13:41 kyo pty/ttys4 Jun 24 13:46 $

Otra forma para ejecutar esto es as comando, sintaxis reconocida para Korn y Bourne Shell.

139

Manual de Unix

8.4 PROGRAMACIN EN KORN SHELL


8.4.1 Creacin y ejecucin de Shell Scripts.
Los Shell Scripts son lneas de comandos que se ejecutan en un grupo. Un shell script puede ser una simple lnea de comandos:
$who;date;time

Los archivos .profile y .kshrc son ejemplos de un shell script. Para crear uno, se necesita un editor como el vi. Despus de ser creado el archivo, est contiene las lneas de comando listas para ejecutarse. Para hacer a un archivo ejecutable se le deben cambiar sus permisos, por ejemplo:
$chmod +x nom_arch

Despus de hacer esto, slo se necesita escribir el nombre del archivo para que se ejecute y se obtenga la salida deseada. Para el mejor entendimiento de un shell script se cuenta con la posibilidad de poner comentarios en l. Esto se logra anteponiendo a cualquier texto el caracter #. Por ejemplo:
#Este shell script imprime todos los archivos ejecutables for y in $(ls) #todos los archivos del directorio actual ...

8.4.2 Entrada y salida de datos.


Programar requiere inevitablemente la entrada y salida de datos. Korn Shell cuenta con los comandos echo y print para la salida y el comando read y la sustitucin posicional paramtrica para la entrada. Hay muchas maneras de pasar datos a un shell script, una es dando argumentos al programa a travs de parmetros posicinales; otra es utilizando el comando read. Una tercer forma es que el script lea de la stderr o de algn archivo nombrado.

140

Manual de Unix

8.4.2.1 El comando read.


El comando read posee la capacidad de leer la entrada durante la ejecucin de un script. Su sintaxis es:
read [-prsu[n]][nombre?prompt][nombre...]

En cada caso el comando lee una lnea y pone a cada palabra separada con un espacio en blanco en un nombre. El resto de la lnea va en el ltimo nombre. Si los nombres no se especifican, la lnea se lee en la variable de Shell REPLY. Las definiciones de las opciones son estas: -p -r -s lee de la salida de un proceso. No interpreta a \ como continuacin de lnea al final de ella. Pone la lnea de entrada en el archivo de historia.

-u[n] Lee la salida del descriptor de archivo n. Este es un ejemplo de un script utilizando read:
#hola.ksh read nombre?Cmo te llamas? echo Hola, $nombre, bienvenido a Korn Shell.

En este script el nombre del usuario se pide a travs de un prompt que es la pregunta y se almacena en la variable nombre. Al ejecutarlo se obtendra algo as:
$ hola.ksh Como te llamas?Joel Hola, Joel, bienvenido a Korn Shell.

El comando read puede leer y almacenar muchos valores a la vez:


read campo1 campo2 todo

Esta lnea lee el primer nombre separado con un espacio de la lnea de entrada y lo guarda en campo1, el segundo en campo2 y el resto en todo.

141

Manual de Unix

8.4.2.2 impresin de datos.


Algunas veces es necesario dar como salida de un script en la pantalla a algunos comentarios o datos, como los resultados del script y encabezados que describan la salida. El shell tiene dos mecanismos para hacer esto: el comando echo y el comando print. El comando echo imprime sus argumentos en la salida estndar. Estos argumentos son separados por espacios. Su sintaxis es:
echo [argumentos]

El siguiente ejemplo aclarar los usos para este comando:


$var="var es una variable" $ echo $var var es una variable $ echo "El contenido de var es: $var" El contenido de var es: var es una variable $ echo 'var es $var' var es $var

La primera parte del ejemplo muestra como se puede ver el contenido o valor de una variable anteponindole simplemente el carcter $. En la segunda lnea se ve como se pueden combinar la impresin de texto con la de contenidos de variables. En la tercera parte se usan comillas sencillas para imprimir exactamente lo que se tiene entre ellas. El comando echo se puede combinar con el caracter de escape \c y con el comando read para obtener una entrada de datos:
${ > echo " Como te llamas? \c" > read nombre > echo "Hola, $nombre" > } Como te llamas? Joel Hola, Joel $

Algunos caracteres se pueden usar par imprimir cadenas con formato. Estos son llamados secuencias de escape. stas son:

142

Manual de Unix

Caracter de escape \b \c \f \n \t \v \\

Resultado backspace esperar al final de la lnea salto de lnea salto de lnea tabulador tabulador vertical antidiagonal

La otra herramienta para impresin de resultados es print. La sintaxis para este comando es as:
print [-Rnprsu[n]][arg...]

Las opciones que maneja este comando son: -R -n -p -r -s ignora las secuencias de escape del comando echo excepto \n no aade nueva lnea a la salida ? ignora todas las secuencias de escape del echo guarda los argumentos en el archivo de historia

-u[n] escribe en el archivo descriptor n Por ejemplo la lnea:


$print -s # Fin del da. $(date)

Pone el comentario : Fin del dia seguido por la fecha actual en el archivo de historia.

8.4.3 Sentencias condicionales. 8.4.3.1 El comando test.


Este comando evala la expresin dada, si la expresin s evala verdadera, se regresa cero. Si la expresin se evala falsa, se regresa un valor distinto de cero. La sintaxis de este comando es:

143

Manual de Unix

test expr o [expr]

Algunas formas para usarse son estas: L arch arch1 -nt arch2 arch1 -ot arch2 arch1 -ef arch2 regresa cero si arch es una liga simblica regresa cero si arch1 es mas nuevo que arch2 regresa cero si arch1 es mas viejo que arch2 cero si ambos archivos son referidos al mismo archivo fsico.

Este comando se puede usar con combinaciones de los operadores and &&, or ||, y el operador negacin !.

8.4.3.2 La sentencia if.


Esta sentencia permite ejecutar uno o ms comandos, si una cierta condicin se cumple. La sintaxis para esta sentencia es:
if [ condicin ] then instruccin1 else instruccin2 fi

Esta sentencia verifica que la condicin sea verdadera (que regrese cero) para ejecutar la instruccin1 sino se ejecuta la instruccin2. Por ejemplo:
$ x=hola $ if [ $x == hola ] > then echo Bienvenido > else echo Adios > fi Bienvenido $

144

Manual de Unix

8.4.3.3 La sentencia case.


Esta sentencia permite checar condiciones fcilmente y entonces ejecutar una serie de comandos si la condicin se evala verdadera. La sintaxis para esta sentencia es:
case cadena in patrn1 [ | patrn2 ... ] ) lista de comandos1;; patrn2 [ | patrn3 ... ] ) lista de cimandos2;; ... esac

La primer lnea recibe una cadena, la se compara contra cada uno de los patrones para ver si coinciden. Si es as, la lista de comandos siguiente se ejecuta inmediatamente. Por ejemplo:
$case $i in > -d | -r ) rmdir $dir1; echo directorio borrado ;; > -o ) echo opcin -o ;; > -* )echo no es una opcin vlida ;; > esac

En este ejemplo case primero checa $i contra cada una de las opciones para ver si coinciden. Si $i coincide con -d o -r, el directorio se borra. Si coincide con -o o -*, se imprime un mensaje y por ltimo, si la cadena no comienza con -, no se lleva a cabo ninguna accin.

8.4.3.4 La sentencia select.


Este comando imprime en la pantalla un conjunto de palabras precedido por un nmero. Despus aparece el prompt #? pidiendo una seleccin la cual se guarda en la variable REPLY. Si el contenido de esa variable es un nmero de los que aparecen en la lista, el valor del parmetro ahora contiene el valor de la palabra correspondiente. Al seleccionar una de las palabras se ejecuta una lista de comandos . La sintaxis es:
select parmetro in palabras do lneas de comandos done

El siguiente es un ejemplo de lo que se puede hacer con esta sentencia:

145

Manual de Unix

select color in rojo verde azul salir > do > if [ $color = "salir" ] > then echo adios; break > else echo $color > fi > done 1) rojo 2) verde 3) azul 4) salir #? 1 rojo #? 2 verde #? 3 azul #? 4 adios $

Este men seguir apareciendo hasta que se teclee un valor no definido entre las palabras dedas en select o si se da una condicin en la sentencia para salir.

8.4.3.5 Uso del loop for.


Este loop permite ejecutar una lnea de comandos una vez para cada nuevo valor del parmetro especificado en la lista. La sintaxis es:
for parmetro [in lista] do lnea de comandos done

El siguiente es un ejemplo de como usar esta herramienta:


$for arch in $( ls ) > do > case $ls in > $ for arch in $( ls ) > do > if [ -x $arch ] > then > echo "$arch es ejecutable" > fi

146

Manual de Unix

> done correo.ksh es ejecutable images es ejecutable men es ejecutable vuefile es ejecutable $

8.4.3.6 Uso del loop while.


Este loop ejecuta las lneas de comandos que estn dentro de l mientras la condicin que tiene se evale verdadera. La sintaxis es:
while [ condicin ] do lneas de comandos done

Este ejemplo aclarar su uso:


x=0 $ while [ $x != 3 ] > do > let x=x+1 > echo " $x \c" > done 1 2 3 $

8.4.3.7 Uso del loop until.


Este loop tiene el mismo uso que el while, usando su misma sintaxis, slo que ste ejecuta las sentencias declaradas en l mientras la condicin sea falsa:
$x=0 $ until [ $x = 1 ] > do > let x=x+1 > echo $x > done 1

147

Manual de Unix

8.4.3.8 La sentencia break.


Este comando sirve para salir del ltimo loop creado, for, while, until o select. Su sintaxis es:
break [n]

Si se especifica el nmero n, se sale de los n loops anidados. Este es un ejemplo del uso de esta sentencia:
select color in rojo verde azul salir > do > if [ $color = "salir" ] > then echo adios; break > else echo $color > fi > done 1) rojo 2) verde 3) azul 4) salir #? 4 $

8.4.3.9 La sentencia continue.


Este comando se salta cualquier lnea que siga en un loop for, until, while o select hasta la prxima iteracin. La sintaxis es:
continue [n]

Si se especifica n, entonces la ejecucin del loop se hace hasta la ensima iteracin siguiente. Por ejemplo:
$for file in $( ls ) > do > if [ -x $file ] > then continue > echo $file es ejecutable > fi > echo $file no es ejecutable > done buscar no es ejecutable kyo.grep no es ejecutable nptc no es ejecutable $

148

Manual de Unix

En el ejercicio se tienen cuatro archivos y el segundo es ejecutable, si se hubiera tenido otro archivo que fuera ejecutable, se hubiera impreso el nombre del archivo y que es ejecutable.

8.4.3.10 Evaluacin aritmtica usando let.


let es un comando que le permite al shell script usar expresiones aritmticas. Este permite aritmtica con enteros largos. La sintaxis es:
let expresin_aritmtica

En la siguiente tabla se muestra el orden de precedencia de signos que usa let:

Operador ! * / % + <= >= < > == != =

Descripcin menos unario negacin lgica multiplicacin, divisin y residuo suma y resta comparacin igualdad y desigualdad asignacin

Ejemplos del uso de let:


$ $ $ $ $ $ $ $ $ $ 4 $ x=1 let x=1 x=1 let x=x+1OR x=1 let x=x+1*6-3/1 echo $x

El uso de parntesis se puede usar para romper la jerarqua de los operadores. Si se usan parntesis entonces se deben usar comillas que encierren a la expresin para evaluarla:

149

Manual de Unix

$ x=1 $ let "x=(x+1)*(6-3)/1" $ echo $x 6 $

Como se puede ver en estos ejemplos, al usar let no es necesario anteponer el $ a las variables.

8.4.3.11 Uso de arreglos.


Los arreglos son colecciones de elementos contiguos que pueden ser accesados por un subndice. La sintaxis para la declaracin de un arreglo es la siguiente:
array[subndice]=valor

Por ejemplo:
$ array[0]=cero $ array[1]=uno $ array[2]=dos $ echo ${array[*]} cero uno dos $

8.4.3.12 Creacin de funciones.


El comando function sirve para programar por mdulos. La sintaxis para programar as es:
function nombre_funcin { shell script }

o nombre_funcin () { shell script }

Ejemplo:

150

Manual de Unix

$ > > > > > >

function exef { if [ -x $1 ] then echo "$1 es ejecutable" fi }

Lo que hace esta funcin es tomar el nombre de archivo dado y verificar si es ejecutable, si la prueba es verdadera se imprime que es ejecutable Para poder llamar a una funcin se escribe el nombre de dicha funcin y los argumentos que ella necesite para procesarlos:
$ exef mail.ksh mail.ksh es ejecutable $

En un programa ms grande la llamada a la funcin sera as:


function exef { if [ -x $1 ] then echo "$1 es ejecutable" fi } for file in $( ls ) do exef $file done

Las funciones en Korn Shell permiten regresar un valor para tener conocimiento de su estado de salida . La sintaxis para lograrlo es esta:
return [n]

n nos especifica si el valor que la funcin regresa es el valor que regresa el ltimo comando ejecutado en la funcin. Por ejemplo:

151

Manual de Unix

$ > > > > > > > > > > > > $ 1 $ 6 $

fact () { integer x if (( $1 <= 2 )) then echo $1 else ((x=$1 -1)) let x=$(fact $x) ((x=x*$1)) echo $x fi } fact 1 fact 3

152

Manual de Unix

8.5 PROGRAMACIN EN BOURNE SHELL


La introduccin para los shells ya se di, as que para est y los siguientes slo se darn sus equivalencias en cuanto a sentencias y comandos tiles para la programacin. La nica diferencia en cuanto a sustitucin de comandos entre Bourne y Korn Shell es que Bourne slo acepta la sustitucin de comandos usando el acento grave , de esta manera: comando Recordemos que para Korn Shell la susutitucin es $( comando ). La primer forma es vlida tanto para Bourne como para Korn Shell, mientras que la segunda lo es slo para Korn Shell.

8.5.1 La sentencia if.


La sintaxis para esta sentencia es:
if condicin (o lista de comandos) then lista_de_comandos1 elif lista_de_comandos2 then lista_de_comandos3 ... else lista_de_comandosn fi

En esta estructura elif significa else if . Veamos un ejemplo para clarificar esta sentencia:
# shell par verificar si sampras o kyo estn en sesin if who | grep kyo >> buscar then echo "Joel esta en sesion" elif who | grep sampras >> buscar then echo "Manuel esta en sesion" else echo "Ni Joel ni Manuel estan en sesion" fi $ buscar.sh Joel esta en sesion $

153

Manual de Unix

8.5.2 El comando test.


El comando test se usa frecuentemente dentro de la estructura if para probar condiciones tales como igualdades. Los siguientes ejemplos aclararn su uso:
dir1=/usr/bin if test $dir1 == /usr/bin then echo directorio encontrado fi

En este ejemplo test se usa para comparar si el contenido de un variable es igual a una cadena.
if test $# -eq 0 then echo No hay parmetros fi

En este ejemplo el if verifica si se le pasaron parmetros al script si no es as que despliegue un mensaje de error.

8.5.3 El comando read.


Este comando sirve para la lectura de parmetros durante la ejecucin de un shell script, su sintaxis es as:
read [parmetro...]

8.5.4 El comando exit.


Un comando regresa al sistema un valor de estado cuando este se ejecuta. El comando exit permite que un shell script regrese un valor de estado cuando este termina de ejecutarse. Los estados de salida son :

154

Manual de Unix

Valor de salida 0

Descripcin Se ejecut bien Error en la estructura del comando Error de sintaxis Se recibi una seal que no es atrapada

8.5.5 Comentarios.
El caracter que sirve para agregar comentarios a un script es el #, todos los caracteres que le sigan no se interpretarn para ser ejecutados por el script.

8.5.6 El loop for.


La sintaxis para for es la misma que la que se vi anteriormente en ksh. Este ejemplo muestra otro uso para for:
for i do sort $i > /textos/${i}.srt done

Cuando no se especifica la clusula in , se toman como lista a los parmetros que se den al shell. En este caso, si los parmetros son nombres de archivo, estos se copiarn al directorio /textos ya ordenados.

8.5.7 Los loops while y until.


La sintaxis para estas dos herramientas de programacin es igual que en Korn Shell. Slo daremos ejemplos:

155

Manual de Unix

x=1 while [ x <= $# ] do cat $1 >> mezcla x=x+1 done

Este ejemplo ilustra el uso del loop while, que en este caso aade los archivos que se dan como parmetro a otro archivo. La ejecucin se detiene cuando se terminan los archivos. El loop until se ejecuta igual que el while con la diferencia de que se hace el ciclo hasta que la condicin sea verdadera.

8.5.8 La sentencia case.


La sintaxis y el uso de esta sentencia es exactamente la misma que la que se vi en Korn Shell.

8.5.9 El comando dot (.).


Cuando se ejecuta un shell script, este lo hace en un subshell, as que si en el programa se definen variables sus valores son legtimos slo mientras el programa se ejecuta. Para poder dejar los valores de las variables en el shell actual, se cuenta con el comando dot. Su sintaxis es :
. shell_script

Veamos un ejemplo de su uso. Cree un archivo con las siguientes lneas:


echo $dog dog=bull echo $dog

Despus hay definamos la variable dog as:


dog=rover

Ahora ejecutemos el script. La salida debi ser esta:

156

Manual de Unix

rover bull

Al checar el valor de dog este es:


$echo $dog rover $

Como se ve, el valor que aparece es el que se le di en el shell donde se ejecut el programa, no el que se le asign dentro de l. Ahora, ejecutando el programa con el comando dot:
$ . dog.sh rover bull $

Despus probando el valor de dog:


$echo $dog bull $

El valor de la variable dog ha cambiado porque el script se ejecut en el shell actual.

157

Manual de Unix

8.6 PROGRAMACIN EN C SHELL


El ambiente que se crea cuando se usa C Shell es diferente al que se tiene cuando se trabaja con alguno de los otros shells. Esta diferencia se basa primordialmente en los comandos, en la forma de programar y en la manera de definir las variables de ambiente.

8.6.1 Variables de ambiente y de shell.


Existen dos clases de variables que pueden definirse en el shell. Las variables de ambiente que son globales a cualquier subshell o subproceso. Estas variables son escritas normalmente en maysculas. La segunda clase de estas variables es la de variables del shell, las cuales son conocidas slo en el shell que se definieron. Estas variables son representadas normalmente en minsculas. A las variables de ambiente se les define con el comando setenv, mientras que a las de shell con el comando set. Sin embargo existen tres variables mas comnmente usadas que son USER, TERM, y PATH, las que son modificadas automticamente al definirse las variables de shell user, term y path, respectivamente. Por ejemplo, si se ejecuta la lnea:
$set path=(/bin/posix /bin /usr/bin) $

El valor de la variable de ambiente PATH, tambin se modifica, ahora PATH tiene /bin/posix /bin /usr/bin. Para verificar el ambiente actual del shell se ejecuta el comando set, sin argumentos, entonces aparecer una lista similar a esta:
[4] %set argv () autologout 60 cwd /tmp_mnt/users/ptc/kyo home /users/ptc/kyo ignoreeof noclobber path (/bin/posix /bin /usr/bin /usr/contrib/bin /usr/bin/X11 /users/local/bin /us ers/ptc/kyo/programs/ksh /users/ptc/kyo/programs/c /users/ptc/kyo/bin .) prompt [!] % shell /bin/csh status 0 term vt100 [5] %

158

Manual de Unix

En este ejemplo las variables ignoreeof y noclobber estn activadas.

8.6.2 Sustitucin de comandos.


Para hacer la sustitucin de comandos en csh se utiliza el acento grave , de esta manera:
[43] % set pwd=pwd [44] % echo $pwd /users/ptc/kyo/textos [45] %

La sustitucin de comandos tambin provee una manera de generar argumentos para otros comandos, por ejemplo:
[45] % ex grep -l TRACE *.c

Esta lnea corre el editor ex, supliendo como argumentos a todos aquellos archivos que tienen terminacin .c y que contienen lneas que llevan la cadena TRACE.

8.6.3 Variables del shell.


C shell tiene un conjunto de variables que pueden ser definidas con ayuda del comando set. Algunas de estas variables son estas: $argv. Esta variable contiene los argumentos de la lnea de comando del shell ejecutado. $autologout. Esta variable se usa para salir de sesin automticamente si la terminal no se usa durante el tiempo especificado. Por ejemplo:
set autologout=60

terminar la sesin automticamente si no se usa el sistema por un lapso de una hora. Para desactivar esta variable hay que igualarla con cero o teclear :
unset autologout

159

Manual de Unix

$cwd. Esta variable contiene la ruta del directorio actual de trabajo, esta variable se cambia cuando se usa el comando cd. $home. El contenido de esta variable es la ruta del directorio de trabajo de cada usuario. El valor por default de esta variable se toma del archivo /etc/passwd. $cdpath. En esta variable se especifican los directorios alternativos en los que se buscar cuando se le den argumentos a los comandos pushd, cd y chdir. noclober. Con este comando se evita la sobre escritura en un archivo al usar el comando cat o el redireccionamiento sobre ese archivo. notify. Si esta variable est activada, el sistema avisa cuando un proceso en background ha terminado. $path. Esta variable es una de las ms importantes en la operacin de C Shell. Esta variable contiene los directorios en los que se buscar cuando se dese ejecutar un comando. $prompt. Esta variable se utiliza para personalizar el prompt del shell. Por ejemplo:
% set prompt=[\!] % [1] % _

$status. Esta variable guarda el valor de cero si el ltimo comando ejecutado se llev a cabo con xito y algn valor diferente de cero si ocurri algn otro error.

8.6.4 Variables numricas del shell.


El comando @ (arroba) asigna un valor a una variable numrica, as como el comando set asigna una cadena a una variable no numrica. Estos valores pueden ser valores enteros. Por ejemplo:
% @ sum=(1+4) % echo sum 5 % @ sum=(01 + 012) % echo $sum 13 %

8.6.5 Expresiones numricas.


La sintaxis para evaluar una expresin aritmtica es esta:

160

Manual de Unix

@ variable = expresin

8.6.6 Evaluacin de archivos.


Las expresiones que incluyen la evaluacin de un archivo regresan un valor de 1 si esa evaluacin es cierta, al contrario, se regresa un 0. La expresin para evaluar un archivo es esta:
-prueba Nom_arch

La opcin prueba puede escogerse de entre la siguiente tabla:

Prueba d e f o r w z

significado Verifica si el archivo es un directorio Verifica si el archivo existe Verifica si el archivo es ordinario Verifica si el archivo le pertenece al usuario Verifica si el archivo ha sido accesado para lectura por el usuario Verifica si el archivo ha sido accesado para lectura por el usuario Verifica si el archivo est vaco.

8.6.7 Scripts en C Shell.


Un shell script puede ser ejecutado si se teclea el siguiente comando:
csh shell_script arg1 arg2 ...

A los argumentos que se le dan a un script en C Shell se guardan en el arreglo argv como argv[1], argv[2], etc. Si se desea ejecutar el script sin teclear el comando csh, entonces debe incluirse en la primer lnea del programa esto:
#!/bin/csh

161

Manual de Unix

8.6.8 Estructuras de control. 8.6.8.1 Comentarios.


Para escribir comentarios en un script si a ellos se les antepone el signo de libras #.

8.6.8.2 El comando foreach.


La sintaxis para esta sentencia es:
foreach variable_ndice comando1 comando2 ... end

Los comandos que se tienen entre el foreach y el end se ejecutan para cada argumento de la variable ndice. Dentro de este loop se pueden usar los comandos break y continue para detener y adelantar las ejecuciones en una iteracin.

8.6.8.3 La sentencia if-then-endif.


Este comando tiene la siguiente sintaxis:
if ( expresin ) then comando1 comando2 ... else comandoA comandoB ... endif

162

Manual de Unix

8.6.8.4 El loop while.


La estructura para esta sentencia es esta:
while ( expresin ) comando1 comando2 ... end

8.6.8.4 El comando switch.


La estructura para este comando es esta:
switch ( word ) case cadena1: comando1 comando2 ... breaksw case cadena2 comandoA comandoB ... breaksw ... default comandoI comandoII ... breaksw endsw

8.6.8.5 El comando goto.


C shell permite el manejo de etiquetas, su uso es como as:
etiqueta1: comando1 comando2 ... ... goto etiqueta1

163

Manual de Unix

164

Manual de Unix

9.1 INTRODUCCIN
AWK es uno de esos programas-joya con que nos obsequia el mundo UNIX. Uno de los filtros ms importantes, es un localizador de patrones de lenguaje de programacin que examina un flujo de datos de entrada y compara cada lnea con el conjunto de patrones especificados. Conocido y apreciado por los usuarios mas avanzados y notablemente desconocido por el resto, es el lenguaje que, entre otras cosas, podra ahorrar mucho tiempo, dinero y esfuerzo de programacin para gestin de pequeas y medianas bases de datos, personales o de empresas. La palabra 'awk' se usa tanto para referirse a un lenguaje de manipulacin de ficheros de datos como para referirse a su interprete. El nombre AWK proviene de las iniciales de sus desarrolladores : Alfred V. Aho, Brian W. Kerningan y Peter J. Weinberger, de los Laboratorios Bell de AT&T. Estos lo disearon e implementaron en 1977, en parte como un experimento para mostrar como las herramientas, de UNIX, grep y sed podan generalizarse para trabajar con nmeros adems de texto. En particular, los autores estaban interesados en expresiones regulares y editores programables. Inicialmente se desarroll para escribir programas muy cortos, pero las caractersticas de este atrajo a los usuarios de tal modo, que lo impuls ms all de la idea original de los autores. Aunque diseado para escribir pequeos programas, pronto atrajo a gran nmero de programadores, quienes produjeron muchos programas extensos que pusieron de manifiesto las limitaciones de la implementacin original. Por eso, en 1985 la versin original fue mejorada. Dado que los SO tipo Unix acostumbran con mucha frecuencia a usar ficheros de configuracin del sistema en formatos de texto perfectamente legibles y editables. En muchos otros casos un fichero de configuracin ser accedido de forma muy ocasional, y resulta ms interesante usar un formato de texto sencillo.Por ejemplo hay ficheros de configuracin que slo se usan durante la carga de un programa. Algunos de estos programas suelen cargarse una sola vez mientras arranca el sistema y luego en condiciones normales permanecen arrancados todo el tiempo. Se modific el lenguaje AWK para poder procesar este tipo de ficheros de datos en formato de texto. Puede sustituir tambin con ventaja a programas shell que combinen filtros como grep, sed, join, cut, paste y otros, ya que los programas tpicos de awk constan de una o dos lneas, y esto es suficiente para efectuar operaciones notablemente sofisticadas. En su estado actual, awk es un lenguaje tremendamente verstil, que ha sido y es usado para administracin de bases de datos, diseo de circuitos, anlisis numrico, grficos, diseo e implementacin de compiladores, administracin del sistema, lenguaje de entrada para no programadores y cursos de ingeniera de software.

165

Manual de Unix

9.2 FORMA GENRICA DEL PROGRAMA AWK


Si se escribe en lnea de comandos el programa va entre apostrofes (comillas) para protegerlo del shell en el que se ejecuta.
awk [-Fc] ['programa'] [variable=valor ] [archivo]

Si lo paso por programa es


awk [-f archivo_programa] archivo(s)

En donde: archivo_programa : especifica el archivo fuente del programa a aplicar a archivo. -Fc : especifica el carcter delimitador de campos. Por defecto se considera el espacio en blanco. programa : especifica el conjunto de patrones e instrucciones a ejecutar con archivo. La diferencia con archivo_programa, es que en este caso hay que especificar los patrones e instrucciones en la lnea de comandos. Para evitar interferencias con la shell deben ir encerradas entre comillas simples ('). variable=valor : se utiliza para establecer los valores que tomarn las variables que utilice el programa. archivo : archivo que ser procesado por awk. Si se especifica "-" se interpretar como la entrada estndar. Cuando se da la orden desde la lnea de comandos, no existir ningn problema, amenos que la orden este mal dada. Es ms recomendable que lo que se quiere ejecutar se realice en un script y posteriormente se corra, esto con el fin de poder corregir algn error ms fcilmente. Cuando se hace un script, la forma de correr el programa es:
awk -f archivo_programa archivo(s)

s el programa no necesita ningn archivo, entonces se omite esa parte. S se necesitan ms de un archivo, se colocan todos los que se requieran.

166

Manual de Unix

9.3 CAMPOS, VARIABLES Y OPERADORES


Una lnea de entrada se divide en campos separados por espacios, y cada campo se denomina como $1, $2, etc. $0 indica la lnea entera. Estas variables se pueden manipular como cualquier otra variable. Se pueden referir a los campos con expresiones numricas como $i, $(n+1), $(NF*3/NR), etc. Si la expresin resultante no es un entera, se truncar la parte decimal. El tratamiento de un campo como texto o numrico depender del contexto, awk resuelve las posibles ambigedades tratando los campos como texto En los programas de awk no es necesario declarar las variables, se realizar automticamente en funcin del contexto. Por defecto se inicializan a la cadena nula o valor numrico 0, por lo que no es necesario inicializarlas. Existen unas variables predefinidas, que pueden ser utilizadas dentro del programa: FS : Separador del campo de entrada. Se puede especificar con la opcin -Fc en la lnea de comandos RS : Separador de registro de entrada OFS : Separador del campo de salida. ORS : Separador de registro de salida NF : Nmero de campos en el registro actual NR : Nmero de registros procesados hasta el momento. Al final del programa se podr conocer el nmero e registros tratados. RSTART : Posicin de la cadena en la que se verifica el patrn utilizado, comenzando desde 1. Es equivalente al valor retornado por la funcin match. RLENGTH : Longitud de la cadena en la que se verifica el patrn utilizado. SUBSEP : Separador de cadenas en arrays multidimensionales. El valor por defecto es " 34". En 'awk' podemos usar toda clase de expresiones presentes en cualquier lenguaje. Cualquier identificador que no corresponda con una palabra reservada se asumir que es una variable. Para asignar un valor se usa el operador '='. Existen operadores aritmticos y lgicos que se pueden utilizar en AWK, son los siguietes:

Operadores aritmticos
+ Suma Resta

167

Manual de Unix

* / % ^

Multiplicacin Divisin Mdulo (resto) Potenciacin

Operadores lgicos
var = expr var ++ var -var += expr_aritm var -= expr_aritm var *= expr_aritm var /= expr_aritm var %= expr_aritm var ^= expr_aritm Asignacin Incrementa la variable en una unidad Decrementa la variable en una unidad Incrementa la variable en cierta cantidad Decrementa la variable en cierta cantidad Multiplica la variable por cierta cantidad Divide la variable por cierta cantidad Guarda en la variable el resto de su divisin por cierta cantidad Eleva el valor de la variable en cierta cantidad

168

Manual de Unix

9.4 AWK COMO LENGUAJE DE PROGRAMACIN


Algunos ejemplos desde la lnea de comandos, para empezar a conocer a awk y su forma de trabajar. Un ejemplo para utilizar a awk:
$ awk {print $0} mundo

con este comando obtendremos de salida la impresin del archivo mundo. Otro ejemplo es el siguiente: $ awk ' $3 > 0 { print $1, $2*$3} ' datos.emp

el patrn lo satisfacen aquellas lneas cuyo tercer campo es mayor que cero, y la accin consiste en imprimir el primer campo y el producto del segundo por el tercero. Un ejemplo donde se utiliza un entubamiento para el comando awk es el siguiente:
$ ls l | awk /^d/ {print $9}

en est ejemplo, primero se realiza un comando, el listado del directorio, y la salida se manda al comando awk, donde est busca los archivos que empiezan con d, y de estos va a imprimir en pantalla el campo 9.

9.4.1 Bloques BEGIN y END


Un archivo programa awk puede tener tres secciones distintas. Puede incluir una primera parte para que se ejecute antes de procesar alguna de las lneas de entrada. Se usa para ello la palabra reservada BEGIN seguida de una o mas instrucciones todas ellas englobadas dentro de un par de corchetes. { , }. Puede incluir una parte central donde se procesar entera para cada lnea de entrada de datos y que puede tener varios bloques { , }. Si uno de estos bloques contiene una expresin regular se procesar solo cuando la lnea de entrada se ajuste al patrn de la expresin regular. Es importante que comprenda que esta parte se ejecutar tantas veces como lneas de datos existan.

169

Manual de Unix

Puede incluir una parte final que se procesar en ltimo lugar una vez termine la lectura y procesado de todas las lneas de entrada. Se usa para ello la palabra reservada END seguida de una o ms instrucciones todas ellas englobadas dentro de un par de corchetes. { , }.

9.4.2.- Control de flujo.


Dada una pareja patron-accion, las estructuras de control de flujo que proporciona awk son exclusivas de la parte `accion'.

9.4.2.1.- if-else
La sintaxis de esta instruccin es:
if (expresion) { instrucciones } else { instrucciones }

Por ejemplo, para encontrar la media del dinero ganado por aquellos empleados que han trabajado mas de treinta horas:
BEGIN { n=0 pagado=0 } $3 > 30 { n=n+1; pagado=pagado+$2*$3} END { if (n>0) { print "numero de empleados: ", n print "se pago de media : ", pagado/n } else print "ningun empleado trabajo mas de treinta horas." }

170

Manual de Unix

9.4.2.2.- while
La sintaxis de while es:
while (expresion){ instrucciones }

Por ejemplo, para calcular el capital acumulado dada una cierta cantidad inicial que renta unos inters anuales:
# capital=capital_inicial*(1+interes)^aos { i=1 while (i<=$3){ printf "%.2f0 , $1*(1+$2)^I i=i+1 } }

Se ha introducido un comentario, sealado mediante #.

9.4.2.3.- for
La sintaxis de for es igual a la de C, y condensa en una sola lnea la inicializacin de la variable de control del bucle, el test y el incremento de dicha variable. Por ejemplo, el programa con el que se ilustr el bucle while puede rescribirse como:
{ for(i=1;i<=$3;i=i+1){ printf "%.2f0,$1*(1+$2)^I } }

171

Manual de Unix

9.4.2.4. Otras funciones


Adems de las funciones que se mencionan arriba, existen otras funciones con las que cuenta AWK, las funciones son:

break .- Se usa para salir del ciclo y ponerse en la instruccion siguiente continue .- vuelve al principio del ciclo (ignorando lo que quede por cumplir de ese ciclo). print .- sirve para imprimir en pantalla. print [lista de expesiones] [> expresion]

lista de expresiones nombre de variables o entre comillas el texto que queremos que se imprima

expresion

direccionamiento a un archivo >> adicionar

printf .- para imprimir en pantalla. La sintaxis es como C printf(formato, lista de expresiones, ... [>expresion])

Especificacin de formato de datos para 'printf'


%c %d %e %E %f %g %G %o %s %x %X %% Carcter ASCII Entero representado en decimal Coma flotante (exponente = e[+-]dd) Coma flotante (exponente = E[+-]dd) Coma flotante sin exponente Equivale al ms corto de los formatos 'e' o 'f' Equivale al ms corto de los formatos 'E' o 'F' Entero representado en octal Cadena de caracteres Entero representado en hexadecimal con minsculas Entero representado en hexadecimal con maysculas Carcter '%'

172

Manual de Unix

next .- saltea los patrones restantes exit.- sale de todo el programa de ese archivo sprintf.- igual a printf pero escribe en la variable de tipo string log.- devuelve logaritmo decimal de lo que sigue sqrt .-calcula la raz cuadrada de lo que sigue exp .- calcula la potencia length .- devuelve un numero de la cantidad de caracteres de la lnea en la que me encuentro int .- devuelve la parte entera por defecto de un numero real o racional substr(s,m,n).- devuelve sub cadena de s sacada desde m hasta n

9.4.3 Funciones incorporadas en el sistema


length(x) sqrt(x) log(x) exp(x) int(x) cos(x) sin(x) atan(x) Devuelve la longitud del argumento Devuelve la raz cuadrada del argumento Devuelve el logaritmo en neperiano del argumento (en base e) Devuelve el valor de e elevado al argumento Devuelve la parte entera del argumento Devuelve el coseno del argumento Devuelve el seno del argumento Devuelve el arcotangente del argumento

173

Manual de Unix

rand() match(s,r)

Devuelve un nmero aleatorio comprendido entre 0 y 1 Devuelve la posicin de s en donde ocurre r, comenzando desde 1. Si no existe devuelve 0. Devuelve la subcadena de s que comienza en la posicin m y finaliza en la n. Sustituye t por la primera ocurrencia de r en la cadena s. Si no se especifica s se tomar todo el registro ($0). Igual que sub, pero sustituyendo todas las ocurrencias. Divide la cadena s en array[1],...,array[n]. Se devuelve el nmero de elementos. Si no se especifica el separador en sep se utilizar el valor de FS. s puede ser una variable. Devuelve la posicin de la cadena s1 en donde se encuentra la cadena s2. En caso de no encontrarse se devuelve 0. Devuelve la cadena resultante de imprimir los valores e1, e2, ... con el formato especificado en f. Devuelve la cadena s convertida a maysculas. Devuelve la cadena s convertida a minsculas. Ejecuta el comando UNIX cmd especificado y retorna el estado de salida de este. Presenta en la salida los valores e1, e2, ... Presenta en la salida los valores e1, e2, ... con el formato especificado por f. Cierra el archivo o pipe abierto con print, printf o getline. Lee el siguiente registro de la entrada y se lo asigna a X, si no se especifica X se asignar a $0.

substr(s,m,n)

sub(r,t,s)

g(sub(r,t,s) split(s,array,sep)

index(s1,s2)

sprintf(f,e1,e2,...)

toupper(s) tolower(s) system(cmd)

print e1, e2, ... printf f, e1, e2, ...

close(f) getline X

174

Manual de Unix

9.4.4.- Arrays
Uno de los aspectos ms agradables de awk es la forma de trabajar con arrays. Al igual que para los nmeros y las cadenas, no es preciso declararlos, y el interprete se encarga de todo lo relacionado con el almacenamiento. El siguiente programa usa un array llamado `lineas' para guardar un archivo completo y luego imprimirlo en orden inverso:
{ linea[NR]=$0 # almacena cada linea } END { for(i=NR;i>0;i=i-1){ print linea[i] } }

175

Manual de Unix

176

Manual de Unix

10.1 COMANDO TAR (respaldo)


Descripcin: tar es una aplicacin de unix que permite colocar varios archivos en uno solo, o en un diskette, cinta, etc. Tar se puede utilizar de forma remota o de forma local. Al colocar varios archivos, se crea una copia del archivo original, por tanto se crea un respaldo. La forma de utilizar lo es la siguiente:
tar accin [opciones] archivos-origen archivo-destino

Opciones:

accin c r t U

Accin que se quiere realizar, se tienen las siguientes posibles acciones: Crea un nuevo archivo .tar Copia los archivos al final del archivo tar indicado (concatena). Muestra la tabla de contenidos del archivo de cinta especificado. Actualiza el archivo Lar con los especificados, los nuevos los pone al final del archivo y los que ya estn slo se sustituyen si han sido modificados o actualizados. Extrae del archivo Lar los archivos indicados. Especifica el nombre del archivo destino del archivo Lar que sc va a crear. Puede ser un archivo normal o un archivo especial de dispositivo como una cinta. Muestra el nombre de los archivos conforme se van procesando Modo interactivo hace que Lar pregunte antes de realizar cualquier accion. Se especifican los archivos a procesar en el archivo de texto archivo. Pasa el archivo de cinta por el comando gzip antes que por tar, en el caso de extraer, para descomprimir el archivo Lar previamente comprimido con gzip. Para la creacin, despus de procesar con Lar pasa el resultado por gzip para comprimir Generalmente estos archivos toman la extensin .tgz Lista de archivos que se van a procesar m, pueden ser directorios que se procesarn recursivamente.

x F v w F archivo Z

archivos

177

Manual de Unix

Ejemplos: Si utilizamos la siguente instruccin en la lnea de comandos.


$cd $ tar cvf respaldo.tar * $

con estos dos comandos, se crear el archivo respaldo.tar, est contendr todos nuestros archivos. Como el tar coloca varios archivos en uno solo, se dice que los encapsula. Para poder ver los archivos que contiene respaldo.tar, se tiene que desencapsular el archivo, se utiliza las siguientes opcines de tar.
$tar zxvf respaldo.tar $

En el directorio que estemos se creara un directorio llamado igual que el archivo, en este caso se llamara respaldo. Adentro de este directorio estarn todos los archivos, mantiene la estructura de directorios original que colocamos dentro del archivo tar.

178

Manual de Unix

10.2 COMANDO GZIP (GNU zip)


Descripcin: es un programa popular de compresin de datos escrito por Jean-Loup Gailly, para el proyecto GNU. La forma de utilizar el gzip, es la siguiente:
gzip [opciones] archivos

Opciones:
-c -d -f -l compressed uncompr ratio uncompressed_name -q -r Comprime pero dejando intactas los archivos originales, as tendremos tanto la copia comprimida como la original. Descomprime. Fuerza la compresin sin preguntar antes de borrar o sobrescribir. lista los siguientes campos, de un fichero comprimido. Tamao del fichero comprimido. Tamao del fichero descomprimido. Relacin de compresin (0.0% si no se conoce). Nombre del fichero descomprimido. Suprime los avisos por errores. Recorre la estructura de directorios recursivamente. Si algn archivo de los facilitados es un directorio con esta opcin lo recorre recursivamente comprimiendo todos sus archivos. Comprueba la integridad del fichero comprimido. Lista de archivos a procesar, se permiten los caracteres comodn.

-t archivos

Ejemplos:
$gzip * $

Comprime todos los archivos del directorio actual.

179

Manual de Unix

$gzip -d documento.gz $

Descomprime el archivo documento.gz dejndolo en su estado original


$gzp r /tmp $

Comprime todos los archivos del directorio /tmp. Se puede utilizar el comando gzip en un archivo en capsulado, como se muestra continuacin:
$ cd $ tar cvf respaldo.tar * $ gzip respaldo.tar $

Para desencampusular y des comprimir se utilizan los siguientes comandos:


$ gzip -d respaldo.tar.gz $ tar zxvf respaldo.tar $

Cuando se desea llevar la informacin, en al gun dispositivo de almacenamiento, de un lugar a otro es recomendable utilizar el encapsulado y el comprimido en el orden que se muestra en el ejemplo, ya que al desencapsular y dercomprimir se mantiene la jerarquia. Se puede utilizar primero el gzip y despus el tar, cuando se hace la encapsulacin y se comprime no importa el ordn. Cuando se quiere hacer el proceso inverso, si importa el ordn, primero canselamos lo ultimo que hicimos, en caso contrario mandara un mensaje de error.

180

Manual de Unix

10.3 ACCESO A LA RED CON TELNET


El comando telnet es la herramienta bsica para conexiones remota. Con telnet podr mantener sesiones como un terminal de la computadora remota, ejecutando comandos como si estuviera conectado localmente. Para conectarse a una computadora va telnet, debe disponer de un nombre de usuario y de una contrasea vlida para la computadora remota. Aunque algunos sistemas proporcionan funciones de conexin para invitados, esto no es muy corriente por razones de seguridad. Cuando se permiten conexiones de invitados, stas casi siempre colocan al usuario en un shell o sistema de men sujeto a restricciones. Un shell restringido impide que el usuario pueda ejecutar determinados comandos y un sistema de men slo permite seleccionar entre un conjunto previamente determinado de mens, bloqueando completamente el acceso al shell. Una desventaja es que debe trabajar en un entorno basado en terminal, puesto que telnet slo proporciona emulacin de terminal para terminales corrientes como, por ejemplo, el VT-100 de DEC, que no soporta entornos grficos. El telnet es poco recomendado, debido a que la informacin que viaja de la maquina donde nos encontramos a la maquina donde estamos trabajando se tranfiere como la colocamos. Esto provoca muy poca seguridad a la hora de transferir informacin o recivirla. La forma de utilizar telnet es la siguiente:
$ telnet cronos.fi-b.unam.mx

181

Manual de Unix

10.4 FTP (protocolo de tranferencia de archivos)


Para utilizar los archivos de transferencia FTP, deber disponer de un nombre de usuario y contrasea vlidos para la computadora remota. Esta combinacin de nombre de usuario y contrasea se utiliza para validar su sesin y determinar el tipo de acceso que tiene para transferir los distintos archivos. Adems, es obvio que deber conocer el nombre de la computadora con la que desea mantener una sesin FTP. Para abrir una conexin se utiliza:
$ ftp ftp> open cronosunam.mx

Tambin se puede abrir una conexin de est forma:


$ ftp cronos.fi-b.unam.mx ftp>

Para cerrar la conexin:


ftp> close

Un ejemplo de cmo sera una sesin con ftp es el siguiente:


$ ftp ftp> open cronos.fi-b.unam.mx Connected to cronos.fi-b.unam.mx. 220 cronos FTP server (Version 1.7.193.3 Thu Jul 22 18:32:22 GMT 1993) ready. 500 'AUTH GSSAPI': command not understood. 500 'AUTH KERBEROS_V4': command not understood. KERBEROS_V4 rejected as an authentication type Name (cronos.fi-b.unam.mx:delta01): delta01 331 Password required for delta01. Password: 530 Login incorrect. Login failed. Remote system type is UNIX. Using binary mode to transfer files. ftp>

182

Manual de Unix

Se pide el login y posteriormente el password, esto con el fin de validar. Cuando se hace la conexin, ya se pueden transferir archivos. El FTP se puede acceder como usuario annimo. Como en el ejemplo:
$ ftp ftp.uu.net ftp.uu.net (login:smith): anonymous Password: smith@linux. somewhere .com

NOTA Muchos sitios no permiten FTP como usuario annimo por razones de seguridad. En los casos en que no se permite FTP como usuario annimo, el comando ftp da un mensaje de error del tipo Login failed -User anonymous unknown. Los sitios que s permiten FTP como usuario annimo normalmente sitan al usuario en un rbol de directorios sujeto a restricciones con acceso slo de lectura. Si se le permite colocar archivos en la computadora remota, normalmente slo podr ubicarlos en un directorio.

10.4.1 Comandos ftp disponibles en la modalidad interactiva


! $ account append ascii bell binary bye Case cd cdup chmod close cr delete debug dir disconnect exit Comando Descripcin Escapa al shell. Ejecuta una macro. Enva el comando de cuenta al servidor remoto. Aade a un archivo. Establece el tipo de transferencia de archivos en la modalidad ASCII. Emite una seal acstica cuando se completa un comando. Ajusta el tipo de transferencias de archivos a la modalidad binaria. Finaliza la sesin FTP y sale. Conmuta mget entre asignacin de nombre de archivos con maysculas o minsculas. Cambia el directorio de trabajo en la computadora remota. Cambia el directorio de trabajo remoto al directorio matriz. Modifica los permisos de archivo del archivo remoto. Finaliza la sesin FTP Conmuta el filtrado de retornos de carro cuando se recibe un archivo ASCII. Borra archivos remotos. Borra archivos remotos. Lista el contenido del directorio remoto. Finaliza la sesin FTP (igual que close). Finaliza la sesin FTP y sale.

183

Manual de Unix

form get glob hash help idle image lcd ls macdef mdelete mdir mget mkdir mls mode modtime mput newer nmap niist

Establece el formato de transferencia de archivos. Obtiene un archivo de la computadora remota. Conmuta la expansin de comodn de nombres locales de archivo. Conmuta la impresin del carcter para cada memoria intermedia transferida. Imprime informacin de ayuda local. Obtiene o fija el temporizador en la computadora remota. Establece el tipo de transferencia de archivo al modo binario (lo mismo que binary). Cambia al directorio local de trabajo. Lista el contenido del directorio remoto (proporciona el tamao y el tipo de permiso asignado). Define una macro. Borra archivos mltiples en la computadora remota. Lista el contenido de directorios remotos mltiples. Obtiene archivos mltiples de la computadora remota. Crea un directorio en la computadora remota. Lista el contenido de directorios remotos mltiples. Establece la modalidad de transferencia de archivos. Muestra la hora de la ltima modificacin del archivo remoto. Enva archivos mltiples a la computadora remota. Obtiene el archivo remoto si ste es ms reciente que el archivo local correspondiente. Establece plantillas para asignacin predeterminada de nombres de archivos. Lista el contenido del directorio remoto.

10.4.2 Una sesin FTP


El comando open se utiliza para abrir una sesin FTP con un sistema remoto. Su sintaxis es la siguiente:
ftp> open nombre_del_servidor

Los comandos close, quit, exit y bye se utilizan para finalizar una sesin FTP con una computadora remota. El comando close cierra su conexin a la computadora remota, pero le dejan dentro del programa ftp en su computadora local. Los comandos quit, exit y bye cierran su conexin a la computadora remota si hay una conexin activa y posteriormente provocan la salida del programa ftp en su computadora.

184

Manual de Unix

Los comandos get y mget se utilizan para recuperar archivos de una computadora remota. El comando get recupera el archivo que especifica como un argumento (nombre-archivo); la sintaxis del comando get es:
ftp> get nombre_archivo_remoto

Tambin puede proporcionar un nombre al archivo cuando lo cre en su computadora local, si no proporciona un nombre de archivo local se utiliza el nombre_ archivo_remoto. El comando mget recupera archivos mltiples al mismo tiempo. Su sintaxis es la siguiente:
ftp> mget archivo1 archivo2 archivo3

Estos archivos se especifican proporcionando una lista de nombres de archivo separados por espacios o utilizando un patrn de comodines a mget. Aparecer un indicador para cada archivo. Utilice el comando prompt antes de utilizar mget si desea desactivar los indicadores. En ambos casos, los archivos se transfieren como archivos ASCII, salvo que haya establecido la modalidad de transferencia de otra forma. Los comandos put y mput se utilizan para enviar archivos a una computadora remota. El comando put enva el archivo local que especifique como un argumento. La sintaxis de este comando es:
ftp> put nombre_archivo_enviar

El comando mput enva una serie de archivos locales. La sintaxis de este comando es:
ftp> mput lista_nombre_archivo

Estos archivos se especifican proporcionando una lista de nombres de archivos separados por espacios o un patrn de comodines a mput. Cuando utilice mput aparecer un indicador para cada archivo. Utilice el comando prompt si desea desactivar los indicativos. En ambos casos, los archivos se transfieren como archivos ASCII, salvo que haya establecido la modalidad de transferencia de forma distinta.

185

Manual de Unix

10.4.3 Comprobacin del estado de transferencia


Cuando transfiera un archivo de gran tamao, resulta muy til que ftp le proporcione informacin sobre el proceso de transferencia. El comando hash hace que ftp imprima un carcter de almohadilla (#) en la pantalla cada vez que finaliza la transferencia de un almacenamiento de datos. Este comando funciona igual para el envo que para la recepcin de archivos. El carcter ! se utiliza para pasar un comando al shell de comandos de su computadora local mientras se encuentran en FTP. Esto puede ser de gran utilidad si tiene que hacer algo mientras se encuentra en medio de una sesin FTP. Por ejemplo, suponga que necesita crear un directorio donde guardar los archivos recibidos. Si escribe !mkdir new_dir. El sistema crear un directorio llamado new_dir en su directorio local actual.

186

Manual de Unix

10.5 ROLOGIN
El comando rlogin es muy parecido al comando telnet, ya que permite iniciar una sesin de comandos interactiva en un sistema remoto. La sintaxis de este comando es la siguiente:
$rlogin [-8EKLdx] [-e char] [-k realm] [-l nombre_usuario] nombre_servidor

Aunque la utilizacin ms comn es sencillamente:


$ rlogin nombre _servidor

187

Manual de Unix

10.6 CONECCIN REMOTA CON SSH


ssh (abreviatura de la expresin inglesa secure shell o shell seguro), es un programa que permite conectar con la mquina remota y ejecutar comandos en dicha mquina remota. ssh est diseado definir una sesin encriptada entre sistemas poco fiables en una red insegura. Uno de los problemas que plantea telnet es que, cuando el usuario se conecta al sistema remoto, la contrasea se enva como texto ASCII a la red. De esta forma, si otro usuario comprueba los paquetes Ethernet, puede detectar el nombre de conexin y contrasea del usuario original para el sistema remoto. ssh evita este tipo de problemas al utilizar una autentificacin basada en RSA. Debido a sus prestaciones en materia de seguridad, los administradores de sistemas utilizan ssh de forma habitual. Los clientes de ssh tambin pueden utilizarlos otros sistemas operativos, como Macintosh y Windows. El comando ssh es muy parecido al comando telnet ya que permite iniciar una sesin de comandos interactiva en un sistema remoto. ssh tiene la sintaxis siguiente: ssh [-a] [-c idea | blowfish | des | 3des | arcfour | tss | none ] [-e escape_char] [-I identity file] [-l login_name] [-n] [-k] [-V] [=o option] [-p port] [-q] [-P] [-t] [-v] [-x][-c] [-L porthost:hostport ] [-R port:host:hostport] hostname [comand] Sin embargo, normalmente se usa como sigue:
$ ssh hostname

Un ejemplo es el siguiente:
$ ssh hostname

188