Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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
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
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.
15
Manual de Unix
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.
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
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.
21
Manual de Unix
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.
22
Manual de Unix
23
Manual de Unix
Archivos:
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
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
En caso de que existan archivos en el directorio probablemente se ver algo como esto:
$ls carri $ clase nuevo
29
Manual de Unix
1 1 2
163 379 64
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
6 23 4 4 4
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 $
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
1 2 1
163 64 379
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
163 379 64
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
379 64 163
33
Manual de Unix
users
bin
etc
dev
ptc
local
sh
date who
passwd
tty00
tty01
nancy
bin
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
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
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.
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
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
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
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.
39
Manual de Unix
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.
40
Manual de Unix
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 $
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.
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.
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
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
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
44
Manual de Unix
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
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.
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.
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 $
48
Manual de Unix
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.
50
Manual de Unix
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..
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
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:
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
nota
steve
other
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
nota
other
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
nota
other
nota
other
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 $
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
steve
other
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
nota
steve
other
nota
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
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.
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
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.
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
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
63
Manual de Unix
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 $
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 . $
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 :.
65
Manual de Unix
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
La ltima lnea del resultado indica la suma de las estadsticas de los cuatro 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.
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 $
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
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 encuentra todas las lneas que terminen con la cadena 099.
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.
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.
Le indica al comando que encuentre las lneas que comiencen con k y que les siga cualquier cantidad de caracteres hasta encontrar die.
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
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.
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:
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
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.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
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).
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
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
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
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 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
86
Manual de Unix
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
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
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
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
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 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
Al terminar su cometido un comando el sistema responde con otro !, indicando que la tarea ha terminado.
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 $
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.
100
Manual de Unix
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 $
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.
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
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.
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 ...
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
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.
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
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
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 ... ?
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
Running Done
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
114
Manual de Unix
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
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 $
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
117
Manual de Unix
Tiempo de CPU consumido por el proceso. Identificador del usuario que lanz el proceso. Cantidad de kilobytes del proceso en la memoria SWAP
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
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
donde -t procesa -man carga la pgina -Tascciprepara la salida para poder usar la man page.
122
Manual de Unix
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
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.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.
125
Manual de Unix
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.
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.
126
Manual de Unix
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.
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 #
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
REPLY
SECONDS
SHELL TMOUT
VISUAL
130
Manual de Unix
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
131
Manual de Unix
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
al salir de sesin el shell script .logout se ejecuta. Este archivo podra contener lneas como:
clear echo HASTA LUEGO
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.
&&
||
134
Manual de Unix
/users/ptc/kyo/textos/May30
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 $
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.
${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.
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.
Otra forma para ejecutar esto es as comando, sintaxis reconocida para Korn y Bourne Shell.
139
Manual de Unix
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 ...
140
Manual de Unix
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.
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
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
Pone el comentario : Fin del dia seguido por la fecha actual en el archivo de historia.
143
Manual de Unix
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 !.
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
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.
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.
146
Manual de Unix
> done correo.ksh es ejecutable images es ejecutable men es ejecutable vuefile es ejecutable $
147
Manual de Unix
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 $
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.
Descripcin menos unario negacin lgica multiplicacin, divisin y residuo suma y resta comparacin igualdad y desigualdad asignacin
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
Como se puede ver en estos ejemplos, al usar let no es necesario anteponer el $ a las variables.
Por ejemplo:
$ array[0]=cero $ array[1]=uno $ array[2]=dos $ echo ${array[*]} cero uno dos $
Ejemplo:
150
Manual de Unix
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 $
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
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
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.
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.
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.
155
Manual de Unix
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.
156
Manual de Unix
rover bull
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 $
157
Manual de Unix
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
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.
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.
160
Manual de Unix
@ variable = expresin
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.
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
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.
162
Manual de Unix
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
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
Operadores aritmticos
+ Suma Resta
167
Manual de Unix
* / % ^
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
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.
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.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 } }
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
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
printf .- para imprimir en pantalla. La sintaxis es como C printf(formato, lista de expresiones, ... [>expresion])
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
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,...)
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
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
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
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 * $
179
Manual de Unix
$gzip -d documento.gz $
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 $
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
181
Manual de Unix
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.
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.
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
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
187
Manual de Unix
Un ejemplo es el siguiente:
$ ssh hostname
188