SISTEMAS OPERATIVOS ACTUALES Los sistemas operativos empleados normalmente son UNIX, Mac OS, MS−DOS, OS/2 y Windows−NT. El UNIX y sus clones permiten múltiples tareas y múltiples usuarios. Su sistema de archivos proporciona un método sencillo de organizar archivos y permite la protección de archivos. Sin embargo, las instrucciones del UNIX no son intuitivas. Otros sistemas operativos multiusuario y multitarea son OS/2, desarrollado inicialmente por Microsoft Corporation e International Business Machines Corporation (IBM), y Windows−NT, desarrollado por Microsoft. El sistema operativo multitarea de las computadoras Apple se denomina Mac OS. El DOS y su sucesor, el MS−DOS, son sistemas operativos populares entre los usuarios de computadoras personales. Sólo permiten un usuario y una tarea. UNIX (CONCEPTOS BASICOS SOBRE) UNIX, en informática, sistema operativo multiusuario que incorpora multitarea. Es un sistema operativo de tiempo compartido, controla los recursos de una computadora y los asigna entre los usuarios. Permite a los usuarios correr sus programas. Controla los dispositivos de periféricos conectados a la máquina. El sistema operativo UNIX tiene diversas variantes y se considera potente, más transportable e independiente de equipos concretos que otros sistemas operativos porque está escrito en lenguaje C. El UNIX está disponible en varias formas, entre las que se cuenta AIX, una versión de UNIX adaptada por IBM (para su uso en estaciones de trabajo basadas en RISC), A/UX (versión gráfica para equipos Apple Macintosh) y Mach (un sistema operativo reescrito, pero esencialmente compatible con UNIX, para las computadoras NeXT).Este sistema operativo es usado en diferentes estaciones de trabajo, así como también por los administradores de red de área local junto con el sistema operativo os/2 y ms−dos este sistema autoriza a los usuarios compartir archivos y recursos del sistema, como discos duros e impresoras. Asimismo, ofrece la posibilidad de ejecutar aplicaciones distribuidas usando arquitecturas cliente/servidor. HISTORIA COMPLETA Entre 1965 y 1969, los Laboratorios Bell participaron con General Electric (Más tarde Honeywell) y Project MAC (Del Massachusetts Institute of Technology) en el desarrollo del sistema Multics. Este sistema diseña do para la macrocomputadora GE−645, era demasiado grande y complejo. Los diseñadores de Multics tenían en mente un programa de utilidad general que pudiera ser en esencia "todo para el mundo". Al avanzar los trabajos se hizo evidente que aunque Multics proporcionaría con toda probabilidad la diversidad de servicios requerida, sería un sistema enorme, costoso y torpe. Por estas y muchas otras razones, los Laboratorios Bell se retiraron del proyecto en 1969. Algunos de los miembros de investigación de Bell comenzaron a trabajar en un sistema mucho menos ambicioso. El grupo, dirigido por Ken Thompson, buscaba crear un ambiente de computación sencillo para investigación y desarrollo de programas potentes. La primera versión de un sistema UNIX se creó para un DEC PDP−7 y se escribió en lenguaje ensamblador. Thompson llevó a la práctica un sistema de archivos, un mecanismo de control de procesos, programas para el manejo general de archivos y un intérprete de mandatos (Comandos). En 1970 Brian Kernighan acuñó el nombre "UNIX" haciendo un juego de palabras con Multics; de hecho, en el sentido en que Multics era "multi", los sistemas UNIX eran sin duda servicios de computación "uni", limitados. Cuando apareció la PDP−11, su atractivo precio permitió al grupo adquirir la máquina. No contaba con apoyo para la multiprogramación; la computadora tenía sólo 24K y el sistema ocupaba 16K ; por tanto quedaban 8K 1 reservados para el usuario. El tamaño máximo de archivo era de 64Kbytes. La aplicación principal era el procesamiento de textos. No había protección del almacenamiento, de modo que el sistema podía caerse con facilidad durante la prueba de un programa nuevo. El disco era pequeño, apenas ½ Megabyte. Dennis Ritchie se unió a la labor de desarrollo y ayudó a rescribir los sistemas UNIX en C en 1973. Esto ayudó a que los programas de los sistemas UNIX se volvieran más portátiles y comprensible s. Las contribuciones de Thompson y Ritchie recibieron como reconocimiento el premio Turing, el de más prestigio en la comunidad de computación. Antes de la liberalización, AT&T no tenía permiso para competir en la industria de la informática, por lo que ofreció los sistemas UNIX a las universidades por una cuota nominal. Además de distribuir el código fuente, fomentando así el desarrollo adicional y las innovaciones. En 1975 los sistemas UNIX se habían popularizado muchísimo en las universidades y así apareció una organización de usuarios que evolucionó hasta convertirse en el grupo llamado USENIX. Los sistemas UNIX satisfacen necesidades de los programadores que crean software y de los administradores que deben controlar las labores de desarrollo de programas. Sin embargo, no estaban diseñados para sustituir los sistemas operativos comerciales "de trabajo pesado" que dan apoyo a un procesamiento masivo de datos. El sistema de tiempo compartido UNIX, séptima edición, editado en 1979, hizo que los sistemas UNIX estuvieran más cerca de convertirse en productos comerciales válidos. Los archivos podían llegar a un tamaño de mil millones de bytes. El sistema se hizo todavía más portátil y se amplió el lenguaje C. Se llevó a la práctica un shell (Intérprete de los mandatos del usuario) más potente que incluía variables de cadena, programación estructurada, manejo de trampas y otras características. Se añadió la capacidad de añadir archivos entre una máquina y otra. Reconociendo el valor de los sistemas UNIX, Microsoft anunció en 1980 que ofrecería XENIX, una versión comercial de sistema UNIX, en microprocesadores de 16 bits. Para mejorar la viabilidad, Microsoft agrego la recuperación de errores por hardware, reparación automática de archivos después de caídas, detección de fallas en el suministro de energía y errores de paridad, segmentos compartidos de datos y una mejor comunicación entre procesos. En 1980, la Universidad de California en Berkeley recibió fondos del Departamento de Defensa para evolucionar los sistemas UNIX de sistemas operativos pequeños de tiempo compartido a sistemas apropiados para estudiar ambientes de computación distribuida. Esto redundó en el desarrollo del sistema 4.1 BSD, después AT&T comercializó el sistema UNIX System III en 1982, este evolucionó hasta convertirse en System V. Ventajas de unix ♦ Multiusuario. ♦ Multitarea. ♦ Soporta acceso remoto. ♦ Soporte nativo de TCP/IP (Fácil conexión a Internet y otras redes) ♦ Contiene xFree86, que es una interfaz gráfica de usuario basada en los estándares de X−Windows, y también es gratuita. ♦ Al instalar el sistema operativo, también se tiene la posibilidad de instalar varios programas, tales como: hojas de cálculo, bases de datos, procesadores de texto, varios lenguajes de programación, paquetes de telecomunicaciones y juegos. ♦ Cumple los estándares POSIX y de Sistemas Abiertos, esto es que tiene la capacidad de 2 comunicarse con sistemas distintos a él. ♦ Existe mucha documentación sobre éste. Desventajas de unix ♦ Carencia de soporte técnico. ♦ No ofrece mucha seguridad. ♦ Problemas de hardware, no soporta todas las plataformas, y no es compatible con algunas marcas específicas. ♦ No existe un control de calidad al momento de elaborar software para Linux, pues muchas veces las aplicaciones se hacen y se liberan sin control alguno. ♦ Es poco probable que aplicaciones para DOS y OS/2, se ejecuten correctamente bajo Linux. ♦ No hay forma segura de instalarlo sin reparticionar el disco duro. ♦ El reparticionar el disco duro, implica borrar toda la información del mismo y después restablecerla. ♦ Se requiere experiencia y conocimiento del sistema para administrarlo, pues como es un sistema por línea de comandos, estos poseen muchas opciones y en ocasiones es difícil realizar algunas tareas, que en otros sistemas operativos de red son triviales. CARACTERISTICAS El Shell. El shell es el mecanismo de los sistemas UNIX para lograr la comunicación entre los usuarios y el sistema. Es un intérprete de comandos que lee líneas tecleadas por el usuario y hace que se ejecuten las funciones del sistema solicitadas. Es un programa de aplicación como cualquier otro; no es parte del núcleo. Es frecuente que los sistemas UNIX manejen varios shells diferentes. El shell no reside permanentemente en la memoria principal como e l núcleo; puede intercambiarse cuando se necesite. EL NUCLEO. El núcleo es la parte central de los sistemas operativos UNIX; encapsula el equipo y ofrece servicios de sistemas UNIX a los programas de aplicaciones. El núcleo se encarga de la administración de procesos, de memoria, de E/S y del reloj. Así como el shell proporciona servicios a los usuarios, el núcleo proporciona servicios a los programas de aplicación, incluyendo al shell. El núcleo del sistema operativo Unix (llamado Kernel) es un programa escrito casi en su totalidad en lenguaje C, con excepción de una parte del manejo de interrupciones, expresada en el lenguaje ensamblador del procesador en el que opera. Las funciones del núcleo son permitir la existencia de un ambiente en el que sea posible atender a varios usuarios y múltiples tareas en forma concurrente, repartiendo al procesador entre todos ellos, e intentando mantener en grado óptimo la atención individual. El Kernel opera como asignador de recursos para cualquier proceso que necesite hacer uso de las facilidades de cómputo. Es el componente central de Unix y tiene las siguientes funciones: − Creación de procesos, asignación de tiempos de atención y sincronización. − Asignación de la atención del procesador a los procesos que lo requieren. − Administración de espacio en el sistema de archivos, que incluye: acceso, protección y administración de 3 usuarios; comunicación entre usuarios v entre procesos, y manipulación de E/S y administración de periféricos. − Supervisión de la transmisión de datos entre la memoria principal y los dispositivos periféricos. El Kernel reside siempre en la memoria central y tiene el control sobre la computadora, por lo que ningún otro proceso puede interrumpirlo; sólo pueden llamarlo para que proporcione algún servicio de los ya mencionados. Un proceso llama al Kernel mediante módulos especiales conocidos como llamadas al sistema. El Kernel consta de dos artes principales: la sección de control de procesos y la de control de dispositivos. La primera asigna recursos, programas, procesos y atiende sus requerimientos de servicio; la segunda, supervisa la transferencia de datos entre la memoria principal y los dispositivos periféricos. En términos generales, cada vez que algún usuario oprime una tecla de una terminal, o que se debe leer o escribir información del disco magnético, se interrumpe al procesador central y el núcleo se encarga de efectuar la operación de transferencia. Cuando se inicia la operación de la computadora, debe cargarse en la memoria una copia del núcleo, que reside en e] disco magnético (operación denominada bootstrap). Para ello, se deben inicializar algunas interfaces básicas de hardware; entre ellas, el reloj que proporciona interrupciones periódicas. El Kernel también prepara algunas estructuras de datos que abarcan una sección de almacenamiento temporal para transferencia de información entre terminales y procesos, una sección para almacenamiento de descriptores de archivos y una variable que indica la cantidad de memoria principal. A continuación, el Kernel inicializa un proceso especial, llamado proceso 0. En general, los procesos se crean mediante una llamada a una rutina del sistema (fork), que funciona por un mecanismo de duplicación de procesos. Sin embargo, esto no es suficiente para crear el primero de ellos, por lo que el Kernel asigna una estructura de datos y establece apuntadores a una sección especial de la memoria, llamada tabla de procesos, que contendrá los descriptores de cada uno de los procesos existentes en el sistema. Después de haber creado el proceso 0, se hace una copia del mismo, con lo que se crea el proceso 1; éste muy pronto se encargará de "dar vida" al sistema completo, mediante la activación de otros procesos que también forman parte del núcleo. Es decir, se inicia una cadena de activaciones de procesos, entre los cuales destaca el conocido como despachador, o scheduler, que es el responsable de decidir cuál proceso se ejecutará y cuáles van a entrar o salir de la memoria central. A partir de ese momento se conoce el número 1 como proceso de inicialización del sistema, init. El proceso init es el responsable de establecer la estructura de procesos en Unix. Normalmente, es capaz de crear al menos dos estructuras distintas de procesos: el modo monousuario y el multiusuario. Comienza activando el intérprete del lenguaje de control (Shell) en la terminal principal, o consola, del sistema y proporcionándole privilegios de "súper usuario". En la modalidad de un solo usuario la consola permite iniciar una primera sesión, con privilegios especiales, e impide que las otras líneas de comunicación acepten iniciar sesiones nuevas. Esta modalidad se usa con frecuencia para revisar y reparar sistemas de archivos, realizar pruebas de funciones básicas del sistema y para otras actividades que requieren uso exclusivo de la computadora. Init crea otro proceso, que espera pacientemente a que alguien entre en sesión en alguna línea de comunicación. Cuando esto sucede, realiza ajustes en el protocolo de la línea y ejecuta el programa login, que se encarga de atender inicialmente a los nuevos usuarios. Si la clave del usuario, y la contraseña proporcionadas son las correctas, entonces entra en operación el programa Shell, que en lo sucesivo se encargará de la atención normal del usuario que se dio de alta en esa terminal. A partir de ese momento el responsable de atender al usuario en esa terminal es el intérprete Shell. 4 Cuando se desea terminar la sesión hay que desconectarse de Shell (y, por lo tanto, de Unix), mediante una secuencia especial de teclas (usualmente. < CTL > − D). A partir de ese momento la terminal queda disponible para atender a un nuevo usuario. Administración de archivos y directorios. El sistema de archivos de Unix; esta basado en un modelo arborescente y recursivo, en el cual los nodos pueden ser tanto archivos como directorios, y estos últimos pueden contener a su vez directorios o subdirectorios. Debido a esta filosofía, se maneja al sistema con muy pocas órdenes, que permiten una gran gama de posibilidades. Todo archivo de Unix está controlado por múltiples niveles de protección, que especifican los permisos de acceso al mismo. La diferencia que existe entre un archivo de datos, un programa, un manejador de entrada/salida o una instrucción ejecutable se refleja en estos parámetros, de modo que el sistema operativo adquiere características de coherencia y elegancia que lo distinguen. La raíz del sistema de archivos (conocida como root ) se denota con el símbolo "/", y de ahí se desprende un conjunto de directorios que contienen todos los archivos del sistema de cómputo. La raíz del sistema de archivos (conocida como root ) se denota con el símbolo "/", y de ahí se desprende un conjunto de directorios que contienen todos los archivos del sistema de cómputo. En el caso de los archivos no se puede ocupar esta filosofía ya que si otros archivos dependieran de ellos se convertirían en directorios. Se define a cada uno de los archivos con una forma unívoca con su trayectoria (path name), esta trayectoria es similar a la ruta de acceso e el sistema operativo ms−do. Unix incluye, además, múltiples esquemas para crear, editar y procesar documentos. Existen varios tipos de editores, formadores de textos, macroprocesadores para textos, formadores de tablas, preprocesadores de expresiones matemáticas y un gran número de ayudas y utilerías diversas. El Sistema de Archivos. Los sistemas UNIX utilizan un sistema de archivos jerárquicos con su origen en el nodo raíz (Root). Los nombres de archivos aparecen en directorios que son a su vez archivos UNIX. Cada entrada de directorio contiene el nombre del archivo y un apuntador al inodo del archivo; el inodo contiene apuntadores a los bloques del archivo en disco. El núcleo se encarga de mantener la estructura de directorios del sistema de archivo. Desde el punto de vista del sistema, un directorio es idéntico a un archivo ordinario excepto por la restricción de que los usuarios no pueden escribir en los directorios, aunque sí pueden leerlos. Manejo del Procesador. En Unix se ejecutan programas en un medio llamado "proceso de usuario". Cuando se requiere una función del Kernel, el proceso de usuario hace una llamada especial al sistema y entonces el control pasa temporalmente al núcleo. Para esto se requiere de un conjunto de elementos de uso interno, que se mencionan a continuación. Se conoce como imagen a una especie de fotografía del ambiente de ejecución de un proceso, que incluye una descripción de la memoria, valores de registros generales, status de archivos abiertos, el directorio actual, etcétera. Una imagen es el estado actual de una computadora virtual, dedicada a un proceso en particular. Un proceso se define como la ejecución de una imagen. Mientras el procesador ejecuta un proceso, la imagen debe residir en la memoria principal; durante la ejecución de otros procesos permanece primera en la memoria principal a menos que la aparición de un proceso activo de mayor prioridad la obligue a ser copiada al disco, como ya se dijo. Un proceso puede encontrarse en uno de varios estados: en ejecución; listo para ejecutar, o en espera. 5 Cuando se invoca una función del sistema, el proceso de usuario llama al Kernel como subrutina. Hay un cambio de ambientes y, como resultado, se tiene un proceso del sistema. Estos dos procesos son dos fases del mismo original, que nunca se ejecutan en forma simultánea. Existe una tabla de procesos que contiene una entrada por cada uno de ellos con los datos que requiere el sistema: identificación, direcciones de los segmentos que emplea en la memoria, información que necesita el scheduler y otros. La entrada de la tabla de procesos se asigna cuando se crea el proceso y se libera cuando éste termina. Para crear un proceso se requiere la inicialización de una entrada en la tabla, así como la creación de segmentos de texto y de datos. Además, es necesario modificar la tabla cuando cambia el estado del proceso o cuando recibe un mensaje de otro (para sincronización, por ejemplo). Cuando un proceso termina, su entrada en la tabla se libera y queda otro disponible para que otro nuevo la utilice. En el sistema operativo Unix los procesos pueden comunicarse internamente entre sí, mediante el envío de mensajes o señales. El mecanismo conocido como interconexión (pipe) crea un canal entre dos procesos mediante una llamada a una rutina del Kernel, y se emplea tanto para pasar datos unidireccionalmente entre las imágenes de ambos, como para sincronizarlos, ya que si un proceso intenta escribir en un pipe ocupado, debe esperar a que el receptor lea los datos pendientes. Lo mismo ocurre en el caso de una lectura de datos inexistentes: el proceso que intenta leer debe esperar a que el proceso productor deposite los datos en el canal de intercomunicación. Entre las diferentes llamadas al sistema para el manejo de procesos que existen en Unix están las siguientes, algunas de las cuales ya han sido mencionadas: fork (sacar una copia a un proceso); exec (cambiar la identidad de un proceso); kill (enviar una señal a un proceso); signal (especificar la acción por ejecutar cuando se recibe una señal de otro proceso), y exit (terminar un proceso). Dentro de las tareas del manejo del procesador destaca la asignación dinámica (scheduling), que en Unix resuelve el scheduler mediante un mecanismo de prioridades. Cada proceso tiene asignada una prioridad; las prioridades de los procesos de usuario son menores que la más pequeña de un proceso del sistema. El "motor" que mantiene en movimiento un esquema de multiprogramación es, por un lado, el conjunto de interrupciones que genera el desempeño de los procesos y, por otro, los constantes recordatorios que hace el reloj del procesador para indicar que se terminó la fracción de tiempo dedicada a cada proceso. En el sistema Unix, las interrupciones son causadas por lo que se conoce como eventos, entre los cuales se consideran: la ejecución de una tarea de entrada/salida; la terminación de los procesos dependientes de otro; la terminación de la fracción de tiempo asignada a un proceso, y la recepción de una señal desde otro proceso. En un sistema de tiempo compartido se divide el tiempo en un determinado número de intervalos o fracciones y se asigna cada una de ellas a un proceso. Además Unix toma en consideración que hay procesos en espera de una operación de E/S y que ya no pueden aprovechar su fracción. Para asegurar una distribución adecuada del procesador entre los procesos se calculan dinámicamente las prioridades de estos últimos, con el fin de determinar cuál será el proceso que se ejecutará cuando se suspenda el proceso activo actual. Manejo De Memoria Dependiendo de la computadora en la que se ejecute, Unix utiliza dos técnicas de manejo de memoria: swapping y memoria virtual. Manejo de entradas y salidas 6 El sistema de entrada/salida se divide en dos sistemas complementarios: el estructurado por bloques y el estructurado por caracteres. El primero se usa para manejar cintas y discos magnéticos, y emplea bloques de tamaño fijo (512 o 1024 bytes) para leer o escribir. El segundo se utiliza para atender a las terminales, líneas de comunicación e impresoras, y funciona byte por byte. Características Generales. • Fue desarrollado por los Laboratorios Bell en 1969. • El sistema operativo UNIX era, en 1981, un sistema de comando por línea, con varias opciones de sintaxis. • El sistema operativo, ahora soporta ratón e interfaz de ventanas como X−Windows System de MIT, News de Sun Microsystem y Open Look de AT&T. • Surgimiento de varios UNIX: ♦ XENIX de Microsoft (1980). ♦ Reparación de errores por Hardware. ♦ Reparación de archivos por caídas del sistema. ♦ Una mejor comunicación entre procesos. ♦ UNIX 4.1 BSD de la Universidad de California en Berkely (1980). ♦ Soporta memoria virtual. ♦ Sistema de archivos más rápido y potente. ♦ Comunicación entre procesos. ♦ Apoyo para redes de área local. ♦ Editor de pantalla completo. ♦ UNIX System III de AT&T (1982), evolucionó hasta convertirse en System V. ♦ Captura remota de trabajos. ♦ Mejor sistema de archivos. ♦ Mejores recursos para la comunicación entre procesos. ♦ Sun OS de Sun Microsystem. ♦ Tomó como base al sistema 4.2 BSD como modelo. ♦ Proporcionaba apoyo a una red de estación de trabajo. ♦ Manejo de una interfaz gráfica con ventanas y orientado al ratón. • UNIX se ha implementado en: ♦ Supercomputadoras. ♦ Macros. ♦ Minis. ♦ Estaciones de trabajo. ♦ PCs. • Componentes de UNIX: ♦ Shell, intérprete de comandos. ♦ Núcleo, se encarga de la administración de Procesos, Memoria, Entrada/Salida y Ciclos de Reloj. ♦ El Sistema de archivos es jerárquico, con origen en un nodo raíz. • Contiene 4 aportaciones importantes que han aumentado la viabilidad de los sistemas UNIX como base para los sistemas distribuidos. • Conectores Berkely. • Los Streams de AT&T. • El sistema de archivos de red NFS. • El sistema de archivos remoto RFS de AT&T. Características Específicas. 7 − Es un sistema operativo multiusuario, con capacidad de simular multiprocesamiento y procesamiento no interactivo. − Está escrito en un lenguaje de alto nivel: C. − Dispone de un lenguaje de control programable llamado SHELL. − Ofrece facilidades para la creación de programas y sistemas y el ambiente adecuado para las tareas de diseños de software. − Emplea manejo dinámico de memoria por intercambio o paginación. − Tiene capacidad de interconexión de procesos. − Permite comunicación entre procesos. − Emplea un sistema jerárquico de archivos, con facilidades de protección de archivos, cuentas y procesos. − Tiene facilidad para redireccionamiento de Entradas/Salidas. ♦ Garantiza un alto grado de portabilidad. El sistema se basa en un Núcleo llamado Kernel, que reside permanentemente en la memoria, y que atiende a todas las llamadas del sistema, administra el acceso a los archivos y el inicio o la suspensión de las tareas de los usuarios. La comunicación con el sistema UNIX se da mediante un programa de control llamado SHELL. Este es un lenguaje de control, un intérprete, y un lenguaje de programación, cuyas características lo hacen sumamente flexible para las tareas de un centro de cómputo. Como lenguaje de programación abarca los siguientes aspectos: − Ofrece las estructuras de control normales: secuenciación, iteración condicional, selección y otras. − Paso de parámetros. − Sustitución textual de variables y Cadenas. − Comunicación vi direccional entre órdenes de shell. El shell permite modificar en forma dinámica las características con que se ejecutan los programas en UNIX: Las entradas y salidas pueden ser redireccionadas o redirigidas hacia archivos, procesos y dispositivos; Es posible interconectar procesos entre sí. Lenguaje de control del sistema operativo. Entre los rasgos distintivos de Unix está el lenguaje de control que emplea, llamado Shell. Es importante analizar dos funciones más de Shell, llamadas redireccionamiento e Interconexión. 8 Asociado con cada proceso hay un conjunto de descriptores de archivo numerados 0, I y 2, que se utilizan para todas las transacciones entre los procesos y el sistema operativo. El descriptor de archivo 0 se conoce como la entrada estándar; el descriptor de archivo 1, como la salida estándar, y el descriptor 2, como el error estándar. En general, todos están asociados con la terminal de vídeo, pero, debido a que inicialmente son establecidos por Shell, es posible reasignarlos. Una parte de la orden que comience con el símbolo ? se considera como el nombre del archivo que será abierto por Shell y que se asociará con la entrada estándar; en su ausencia, la entrada estándar se asigna a la terminal. En forma similar, un archivo cuyo nombre está precedido por el símbolo > recibe la salida estándar de las operaciones. Cuando Shell interpreta la orden califica < examen > resulta llama a ejecución al programa califica (que ya debe estar compilado y listo para ejecutar) y detecta la existencia de un archivo que toma el lugar de la entrada estándar y de otro que reemplaza a la salida estándar. Después, pasa como datos de lectura los contenidos del archivo examen recién abierto (que debe existir previamente) al programa ejecutable. Conforme el programa produce datos como salida, éstos se guardan en el archivo resulta que Shell crea en ese momento. En la teoría de lenguajes formales desempeñan un importante papel las gramáticas llamadas de tipo 3 (también conocidas como regulares), que tienen múltiples aplicaciones en el manejo de lenguajes. Existen unas construcciones gramaticales conocidas como expresiones regulares, con las que se puede hacer referencia a un conjunto ilimitado de nombres con estructura lexicográfica similar; esto lo aprovecha Shell para dar al usuario facilidades expresivas adicionales en el manejo de los nombres de los archivos. Así, por ejemplo, el nombre carta * se refiere a todos los archivos que comiencen con el prefijo carta* y que sean seguidos por cualquier subcadena, incluyendo la cadena vacía; por ello, si se incluye el nombre carta* en alguna orden, Shell la aplicará a los archivos carta, carta1, carta2 y cualquier otro que cumpla con esa especificación abreviada. En general, en lugares donde se emplea un nombre o una trayectoria, Shell permite utilizar una expresión regular que sirve como abreviatura para toda una familia de ellos, y automáticamente repite el pedido de atención para los componentes. Existen además otros caracteres especiales que Shell reconoce y emplea para el manejo de expresiones regulares, lo que proporciona al lenguaje de control de Unix mayor potencia y capacidad expresiva. En Unix existe también la posibilidad de ejecutar programas sin tener que atenderlos en forma interactiva, sino simulando paralelismo (es decir, atender de manera concurrente varios procesos de un mismo usuario). Esto se logra agregando el símbolo & al final de la línea en la que se escribe la orden de ejecución. Como resultado, Shell no espera que el proceso "hijo'' termine de ejecutar (como haría normalmente), sino que regresa a atender al usuario inmediatamente después de haber creado el proceso asincrónico, simulando en esta forma el procesamiento por lotes ( batch ) Para cada uno de estos procesos Shell proporciona, además, el número de identificación, por lo que si fuera necesario el usuario podría cancelarlo posteriormente, o averiguar el avance de la ejecución. La comunicación interna entre procesos (es decir, el envío de mensajes con los que los diversos procesos se sincronizan y coordinan) ocurre mediante el mecanismo de interconexiones (pipes) ya mencionado, que conecta la salida estándar de un programa a la entrada estándar de otro, como si fuera un conducto con dos extremos, cada uno de los cuales está conectado a su vez a un proceso distinto. Desde Shell puede emplearse este mecanismo con el símbolo | en la línea donde se escribe la orden de ejecución. 9 Así en el ejemplo: (califica < tarea | sorte > lista) & se emplean las características de interconexión, redireccionamiento y asincronía de procesos para lograr resultados difíciles de obtener en otros sistemas operativos. Aquí se pide que, en forma asincrónica (es decir, dejando que la terminal siga disponible para atender otras tareas del mismo usuario), se ejecute el programa califica para que lea los datos que requiere del archivo tareas; al terminar, se conectará con el proceso sort (es decir, pasará los resultados intermedios) para que continúe el procesamiento y se arreglen los resultados en orden alfabético; al final de todo esto, los resultados quedarán en el archivo lista. Con esta otra orden, por ejemplo, se busca obtener todos los renglones que contengan las palabras "contrato" o "empleado" en los archivos en disco cuyos nombres comiencen con la letra "E" (lo cual se denota mediante una expresión regular). Para lograrlo, se hace uso de una función llamada egrep, especial para el manejo de patrones y combinaciones de expresiones regulares dentro de los archivos: egrep−n 'contrato' 'empleado' E * Los resultados aparecen así: Emple1: 5: en caso de que un empleado decide hacer uso de la facilidad, Emple1:7: y el contrato así lo considere las obligaciones de la Emple2:9: Cláusula II: El contrato colectivo de trabajo Emple2:15: Fracción llI: El empleado tendrá derecho, de acuerdo con lo El tercer renglón, por ejemplo, muestra el noveno renglón del archivo Emple2, que contiene una de las palabras buscadas. Como Unix fue diseñado para servir de entorno en las labores de diseño y producción de programas, ofrece − además de su filosofía misma − un rico conjunto de herramientas para la creación de sistemas complejos, entre las que destaca el subsistema make. Este último ofrece una especie de lenguaje muy sencillo, con el cual el programador describe las relaciones estructurales entre los módulos que configuran un sistema completo, para que de ahí en adelante make se encargue de mantener el sistema siempre al día. Es decir, si se modifica algún módulo, se reemplaza o se añade otro, las compilaciones individuales, así como las cargas y ligas a que haya lugar, serán realizadas en forma automática, por esta herramienta. Con una sola orden, entonces, es posible efectuar decenas de compilaciones y ligas predefinidas entre módulos, y asegurarse de que en todo momento se tiene la última versión de un sistema, ya que también se lleva cuenta automática de las fechas de creación, modificación y compilación de los diversos módulos. De esta manera, se convierte en una herramienta casi indispensable al desarrollar aplicaciones que requieren decenas de programas que interactúan entre sí o que mantienen relaciones jerárquicas. Otras herramientas interesantes son ar, diseñado para crear y mantener bibliotecas de programas (que serán luego utilizadas por otros programas para efectuar las funciones ya definidas sin tener que duplicar el código); awk, un lenguaje para reconocimiento de patrones y expresiones regulares (es decir, generadas por una gramática regular o de tipo 3), útil para extraer información de archivos en forma selectiva; lex, un generador de analizadores lexicográfico, y yacc, un compilador de compiladores. Estos dos últimos se emplean como herramientas en la creación de compiladores y 10 procesadores de lenguajes. La lista complete de funciones, órdenes de subsistemas que forman parte de las utilerías del sistema operativo Unix es realmente grande, e incluye más de un centenar, que se pueden agrupar en los siguientes rubros: Compiladores de compiladores. Ejecución de programas. Facilidades de comunicaciones. Funciones para control de status. Funciones para control de usuarios. Funciones para impresión. Herramientas de desarrollo de programación. Lenguaje C, funciones y bibliotecas asociados. Macroprocesamiento. Manejo de directorios y archivos. Manejo de gráficas. Manejo de información. Manejo de terminales. Mantenimiento y respaldos. Otros lenguajes algorítmicos integrados. Preparación de documentos. ARQUITECTURA DEL SISTEMA OPERATIVO UNIX. 11 INTRODUCCIÓN PARA EL MANEJO DE ESTE SISTEMA Comandos: Date Df passwd pkgadd ps pwd rm rmdir set sleep source sort spell split stty ail tar touch troff tset umask uniq vi vipw volcheck alias awk bdiff bfs cal cat cc Dice la hora y el dia en el sistema Muestra todos los drivers que posee su maquina Sirve para cambiar el password Instala un nuevo programa en el sistema Despliega una lista de todos los procesos que se estan ejecutando Dice el directorio en el cual se esta trabajando Elimina archivos Elimina directorios Ofrece una lista de todas las variables de una sesion Desactiva un proceso Permite a un usuario ejecutar un archivo y actualizar los cambios realizados en el Ordena los archivos Revisa los errores de escritura o sintaxis en un archivo Divide un archivo Establece las opciones de un terminal Muestra el final de un archivo Copia los archivos especificados dentro de otro Crea un archivo vacio o actualiza la fecha y hora de un archivo Da salidas en cierto formato Establece el tipo de terminal especifica la creacion de una nueva mascara Compara dos archivos Editor de archivos de texto a pantalla completa Permite ejecutar el editor vi con un archivo de permisos especiales como un passwd o un shadows Revisa el sistema para determinar si existe un floppy disk instalado en su maquina Permite a un usuario ver sus alias Permite al usuario buscar un termino dentro de un archivo Compara dos archivos Busca un archivo Muestra un calendario Concatena e imprime un archivo Compilador de archivos .c en algunos sistemas se 12 cd chgrb chmod chown cmp comm cp wc who write ! talk diff du echo ed ex expr find f77 format help kill ln lpr ls mail mkdir llama gcc Cambiar de directorio Cambia el grupo que es propietario de un archivo. O sea si un archivo pertenece al grupo root lo podriamos cambiar para que pertenezca al grupo hackven Cambia los permisos sobre un archivo Cambia el propietario particular de un determinado archivo. O sea un archivo perteneciente al usuario kimo lo podriamos cambiar para pertenecer al usuario dark Compara dos archivos Compara dos archivos y determina que lineas son comunes Copia un archivo en otro sitio y hasta con otro nombre Muestra detalles Dice que usuarios estan conectados al servidor a la vez que nosotros Envia un mensaje a otro usuario Repite un comando Establece una conversacion con otro usuario como si fuera un chat Muestra las diferencias entre dos archivos Muestra el espacio utilizado por cada directorio Prueba para ver el eco Editor de texto Otro editor de texto Evalua una formula matematica Encuentra un archivo. En la RED HAT 5.0 solo busca en el mismo directorio en donde se esta, pero en la RED HAT 5.1 locate lo busca en todo el sistema dando una lista de todos los archivos que contengan el mismo string como por ejemplo passwd Compilador de Fortran Inicializa un disco 3 1/2 Ayuda Detiene un proceso que se esta ejecutando Crea un enlace entre dos archivos Copia un archivo y lo envia a una impresora Crea una lista de archivos que se encuentran en un directorio. Con la opcion −s se muestran los archivos ocultos Permite a el usuario enviar y recibir emails Crea un directorio 13 more mv nohup nroff hostname mount unmount ftp telnet df setup pnpdump traceroute route Muestra en la pantalla datos de un archivo Se utiliza para mover o renombrar archivos Permite a un comando seguir ejecutandose aunque se cierre la sesion Utilizado para darle formato a un texto Sirve para cambiar el hostname y ver el hostname actual Monta sistemas de archivos, y unidades de todo tipo (CD ROM, floppys, etc) Se utiliza para desmontar sistemas de archivos,luego de usar mount se utiliza este Protocolo de Transferencia de archivos, se utiliza para transferir archivos entre hosts Emulador de Terminal Muestra la cantidad de espacio libre y ocupado por las particiones En linux Slackware es una herramienta para configurar el Sistema al igual que en Linux Red Hat aunque con menos funciones que en el slackware, se ejecuta como root Herramienta de configuracion de Hardware PNP se utiliza en conjunto con isapnp Dice la ruta que siguen los paquetes entre tu maquina y otro host. Sirve para modificar las tablas de enrutamiento del propio host TEMAS RELACIONADOS CON EL SISTEMA OPERATIVO UNIX NOVELL, INC. Novell, Inc., compañía de computadoras estadounidense especializada en software para redes, y con sede en Orem, Utah. Ray Noorda, presidente de Novell, fundó la compañía a partir de Novell Data Systems, un fabricante de ordenadores o computadoras personales (PC) que se encontraba prácticamente en bancarrota en 1983. Noorda reconoció el valor de un sistema operativo de Novell que permitía a los PCs compartir elementos, como discos o impresoras de una red de área local (LAN). Bajo la dirección de Noorda, Novell detuvo la fabricación de computadoras y se dedicó exclusivamente a fabricar y distribuir software. En la década de los ochenta la compañía creció gracias a la venta de software para compartir discos e impresoras. A finales de esta década los clientes de las compañías pedían software para conectar grupos de PCs a las mini computadoras que funcionaban en los departamentos de las empresas y software que permitiera conectar los PCs a grandes servidores de bases de datos. Dado que las compañías disponían de equipos de distintas marcas, los sistemas eran incompatibles y no podían intercambiar información. En 1989 Novell presentó una versión de su programa Netware que solucionaba este problema. Funcionaba con ordenadores IBM y equipos compatibles, con los equipos Apple Macintosh y con el sistema operativo UNIX, el más utilizado en las estaciones de trabajo. El nuevo software permitía al usuario tener acceso a cualquier computadora de la red. 14 En 1992 Novell tenía una cuota del 65% del mercado de sistemas operativos para redes, el segmento con mayor crecimiento de la industria informática. La estrategia de la compañía incluía la creación de alianzas con otras compañías y la adquisición de software para cubrir las carencias de su tecnología. En 1991 adquirió Digital Research Inc., y en febrero de 1993 firmó definitivamente un acuerdo con la American Telephone & Telegraph Company (AT&T) para la adquisición de UNIX System Laboratories, los creadores del sistema operativo UNIX. Continuando su expansión a otras áreas, Novell adquirió en marzo de 1994 WordPerfect Corporation, un fabricante de aplicaciones de procesamiento de textos. También adquirió la división de hojas de cálculo Quattro Pro de Borland International, Inc. Novell tiene una red de distribuidores autorizados en América, Europa y Asia. BELL LABORATORIES Bell Laboratories, laboratorios que dependen de la sociedad estadounidense de telecomunicaciones American Telephone & Telegraph (AT&T), conocidos por sus investigaciones e innovaciones en los campos de las comunicaciones y la informática. Bell Laboratories es un nombre familiar para muchos profesionales de la informática como cuna del transistor, del lenguaje de programación C y del difundido sistema operativo UNIX. Estación de trabajo.− En informática, la acepción más usual del término se refiere a un ordenador o computadora de gama alta, normalmente con uno o varios procesadores RISC y sistema operativo UNIX (aunque la distinción con un ordenador personal es cada vez menor), ejecutando aplicaciones de grandes requerimientos de cálculo, gráficos o conectividad. SUN MICROSYSTEMS, INC.−Compañía estadounidense de computadoras que fue fundada en 1983 esta compañía ha sido líder en la fabricación de estaciones de trabajo, que como ya se a mencionado tienen como sistema operativo principal el sistema operativo unix. A finales de 1991 sun aportaba el 30% de estaciones de trabajo del mercado. TCP/IP, (Transmission Control Protocol/Internet Protocol.).− Se desarrolló originalmente para la comunicación de computadoras con sistema operativo UNIX a través de Arpanet. UNIX en el mundo. A medida que los servidores departamentales se abren paso hacia el centro de datos, los servidores Unix se han ido incorporando con mayor presteza, ya que son más escalables que los servidores PC bajo NT Windows. Los sistemas Cray Origin2000 de Silicon grafics pueden funcionar con hasta 128 procesadores conectados mediante redes de malla CrayLink Interconnect (NT soporta hasta 28). Los sistemas UNIX tienen un rendimiento mayor que sus colegas de arquitectura PC. Así lo afirma el Transaction Processing Council (TCP) −California, EEUU− quien asegura que los sistemas Unix ocupan los 10 primeros lugares en el ranking de performance. Con una versión de DBMS Oracle corriendo sobre un sistema Alpha de Digital Equipment, se completan 102.541 transacciones por minuto. Entre las grandes organizaciones, el International Technology Group descubrió que la mayor parte de los presupuestos de Informática y Telecomunicaciones se gasta en servidores Unix (43%). El gasto de los servidores PC ocupa el segundo puesto (32,1%), mientras que los mainframe son los que generan el menor gasto (24,4%). El editor básico de líneas ed. El editor ed es un editor de líneas. Las operaciones del editor se realizan sobre líneas. Aunque algunos 15 de sus comandos pueden hacer referencia a un conjunto de líneas, sin embargo, este editor no tiene la facilidad de movimiento entre líneas como en un editor de pantalla completa. El editor `ed' tiene dos modos de operación: ♦ Modo de Orden: Se utiliza para dar órdenes, tales como escribir en un fichero, buscar cadenas de texto, etc. ♦ Modo de Entrada: Se utiliza para introducir texto. Estando en este modo para retornar al modo de orden después de haber introducido el texto se utiliza ^d. Para invocar a este editor se utiliza la orden: ed fichero, si existe fichero, copia el contenido del mismo en la memoria y muestra el tamaño del fichero en caracteres. Si el fichero no existe, señala que el buffer asignado al fichero está vacío. En ambos casos el editor queda en modo orden. La orden P hace que se muestre el prompt del editor ed cuando se encuentre en modo de orden. Por omisión es el carácter *. Cuando se comete un error aparece el carácter ?. La orden H activa una presentación de mensajes de error más explicita. La mayoría de las operaciones en modo orden operan sobre la línea actual, o bien, sobre un rango de líneas delimitado por el número de línea inicial, una , (coma) y el número de línea final. En modo de orden la línea actual se denomina . (punto) y la última línea del fichero $ (dólar). Comandos del editor ed y Función que realizan: Comando [lin]a [lin]i [lin]c [lin]d [lin]p [lin]n [lin]md [lin]td e[fic] E[fic] f[nombre] [lin]r [fic] [lin]w [fic] q Q P H u !orden Función Añadir texto a partir de la línea indicada, o en la actual si no se indica Inserta texto antes de línea indicada Cambiar la línea o líneas indicadas Borra la línea o las líneas indicadas Visualiza la línea o el rango de líneas indicadas. Igual que el anterior, mostrando el número de la línea Mover la línea o rango de líneas a partir de la línea d Copiar la línea o rango de líneas indicado a partir de la línea d Carga el fichero indicado. No actúa si el fichero actual no está grabado Carga el fichero indicado sin comprobar si el fichero actual está grabado o no Fija el nombre del fichero actual Lee el fichero indicado añadiendo a partir de la línea indicada o de la última si no se indica Graba las líneas indicadas, todas por defecto, en el fichero especificado o en el fichero actual por defecto Sale del editor, emite un error si el fichero actual no fue grabado Igual que el anterior, sin comprobar si el fichero actual fue grabado Activa /Desactiva el prompt del editor Activa/Desactiva los mensaje explicativos de error Deshace el último comando que puede deshacerse. Por ejemplo una inserción. Ejecuta la orden especificada llamando al intérprete de comandos sin salir del editor 16 +[n] −[n] ^d Avanza n líneas o una por defecto desde la línea actual Retrocede n líneas o una por defecto desde la línea actual Vuelve al modo orden Busca la expresión indicada (expr), en el rango de líneas indicado (todas por [lin]g/expr/comando defecto) ejecutando en cada una de ellas el comando especificado, por ejemplo: g/hola/n Se posiciona una a una en todas las líneas dónde ha encontrado expr, en el [lin]G/expr/ rango de líneas especificado (todas por defecto), a la espera de una orden o <intro> para continuar Busca las líneas que no contengan la expresión indicada (expr), en el rango [lin]v/expr/comando de líneas indicado (todas por defecto) ejecutando en cada una de ellas el comando especificado. Por ejemplo: v/hola/n Se posiciona una a una en todas las líneas donde no ha encontrado expr en el [lin]V/expr/ rango de líneas indicado (todas por defecto) a espera de una orden o <intro> para continuar Busca las líneas que contienen expr dentro del rango indicado o en la actual [lin]s/expr/sust/[g] por defecto, sustituyendo expr por sust. Si se incluye g sustituye en todo el rango y no solo la primera concurrencia en ese rango El editor de pantallas vi. El editor vi es un editor de pantalla completa. De forma similar a ed, el editor vi siempre trabaja con una copia del fichero que se edita, que él mismo se encarga de mantener en un buffer. Los cambios realizados sobre el fichero solo se graban cuando se invoca algún comando de grabación. Para invocar el editor vi se hace mediante: vi fichero. Si el fichero existe lo carga en el buffer de trabajo. Además, la orden para invocar el editor vi tiene una serie de opciones, las más importantes son: r Cada cierto tiempo `vi' salva el buffer de edición en disco. De forma que si se produce cualquier fallo en el sistema, siempre se encontrará una copia reciente del fichero que se editaba. R Indica que solo se editará el archivo para consulta. No permitiéndose realizar cambio alguno sobre la información. wn Normalmente `vi' utiliza la pantalla completa como ventana de edición. Mediante esta opción se podrá alterar el tamaño de la ventana de edición a un número de líneas determinado por n. Podemos utilizar la opción + , que permite entrar en el vi en la línea que le indiquemos. Por ejemplo: Vi +7 fichero Editará el fichero indicado y tomará como línea actual la 7. Vi +$ fichero Editará el fichero indicado y tomará como línea actual la última línea del fichero. Vi +/cadena fichero Editará el fichero indicado y tomará como línea actual la primera línea que contenga la cadena indicada. El editor vi tiene tres modos de trabajo diferente: 17 ♦ Modo comando: Es el modo en el que queda el editor al entrar. En él cada pulsación de una tecla se interpreta como un comando, no siendo posible la introducción de texto. ♦ Modo texto: Cada pulsación de una tecla se interpreta como un carácter a introducir al texto editado. Es el modo indicado para añadir información al fichero que se está editando. ♦ Modo ex: Se podrán utilizar los comandos del intérprete ex, que en muchos casos son iguales que los comandos ed. Para pasar a este modo se debe estar en modo comando. A continuación estudiaremos un esquema para conocer cómo se cambia de un modo de trabajo a otro: Una característica interesante del editor vi es que permite la edición múltiple de ficheros. Es decir, la posibilidad de editar conjuntamente varios ficheros. Esto puede hacerse de dos formas: • Al entrar mediante línea de comandos: vi fichero1 fichero2 fichero3. Inicialmente se editará fichero1 , pero podemos editar el siguiente mediante el comando n, es necesario escribir los cambios del fichero actual antes de editar el siguiente. Para volver a editar el primer fichero de la lista utilizar el comando rew. • Estando ya trabajando con vi mediante el comando e fichero2. Si se está editando un fichero, puede llamarse a otro fichero para que se edite conjuntamente con el actual. Para editar el fichero anterior puede utilizarse el comando e#. Al entrar en vi pasa directamente al Modo Comando. Comandos del editor vi y Función que realizan MODO TEXTO. Cuando estamos en modo de entrada, todo el texto que introduzcamos formará parte del fichero.Los NEWLINE marcan el final de línea, y habilitan la siguiente. El BACKSPACE suprime el carácter de la izquierda, así hasta el principio de la línea, pero no se permite ir a la línea anterior. La tecla ESC permite pasar de modo entrada a modo comando. ^u + <ESC> Cancela la última inserción realizada. ^w + <ESC> Cancela la última palabra introducida. <ESC> Vuelve al modo comando. MODO COMANDO Al entrar en vi estamos en modo comando. Si estamos en modo de entrada y queremos pasar a modo comando pulsaremos la tecla ESC. Para comenzar a ejecutar un comando primero debemos situarnos en el punto en que queremos modificar el texto. MOVIMIENTO DEL CURSOR Comando Función <ESPACIO> , ! , l Avanza una posición a la derecha <BS> , ! , h Retrocede una posición a la izquierda ^n , ! , j Avanza una línea ^p , ! , k Retrocede una línea + , <intro> Avanza al principio de la línea siguiente − Retrocede al principio de la línea anterior 0 (cero) Retrocede al principio de la línea actual $ Avanza al final de la línea actual 18 [n]G Va a la línea n o a la última por defecto [n]| Va a la columna n de la línea actual o a la primera por defecto w, W Va al principio de la palabra siguiente b, B Va al principio de la palabra anterior e, E Va al final de la palabra actual ) Va al final del fichero, al final de la última línea del texto H Va a la esquina superior izquierda de la pantalla M Va a la línea central de la pantalla MOVIMIENTO DE LA PANTALLA Comando Función [lin]^U Desplaza hacia arriba media pantalla o el número de líneas indicado por lin [lin]^D Desplaza hacia abajo media pantalla o el número de líneas indicado por lin ^F Avanza una pantalla completa ^B Retrocede una pantalla completa ^R, ^L Redibuja la pantalla INTRODUCCIÓN DE TEXTO (PASO A MODO TEXTO) Comando Función i Inserta a partir del carácter actual I Inserta a partir del principio de la línea actual a Añade a partir del carácter actual A Añade a partir del final de la línea actual o Abre una línea bajo la actual y pasa a añadir al principio de la misma O Abre una línea sobre la actual y pasa a añadir al principio de la misma BORRADO DE TEXTO Comando Función [n]x Borra el carácter sobre la posición actual del cursor, o bien, n caracteres [n]X Borra el carácter anterior a la posición actual del cursor, o bien, n caracteres Borra el texto existente entre la posición actual del cursor y la posición que se alcanzará mediante el comando de movimiento del cursor especificado, por ejemplo: d[movimiento cursor] dw borra hasta el principio palabra siguiente [n]dd D d) borra hasta el final del fichero Borra la línea actual, o bien, n líneas a partir de la actual Borra desde la posición actual del cursor hasta el final de la línea actual Nota: El texto borrado se almacena en un buffer para poder ser recuperado. MODIFICACIÓN DE TEXTO Comando Función u Deshace el último cambio sobre el texto U Deshace todos los cambios sobre la línea actual r Sustituye el carácter sobre el que está el cursor, por el que se pulse a continuación R Permite reescribir texto sobre la actual posición del cursor 19 s Sustituye el carácter actual sobre el texto introducido a continuación S Sustituye la línea actual por el texto introducido a continuación J Une la línea siguiente al final de la actual cw Cambia la palabra actual desde la posición del cursor por un nuevo texto c) Cambia el texto, desde la posición actual del cursor hasta el final del fichero CONTROL DE BUFFERS (BLOQUES) Comando Función Almacena en el buffer indicado por letra, o en el buffer sin nombre, las [letra][n]yy n líneas siguientes a la actual, o la línea actual. Almacena en el buffer indicado por letra, o en el buffer sin nombre, las [letra] y [movim_cursor] líneas existentes entre la posición actual y la indicada por la orden de movim_cursor Recupera el texto del buffer letra, o del buffer sin nombre, insertándolo [letra]p a partir de la línea actual Recupera el texto del buffer letra, o del buffer sin nombre, insertándolo [letra]P antes de la línea actual BÚSQUEDA Comando Función Busca el patrón indicado desde la posición actual del cursor hasta el final del /patrón fichero Busca el patrón indicado desde la posición actual del cursor hasta el ?patrón principiodel fichero n Repite la última búsqueda N Repite la última búsqueda en el sentido opuesto al establecido f[carácter] Busca carácter dentro de la línea actual hasta el final de la misma F[carácter] Busca carácter dentro de la línea actual hasta el principio de la misma ; (punto y coma) Repite la última búsqueda de carácter , (coma) Repite la última búsqueda de carácter en sentido opuesto ZZ Sale al intérprete de comandos almacenando el fichero actual si es necesario ULTIMO COMANDO . (punto) Repite el último comando. MODO INTERPRETE `ex' Todos los comandos de ex comienzan con el carácter : (dos puntos). Tenemos que estar en modo orden. CARGA Y GRABACIÓN Comando Función Graba el contenido del buffer del editor en el fichero indicado, o en el fichero por :w[fichero] defecto Graba el contenido del buffer del editor añadiéndolo al contenido del fichero :w >>[fichero] indicado, o en el fichero por defecto Carga el contenido de fichero, o del fichero por defecto, añadiéndolo a partir de :r[fichero] la línea actual 20 :wq :q Grabar el fichero actual y salir del editor Abandona el editor volviendo al intérprete de comandos Abandona el editor volviendo al intérprete de comandos, sin realizar :q! comprobaciones de grabación :x Guarda el archivo si es necesario y sale al intérprete de comandos EJECUCIÓN DE ÓRDENES DEL SISTEMA Comando Función Ejecuta la orden indicada, añadiendo la salida de la misma a partir de la línea :r!orden actual :!orden Ejecuta la orden especificada RECUPERACIÓN ANTE FALLOS EN EL SISTEMA Comando Función :preserve Almacena el fichero como si se hubiese producido un fallo en el sistema :recover [fichero] Recupera el fichero indicado o el actual EDICIÓN COMPARTIDA DE FICHEROS Comando Función :n Edita el siguiente fichero de la lista con la que se llamó al editor Edita el siguiente fichero de la lista con la que se llamó al editor, sin realizar :n! comprobaciones de grabación :rew Vuelve a editar el primer fichero de la lista con la que se llamó al editor Vuelve a editar el primer fichero de la lista con la que se llamó al editor, sin realizar :rew! comprobaciones de grabación :e[fichero] Edita el fichero especificado, o el fichero por defecto Edita el fichero especificado, o el fichero por defecto, sin realizar comprobaciones de :e![fichero] grabación :e[#] Vuelve a editar el texto que se editó antes del actual, o el actual por defecto INFORMACIÓN DEL FICHERO ACTUAL Comando Función :args Muestra la línea de llamada al editor en la línea de estatus :f Muestra el nombre del fichero editado :f nombre Fija el nombre del archivo por defecto ABREVIATURAS Comando Función Establece que la cadena b es la expansión de la abreviatura a, cada vez que se escriba la cadena a se expanderá el texto según b, ejemplo: :abbr a b abbr uc UNIDAD DE CONTROL BÚSQUEDA Y SUSTITUCIÓN Comando Función :[lin]s/expr/sust/g Busca el texto expr dentro del rango indicado, sustituyéndolo por sust, donde: ; Indica que es un comando de ex [lin] Marca el rango, expresado en números de línea, dónde se realizará la búsqueda y posterior sustitución, según el siguiente formato: 21 [lin_inicial,lin_final] y dónde cada número de línea puede sustituirse por los caracteres $ (línea final), . (línea actual), % (referencia a todo el fichero) s Es el comando de sustitución expr Es el texto a buscar sust Es el texto a cambiar g Indica que deben sustituirse todas las apariciones del texto expr dentro del rango especificado Ejemplos: :%s/volverán/vendrán/g :1,$s/volverán/vendrán/g :3,.s/volverán/vendrán/g COMANDOS DE CONFIGURACIÓN DE OPCIONES Comando Función Activa el modo de indentación automática, mediante el cual cada vez que se pulsa <return> para terminar una línea, el cursor se sitúa en la línea de abajo :set autoindent pero no en la primera columna, sino en la columna dónde empezó a escribir en la línea anterior :set noautoindent Desactiva el modo de indentación automática Activa la grabación automática en la edición compartida de ficheros, :set autowrite mediantela cual, al editar otro fichero de la lista se graba el actual :set noautowrite Desactiva la grabación automática :set ignorecase Activa la no distinción entre mayúsculas y minúsculas al realizar búsquedas Desactiva la no distinción entre mayúsculas y minúsculas al realizar :set noignorecase búsquedas, se buscará el texto que coincida exactamente con el tecleado :set number Activa la numeración de líneas :set nonumber Desactiva la numeración de líneas. :set all Visualiza la configuración actual Muestra cualquier tipo de modo en el que se esté. Al activar esta opción en la :set showmode parte inferior derecha aparecen mensajes del tipo: INPUT modo texto, COMMAND modo comando, etc :set noshowmode Desactiva la opción anterior showmode CREACIÓN DE MACROS Comando Función Crea la macro llamada nombre, que realiza las acciones que especifiquen los comandos. Esta orden mapea cierta pulsación en el teclado para :map nombre comando convertirla en un comando. Para introducir una secuencia de escape, es necesario pulsar anteriormente ^V. Otra de la secuencia necesaria para crear macros es ^M que sustituye a <return> :map! nombre comando Indica que la macro operará en modo texto :unmap nombre Deshace la macro especificada Ejemplos de macros: 22 :map ^F:!date^M Para que ^F y ^M surtan efecto antes pulsar ^ :map! LL ^[:q!^M La nueva orden LL sale sin grabar desde modo texto. Para que <esc> ( ^[ ) surta efecto antes pulsar ^V. :map Q :q!^M La nueva orden Q sale sin grabar desde modo comando. :map! ZZ ^[:wq^M La orden ZZ, ya implementada, abandona el editor grabando. OTROS COMANDOS Comando Función :w>>fichero Añade lo editado al fichero indicado Corre a la derecha un tabulador el número de líneas que le indiquemos, a partir de la :>n actual Corre a la izquierda un tabulador el número de líneas que le indiquemos, a partir de la :<n actual :>>n Corre dos tabuladores a la derecha :<<n Corre dos tabuladores a la izquierda :n Desplaza el cursor a la línea que le indicamos Escapa al shell, aparece el prompt PS1. Para volver a continuar con el editor pulsar :sh Ctrl d o teclear exit OPCIONES POR DEFECTO Comando Función Si se desea trabajar con una configuración personalizada de opciones de vi, se puede crear el fichero .exrc en el directorio raíz del usuario. El usuario al invocar a vi y .exrc existir el fichero, configurará el editor con todas las opciones y comandos que contenga. Es posible que algunos comandos de configuración no funcionen correctamente por problemas de emulación El editor emacs. El nombre emacs significa Editor MACroS, que nació como una sustitución de un editor de textos anterior llamado teco. Actualmente emacs es uno de los editores más usados y ampliamente instalados disponible en el mundo Linux. Hay versiones emacs disponibles en casi todas las plataformas informáticas conocidas en el sector, desde Linux a MS−Windows. Una versión completa de emacs es muy grande, ocupando varios megas en disco. Es un editor funcionalmente completo, muy potente y ampliado con funciones que van más allá de la edición de textos. En algunas instalaciones se puede usar para editar archivos, mantener un calendario, trabajar con e−mail, gestionar archivos, leer USENET o noticias de la red, usarlo como calculadora, etc. De alguna forma, emacs es un entorno de trabajo que contiene un editor de textos. Una versión popular de emacs se distribuye por medio de la licencia GNU. Esta versión fue creada por Richard Stallman que es uno de los patriarcas de la Free software Foundation y del proyecto GNU. El editor emacs no dispone de los dos modos básicos que tiene vi. Esto significa que todo lo que escriba se coloca en la memoria intermedia. Para dar comandos al editor, para guardar archivos, buscar textos, borrarlos, etc. debe usar otras teclas. En emacs se utiliza la tecla <ctrl> y <esc> para ejecutar los distintos comandos. INICIO, SALIDA Y AYUDA 23 Comando emacs emacs fichero <Ctrl−x><Ctrl−c> <Ctrl−h> ESC <F10> Función Inicia el editor sin fijar ningún fichero Comienza la edición con el fichero especificado Sale de emacs. Si no se ha guardado el fichero, pedirá confirmación Llama a la ayuda de emacs Retrocede. Salida de cualquier sitio Acceso al menú Copiar, cortar y pegar. Cuando se suprime o corta caracteres estos se guardan en una memoria intermedia. Para pegar este texto se utiliza <Ctrl−y>. Este comando también llamado comando yank, pega el objeto a la derecha del cursor. Para realizar la operación de cortar y pegar de un bloque, hay que seguir los siguientes pasos: • Situar el cursor al principio del texto a marcar. • Pulsar <Ctrl−barra espaciadora> para fijar la marca. • Mover el cursor al final del bloque de texto. Así se crea lo que emacs llama una región. • Suprimir el texto con <Ctrl−w>. • Si lo que se pretende es copiar el texto antes de mover el cursor hay que volver a pulsar <Ctrl−y>. Si lo que se desea es moverlo seguir con el siguiente paso. • Situar el cursor en el punto del texto donde se quiera copiar el mismo. • Pulsar <Ctrl−y> para pegar el bloque por debajo de la línea donde está el cursor. COMANDOS BÁSICOS Comando Función <Ctrl−x><Ctrl−s> Guarda la memoria intermedia actual (texto editado) en disco Escribe la memoria intermedia actual en disco, pregunta por un nuevo <Ctrl−x><Ctrl−w> nombre de archivo <Ctrl−x><n> Cambia el nombre del archivo de la memoria intermedia actual <Esc><z> Borra desde la posición actual hasta el carácter tecleado Encuentra un archivo, lo lee en una nueva memoria intermedia creada con <Ctrl−x><Ctrl−f> el nombre del archivo Lee el archivo dentro de la memoria intermedia actual, borrando el <Ctrl−x><Ctrl−r> contenido previo Inserta el archivo dentro de la memoria intermedia actual en la posición <Ctrl−x><Ctrl−i> del cursor <Ctrl−f> Mueve el cursor un carácter hacia adelante <Ctrl−b> Mueve el cursor un carácter hacia atrás <Ctrl−a> Va al principio de la línea actual. <Ctrl−e> Va la final de la línea actual <Ctrl−n> Va a la línea siguiente <Ctrl−p> Va a la línea anterior <Esc><f> Avanza una palabra <Esc><b> Retrocede una palabra <Esc><Shift −. > Va al principio de la memoria intermedia <Esc><Shift −, > Va al final de la memoria intermedia 24 <Ctrl−d> <Ctrl−c> <Esc><d> <Ctrl−k> <intro> <Ctrl−j> <Ctrl−o> <Ctrl−w> <Esc><w> <Ctrl−x><Ctrl−o> <Ctrl−s> <Ctrl−r> <Ctrl−s> <Ctrl−r> Suprime el carácter donde se encuentra Inserta un espacio Suprime la palabra siguiente Suprime hasta el final de la línea actual. Si el cursor está al principio de la misma, la suprime entera Inserta una nueva línea Inserta una nueva línea y sangra. Abre una nueva línea (no está claro cuando funciona, a veces funciona como un intro y otras como se indica) Suprime la región entre la marca y el cursor Copia la región a la memoria intermedia de eliminación Suprime la línea que está a los lados del cursor Busca hacia adelante desde la posición actual. Busca hacia atrás desde la posición actual Repite búsqueda hacia delante Repite búsqueda hacia atrás. Pregunta antes de realizar una sustitución, se responde con: <Ctrl−g> Cancelar la operación <!> Sustituir el resto <Esc><Ctrl−r> <?> Obtener una lista de opciones < . > Sustituir y salir donde se inició el comando <y> Sustituir y continuar con la operación de sustituir <n> No sustituir, pero continuar con la operación <Ctrl−barra espaciadora> Fija una marca en la posición actual del cursor <Ctrl−x><Ctrl−x> Intercambia la marca y el cursor <Ctrl−w> Suprime la región marcada <Esc−w> Copia la región marcada en la memoria intermedia de eliminación Inserta la memoria intermedia de eliminación en la posición actual del <Ctrl−y> cursor <Ctrl−x><b> Conmuta a otra memoria intermedia Conmuta a la próxima memoria intermedia en la lista de memorias <Ctrl−x><x> intermedias <Esc><Ctrl−n> Va al final del fichero <Ctrl−x><k> Suprime una memoria intermedia que no se muestra <Ctrl−x><o> Cuando tenemos la pantalla dividida, cambia de una a otra Divide la pantalla en n ventanas. Ventanas con las que podemos trabajar <Ctrl−x><n> máximo 2. Si ponemos un 3 la ventana actual se divide en dos verticalmente y podemos ir haciendo más subdivisiones Veamos a continuación como podemos solucionar problemas con emacs. Es posible que determinados caracteres de control no funcionen en los terminales. Esto es debido a la emulación, es posible que no se haya configurado la variable TERM. Para ello hay que realizar los siguientes pasos: TERM= tipo 25 de emulación. La emulación que se utiliza es vt100, pero da algunos problemas, la mejor es la vt200 o ansi, aunque el telnet de Windows 3.11 no la incorpora. Si la solución no llega por la emulación entonces podemos recurrir a dar las órdenes, no con caracteres de control sino que con los comandos emacs. Para ello hay que realizar las siguientes acciones: <esc−x> nombredeorden Esta es la sintaxis para dar órdenes de emacs. Pero ¿Qué órdenes?. A continuación veamos las dos que sustituyen a los caracteres de control que más problemas dan: set−mark Establece una marca en la posición del cursor.(<Ctrl−barra espaciadora>) yank Inserta el contenido del kill−buffer a partir de la posición del cursor(<Ctrl−y>). Podríamos seguir poniendo toda la lista de comandos emacs, pero es mejor explicar como consultarlos en la ayuda de emacs: ♦ Pulsar <Ctrl−h><Ctrl−h> ♦ <Ctrl−v> Muestra más pantalla de la ayuda. ♦ <q> Sale de la ayuda. ♦ <i> muestra el indice de comandos. ♦ <a> pregunta por una palabra, por ejemplo yank, y muestra todos los comandos que tienen relación con esta palabra. El editor joe. Este editor es exclusivo de Linux. Es una de las múltiples aportaciones que se han hecho por voluntarios a este Sistema Operativo. Es una imitación de Wordstart o de editor de entornos Borland, como por ejemplo el editor del Turbo Pascal. El inicio de joe es: joe fichero. Para invocar a la pantalla de ayuda se pulsa ^KH. La pantalla de ayuda es la siguiente: CURSOR ^B left ^F right ^P up ^N down ^Z previous word ^X next word SEARCH ^KF find text ^L find next GO TO ^U prev. screen ^V next screen ^A beg. of line ^E end of line ^KU top of file ^KV end of file ^KL to line No BLOCK ^KB begin ^KK end ^KM move ^KC copy ^KW file ^KY delete ^K/ filter DELETE ^D char ^Y line ^W > word ^O word < ^J >Iine ^− undo ^^redo MISC ^KJ reformas ^T options ^R refresh ^@ insert SPELL ^[N word ^[L file EXIT ^KX save ^C abort ^KZ shell FILE ^KE edit ^KR insert ^KD save Resumen de comandos joe: MOVIMIENTO DEL CURSOR Comando Función ^B Mueve el cursor una posición a la izquierda ^F Mueve el cursor una posición a la derecha ^P Mueve el cursor una posición hacia arriba 26 ^N Mueve el cursor una posición hacia abajo ^Z Mueve el cursor una palabra hacia la izquierda ^X Mueve el cursor una palabra hacia la derecha ^U Muestra la pantalla anterior a la actual ^V Muestra la pantalla siguiente a la actual ^A Mueve el cursor al principio de la línea ^E Mueve el cursor al final de la línea ^KU Mueve el cursor al principio del fichero ^KV Mueve el cursor al final del fichero ^KL Mueve el cursor a un número de línea concreto BÚSQUEDA Y SUSTITUCIÓN Comando Función ^KF Busca el texto especificado ^L Repite búsqueda BLOQUES Comando Función ^KB Marca el inicio de un bloque ^KK Marca el final de un bloque ^KC Copia en la posición actual del cursor el bloque marcado ^KM Mueve a la posición actual del cursor el bloque marcado ^KW Graba el bloque marcado en un fichero BORRADO Comando ^KY ^D ^Y ^W ^O ^J Función Borra el bloque marcado Borra el carácter de la posición del cursor Borra la línea actual del cursor Borra la palabra de la derecha Borra la palabra de la izquierda Borra desde la posición actual del cursor hasta el final de la línea SALIDA Y GRABACIÓN Comando Función ^KX Abandona la edición grabando Abandona el editor. Pregunta si abandona los cambios al fichero. Contestar `Y' para ^C no grabar ^KZ Abandona la edición sin grabar y sin preguntar ^KE Edita otro fichero, al pulsar <^C> vuelve al fichero original ^KR Lee otro fichero y lo inserta en la posición actual del cursor ^KD Graba el fichero y continúa con la edición OTRAS ACCIONES Comando Función ^K/ Ejecuta un comando unix 27 ^T Muestra una lista de opciones del editor. Están a OFF/ON, pulsando <intro> o <barra espaciadora> se activan o desactivan. Con flechas de desplazamiento se recorre la lista. Con <^C> se abandona la lista de opciones. Esta lista contiene: activar inserción, autoindentación, tabulación, márgenes, etc El editor jed. Este editor es una incorporación de Linux, lo realizó John E. Davis entre 1992 y 1993. Fue escrito en un principio en cc, posteriormente en gcc y hay versiones en BCC 3.0 para PC jed como editor es sencillo, mas adelante veremos sus principales comandos, pero jed es más que un editor. jed puede usarse como asistente para ayuda en muy diversas tareas, por ejemplo: ♦ Programar en c, c++, smalltalk, lisp, etc. ♦ Uso de emacs. ♦ Usos de los diferentes shell´s de Linux. ♦ Instrucciones sobre como contribuir al proyecto GNU. ♦ Explica como jed puede emular a emacs y wordstar. Este editor se invoca poniendo: jed fichero USO DEL EDITOR Comando Función ^X^C Salir de jed ^V Página arriba <esc>V Página abajo ^D Borra el carácter bajo el cursor ^X^W Graba el fichero ^X^F Abre un nuevo fichero ^A Va al principio de la línea ^E Va al final de línea Como hemos dicho antes, jed tiene un uso más interesante que el de editor. En concreto es utilizarlo como asistente para ayuda. A continuación se explica cómo moverse por la ayuda: ASISTENTE PARA AYUDA Comando Función ^H Invoca a este asistente para ayuda. Aparece un pequeño menú Es la opción del menú que muestra el asistente. Para elegir una de las opciones hay I que situarse con el cursor en la línea elegida y pulsar <intro> Q Sale de la ayuda y vuelve a la edición, desde el menú principal D Vuelve al menú principal. H Muestra un acerca de la ayuda <ESC> <ESC> 28 MODO TEXTO MODO COMANDO MODO EX a, A i,I o,O :/ MODO TEXTO MODO COMANDO MODO EX 29