Manual Teórico-Práctico del Módulo Autocontenido Específico Operación de Sistema Operativo Multiusuario PARA LA CARRERA DE PROFESIONAL TÉCNICO-BACHILLER EN INFORMÁTICA ecbc Educación Capacitación Basadas en Competencias Contextualizadas Capacitado por Conalep PARTICIPANTES Director General Efrén Castillo Saavedra Secretario de Desarrollo Académico y de Capacitación Marco Antonio Norzagaray Director de Diseño de Curricular de la Formación Ocupacional Gustavo Flores Fernández Coordinadores de Área: Ma. Cristina Martínez Mercado Grupo de Trabajo para el Diseño del Módulo Especialistas de Contenido Consultores Formo Internacional,S.C. Revisor de contenido Sandra Luz Lozano Ramírez Revisión Pedagógica Patricia Toledo Revisores de la Contextualización Agustín Valerio Armando Guillermo Prieto Becerril Tecnologías de la información Manual del curso – módulo Autocontenido Específico “Operación de Sistema Operativo Multiusuario” Informática. D.R. © 2006 CONALEP. Prohibida la reproducción total o parcial de esta obra, incluida la portada, por cualquier medio sin autorización por escrito del CONALEP. Lo contrario representa un acto de piratería intelectual perseguido por la Ley Penal. E-CBCC Av. Conalep N° 5, Col. Lázaro Cárdenas, C.P. 52140 Metepec, Estado de México. 2 Operación de Sistema Operativo Multiusuario ÍNDICE Participantes I. Mensaje al alumno II. Como utilizar este manual III. Propósito del módulo autocontenido V. Especificaciones de evaluación VI. Mapa curricular del módulo autocontenido Capítulo 1 Manejo de ambiente de sistema operativo multiusuario. Mapa curricular de la unidad de aprendizaje 1.1.1. Sistema operativo multiusuario 1.1.2. 6 7 9 10 11 12 13 14 14 17 20 24 31 31 38 • Definición de sistema operativo • Desarrollo histórico de los sistemas operativos • Estructura de un sistema operativo • Funciones y características de los sistemas operativos • Definición de multitartea • Tipos de Sistemas operativos y proveedores más comunes. Caracteristicas de unix. 38 39 43 43 48 47 47 47 50 56 56 58 59 60 60 62 63 63 64 66 66 66 67 70 70 70 • Entorno de UNIX • Interfases 1.2.1. 1.2.2. Inicio de una sesion unix • Ejecución de las órdenes • Tipo de Operadores Archivos unix • Sistema de archivos • Nombres de directorios • Manipulación de archivos y directorios. 1.3.1 1.3.2 1.4.1 1.4.2 Editor • Editor vi. • Cambios de ventana • Salir de vi Manejo de contenido • Ordenes más importantes en modo EX. • Marcas de posición. • Mover bloques. • Recuperación de archivos • La calculadora SHELL • Funciones del intérprete de órdenes • Modos de invocar una orden. • Histórico de órdenes Redireccion de entrada y salida. • Redirección de entrada y salida. • Redirección de errores. Operación de Sistema Operativo Multiusuario 3 1.4.3 2.1.1 Filtros. • Orden FIND. • Editor de flujo de SED. • Prácticas de ejercicio y Listas de Cotejo • Resumen • Autoevaluación de conocimientos • Capítulo 2 Administración de procesos de sistema operativo multiusuario. • Mapa curricular de la unidad de aprendizaje Uso de shell • Variables especiales de shell (funciones en programas de shell). • Señales y orden trap. 2.1.2 Red. • Servicios de red.. • Resolución de nombres y direcciones • Conexión remota. 2.2.1 2.2.2 2.3.1 Parada y arranque del sistema unix • Acciones de INIT después del arranque. • Identificadores de proceso grupo de procesos. Administracion de los usuarios y grupos • Añadir usuarios al sistema. • Medidas de seguridad en un sistema UNIX. Sistema de archivos • Almacenamiento • Estructura del sistema de archivos. 2.3.2 Ordenes para administrar el sistema de archivos • Montaje de un sistema de archivos. • Información del Espacio en disco • Copias de seguridad Prácticas de ejercicio y Listas de Cotejo Resumen Autoevaluación de conocimientos Glosario de Términos E-CBNC Glosario de Términos Técnicos Referencias Documentales 4 71 71 71 75 103 104 106 107 108 109 116 118 118 142 142 144 144 145 147 147 148 150 150 152 154 154 154 155 159 184 185 187 189 194 Operación de Sistema Operativo Multiusuario I. MENSAJE AL ALUMNO ¡CONALEP TE DA LA BIENVENIDA AL CURSO-MÓDULO AUTOCONTENIDO ESPECÍFICO OPERACIÓN DE SISTEMA OPERATIVO MULTIUSUARIO EL CONALEP, a partir de la Reforma Académica 2003, diseña y actualiza sus carreras, innovando sus perfiles, planes y programas de estudio, manuales teórico-prácticos, con los avances educativos, científicos, tecnológicos y humanísticos predominantes en el mundo globalizado, acordes a las necesidades del país para conferir una mayor competitividad a sus egresados, por lo que se crea la modalidad de Educación y Capacitación Basada en Competencias Contextualizadas, que considera las tendencias internacionales y nacionales de la educación tecnológica, lo que implica un reto permanente en la conjugación de esfuerzos. Este manual teórico práctico que apoya al módulo autocontenido, ha sido diseñado bajo la Modalidad Educativa Basada en Competencias Operación de Sistema Operativo Multiusuario Contextualizadas, con el fin de ofrecerte una alternativa efectiva para el desarrollo de conocimientos, habilidades y actitudes que contribuyan a elevar tu potencial productivo y, a la vez que satisfagan las demandas actuales del sector laboral, te formen de manera integral con la oportunidad de realizar estudios a nivel superior. Esta modalidad requiere tu participación y que te involucres de manera activa en ejercicios y prácticas con simuladores, vivencias y casos reales para promover un aprendizaje integral y significativo, a través de experiencias. Durante este proceso deberás mostrar evidencias que permitirán evaluar tu aprendizaje y el desarrollo de competencias laborales y complementarias requeridas. El conocimiento y la experiencia adquirida se verán reflejados a corto plazo en el mejoramiento de tu desempeño laboral y social, lo cual te permitirá llegar tan lejos como quieras en el ámbito profesional y laboral. 5 II. ¾ ¾ ¾ ¾ ¾ 6 COMO UTILIZAR ESTE MANUAL Las instrucciones generales que a continuación se te pide que realices, tienen la intención de conducirte a que vincules las competencias requeridas por el mundo de trabajo con tu formación de profesional técnico. Redacta cuales serían tus objetivos personales al estudiar este módulo ocupacional. Analiza el Propósito del módulo autocontenido optativo que se indica al principio del manual y contesta la pregunta ¿Me queda claro hacia dónde me dirijo y qué es lo que voy a aprender a hacer al estudiar el contenido del manual? si no lo tienes claro pídele al docente que te lo explique. Revisa el apartado especificaciones de evaluación son parte de los requisitos que debes cumplir para aprobar el módulo. En él se indican las evidencias que debes mostrar durante el estudio del curso -módulo ocupacional para considerar que has alcanzado los resultados de aprendizaje de cada unidad. Es fundamental que antes de empezar a abordar los contenidos del manual tengas muy claros los conceptos que a continuación se mencionan: competencia laboral, unidad de competencia (básica, genéricas específicas), elementos de competencia, criterio de desempeño, campo de aplicación, evidencias de desempeño, evidencias de conocimiento, evidencias por producto, norma técnica de ¾ ¾ ¾ ¾ institución educativa, formación ocupacional, módulo ocupacional, unidad de aprendizaje, y resultado de aprendizaje. Si desconoces el significado de los componentes de la norma, te recomendamos que consultes el apartado glosario de términos, que encontrarás al final del manual. Analiza el apartado «Normas Técnicas de competencia laboral, Norma técnica de institución educativa». Revisa el Mapa curricular del módulo autocontenido transversal. Está diseñado para mostrarte esquemáticamente las unidades y los resultados de aprendizaje que te permitirán llegar a desarrollar paulatinamente las competencias laborales que requiere la ocupación para la cual te estás formando. Realiza la lectura del contenido de cada capítulo y las actividades de aprendizaje que se te recomiendan. Recuerda que en la educación basada en normas de competencia laborales la responsabilidad del aprendizaje es tuya, ya que eres el que desarrolla y orienta sus conocimientos y habilidades hacia el logro de algunas competencias en particular. En el desarrollo del contenido de cada capítulo, encontrarás ayudas visuales como las siguientes, haz lo que ellas te sugieren efectuar. Si no haces no aprendes, no desarrollas habilidades, y te será difícil realizar los ejercicios de evidencias de conocimientos y los de desempeño. Operación de Sistema Operativo Multiusuario Imágenes de Referencia Estudio individual Investigación documental Consulta con el docente Redacción de trabajo Comparación de resultados con otros compañeros Repetición del ejercicio Trabajo en equipo Contextualizaciòn Realización del ejercicio Resumen Observación Consideraciones sobre seguridad e higiene Investigación de campo Portafolios de evidencias Operación de Sistema Operativo Multiusuario 7 III. PROPÓSITO DEL MÓDULO AUTOCONTENIDO ESPECÍFICO Al finalizar el módulo, el alumno operará un sistema operativo multiusuario mediante comandos de UNÍX que le permitan, crear, abrir, compartir, buscar y administrar archivos y monitorear procesos para la realización de tareas en el procesamiento de información. 8 Operación de Sistema Operativo Multiusuario IV. ESPECIFICACIONES DE EVALUACIÓN Durante el desarrollo de las prácticas de ejercicio también se estará evaluando el desempeño. El docente mediante la observación directa y con auxilio de una lista de cotejo confrontará el cumplimiento de los requisitos en la ejecución de las actividades y el tiempo real en que se realizó. En éstas quedarán registradas las evidencias de desempeño. Las autoevaluaciones de conocimientos correspondientes a cada capítulo además de ser un medio para reafirmar los conocimientos sobre los contenidos tratados, son también una forma de evaluar y recopilar evidencias de conocimiento. Al término del módulo deberás presentar un Portafolios de Evidencias1, el cual estará integrado por las listas de cotejo correspondientes a las prácticas de ejercicio, las autoevaluaciones de conocimientos que se encuentran al final de cada capítulo del manual y muestras de los trabajos realizados durante el desarrollo del módulo, con esto se facilitará la evaluación del aprendizaje para determinar que se ha obtenido la competencia laboral. Deberás asentar datos básicos, tales como: nombre del alumno, fecha de evaluación, nombre y firma del evaluador y plan de evaluación. 1El portafolios de evidencias es una compilación de documentos que le permiten al evaluador, valorar los conocimientos, las habilidades y las destrezas con que cuenta el alumno, y a éste le permite organizar la documentación que integra los registros y productos de sus competencias previas y otros materiales que demuestran su dominio en una función específica (CONALEP. Metodología para el diseño e instrumentación de la educación y capacitación basada en competencias, Pág. 180). Operación de Sistema Operativo Multiusuario 9 VI. MAPA CURRICULAR DEL MÓDULO AUTOCONTENIDO ESPECÍFICO Operación de Sistema Operativo Multiusuario Módulo 108 hrs. Unidad de Aprendizaje 1. Manejo de ambiente de sistema operativo multiusuario. 55 hrs. 2. Administración de procesos de sistema operativo multiusuario 53 hrs. 1.1 Analizar la evolución de sistema operativo multiusuario y conceptos con base a sus antecedentes. 1.2 Abrir sesiones de UNIX por medio de comandos y archivos. Resultados de Aprendizaje 1.3 Manejar editores de introducción de texto mediante comandos de ejecución. 1.4 Manejar el shell de UNIX mediante instrucciones de usuario. 2.1 Utilizar comandos con sus opciones por medio de instrucciones UNIX. 2.2 Manejar la administración de cuentas de UNIX con base a permisos establecidos de usuarios. 2.3 Organizar la información de archivos y discos mediante el sistema de archivos. 10 10 hrs. 10 hrs. 15 hrs. 20 hrs. 18 hrs. 18 hrs. 17 hrs. Operación de Sistema Operativo Multiusuario MANEJO DE AMBIENTE DE SISTEMA OPERATIVO MULTIUSUARIO. Al finalizar la unidad, el alumno manejará un sistema operativo multiusuario de acerdo con las VII. características de entorno y los comandos del sistema operativo UNIX. Operación de Sistema Operativo Multiusuario 11 MAPA CURRICULAR DEL MÓDULO AUTOCONTENIDO ESPECÍFICO Operación de Sistema Operativo Multiusuario Módulo 108 hrs. Unidad de Aprendizaje 1. Manejo de ambiente de sistema operativo multiusuario. 55 hrs. Resultados de Aprendizaje 12 2.Administración de procesos de sistema operativo multiusuario 53 hrs. 1.1 Analizar la evolución de sistema operativo multiusuario y conceptos con base a sus antecedentes. 1.2 Abrir sesiones de UNIX por medio de comandos y archivos. 10 hrs. 1.3 Manejar editores de introducción de texto mediante comandos de ejecución. 1.4 Manejar el shell de UNIX mediante instrucciones de usuario. 15 hrs. 2.4 Utilizar comandos con sus opciones por medio de instrucciones UNIX. 2.5 Manejar la administración de cuentas de UNIX con base a permisos establecidos de usuarios. 2.6 Organizar la información de archivos y discos mediante el sistema de archivos. 18 hrs. 18 hrs. 10 hrs. 20 hrs. 17 hrs. Operación de Sistema Operativo Multiusuario SUMARIO ¾ ¾ ¾ ¾ ¾ ¾ ¾ ¾ ¾ SISTEMA OPERATIVO MULTIUSUARIO CARACTERISTICAS DE UNIX INICIO DE UNA SESION UNIX ARCHIVOS UNIX EDITOR MANEJO DE CONTENIDO SHELL. REDIRECCION DE ENTRADA Y SALIDA COMANDOS AVANZADOS RESULTADO DE APRENDIZAJE 1.1. Analizar la evolución de sistema operativo multiusuario y conceptos con base a sus antecedentes. 1.1.1. SISTEMA OPERATIVO MULTIUSUARIO. • Definición de sistema operativo Introducción a los sistemas operativos Definiciones de los sistemas operativos. Un sistema operativo es un programa que actúa como intermediario entre el usuario y el hardware de un computador y su propósito es proporcionar un entorno en el cual el usuario pueda ejecutar programas. El objetivo principal de un sistema operativo es lograr que el sistema de computación se use de manera cómoda ,y el objetivo secundario es que el hardware del computador se emplee de manera eficiente. Un sistema Operativo (SO) es en sí mismo un programa de Operación de Sistema Operativo Multiusuario computadora. Sin embargo, es un programa muy especial, quizá el más complejo e importante en una computadora. El SO despierta a la computadora y hace que reconozca al CPU, la memoria, el teclado, el sistema de vídeo y las unidades de disco. Además, proporciona la facilidad para que los usuarios se comuniquen con la computadora y sirve de plataforma a partir de la cual se corren programas de aplicación. Cuando enciendes una computadora, lo primero que ésta hace es llevar a cabo unautodiagnóstico llamado auto prueba de encendido (Power On Self Test, POST).Durante la POST, la computadora identifica su memoria, sus discos, su teclado, su sistema de vídeo y cualquier otro dispositivo conectado a ella. Lo 13 siguienteque la computadora hace es buscar un SO para arrancar (boot). Una vez que la computadora ha puesto en marcha su SO, mantiene al menos parte de éste en su memoria en todo momento. Mientras la computadora esté encendida, el sistema operativo tiene 4 tareas principales: • • • • • 14 Proporcionar ya sea una interfaz de línea de comando o una interfaz gráfica al usuario, para que este último se pueda comunicar con la computadora. Interfaz de línea de comando: tú introduces palabras y símbolos desde el teclado de la computadora, ejemplo, el MS-DOS. Interfaz gráfica del Usuario (GUI), seleccionas las acciones mediante el uso de un Mouse para pulsar sobre figuras llamadas iconos o seleccionar opciones de los menús. Administrar los dispositivos de hardware en la computadora. Cuando corren los programas, necesitan utilizar la memoria, el monitor, las unidades de disco, los puertos de Entrada/Salida (impresoras, módems, etc.). El SO sirve de intermediario entre los programas y el hardware. Administrar y mantener los sistemas de archivo de disco. Los SO agrupan la información dentro de compartimientos lógicos para almacenarlos en el disco. Estos grupos de información son llamados archivos. Los archivos pueden contener instrucciones de programas o información creada • por el usuario. El SO mantiene una lista de los archivos en un disco, y nos proporciona las herramientas necesarias para organizar y manipular estos archivos. Apoyar a otros programas. Otra de las funciones importantes del SO es proporcionar servicios a otros programas. Estos servicios son similares a aquéllos que el SO proporciona directamente a los usuarios. Por ejemplo, listar los archivos, grabarlos a disco, eliminar archivos, revisar espacio disponible, etc. Cuando los programadores escriben programas de computadora, incluyen en sus programas instrucciones que solicitan los servicios del SO. Estas instrucciones son conocidas como "llamadas del sistema" ¿Qué es un sistema operativo? Un sistema operativo es el programa que oculta la verdad del hardware al programador y presenta una vista simple y agradable de los archivos nominados que pueden leerse y escribirse. El sistema operativo resguarda al programador del hardware del disco y presenta una interfaz simple orientada al archivo, también disimula mucho del trabajo concerniente a interrupciones, relojes o cronómetros, manejo de memoria y otras características de bajo nivel. La función del sistema operativo es la de presentar al usuario con elequivalente de una máquina ampliada, o máquina virtual, Operación de Sistema Operativo Multiusuario que sea más fácil de programar que el hardware implícito. El sistema operativo es una parte importante de casi cualquier sistema de computación. Un sistema de computación puede dividirse en cuatro componentes: a.- El hardware b-El sistema operativo c-Los programas de aplicación d-Los usuarios. a-El hardware Unidad Central de Procesamiento (UCP), memoria y dispositivos de entrada y salida (E/S)) proporciona los recursos de computación básicos. c-Los programas de aplicación (Compiladores, sistemas de bases de datos, juegos devideo y programas para negocios) Definen la forma en que estos recursos se emplean para resolver los problemas de computación de los usuarios. d-Usuarios Puede haber distintos usuarios (personas, máquinas, otros computadores) que intentan resolver problemas diferentes; por lo tanto, es posible que haya diferentes programas de aplicación. b-El sistema operativo Operación de Sistema Operativo Multiusuario El sistema operativo controla y coordina el uso del hardware entre los diversos programas de aplicación de los distintos usuarios. Podemos ver al sistema operativo como un asignador de recursos. Un sistema de computación tiene muchos recursos (hardware y software) que pueden requerirse para resolver un problema: tiempo de la UCP, espacio de memoria, espacio de almacenamiento de archivos, dispositivos de E/S, etc. El sistema operativo actúa como el administrador de estos recursos y los asigna a usuarios y programas concretos según los necesiten las tareas de los usuarios. Puesto que pueden surgir conflictos en las solicitudes de recursos, el sistema operativo debe decidir a qué solicitudes se les asignarán para que el sistema de computación pueda funcionar de manera eficiente y justa. En términos generales, no hay una definición de sistema operativo completamente adecuada. Los sistemas operativos existen porque son una manera razonable de solucionar el problema de crear un sistema de computación utilizable. Objetivos para la creación de los sistemas Operativos. • • Transformar el complejo hardware de una computadora en una máquina accesible al usuario. Lograr el mejor uso posible de los recursos. Hacer eficiente el uso del recurso. 15 El objetivo fundamental de los sistemas de computación es ejecutar losprogramas de los usuarios y facilitar la resolución de sus problemas. El hardware se construye con este fin, pero como éste no es fácil de utilizar, se desarrollan programas de aplicación que requieren ciertas operaciones comunes, como el control de dispositivos de E/S. las funciones comunes de control y de asignación de recursos se integran para formar un solo fragmento de software:el sistema operativo. • Desarrollo histórico sistemas operativos. de los En un principio, solo existía el hardware del computador. Los primeros computadores eran (físicamente) grandes máquinas que se operaban desde una consola. El programador escribía un programa y luego lo controlaba directamente desde la consola. En primer lugar, el programa se cargaba manualmente en la memoria, desde los interruptores del tablero frontal (una instrucción en cada ocasión), desde una cinta de papel o desde tarjetas perforadas. Luego se pulsaban los botones adecuados para establecer la dirección de inicio y comenzar la ejecución del programa. Mientras este se ejecutaba, elprogramador-operador lo podía supervisar observando las luces en la consola, sise descubrían errores, el programador podía detener el programa, examinar elcontenido de la memoria y los registros y depurar el programa 16 directamente desdela consola. La salida del programa se imprimía, o se perforaba en cintas depapel o tarjetas para su impresión posterior. Sin embargo, con este procedimiento se presentaban ciertos problemas. Supongamosque un usuario se había registrado para usar una hora de tiempo del computadordedicada a ejecutar el programa que estaba desarrollando, pero se topaba con algúnerror difícil y no podía terminar en esa hora. Si alguien más habíareservado el siguiente bloque de tiempo, usted debía detenerse, rescatar lo quepudiera y volver mas tarde para continuar. Por otra parte, si el programa seejecutaba sin problemas, podría terminar en 35 minutos; pero como pensó quenecesitaría la maquina durante más tiempo, se registro para usarla una hora, ypermanecería inactiva durante 25 minutos. Conforme transcurrió el tiempo, se desarrollaron software y hardwareadicionales; empezaron a popularizarse los lectores de tarjetas, impresoras de líneasy cintas magnéticas; se diseñaron ensambladores, cargadores y ligadores parafacilitar las tareas de programación, y se crearon bibliotecas de funcionescomunes, de manera que estas podían copiarse a un nuevo programa sin tener queescribirlas de nuevo. Las rutinas que efectuaban operaciones de E/S tenían una importancia especial.Cada nuevo dispositivo de E/S poseía sus propias características, lo querequería una cuidadosa programación. Así mismo, para cada uno de ellos seescribía una subrutina especial, la cual se denominaba Operación de Sistema Operativo Multiusuario manejador dedispositivos. Este sabe como deben de usarse los buffers, indicadores,registros, bits de control y bits de estado para cada dispositivo. Cada tipo dedispositivo tenía su propio manejador. Una tarea sencilla, como leer un carácterde un lector de cinta de papel, podía conllevar complicadas secuencias deoperaciones específicas para el dispositivo. En lugar de tener que escribircada vez el código necesario, bastaba usar el manejador de dispositivo de labiblioteca. el casodel Hardware, las generaciones han sido marcadas por grandes avances en loscomponentes utilizados, pasando de válvulas (primera generación) atransistores (segunda generación), a circuitos integrados (tercera generación),a circuitos integrados de gran y muy gran escala (cuarta generación). Cadageneración Sucesiva de hardware ha ido acompañada de reducciones substancialesen los costos, tamaño, emisión de calor y consumo de energía, y porincrementos notables en velocidad y capacidad. Más tarde aparecieron los compiladores de FORTRAN, COBOL y otros lenguajes, loque facilito la tarea de programación, pero hizo más complejo elfuncionamiento del computador. Por ejemplo, al preparar la ejecución de unprograma en FORTRAN, el programador primero necesitaba cargar en el computadorel compilador de FORTRAN, que generalmente se conservaba en una cinta magnética,por lo que había que montar la cinta adecuada en la unidad correspondiente. Elprograma se leía a través del lector de tarjetas y se escribía en otra cinta.El compilador de FORTRAN producía una salida en lenguaje ensamblador, que luegotenia que ensamblarse, para esto era necesario montar otra cinta con elensamblador, y su salida debía enlazarse con las rutinas de apoyo de lasbibliotecas. Finalmente, el programa objeto, en código binario, estaba listopara ejecutarse; se cargaba en memoria y se depuraba desde la consola comoantes. Generación Cero (década de 1940) Los primeros sistemas computacionales no poseían sistemas operativos. Losusuarios tenían completo acceso al lenguaje de la maquina. Todas lasinstrucciones eran codificadas a mano. Los Sistemas Operativos, al igual que el Hardware de los computadores, hansufrido una serie de cambios revolucionarios llamados generaciones. En Operación de Sistema Operativo Multiusuario Primera Generación (década de 1950) Los sistemas operativos de los años cincuenta fueron diseñados para hacer masfluida la transición entre trabajos. Antes de que los sistemas fueran diseñados,se perdía un tiempo considerable entre la terminación de un trabajo y elinicio del siguiente. Este fue el comienzo de los sistemas de procesamiento porlotes, donde los trabajos se reunían por grupos o lotes. Cuando el trabajoestaba en ejecución, este tenia control total de la maquina. Al terminar cadatrabajo, el control era devuelto al sistema operativo, el cual limpiaba y leíae iniciaba el trabajo siguiente. Al inicio de los 50's esto había mejorado un poco con la introducción detarjetas 17 perforadas (las cuales servían para introducir los programas delenguajes de máquina), puesto que ya no había necesidad de utilizar lostableros enchufables. Además el laboratorio de investigación General Motors implementó el primersistema operativo para la IBM 701. Los sistemas de los 50's generalmenteejecutaban una sola tarea, y la transición entre tareas se suavizaba paralograr la máxima utilización del sistema. Esto se conoce como sistemas deprocesamiento por lotes de un sólo flujo, ya que los programas y los datos eransometidos en grupos o lotes. La introducción del transistor a mediados de los 50's cambió la imagenradicalmente. Se crearon máquinas suficientemente confiables las cuales seinstalaban en lugares especialmente acondicionados, aunque sólo las grandesuniversidades y las grandes corporaciones o bien las oficinas del gobierno sepodían dar el lujo de tenerlas. Para poder correr un trabajo (programa), tenían que escribirlo en papel (enFORTRAN o en lenguaje ensamblador) y después se perforaría en tarjetas.Enseguida se llevaría la pila de tarjetas al cuarto de introducción al sistemay la entregaría a uno de los operadores. Cuando la computadora terminara eltrabajo, un operador se dirigiría a la impresora y desprendería la salida y lallevaría al cuarto de salida, para que la recogiera el programador. 18 Segunda Generación (a mitad de la década de 1960) La característica de los sistemas operativos fue el desarrollo de los sistemascompartidos con multiprogramación, y los principios del multiprocesamiento. Enlos sistemas de multiprogramación, varios programas de usuario se encuentran almismo tiempo en el almacenamiento principal, y el procesador se cambia rápidamentede un trabajo a otro. En los sistemas de multiprocesamiento se utilizan variosprocesadores en un solo sistema computacional, con la finalidad de incrementarel poder de procesamiento de la maquina. La independencia de dispositivos aparece después. Un usuario que desea escribirdatos en una cinta en sistemas de la primera generación tenia que hacerreferencia especifica a una unidad de cinta particular. En la segunda generación,el programa del usuario especificaba tan solo que un archivo iba a ser escritoen una unidad de cinta con cierto número de pistas y cierta densidad. Se desarrollo sistemas compartidos, en la que los usuarios podían acoplarsedirectamente con el computador a través de terminales. Surgieron sistemas detiempo real, en que los computadores fueron utilizados en el control de procesosindustriales. Los sistemas de tiempo real se caracterizan por proveer unarespuesta inmediata. Operación de Sistema Operativo Multiusuario Tercera Generación (mitad de década 1960 a mitad década de 1970) Se inicia en 1964, con la introducción de la familia de computadoresSistema/360 de IBM. Los computadores de esta generación fueron diseñados comosistemas para usos generales. Casi siempre eran sistemas grandes, voluminosos,con el propósito de serlo todo para toda la gente. Eran sistemas de modos múltiples,algunos de ellos soportaban simultáneamente procesos por lotes, tiempocompartido, procesamiento de tiempo real y multiprocesamiento. Eran grandes ycostosos, nunca antes se había construido algo similar, y muchos de losesfuerzos de desarrollo terminaron muy por arriba del presupuesto y mucho despuésde lo que el planificador marcaba como fecha de terminación. Estos sistemas introdujeron mayor complejidad a los ambientes computacionales;una complejidad a la cual, en un principio, no estaban acostumbrados losusuarios. Cuarta Generación (mitad de década de 1970 en adelante) Los sistemas de la cuarta generación constituyen el estado actual de latecnología. Muchos diseñadores y usuarios se sienten aun incómodos, despuésde sus experiencias con los sistemas operativos de la tercera generación. Operación de Sistema Operativo Multiusuario Con la ampliación del uso de redes de computadores y del procesamiento en línealos usuarios obtienen acceso a computadores alejados geográficamente a travésde varios tipos de terminales. Los sistemas de seguridad se han incrementado mucho ahora que la informaciónpasa a través de varios tipos vulnerables de líneas de comunicación. La clavede cifrado esta recibiendo mucha atención; han sido necesario codificar losdatos personales o de gran intimidad para que; aun si los datos son expuestos, no sean de utilidad a nadie mas que a los receptores adecuados. • Estructura de un sistema operativo En esta unidad examinaremos cuatro estructuras distintas que ya han sidoprobadas, con el fin de tener una idea más extensa de cómo esta estructuradoel sistema operativo. Veremos brevemente algunas estructuras de diseños desistemas operativos. Estructura modular. También llamados sistemas monolíticos. Este tipo de organización es con muchola mas común; bien podría recibir el subtitulo de "el granembrollo". La estructura consiste en que no existe estructura alguna. Elsistema operativo se escribe como una colección de procedimientos, cada uno delos cuales puede llamar a los demás cada vez que así lo requiera. Cuando seusa esta técnica, cada procedimiento del sistema tiene una interfaz biendefinida en términos de 19 parámetros y resultados y cada uno de ellos es librede llamar a cualquier otro, si este ultimo proporciona cierto cálculo útilpara el primero. Sin embargo incluso en este tipo de sistemas es posible teneral menos algo de estructura. Los servicios (llamadas al sistema) que proporcionael sistema operativo se solicitan colocando los parámetros en lugares biendefinidos, como en los registros o en la pila, para después ejecutar unainstrucción especial de trampa de nombre "llamada al núcleo" o"llamada al supervisor". Esta organización sugiere una organización básica del sistema operativo: Esta instrucción cambia la máquina del modo usuario al modo núcleo ytransfiere el control al sistema operativo, lo que se muestra en el evento (1)de la figura 1. El sistema operativo examina entonces los parámetros de lallamada, para determinar cual de ellas se desea realizar, como se muestra en elevento (2) de la figura 1. A continuación, el sistema operativo analiza unatabla que contiene en la entrada k un apuntador al procedimiento que realiza lak-esima llamada al sistema. Esta operación que se muestra en (3) de la figura1, identifica el procedimiento de servicio, al cual se llama. Por ultimo, lallamada al sistema termina y el control regresa al programa del usuario. En este modelo, para cada llamada al sistema existe un procedimiento deservicio que se encarga de él. Los procedimientos utilitarios hacen cosasnecesarias para varios procedimientos de servicio, por ejemplo buscar los datosde los programas del usuario. La siguiente figura muestra este procedimiento detres capas Figura 1. La forma en que debe hacerse una llamada al sistema: (1) el programadel usuario es atraído hacia el núcleo. (2) el sistema operativo determina elnúmero del servicio solicitado. (3) el sistema operativo localiza y llama alprocedimiento correspondiente al servicio. (4) el control regresa al programadel usuario. 20 1.- un programa principal que llama al procedimiento del servicio solicitado. 2.- un conjunto de procedimientos de servicio que llevan a cabo las llamadas alsistema. 3.- un conjunto de procedimientos utilitarios que ayudan al procedimiento deservicio. (Para ver el gráfico faltante haga click en el menú superior "BajarTrabajo") Figura 2. Un modelo de estructura simple para un sistema monolítico. (Para ver el gráfico faltante haga click en el menú superior "BajarTrabajo") Estructura por microkernel. Las funciones centrales de un SO son controladas por el núcleo (kernel)mientras que la interfaz del usuario es controlada por el entorno (shell). Porejemplo, la parte Operación de Sistema Operativo Multiusuario más importante del DOS es un programa con el nombre"COMMAND.COM" Este programa tiene dos partes. El kernel, que semantiene en memoria en todo momento, contiene el código máquina de bajo nivelpara manejar la administración de hardware para otros programas que necesitanestos servicios, y para la segunda parte del COMMAND.COM el shell, el cual es elinterprete de comandos Las funciones de bajo nivel del SO y las funciones de interpretación decomandos están separadas, de tal forma que puedes mantener el kernel DOScorriendo, pero utilizar una interfaz de usuario diferente. Esto es exactamentelo que sucede cuando cargas Microsoft Windows, el cual toma el lugar del shell,reemplazando la interfaz de línea de comandos con una interfaz gráfica delusuario. Existen muchos "shells" diferentes en el mercado, ejemplo:NDOS (Norton DOS), XTG, PCTOOLS, o inclusive el mismo SO MS-DOS a partir de laversión 5.0 incluyó un Shell llamado DOS SHELL. Estructura por anillos concéntricos (capas). El sistema por "capas" consiste en organizar el sistema operativo comouna jerarquía de capas, cada una construida sobre la inmediata inferior. Elprimer sistema construido de esta manera fue el sistema THE (TechnischeHogeschool Eindhoven), desarrollado en Holanda por E. W. Dijkstra (1968) y susestudiantes. El sistema tenia 6 capas, como se muestra en la figura 3. La capa 0 trabaja conla asignación del procesador y alterna entre los procesos cuando ocurren lasinterrupciones o expiran los cronómetros. Sobre la capa 0, el sistema Operación de Sistema Operativo Multiusuario consta deprocesos secuénciales, cada uno de los cuales se podría programar sin importarque varios procesos estuvieran ejecutándose en el mismo procesador, la capa 0proporcionaba la multiprogramación básica de la CPU. La capa 1 realizaba la administración de la memoria. Asignaba el espacio dememoria principal para los procesos y un recipiente de palabras de 512K seutilizaba para almacenar partes de los procesos (páginas) para las que no existíalugar en la memoria principal. Por encima de la capa 1, los procesos no debíanpreocuparse si estaban en la memoria o en el recipiente; el software de la capa1 se encargaba de garantizar que las páginas llegaran a la memoria cuandofueran necesarias. La capa 2 se encargaba de la comunicación entre cada proceso y la consola deloperador. Por encima de esta capa, cada proceso tiene su propia consola deoperador. La capa 3 controla los dispositivos de E/S y guarda en almacenes (buffers) losflujos de información entre ellos. Por encima de la capa 3, cada proceso puedetrabajar con dispositivos exactos de E/S con propiedades adecuadas, en vez dedispositivos reales con muchas peculiaridades. La capa 4 es donde estaban losprogramas del usuario, estos no tenían que preocuparse por el proceso, memoria,consola o control de E/S. el proceso operador del sistema se localizaba en lacapa 5 Una generalización mas avanzada del concepto de capas se presento en el sistemaMULTICS. En lugar de capas, 21 MULTICS estaba organizado como una serie de anillosconcéntricos, siendo los anillos interiores los privilegiados. Cuando unprocedimiento de un anillo exterior deseaba llamar a un procedimiento de unanillo interior, debió hacer el equivalente a una llamada al sistema anillos estaba mas presente duranteel tiempo de ejecución y era reforzado por el hardware. La ventaja delmecanismo de anillos es su facilidad de extensión para estructurar subsistemasdel usuario. Mientras que el esquema de capas de THE era en realidad un apoyo al diseño,debido a que todas las partes del sistema estaban ligadas entre si en un soloprograma objeto, en MULTICS, el mecanismo de 5 El operador 4 Programas del usuario 3 Control de entrada/salida 2 Comunicación operador-proceso 1 Administración de la memoria y del disco 0 Asignación del procesador y multiprogramación Figura . Estructura del sistema operativo. 22 Operación de Sistema Operativo Multiusuario Estructura cliente – servidor Una tendencia de los sistemas operativos modernos es la de explotar la idea demover el código a capas superiores y eliminar la mayor parte posible delsistema operativo para mantener un núcleo mínimo. El punto de vista usual esel de implantar la mayoría de las funciones del sistema operativo en losprocesos del usuario. Para solicitar un servicio, como la lectura de un bloquede cierto archivo, un proceso del usuario (denominado proceso cliente) envía lasolicitud a un proceso servidor, que realiza entonces el trabajo y regresa larespuesta. En este modelo, que se muestra en la figura 4, lo único que hace elnúcleo es controlar la comunicación entre los clientes y los servidores. Alseparar el sistema operativo en partes, cada una de ellas controla una facetadel sistema, como el servicio a archivos, servicios a procesos, servicio aterminales o servicio a la memoria, cada parte es pequeña y controlable. Ademáscomo todos los servidores se ejecutan como procesos en modo usuario y no en modonúcleo, no tienen acceso directo al hardware. En consecuencia si hay un erroren el servidor de archivos, éste puede fallar, pero esto no afectará engeneral a toda la máquina. (Para ver el gráfico faltante haga click en el menú superior "BajarTrabajo") Figura 4. El modelo Cliente-servidor.Otra de las ventajas del modelo cliente-servidor es su capacidad de adaptaciónpara su uso en los sistemas distribuidos (figura 5). Si un cliente se comunica con un servidor mediante mensajes, el cliente nonecesita Operación de Sistema Operativo Multiusuario saber si el mensaje se maneja en forma local, en su máquina, o si seenvía por medio de una red a un servidor en una máquina remota. En lo querespecta al cliente, lo mismo ocurre en ambos casos: se envió una solicitud yse recibió una respuesta.Para ver el gráfico faltante haga click en el menú superior "BajarTrabajo") Figura 5. El modelo cliente-servidor en un sistema distribuido. • Funciones y características de los sistemas operativos. Funciones de los sistemas operativos. 1.- Aceptar todos los trabajos conservarlos hasta su finalización. y 2.- Interpretación de comandos: Interpreta los comandos que permiten al usuariocomunicarse con el ordenador. 3.- Control de recursos: Coordina y manipula el hardware de la computadora, comola memoria, las impresoras, las unidades de disco, el teclado o el Mouse. 4.- Manejo de dispositivos de E/S: Organiza los archivos en diversosdispositivos de almacenamiento, como discos flexibles, discos duros, discoscompactos o cintas magnéticas. 5.- Manejo de errores: Gestiona los errores de hardware y la pérdida de datos. 6.- Secuencia de tareas: El sistema operativo debe administrar la manera en quese reparten los procesos. Definir el 23 orden. (Quien después). va primero y quien • 7.- Protección: Evitar que las acciones de un usuario afecten el trabajo queesta realizando otro usuario. 8.- Multiacceso: Un usuario se puede conectar a otra máquina sin tener queestar cerca de ella. 9.- Contabilidad de recursos: establece el costo que se le cobra a un usuariopor utilizar determinados recursos. Características de los sistemas operativos. En general, se puede decir que un Sistema Operativo tiene las siguientescaracterísticas: • • • • Conveniencia. Un Sistema Operativo hace más conveniente el uso de una computadora. Eficiencia. Un Sistema Operativo permite que los recursos de la computadora se usen de la manera más eficiente posible. Habilidad para evolucionar. Un Sistema Operativo deberá construirse de manera que permita el desarrollo, prueba o introducción efectiva de nuevas funciones del sistema sin interferir con el servicio. Encargado de administrar el hardware. El Sistema Operativo se encarga de manejar de una mejor manera los recursos de la computadora en cuanto a hardware se refiere, esto es, asignar a cada proceso una parte del procesador para poder compartir los recursos. • • • • Relacionar dispositivos (gestionar a través del kernel). El Sistema Operativo se debe encargar de comunicar a los dispositivos periféricos, cuando el usuario así lo requiera. Organizar datos para acceso rápido y seguro. Manejar las comunicaciones en red. El Sistema Operativo permite al usuario manejar con alta facilidad todo lo referente a la instalación y uso de las redes de computadoras. Procesamiento por bytes de flujo a través del bus de datos. Facilitar las entradas y salidas. Un Sistema Operativo debe hacerle fácil al usuario el acceso y manejo de los dispositivos de Entrada/Salida de la computadora. • Definición de sistema operativo de red Los sistemas operativos siguen evolucionando. Los sistemas operativos distribuidos están diseñados para su uso en un grupo de ordenadores conectados pero independientes que comparten recursos. En un sistema operativo distribuido, un proceso puede ejecutarse en cualquier ordenador de la red (normalmente, un ordenador inactivo en ese momento) para aumentar el rendimiento de ese proceso. Modalidades de trabajo de los sistemas operativos. Sistemas operativos por lotes. 24 Operación de Sistema Operativo Multiusuario La secuencia por lotes o procesamiento por lotes en microcomputadoras, es laejecución de una lista de comandos del sistema operativo uno tras otro sinintervención del usuario. • En los ordenadores más grandes el proceso de recogida de programas y deconjuntos de datos de los usuarios, la ejecución de uno o unos pocos cada vez yla entrega de los recursos a los usuarios. Procesamiento por lotes tambiénpuede referirse al proceso de almacenar transacciones durante un cierto lapsoantes de su envío a un archivo maestro, por lo general una operación separada que se efectúa durante la noche • Los sistemas operativos por lotes (batch), en los que los programas erantratados por grupos (lote) en ves de individualmente. La función de estossistemas operativos consistía en cargar en memoria un programa de la cinta yejecutarlo. Al final este, se realizaba el salto a una dirección de memoriadesde donde reasumía el control del sistema operativo que cargaba el siguienteprograma y lo ejecutaba. De esta manera el tiempo entre un trabajo y el otrodisminuía considerablemente. (Para ver el gráfico faltante haga click en el menú superior "BajarTrabajo") • • • • • • • • Requiere que el programa, datos y órdenes al sistema sean remitidos todos juntos en forma de lote. Permiten poca o ninguna interacción usuario/programa en ejecución. Mayor potencial de utilización de recursos que procesamiento serial simple en sistemas multiusuarios. No conveniente para desarrollo de programas por bajo tiempo de retorno y depuración fuera de línea. Conveniente para programas de largos tiempos de ejecución (Ej., análisis estadísticos, nóminas de personal, etc.) Se encuentra en muchos computadores personales combinados con procesamiento serial. Planificación del procesador sencilla, típicamente procesados en orden de llegada. Planificación de memoria sencilla, generalmente se divide en dos: parte residente del S.O. y programas transitorios. No requieren gestión crítica de dispositivos en el tiempo. Suelen proporcionar gestión sencilla de manejo de archivos: se requiere poca protección y ningún control de concurrencia para el acceso. Sistema de procesamiento por lotes Algunas otras características con que cuentan los Sistemas Operativos por lotesson: Sistemas operativos compartido. de tiempo El tiempo compartido en ordenadores o computadoras consiste en el uso de unsistema por más de una persona al Operación de Sistema Operativo Multiusuario 25 mismo tiempo. El tiempo compartido ejecutaprogramas separados de forma concurrente, intercambiando porciones de tiempoasignadas a cada programa (usuario). En este aspecto, es similar a la capacidadde multitareas que es común en la mayoría de los microordenadores o lasmicrocomputadoras. Sin embargo el tiempo compartido se asocia generalmente conel acceso de varios usuarios a computadoras más grandes y a organizaciones deservicios, mientras que la multitarea relacionada con las microcomputadorasimplica la realización de múltiples tareas por un solo usuario. Los principales recursos del sistema, el procesador, la memoria, dispositivos deE/S, son continuamente utilizados entre los diversos usuarios, dando a cadausuario la ilusión de que tiene el sistema dedicado para sí mismo. Esto traecomo consecuencia una gran carga de trabajo al Sistema Operativo, principalmenteen la administración de memoria principal y secundaria. Características de los Sistemas Operativos de tiempo compartido: • • • • 26 Populares representantes de sistemas multiprogramados multiusuario, Ej.: sistemas de diseño asistido por computador, procesamiento de texto, etc. Dan la ilusión de que cada usuario tiene una máquina para sí. La mayoría utilizan algoritmo de reparto circular. Los programas se ejecutan con prioridad rotatoria que se incrementa con la espera y • • • disminuye después de concedido el servicio. Evitan monopolización del sistema asignando tiempos de procesador (time slot). Gestión de memoria: proporciona protección a programas residentes. Gestión de archivo: debe proporcionar protección y control de acceso debido a que pueden existir múltiples usuarios accesando un mismo archivo. Sistemas operativos de tiempo real. Un sistema operativo en tiempo real procesa las instrucciones recibidas alinstante, y una vez que han sido procesadas muestra el resultado. Este tipotiene relación con los sistemas operativos monousuarios, ya que existe un solooperador y no necesita compartir el procesador entre varias solicitudes. Su característica principal es dar respuestas rápidas; por ejemplo en un casode peligro se necesitarían respuestas inmediatas para evitar una catástrofe. Los Sistemas Operativos de tiempo real, cuentan con las siguientes características: • • Se dan en entornos en donde deben ser aceptados y procesados gran cantidad de sucesos, la mayoría externos al sistema computacional, en breve tiempo o dentro de ciertos plazos. Se utilizan en control industrial, conmutación telefónica, control de vuelo, simulaciones en tiempo real., aplicaciones militares, etc. Operación de Sistema Operativo Multiusuario • • • • • • • • • Su objetivo es proporcionar rápidos tiempos de respuesta. Procesa ráfagas de miles de interrupciones por segundo sin perder un solo suceso. Un proceso se activa tras ocurrencia de suceso, mediante interrupción. Un proceso de mayor prioridad expropia recursos. Por tanto generalmente se utiliza planificación expropiativa basada en prioridades. Gestión de memoria menos exigente que tiempo compartido, usualmente procesos son residentes permanentes en memoria. Población de procesos estática en gran medida. Poco movimiento de programas entre almacenamiento secundario y memoria. La gestión de archivos se orienta más a velocidad de acceso que a utilización eficiente del recurso. Sistemas operativos de red. La principal función de un sistema operativo de red es ofrecer un mecanismopara transferir archivos de una máquina a otra. En este entorno, cada instalaciónmantiene su propio sistema de archivos local y si un usuario de la instalaciónA quiere acceder a un archivo en la instalación B, hay que copiar explícitamenteel archivo de una instalación a otra. Internet proporciona un mecanismo para estas transferencias, a través delprograma Operación de Sistema Operativo Multiusuario protocolo de transferencias de archivos FTP (File Transfer Protocol). Suponga que un usuario quiere copiar un archivo A1, que reside en la instalaciónB, a un archivo A2 en la instalación local A. Primero, el usuario debe invocarel programa FTP, el cual solicita al usuario la información siguiente: a) El nombre de la instalación a partir de la cual se efectuará latransferencia del archivo (es decir la instalación b) La información de acceso, que verifica que el usuario tiene los privilegiosde acceso apropiados en la instalación B Una vez efectuada esta comprobación, el usuario puede copiar el archivo A1 de Ba A2 en A, ejecutando "get A1 to A2" En este esquema, la ubicación del archivo no es transparente para el usuario; tiene que saber exactamente donde esta cada archivo. Además los archivos no secomparten realmente, porque un usuario solo puede copiar un archivo de unainstalación a otra. Por lo tanto pueden existir varias copias del mismoarchivo, lo que representa un desperdicio de espacio. Así mismo, si semodifican, estas copias no serán consistentes. Los Sistemas Operativos de red son aquellos sistemas que mantienen a dos o máscomputadoras unidas a través de algún medio de comunicación (físico o no), con el objetivo primordial de poder compartir los diferentes recursos y la información del sistema. 27 El primer Sistema Operativo de red estaba enfocado a equipos con un procesador Motorola 68000, pasando posteriormente a procesadores Intel como Novell Netware. Los Sistemas Operativos de red más ampliamente usados son: Novell Netware,Personal Netware, LAN Manager, Windows NT Server, UNIX, LANtastic. Entre los diferentes Sistemas Operativos distribuidos que existen tenemos lossiguientes: Sprite, Solaris-MC, Mach, Chorus, Spring, Amoeba, Taos, etc. Características de los Sistemas Operativos distribuidos: • Sistemas operativos distribuidos. • En un sistema operativo distribuido los usuarios pueden acceder a recursosremotos de la misma manera en que lo hacen para los recursos locales. La migraciónde datos y procesos de una instalación a otra queda bajo el control del sistemaoperativo distribuido. Permiten distribuir trabajos, tareas o procesos, entre un conjunto deprocesadores. Puede ser que este conjunto de procesadores esté en un equipo oen diferentes, en este caso es transparente para el usuario. Existen dosesquemas básicos de éstos. Un sistema fuertemente acoplado es aquel quecomparte la memoria y un reloj global, cuyos tiempos de acceso son similarespara todos los procesadores. En un sistema débilmente acoplado los procesadoresno comparten ni memoria ni reloj, ya que cada uno cuenta con su memoria local. • • Los sistemas distribuidos deben de ser muy confiables, ya que si un componentedel sistema se descompone otro componente debe de ser capaz de reemplazarlo. 28 Colección de sistemas autónomos capaces de comunicación y cooperación mediante interconexiones hardware y software. Proporciona abstracción de máquina virtual a los usuarios. Objetivo clave es la transparencia. Generalmente proporcionan medios para la compartición global de recursos. Servicios añadidos: denominación global, sistemas de archivos distribuidos, facilidades para distribución de cálculos (a través de comunicación deprocesos internodos, llamadas a procedimientos remotos, etc.). Sistemas operativos multiprocesadores. En los sistemas multiprocesador, los procesadores comparten la memoria y elreloj. Se incrementa la capacidad de procesamiento y la confiabilidad, soneconómicos. • • Multiprocesamiento simétrico: Cada procesador ejecuta una copia del sistema operativo. Multiprocesamiento asimétrico: Cada procesador tiene asignado Operación de Sistema Operativo Multiusuario una tarea específica, existe un procesador master que asigna tareas a los procesadores esclavos. Multiproceso: Las computadoras que tienen más de un CPU son llamadasmultiproceso. Un sistema operativo multiproceso coordina las operaciones de lascomputadoras multiprocesadores. Ya que cada CPU en una computadora demultiproceso puede estar ejecutando una instrucción, el otro procesador quedaliberado para procesar otras instrucciones simultáneamente. Al usar una computadora con capacidades de multiproceso incrementamos suvelocidad de respuesta y procesos. Casi todas las computadoras que tienencapacidad de multiproceso ofrecen una gran ventaja. Los primeros Sistemas Operativos Multiproceso realizaban lo que se conoce comoMultiproceso asimétrico. Una CPU principal retiene el control global de lacomputadora, así como el de los otros procesadores. Esto fue un primer pasohacia el multiproceso pero no fue la dirección ideal a seguir ya que la CPUprincipal podía convertirse en un cuello de botella. Multiproceso simétrico. En un sistema multiproceso simétrico, no existe unaCPU controladora única. La barrera a vencer al implementar el multiproceso simétricoes que los SO tienen que ser rediseñados o diseñados desde el principio paratrabajar en un ambiente multiproceso. Las extensiones de UNIX, que soportanmultiproceso asimétrico ya están disponibles y las extensiones simétricas Operación de Sistema Operativo Multiusuario seestán haciendo disponibles. Windows NT de Microsoft soporta multiproceso simétrico. • Definición de multitartea Todos los Sistemas Operativos modernos son multitarea y pueden ejecutar varios procesos simultáneamente. En la mayoría de los ordenadores sólo hay una UCP; un Sistema Operativo multitarea crea la ilusión de que varios procesos se ejecutan simultáneamente en la UCP. El mecanismo que se emplea más a menudo para lograr esta ilusión es la multitarea por segmentación de tiempos, en la que cada proceso se ejecuta individualmente durante un periodo de tiempo determinado. Si el proceso no finaliza en el tiempo asignado, se suspende y se ejecuta otro proceso. Este intercambio de procesos se denomina conmutación de contexto. El sistema operativo se encarga de controlar el estado de los procesos suspendidos. También cuenta con un mecanismo llamado planificador que determina el siguiente proceso que debe ejecutarse. El planificador ejecuta los procesos basándose en su prioridad para minimizar el retraso percibido por el usuario. Los procesos parecen efectuarse simultáneamente por la alta velocidad del cambio de contexto. • Tipos de Sistemas operativos y proveedores más comunes. MS-DOS MS-DOS, acrónimo de Microsoft Disk Operating System (sistema operativo de 29 disco de Microsoft). Como otros sistemas operativos, el sistema MS-DOS supervisa las operaciones de entrada y salida del disco y controla el adaptador de vídeo, el teclado y muchas funciones internas relacionadas con la ejecución de programas y el mantenimiento de archivos. El MS-DOS es un sistema operativo monotarea y monousuario con una interfaz de línea de comandos. Windows NT Server Windows NT Server es un sistema operativo para servidores, ampliable e independiente de la plataforma. Puede ejecutarse en sistemas basados en procesadores Intel x86, RISC y DEC Alpha, ofreciendo al usuario mayor libertad a la hora de elegir sus sistemas informáticos. Es ampliable a sistemas de multiproceso simétrico, lo que permite incorporar procesadores adicionales cuando se desee aumentar el rendimiento. Internamente posee una arquitectura de 32 bits. Su modelo de memoria lineal de 32 bits elimina los segmentos de memoria de 64 KB y la barrera de 640 KB de MSDOS. Posee múltiples threads (subprocesos) de ejecución, lo que permite utilizar aplicaciones más potentes. La protección de la memoria garantiza la estabilidad mediante la asignación de áreas de memoria independientes para el sistema operativo y para las aplicaciones, con el fin de impedir la alteración de los datos. La capacidad de multitarea de asignación prioritaria permite al sistema operativo asignar tiempo de proceso a 30 cada aplicación de forma eficaz. Windows NT Server incluye, asimismo, diversas funciones de red, que se describen brevemente en las siguientes secciones y con más detalle en capítulos posteriores de este manual. Windows 98 Microsoft® Windows® 98 hace que el ordenador funcione mejor integrando Internet y ofreciendo un mejor rendimiento del sistema y un sistema de diagnósticos y mantenimiento más sencillo. Windows 98 es más divertido gracias a su soporte de las últimas tecnologías de gráficos, sonido y multimedia, su capacidad para añadir y quitar periféricos, y la convergencia de la televisión y el ordenador en el hogar. Este nuevo sistema operativo se basa en las grandes novedades introducidas por Windows 95. Al mismo tiempo, Windows 98 mantiene la compatibilidad con otras aplicaciones y tecnologías basadas en versiones anteriores de Windows. Las mejoras introducidas en Windows 98 ... • • • • Te ofrecerán la mejor forma de Explorar Internet Te acercarán al Mundo de los Ordenadores Te harán los Ordenadores más Entretenidos Te permitirán descubrir la Capacidad del PC y los Periféricos Las nuevas características de Microsoft® Windows® 98 ofrecen sacar mucho más Operación de Sistema Operativo Multiusuario partido del PC. Los programas se ejecutan más rápido, pudiendo ganar una media de un 25% o más espacio en disco, Internet pasa a ser una parte muy importante en el ordenador, dando un paso de gigante en la entrega de contenido multimedia de alta calidad. Windows XP La nueva versión de Windows supone un cambio importante respecto a la versión anterior. Desde que apareció Windows95 las sucesivas versiones han sido una evolución de la original, sin embargo en esta ocasión se ha producido un cambio de mayor envergadura ya que se ha cambiado el núcleo o Kernel del sistema operativo. Aunque de cara al usuario no se noten cambios radicales, se puede decir que WindowsXP no es solo una versión más de Windows sino que supone practicamente un nuevo sistema. Hasta ahora Microsoft disponía de dos sistemas operativos diferentes, para el entorno personal o doméstico tenía Windows98 y para el entorno profesional ( o de negocios) el Windows NT/2000. Con WidowsXP se produce una convergencia entre ambas versiones ya que se ha partido del núcleo del sistema de Windows 2000 para crear WindowsXP y a partir de ahí se han realizado algunos retoques para diferenciar dos versiones de WindowsXP, una para el ámbito personal llamada WindowsXP Home Edition, y otra Operación de Sistema Operativo Multiusuario para el ámbito profesional denominada WindowsXP Professional. El principal beneficio de esta estrategia para los usuarios domésticos va a ser que WindowsXP ha adquirido la robusted y estabilidad de WindowsNT/2000, esto debe suponer que WindowsXP se quedará menos veces bloqueado, habrá menos ocasiones en la que tengamos que reiniciar el sistema como consecuencia de un error. La mejora para los usuarios profesionales se debe a que WindowsXP tiene mayor compatibilidad con el hardware de la que gozaba WindowsNT/2000. WindowsXP dispone de un nuevo sistema de usuarios completamente diferente respecto a Windows98. Este nuevo sistema ha sido heredado de Windows NT/2000. Ahora se pueden definir varios usuarios con perfiles independientes. Esto quiere decir que cada usuario puede tener permisos diferentes que le permitirán realizar unas determinadas tareas. Cada usuario tendrá una carpeta Mis documentos propia que podrá estar protegida por contraseña, un menú de inicio diferente. También se dispone de una carpeta a la que tienen acceso todos los usuarios y donde se pueden colocar los documentos que se quieren compartir con los demás usuarios. Por ejemplo, se puede definir un usuario tipo Padre, que tenga acceso a todo Internet y usuario tipo Hijo que tenga prohibido el acceso a determinadas páginas violentas o de sexo. 31 Para pasar de un usuario a otro no es necesario apagar el ordenador, ni siquiera que un usuario cierre lo que estaba haciendo, simplemente hay que iniciar una nueva sesión con otro usuario, más tarde podremos volver a la sesión del primer usuario que permacerá en el mismo estado que la dejo. El sistema se encarga de manejar a los distintos usuarios activos y sin interferencias. Windows 95 Con este sistema operativo Microsoft se ha protesto superar algunas de las limitaciones del MS-DOS. Parte del código de Windows 95 esta implementado en 16 bits y parte en 32 bits. Uno de los motivos por los cuales se ha hecho así, ha sido para conservar su compatibilidad. Con Windows 95 podemos ejecutar aplicaciones de Windows 3.1 ó 3.1 I, MSDOS y obviamente las nuevas aplicaciones diseñadas específicamente para este sistema operativo. Entre las novedades que ofreceWindows 95 cabe destacar el sistema de ficheros de 32 bits, gracias al cual rodemos emplear nombres de ficheros de hasta 256 caracteres (VFAT y CDFS), debido a que se trata de un sistema operativo de modo protegido, desaparece la barrera de los 640K, hemos de tener presente que aunque la mayor parte de Windows 3.1 es un sistema de modo protegido, este se está ejecutando sobre un sistema operativo que trabaja en modo real. 32 La interfaz de Windows 95 también ha sido mejorada. El primer gran cambio que veremos al empezar a trabajar será la desaparición del Administrador de Programas. Ahora tenemos un escritorio al estilo del Sistema 7 de los Macintosh o NeXTStep. Viene a sustituir al sistema operativo DOS y a su predecesor Windows 3.1. Frente al DOS tiene tres ventajas importantes: En primer lugar toda la información presentada al usuario es gráfica, mientras que DOS trabaja con comandos en modo texto formados por órdenes difíciles de recordar. En segundo lugar, Windows 95 define una forma homogénea de utilizar los recursos de la computadora, lo cual permite compartir datos entre las distintas aplicaciones, así como utilizar con facilidad los elementos hardware ya instalados. En tercer lugar Windows 95 es un sistema operativo que permite ejecutar vanas aplicaciones a la vez (multitarea), mientras que en DOS sólo se puede ejecutar un programa en cada momento. ¿Cómo funciona Windows 95? Windows 95 es un sistema operativo, y como tal una de las principales funciones es facilitar la comunicación entre el usuario y el ordenador, simplificando la utilización de los programas informáticos. En toda comunicación entre dos partes, tiene que haber métodos para que cada una de estas partes pueda emitir la Operación de Sistema Operativo Multiusuario información. En el caso de la comunicación entre el usuario y Windows 95 se utilizan las ventanas para que Windows envíe información al usuario y los controles para que el usuario envíe información a Windows. Una ventana muestra al usuario información de cualquier tipo, ya sea texto o gráfico, mientras que un control es un elemento incluido en una ventana que permite al usuario realizar operaciones, por ejemplo, un botón para seleccionar algo, una lista de valores, un menú con diferentes opciones, una caja para introducir texto, etc. SISTEMAS OPERATIVOS MULTIPROGRAMACIÓN DE El sistema operativo de multiprogramación debe de ser diseñado para un delicado truco de juego de manos. Debe asignar recursos tales como ciclos CPU y memoria, además de asignar prioridades para que cada programa reciba la atención adecuada. A los trabajos urgentes se les debe conceder más grandes y más frecuentes periodos de tiempo de CPU sin descuidar los trabajos menores. También los trabajos difieren en sus requerimientos. Los programas de procesamiento numérico tienden a ser CPU intensivos, mientras que muchas aplicaciones de negocios son mucha E/S, con relativamente poca computación. El sistema operativo necesita manejar combinaciones de tales trabajos lo más eficiente posible. Operación de Sistema Operativo Multiusuario Un programa que espera la entrada del usuario, por ejemplo puede suspenderse, independientemente de la prioridad. Recuerde que entre cada uno de sus teclazos tentativos, su CPU es capaz de realizar muchos millones de ciclos útiles. Al momento de ejecutar un programa, se debe tener copia de todo o parte de su código objeto (también conocido como código de máquina, codigo binario o imagen binaria ejecutable), cargada en el RAM (Memoria de Acceso Aleatorio, también conocida como memoria primaria), de tal manera que el CPU pueda acceder a las instrucciones del programa. Por esta razón el RAM es un recurso importante que el sistema operativo necesita asignar y manejar con economía. En cualquier momento particular, su RAM conservará no solo el código objeto del programa anterior, sino también un código bjeto para un cierto número de programas suspendidos, junto con varias áreas de datos, conservando los resultados intermedios de estos programas. La mayor parte sino del todo el Kernel del sistema operativo, también debe recidir en el RAM. Hasta donde le concierne al CPU, el Kernel es tan solo un conjunto de programas que se necesita ejecutar sobre demanda. Puesto que l Kernel se hace cargo de ellos, por supuesto no solo es otro programa: mantiene sus propias prioridades para evitar que los programas del usuario lo quiten del escenario. Cuántos programas pueden coexistir en la memoria primaria depende de la cantidad de RAM y del tamaño del código objeto. ¡Todavía otra molestia para el pobre sistema operativo! 33 Algunos programas suspendidos y sus datos (o las partes seleccionadas de éstos) se pueden extraer del RAM hacia el disco, a fin de hacer espacio para el siguiente programa. Después, cuando el sistema operativo los selecciona para ejecución, los programas extraídos se pueden transferir desde el disco hasta el RAM. Se ha dedicado mucha investigación al arte de planificar y extraer, puesto que el efecto inmediato de la extracción excesiva es la degradación de la ejecución. Las operaciones de I-O del disco son relativamente mucho más lentas que la escfritura y lectura del RAM. Y recuerde que el CPU mismo se ve involucrado en la actividad de extracción un caso extremo conocido como trashing puede llevar al sistema a un paso de tortuga: así el sistema se ocupa tanto con la extracción hacia adentro y hacia fuera que poco o ningún procesamiento productivo se realiza. Los detalles internos de esta gimnasia se ocutan al usuario común, pero se tiene un sentimiento general que genera alguna simpatía por la genta que diseña a los sistemas operativos. También en términos prácticos explica el viejo adagio que usted nunca tiene demasiado RAM. La situación se complica, además por la necesidad de recordar cuáles programas están suspendidos, cuándo y por qué razón. El sistema operativo necesita almacenar el contexto de cada programa suspendido, de tal manera que la ejecución se pueda continuar en el punto correcto, con los mismos valores prevalecientes en el momento de la 34 suspensión. Los contextos en realidad son fotografías del contador del programa y los registros del CPU; el sistema operativo guarda los contextos y los restaura regularemente, en la medida en que sec conmutan los programas. 1.1.2 CARACTERISTICAS DE UNIX. • o Entorno de UNIX Antecedentes El Sistema Operativo Unix fué creado a finales de la década de los 60 sobre la base de varios trabajos realizados conjuntamente por el MIT y Laboratorios BELL. Dichos trabajos (proyecto MULTICS) iban encaminados a la creación de un macrosistema de computación que diese servicio a miles de usuarios. Si bien el proyecto fracasó, posiblemente por intentar abarcar demasiado contando con unos elementos hardware limitados en ésa época , influyó; decisivamente sobre la evolución de los sistemas informáticos posteriores. Un antiguo proyecto (Ken su cuenta monousuario principal de jerárquico. componente de dicho Thompson) desarrolló por un sistema operativo con la característica un sistema de archivos El sistema encontró muchos entusiastas y se hizo portable al reescribirse casi íntegramente en lenguaje «C» , y se suministró en códi go fuente a las universidades como objeto de formación. Así, la universidad de California en Berkeley retocó dicho Operación de Sistema Operativo Multiusuario sistema (fundamentalmente, comunicaciones y diversas utilidades como el editor «vi») y liberó lo que luego sería el BSD , uno de los dos «dialectos» principales del UNIX. o Organismos de estandarización Actualmente, existen dos corrientes las cuales cada vez poseen más elementos comunes : la BSD 4.2 y ls System V R 4. El S.O. Unix se encarga de controlar y asignar los recursos físicos del ordenador (hardware ) y de planificar tareas . Podemos establecer tres elementos principales dentro de éste S.O. : El núcleo del sistema operativo ( kernel ) , el escalón más bajo que realiza tareas tales como el acceso a los dispositivos (terminales, discos, cintas..). El intérprete de comandos ( shell ) es el interfase básico que ofrece UNIX de cara al usuario. Además de ejecutar otros programas , posee un lenguaje propio así como numerosas características adicionales que se estudiarán en un capítulo posterior. Utilidades «de fabrica» ; normalmente se trata de programas ejecutables que vienen junto con el Sistema Operativo; algunas de ellas son: Operación de Sistema Operativo Multiusuario a) Compiladores : C , assembler y en algunos casos Fortran 77 y C++. b) Herramientas de edición : Editores (vi,ex) , formateadores (troff) , filtros ... c) Soporte de comunicaciones : Herramientas basadas en TCP/IP (telnet,ftp ...) d) Programas de Administración del Sistema (sysadm , sa , va ..... ) e) Utilidades diversas y juegos (éste último se suele instalar aparte). Creado por un equipo del Laboratorio Bell de la AT&T a principios de los 70: Ken Thompson y Dennis Ritchie basado en el proyecto MULTICS, que había quedado abandonado, después de una primera versión, se reescribió en un lenguaje de alto nivel creado para el proyecto (C). En 1976 se difunden gratuitamente los fuentes de UNIX por las universidades de EUA (Version 6) 1978: Versión 7 1978-8X: Versión de Berkeley (BSD) - memoria virtual, utilidades, soporte de redes (TCP, sockets) 1983: System V 198X: formación de consorcios para fijación de estándares: XPG, OSF, etc. Normas POSIX. IBM y DEC empiezan a emplear UNIX 199X: 35 ESQUEMA DE UN SISTEMA UNIX • Interfases o Kernel En el corazón de UNIX se encuentra un programa de mente maestra llamdo Kernel. El Kernel UNIX interctua con su computdora y los periféricos (disquetes, impresoras , terminales, y semejantes), al asignar recursos y planificar procesos detrás de la escena. Cuando UNIX se transfiere desde un sistema otro-, esto es se reescribe para correr sobre una computadora diferente-, el kernel se modifica para enfrentarse con el nuevo CPU. A diferencia de la PC-DOS, la cual está ligada una familia de microprocesadores Intel, Unix puede correr sobre cualquier computadora que tenga el kernel apropiado. El mismo programa Kernel está escrito, en su mayor parte en un lenguaje de programación de alto nivel llamado C. Esto reduce el esfuerzo que se necesita para acceder UNIX a otros sistemas y explica la afamada ubicuidad de UNIX. 36 En términos simples, el kernel lo protege del hardware de la computadora y el Shell lo proteje del Kernel. Sí, se puede también buscar protección del Shell. Existen muchas aplicaciones UNIX e interfaces del usuario que ocultan el shell y su indicador, además de ofrecerles menús, ventaanas y otros además de ofrecerle dispositivos agradables, con los cuales puede seleccionar comandos y correr sus trabajos. o FileSystem Los archivos de computadora se pueden pensar simplemente como un lugar para almacenar datos y programas para su disco. Los archivos de disco también tienen tabuladores indicadores conocidos como nombres de archivo. Los grupos de archivos se almacenan en directorios, los cuales también tienen nombres. Unix utiliza estos nombres de directorio y archivo cuando se localiza un archivo y se accesa su contenido. Operación de Sistema Operativo Multiusuario Un servicio mayor que ofrece UNIX (y la mayoría de otros sistemas operativos) es manejar archivos por nombre. archivo objetivo, obtiene un mensaje filename:not found. o Shell El programa de aplicación quizá. desee acceder un archivo de datos para examinar o actualizar su contenido. Los datos o archivos de texto por lo general contienen caracteres visibles e imprimibles, codificados en formato ASCII.comandos que exibirán e imprimirán el contenido de un archivo tipo texto, par leer un secuencia de caracteres desde el disco. Todavía hay mas comandos que le permiten escribir en el disco para crear y modificar archivos tipo texto. Puede copiar y renombrar archivos o agregar un archivo a otro. Tambié.en puede, borrar o eliminr todos los archivos con suma facilidad. FUNCIONES DEL INTÉRPRETE DE ÓRDENES Los sistemas multiusuarios necesitan ofrecer salvaguardias para impedir que otros usuarios lean y/o borren sus archivos sin la debida autorización. Unix tiene un esquema elaborado de propietarios de archivos y permisos, a través de los cuales los usuarios y los grupos de usuarios puedan proteger sus archivos. Cada archivo en el sistema lleva permisos de lectura, escritura y ejecución en los que se dictamina quién puede hacer qué con un archivo. Soporte de comunicaciones: Herramientas basadas en TCP/IP (telnet,ftp ...) Los archivos binarios tiene un código de programa, Unix necesita localizarlo por su nombre. Cuando introduce el comando date, por ejemplo, UNIX busca un archivo de programa llamado date; busca en varios lugares y si falla en encontrar el Operación de Sistema Operativo Multiusuario El intérprete de comandos ( shell ) es el interfase básico que ofrece UNIX de cara al usuario. Además de ejecutar otros programas, posee un lenguaje propio así como numerosas características. Utilidades «de fábrica»; normalmente se trata de programas ejecutables que vienen junto con el Sistema Operativo; algunas de ellas son: Compiladores: C, assembler y en algunos casos Fortran 77 y C++. Herramientas de edición: Editores (vi,ex), formateadores (troff), filtros ... Programas de Administración del Sistema (sysadm, sa, va..... ) Utilidades diversas y juegos ( éste último se suele instalar aparte ). Modos de invocar una orden Lo primero que la mayor parte de los usuarios aprenden del editor VI es que cuenta con dos modos: comando e insertar. El modo comando permite introducir órdenes para manipular el texto. Normalmente éstas órdenes no tienen más que uno o dos caracteres, pudiendo así introducirse con pocas pulsaciones. El modo insertar hace que 37 todo lo que se pulse en el teclado se incorpore al archivo. VI se inicia en el modo comando. Hay varias formas de pasar al modo insertar. La más común consiste en teclear a o i. Más abajo se describen ambas órdenes. Una vez se encuentre en el modo insertar, podrá salir de él pulsando la tecla escape (si su terminal no tiene esa tecla, debería funcionar ^[ ). Puede pulsar escape dos veces seguidas y de esa manera no habrá duda de que se encuentra en modo comando. Pulsar escape mientras se encuentra en modo comando no hace que el editor salga de dicho modo; sonará un pitido para confirmarle que se encuentra ya en ese modo. En el modo comando las órdenes siguen normalmente el siguiente esquema (entre corchetes aparecen las variables optativas):[cifra] comando [dónde] La mayor parte de las instrucciones constan de un solo carácter, incluidas aquellas en las que es preciso pulsar la tecla Ctrl. En el siguiente apartado describiremos las instrucciones que más suelen emplearse en el editor VI. La cifra es cualquier número que comience por un carácter entre 1 y 9. Por ejemplo, la instrucción x borra el carácter que se encuentra en el lugar del cursor. Si, dentro del modo comando, se teclea 23x, se borrarán 23 caracteres. CONTEXTUALIZACIÓN • Competencia de información Buscar fuentes de información documental. Investigación documental − Investigar en Internet o revistas especializadas materiales técnicos de sistemas operativos multiusuario existentes en el mercado que marquen sus diferencias. • Competencia analítica Promover la reflexión sobre la oferta existente de soluciones informática en el mercado mexicano. Comparación de resultados con otros compañeros − Comparará que avances tecnológicos se han dado a través del tiempo con el uso de los sistemas operativos multiusuario. − Comparará el trabajo individual contra el trabajo en equipo que se puede realizar en ambientes multiusuario. Algunas órdenes utilizan un parámetro optativo -dónde-, en el que puede especificarse cuántas líneas o a qué parte del documento afecta la orden. El parámetro dónde puede ser también cualquier orden que mueva el cursor. 38 Operación de Sistema Operativo Multiusuario RESULTADO DE APRENDIZAJE 1.2 Abrir sesiones de UNIX por medio de comandos y archivos. 1.2.1 INICIO DE UNA SESION UNIX. Para acceder al sistema, éste presenta el mensaje de login, con el que quiere significar algo así como «introduce el usuario con el que quieres abrir una sesión». UNIX(r) System V Release 4.2 • Por ejemplo, si suponemos que tenemos 2 archivos que se llaman ventas.doc y pruebas; para mostrar el directorio del disco en formato largo: %ls -l <enter> -rwxrw-rw- 1 jimenez users 17:42 ventas.doc 138 Apr 5 -rw-rw-rw- 1 jimenez users 19:33 pruebas 98 Apr 5 Ejecución de las órdenes cp En Unix, entre los comandos más comunes deben ser escritos como se indican (generalmente con letras minúsculas): Si necesita copiar archivos, puede utilizar el comando el siguiente para copiar uno o más archivos: ls cp archivo1 archivo2 Si desea saber qué archivos hay en el disco, puede mostrar el directorio del disco utilizando el siguiente comando: El comando anterior hace una copia del archivo1 y lo llama archivo2. Supóngase que necesita una copia de un archivo llamado ventas.doc y que desea que su nueva copia se llame mensual.inf en el mismo directorio: % ls [opciones] </directorio> donde las opciones pueden ser: -l Listado en formato largo, el cual proporciona la siguiente información: modo de protección, dueño, grupo, tamaño en bytes, fecha de la última modificación y nombre. -d Lista solamente directorio. el nombre del <return> Lista únicamente los nombres de los archivos y directorios. Operación de Sistema Operativo Multiusuario %cp ventas.doc mensual.inf mv Si desea cambiar el nombre de un archivo o cambiar el archivo a otro directorio, puede utilizar el siguiente comando: mv archivo1 archivo2 39 Cambia el nombre del archivo1 por el del archivo2. Por ejemplo, suponga que tiene un archivo llamado mensual.inf al cual quiere cambiar de nombre por anual.inf: %mv mensual.inf anual.inf mkdir Si usted desea crear un directorio, utilice el comando: mkdir nombre_directorio Para crear un directorio nuevo llamado usuarios bajo su directorio de trabajo debe escribir el siguiente comando: Para eliminar un directorio que ya no necesita , puede utilizar el comando: rmdir nombre_directorio que le permite eliminar cualquier directorio, especificando su ruta de acceso, pero el directorio debe estar vacío. Por ejemplo, si decide que ya no necesita el directorio usuario y quiere eliminarlo: %rmdir /usuario alias %mkdir usuarios Con éste comando puede sustituir una instrucción larga, utilizando un seudónimo. Para definir el alias se debe hacer de la siguiente forma: cd alias <nombre_alterno> <comando a ejecutar> Para cambiar de un directorio a otro; simplemente escriba el comando cd seguido de la ruta de acceso al directorio deseado: Por ejemplo, si utiliza frecuentemente el comando ls -l y es más fácil utilizar un seudónimo, lo puede definir de la siguiente manera: cd ruta_de_acceso %alias dir «ls -l» <enter> Por ejemplo, comando: si escribe el siguiente %cd /usuarios cambia el directorio de trabajo a /usuarios. También puede especificar cualquier trayecto después del comando para que pueda pasar de un nivel a otro dentro de la estructura del directorio. El siguiente comando cambia del directorio en que se encuentra al directorio anterior: %cd .. rmdir 40 de modo que cada vez que introduzca: %dir <enter> la orden que realmente se ejecuta es: ls -l history Da una historia de los comandos ejecutados, asociado con un número en el orden en que fueron ejecutados. Si desea dar un comando que ya había tecleado anteriormente, con el signo ! y el número de comando se ejecutará, y si desea ejecutar el último comando únicamente Operación de Sistema Operativo Multiusuario con el signo !!. Por ejemplo para ver los comandos ejecutados teclee: es natural, no se verá en pantalla aunque se escriba . %history <enter> ls -l cp ventas.doc mensual.inf mv mensual.inf anual.inf mkdir usuarios cd /usuarios cd .. alias dir ls -l dir UNIX(r) System V Release 4.2 % Y si desea ejecutar el comando cd /usuarios sin tener que volver a teclear toda la instrucción, teclee la siguiente orden: %! 5 <enter> cd /usuarios /usuarios man Si desea más información sobre algún comando, existe el manual para consulta en línea, el cuál puede consultar tecleando la siguiente orden: %man <comando> ésta orden visualizará toda la información sobre como utilizar el comando. Por ejemplo, si desea más información del comando mkdir: %man mkdir <enter> • Comandos login: Una vez tecleado el usuario que se quiere y haber pulsado RETURN, solicita una palabra de paso (password), la cual, como Operación de Sistema Operativo Multiusuario login: antonio Password: $ Tanto el nombre del usuario como la palabra de paso han de ser escritas «de golpe», es decir, no se pueden dar a los cursores para modificar ningún carácter y mucho menos la tecla de Backspace, Ins, Del... . Esto es debido a que, tanto éste carácter como los aplicados a los cursores son caracteres válidos en nombres de usuario y en palabras de paso. El sistema, una vez aceptado el nombre del usuario ( el cual como es obvio habrá sido asignado por el Administrador, así como la palabra de paso), lanza por pantalla unos mensajes de bienvenida y termina con el símbolo denominado «prompt», símbolo configurable (como casi todo en UNIX) y que suele ser un ‘$’ ó un ‘#’. Existe en todos los sistemas UNIX un superusuario llamado «root», que puede hacer absolutamente lo que quiera en el sistema. Además, hay algunos usuarios especiales, dependiendo del sistema que se trate con más privilegios de los normales (admin ó sa ó sysadm, usuario de administración del equipo, uucp como usuario de comunicaciones ) y el resto, que corresponden a usuarios normales. El programa que está en éste momento mostrando el prompt es la shell ó intérprete de comandos. Con éste prompt indica algo así como «preparado para que me escribas el comando que quieres ejecutar» . 41 Cada comando debe finalizar en un RETURN, el cual funcionalmente se asemeja a la orden «AR» en la mili ( El sargento dice «firmes» , pero nadie se mueve hasta que da el RETURN, es decir, «AR» ). Un sistema UNIX en modo multiusuario (puede arrancarse en modo monousuario para labores de administración) espera la entrada de un usuario al sistema, proceso que recibe el nombre de login. Para ello, el ordenador muestra un mensaje identificándose y la palabra. login: Para entrar hay que disponer de una cuenta, que es como se llama al hecho de ser reconocido por el sistema y, por tanto, tener acceso. En caso de ser un sistema recien instalado, no habrá aún creada ninguna cuenta excepto la de root, por lo que habra que contestar tecleando «root». En otro caso, se teclea el login o identificativo correspondiente. Tras ello y para comprobar la identidad del usuario, el sistema preguntará password: Esperando un password o palabra clave asociados al login y, si todo va bien, ya se está dentro. Mientras se teclea la palabra clave, no aparece eco en pantalla para que nadie en los alrededores pueda leerla. Por ello, si se produce un error al teclear, el habrá otra oportunidad. En caso de que no haya definida ninguna palabra de paso, obviamente, no se preguntará por ella. Esto suele ocurrir con el usuario root cuando UNIX está recién instalado. Si una vez dentro se desea salir, bastar teclear exit, logout o simplemente CONTROL+D, según el sistema en que uno se encuentre. 42 Nada más terminar el proceso de login, una shell arranca automáticamente y advierte de su disposición a recibir comandos mostrando un prompt, que por defecto será uno de los símbolos #, %, > ó $, en función de que shell se use y de si uno es el root o no. Este prompt equivale al famoso C:> del DOS y, como este último, es redefinible. Ya desde dentro se puede empezar a jugar con algunos comandos: Echo Su finalidad es mostrar mensajes, es decir, presenta un eco de sus argumentos en pantalla de modo idéntico a como funciona el echo del DOS. La diferencia estriba en que, al igual que la mayoría de los comandos UNIX, dispone de un gran número de opciones. De momento sólo se mencionará la opción echo -n, que evita el retorno de carro e inicio de línea. De hecho también sirve para mostrar valores de variables. Por ejemplo: Echo $TERM Mostrará el valor de la variable term, que es una variable de la shell que indica el tipo de terminal. Con esto se adelanta la idea de que existen variables de entorno al igual que en DOS y, del mismo modo, pueden examinarse mediante la instruccion set. Hostname Indica el nombre de la máquina que aloja el sistema. No se trata del nombre del Operación de Sistema Operativo Multiusuario hardware, sino de un nombre con que se bautiza a todos los sistemas UNIX. Esto se debe a que UNIX es un sistema en red y, por tanto, hay que tener bien identificadas a las máquinas. Muestra una lista de los usuarios que se encuentran conectados en ese momento en el sistema. caracteres separados por un punto sino que pueden tener una longitud entre 16 y 256 caracteres en función de la versión. Por otra parte, existen los mismos wilcards del DOS: * y ?, aunque su uso difiere ligeramente ya que permite expresiones del tipo *[cadena]*. Para UNIX, un fichero cuyo nombre comienza por el carácter punto (.), como profile, es un fichero oculto y únicamente será listado si se utiliza la opción -a. Who am i Cat Aunque puede inducir a la sonrisa, su función es informarle a uno de quién es. No se trata de resolver problemas de personalidad: en cuanto uno se mueve un poco por el sistema y siempre que disponga de más de una cuenta, descubrirá que es un comando realmente necesario. Muestra el contenido de un fichero del mismo modo que el type del DOS. Equivale teclear cat .login en UNIX que type login en DOS (aunque .login no es nombre válido en DOS). Who Is Una vez el usuario se ha situado y sabe dónde está y quién es, conviene abrir los ojos y mirar alrededor. ls, abreviatura de LiSt muestra el contenido de un directorio. Su funcionamiento y sintaxis en análogo al dir del DOS. Así pues la sintaxis es: ls [opciones] [path] [máscara de ficheros] Entre las opciones, las más usadas son: l: que indica permisos, fecha y propietario. a: lista tambien los ficheros *. En UNIX, los nombres de fichero no se ven sujetos a las reglas de DOS que los limita a 8 caracteres y una extensión de 3 Operación de Sistema Operativo Multiusuario Date Muestra la hora del sistema de forma análoga a como lo hace el DOS. Passwd Cambia el password del usuario que lo ejecuta en la máquina en la que se ejecuta. Es importante utilizar este comando frecuente para proteger el sistema ante el potencial ataque de hackers. Yppasswd En caso de que la máquina se encuentre en una red con un sistema de información de red conocido como YP (Yellow Pages) o NIS (Network Information Service), este comando cambia el password en todo el conjunto de la red. 43 • Tipo de Operadores Test, permite probar un conjunto de condiciones. Se pueden combinar expresiones booleanas con los operadores lógicos NOT, AND y OR. sistema es multiusuario, cada usuario dispone de una parte privada de disco. Cabe recordar que los ficheros cuyo nombre comienza por punto (.) permanecen ocultos. Para moverse por esta estructura de directorios, se pueden destacar los comandos: Operaciones matemáticas y funciones para test OPERADOR EJEMPLO SIGNIFICADO NOT exp verdero ! [! expr] pwd -a cd -o [expr1 expr2] -a [expr1 expr2] -o si exp prueba falso. Falso si exp prueba verdadero. exp1 AND expr2: verdero si ambas expresiones son verdaderas. Falso si o o ambos son falsos. exp1 OR expr2: verdero si una u otra o ambas expresiones son verdaderas. Falso si ambos son falsos. 1.2.2 ARCHIVOS UNIX • Sistema de archivos El sistema de directorios de UNIX tiene una estructura arbórea, aunque no se trata de un árbol, como se verá en el apartado dedicado al sistema de ficheros. En este «árbol», cada usuario dispone de un Home Directory, un directorio con su nombre y bajo el cual, puede hacer lo que quiera. Es la parte «física» de la idea de tener una cuenta. As¡ pues, aunque el 44 Print Working Directory, escribe el path absoluto del directorio actual partiendo del directorio raíz. Equivale a teclear cd sin argumentos en DOS. Cambia de Directorio. Es idéntico al DOS, salvo en que cuando se teclea sin indicar directorio, conduce directamente al home directory de la persona que lo ejecuta. cp Copia ficheros segun la sintaxis cp <filename1> <filename2> donde se puede indicar el path completo de los ficheros. Equivale al comando copy de DOS. mv Renombra un fichero con la sintaxis mv<antiguo> <nuevo> Equivale al comando rename del DOS pero es mucho más potente ya que también sirve para cambiar de sitio un fichero, ya que puede incluir un path en cada nombre. Así sepodría decir: mv /.profile /home/echeva/.profile Operación de Sistema Operativo Multiusuario para mover el fichero .profile desde la raíz hasta el directorio /home/echeva. /usr/man Manual /tmp rm Directorio para arreglos temporales. TODOS los usuarios pueden leer y escribir en él. Borra una lista de ficheros. Equivale al comando delete de DOS. • rmdir Borra directorios vacíos. Equivale al comando del mismo nombre de DOS (rd). mkdir Crea directorios. Equivale al comando del mismo nombre de DOS (md). Manipulación directorios. de archivos y Podemos examinar una primera tanda de comandos hermanos, que son los siguientes: cp <fichero a copiar> <fichero nuevo> mv <fichero a mover> <fichero nuevo> ln <fichero a lincar> <fichero nuevo> «cp» copia el primer argumento al segundo. Valen caminos relativos, es decir • Nombres de directorios. No todo el «árbol» de directorios está compuesto por directorios de usuario. Existen muchos de ellos que son de uso general o del propio sistema y con los que habrá que familiarizarse. Los más importantes son: / El raíz, del que «cuelgan» todos. /bin y /usr/bin Contienen comandos UNIX ejecutables. /etc Es quizá el directorio más importante. Contiene ficheros de datos y configuración del sistema, el fichero de password, configuración de terminales, red, etc (de ahí su nombre). /dev Ficheros de dispositivos E/S. Operación de Sistema Operativo Multiusuario $ cp tonto /tmp $ cp tonto /tmp/nuevo $ cp /home/jose/tonto /tmp/tonto producirían el mismo resultado; copian el fichero desde el directorio actual al /tmp. El comando «mv» se comporta igual salvo que el fichero original desaparece; es similar al «RENAME» de MS-DOS. El comando «ln» hace que pueda existir un contenido con varios nombres: $ ln tonto tonto1 $ ls -l tonto* -rw-r—r— 2 jose sys 4 Mar 1 11:07 tonto -rw-r—r— 2 jose sys 4 Mar 1 11:07 tonto1 ahora «tonto» y «tonto1» hacen referencia al mismo contenido; por tanto, cualquier cambio que realicemos en uno se verá en el otro, y si borramos ahora el fichero «tonto», quedará el « tonto1» con el mismo contenido, que sólo será borrado 45 al borrar el último de los ficheros lincados a su contenido. Debido a la naturaleza del propio comando, no se pueden hacer enlaces (links) entre ficheros ó directorios situados en sistemas de ficheros distintos. Para éste último caso, existe una opción del comando «ln», el «ln -s» (link simbólico); crea un enlace simbólico entre dos entidades pero sólo como una referencia; en (&e acute;ste) caso si el fichero original se borra, el link queda suelto y el contenido irrecuperable. El comando «rm» borra ficheros y directorios; para borrar el tonto1 que ya no necesitamos, podemos escribir: $ rm tonto1 Valen metacaracteres . Si escribimos $ rm * nos borramos TODO lo que haya en el «directorio actual» SIN pedir confirmación. Una opción de rm lo hace más seguro al pedirla: $ rm -i tonto1 tonto1 ? y atendiendo a opciones determinadas. Si bien la sintaxis es demasiado extensa para estudiarla en su totalidad, conviene ver algunos ejemplos : El comando toma como argumentos declaraciones en formato «find <directorio base> <opciones> -print». Por tanto, para sacar en pantalla todos los ficheros y directorios del disco, valdría con: find / -print Si se desean directorios: sólo ficheros ó sólo find / -type f -print ó find / -type d -print respectivamente. Buscar todos los ficheros y directorios que tengan más de 30 días de antigüedad: find / -atime +30 -print. El resto de las opciones sirve para buscar ficheros con determinados permisos, mayores ó menores que un determinado tamaño. La opción más peligrosa puede ser la «-r» (recursivo) que borra ficheros y directorios a partir del directorio de arranque. Por tanto, ojo con poner Para este primer chapuzón por el mundo UNIX, viene bien conocer algunos otros comandos útiles. Los que se presentan a continuación son de conocimiento obligado para todo usuario: $ rm -r . grep si estamos en el directorio «raíz» y tenemos privilegios, podemos borrar el contenido de Todos los discos. grep <cadena> <fichero> Busca las líneas que contienen la cadena en el fichero dado y las imprime en pantalla. Por último, veremos un comando de utilidad simililar a «ls» pero con mas opciones; el comando «find» muestra en pantalla directorios y/o ficheros cmp 46 cmp <fichero1> <fichero> Busca la primera diferencia entre los ficheros indicados. Operación de Sistema Operativo Multiusuario diff diff <fichero1> <fichero2> Busca todas las diferencias entre los ficheros dados. tail tail <fichero> Muestra las 10 últimas líneas de un fichero. head head <fichero> Muestra las 10 primeras líneas de un fichero. sort Ordena por líneas wc Muestra el tamaño de indicando según la opción: un fichero -l (líneas) -w (palabras) -c (caracteres) y si va sin opciones, las tres cosas. at Ejecuta el contenido de un fichero en la fecha y hora especificadas. cal Imprime un calendario. more more <fichero> Muestra el contendido de un fichero de forma paginada, del mismo modo que el more de DOS, sin embargo, al contrario que en DOS, no es necesario redirigir su entrada indicando more < fichero. • Permisos. En cualquier sistema multiusuario es preciso que existan métodos que impidan que un determinado usuario pueda Operación de Sistema Operativo Multiusuario modificar ó borrar un fichero confidencial, ó incluso leer su contenido. Asimismo , determinados comandos ( apagar la máquina, por ejemplo ) deben estar permitidos exclusivamente a determinados usuarios, quedando inoperantes para los demás. En UNIX, éstos métodos radican en que cada fichero tiene un propietario, que es el usuario que creó el fichero; además, los usuarios están divididos en grupos, asignación que normalmente se lleva a cabo por el Administrador del sistemas, dependiendo de la afinidad de las tareas que realizan. El fichero anterior tiene también un grupo, que es el grupo del usuario que lo ha creado. UNIX distingue tres tipos de acceso - lectura, escritura y ejecución - sobre el usuario que lo ha creado, los usuarios del mismo grupo que el que lo creó y todos los demás usuarios. Por todo lo anteriormente dicho, un fichero puede tener cualquier combinación de los tres tipos de acceso sobre tres tipos de usuarios: el creador, los de su grupo y todos los demás ( otros cualquiera que no cumplan nin guna de las dos condiciones anteriores ). Para ver lso permisos de un fichero cualquiera, empleamos el comando «ls -l» (formato largo): $ ls -l -rw-r—r— 1 jose sys 4 Mar 1 11:07 tonto drw-r—r— 1 jose sys 84 Mar 1 11:07 nuevo Los campos que lo componen son : -rw-r—r— : tipo de fichero (la primera raya; en el caso de «nuevo», una «d» significa que es un directorio, y una raya «-» significa fichero normal) y 3 grupos de 47 tres correspondientes, los tres primeros, a permisos del usuario; los tres siguientes, a los del grupo, y los tres últimos, a todos los demás. jose : Usuario que creó el fichero. sys : Grupo del creador. Por tanto, para darle máximos permisos al fichero «tonto», ejecutaremos el comando: $ chmod 777 tonto $ ls tonto -rwxrwx rwx 1 jose sys 4 Mar 1 11:07 tonto al darle tres sietes ( 1 + 2 + 4 = 7 ), el 4 : Tamaño en bytes. Mar 1 11:07 : Fecha de creación ó de última modificación. tonto : Nombre del fichero. Cada grupo de tres elementos pueden ser «rwx», que son: permiso para leer, permiso para escribir y permiso para ejecutar. Una raya significa «carece de permiso para (.)». Por tanto, el fichero «tonto» puede ser leído y escrito (y, por tanto, borrado), por el usuario «jose». Cualquier otro usuario, sea del grupo «sys» ó no, tiene permisos sólo de lectura. En el caso de directorio, todo igual salvo que en éste caso la «x» de ejecutar no tendría sentido; por ello, aquí éste carácter significa «el usuario X puede cambiarse a éste directorio». Para darle ó quitarle permisos a un fichero ó directorio, se emplea el comando chmod <máscara> <nombre_de_fichero>. La máscara es un número octal de hasta un máximo de cuatro cifra s correspondiente a sumar los siguientes números : a) Permiso de ejecución. b) Permiso de escritura. c) Permiso de lectura. fichero se queda con la máscara rwx. Si queremos sólo lectura para creador, grupo y otros, el comando sería «chmod 444 tonto» y así sucesivamente. En determinadas ocasiones puede ser necesario cambiar de propietario a un fichero ó directorio; para ello utilizamos el comando «chown <nombre_del_propietario> <fichero>». Igual pasa con los grupos; el com ando es «chgrp <nombre_del_grupo> <fichero>». $ chown juan tonto $ ls tonto -rwxrwxrwx 1 juan sys 4 Mar 1 11:07 tonto $ chgrp conta tonto $ ls tonto -rwxrwxrwx 1 jose conta 4 Mar 1 11:07 tonto Pero, cuando creamos un fichero, que permisos coge por defecto ? El valor de «umask» que tenemos asignado en la sesión complementado con 666 (rw-rwrw). El comando «umask» a secas nos devuelve dicho valor :< /P> $ umask 022 En éste caso, 666-022 = 644, es decir, cualquier fichero que creemos con un 48 Operación de Sistema Operativo Multiusuario editor ó con otros comandos serán creados con permisos 644 (rw-r—r—). Para cambiar la máscara, usamos el comando umask con la nueva máscara que le quieremos dar: $ umask 000 En cuyo caso, todos los ficheros a partir del ése momento, y hasta que finalice la sesión, serán creados con «barra libre» para todo el mundo. Al ser UNIX un sistema multiusuario surge el problema de la protección y privacidad de la información. Así cada fichero posee un código de 9 bits para regular su acceso. El esquema empleado, clásico en muchos sistemas operativos consiste en dividir el universo de usuarios que ve cada fichero en tres clases: La clase u (user), formada únicamente por el dueño del fichero. La clase g (group), formada por todos los usuarios que pertenecen al mismo grupo del dueño. La clase o, formada por el resto del universo (o como diría Gonzalo León, «el universo se divide en yo, mis amigos y mis enemigos»). Un usuario puede pertenecer a más de un grupo pero un fichero sólo puede pertenecer a uno. De esta forma, parte de los ficheros de un usuario podrían ser accedidos por uno de los grupos a los que el usuario pertenece y parte por otro grupo. Como siempre es el root el que decide qué usuarios pertenecen a qué grupos, los cuales se suelen organizar atendiendo a Operación de Sistema Operativo Multiusuario razones de trabajo. La lógica de esto es que un usuario concreto (clase u), puede tener en un fichero una carta de su novia, que no le interesa que lea nadie más. Sin embargo, también dispondrá de una serie de ficheros a los que tendrá que permitir el acceso a su grupo de trabajo (clase g) pero no querrá que los vea nadie más. Del mismo modo, podría también interesarle que todo el mundo (clase o) pudiera acceder a la información contenida en otra serie de ficheros. El root, como superusuario, es caso aparte, ya que dispone de acceso a todos los ficheros del sistema. Existen 3 formas de acceder a un fichero: lectura, escritura y ejecución. Así, los 9 bits de protección de acceso de cada fichero se encuentran divididos en 3 grupos de 3 bits. Cada grupo de 3 bits indica acceso a u, g, o, respectivamente y cada bit de cada grupo indica: bit 1 (r), permiso de lectura bit 2 (w), permiso de escritura bit 3 (x), permiso de ejecución. CONTEXTUALIZACIÓN • Competencia analítica Promover habilidades cognitivas que les permitan utilizar hábitos y técnicas de estudio que potencialicen su estilo de aprendizaje. Los distintos operadores permiten formar expresiones tanto aritméticas como lógicas, en estos operadores deben tenerse en cuenta la precedencia de operadores y las reglas de asociatividad, 49 que son las normales en la mayoría de lenguajes. − El alumno: − Comparará métodos ordenamiento aplicables construcción de tablas. − de a la • Competencia ecnológica Utilizar herramientas de hardware y software disponibles. − − − − Realización del ejercicio − Inicia una sesión de trabajo unix y ejecuta alguna orden. Finaliza la sesión con exit o con ctrl -d para comprobar que todo es correcto. − − − Comprueba quién o quiénes están conectados al sistema y en qué terminal. Envía un mensaje, utilizando la orden write. Impide que otros usuarios envíen mensajes y habilita de nuevo la comunicación. Consulta las opciones de banner. Determina qué tipo de ficheros son los ficheros siguientes: /etc/hosts, /usr/bin, /etc/group, /usr/include/stdio.h y /usr/lib/X11. Crea en su directorio de arranque un subdirectorio denominado copia y copia en él fichero /etc/passwd. Cambia de nombre al fichero passwd del directorio copia y pasarlo a llamarlo palabra_claves. Emplea las órdenes de inicio de unix. Crea, modifica y borra ficheros. RESULTADO DE APRENDIZAJE 1.3 Manejar editores de introducción de texto mediante comandos de ejecución. 1.3.1 EDITOR. • Editor vi. El editor VI permite al usuario crear nuevos archivos o editar los ya existentes. La orden para iniciar el editor VI editor es vi, seguida del nombre del archivo. Por ejemplo, para editar un archivo denominado temporal, deberíamos teclear vi temporal y pulsar Enter. Puede también iniciar el VI sin indicar ningún nombre de archivo, pero en ese caso, cuando quiera guardar su trabajo tendrá qué indicarle al VI el nombre de archivo en que desea guardarlo. 50 Cuando inicie VI por vez primera, se encontrará con una pantalla cuyo margen izquierdo aparecerá lleno de virgulillas como la que en castellano va sobre la letra eñe (~). Así es como se representan las líneas vacías tras el fin del archivo. En la base de la pantalla se mostrará el nombre del archivo -en el caso en que se haya especificado uno- y su tamaño, del siguiente modo: «filename» 21 lines, 385 characters Si el archivo especificado no existe, VI le indicará que se trata de un archivo nuevo, del siguiente modo: «newfile» [New file] Operación de Sistema Operativo Multiusuario Si inició VI sin indicar un nombre de archivo, la línea al fondo de la pantalla aparecerá vacía. Si la pantalla no le muestra los resultados esperados, que acabamos de mencionar, es posible que la terminal no esté configurada correctamente. En ese caso, pulse q y Enter, para salir de VI, y corrija el tipo de terminal. Si no sabe cómo hacerlo pregunte a alguien que trabaje en el laboratorio. Cómo salir de vi Ahora que sabe cómo entrar en VI, no estaría de más conocer el modo de salir. El editor VI tiene dos modos y, para salir de VI, tiene que estar en el modo comando. Para entrar en modo comando pulse la tecla Esc (Si su terminal carece de esa tecla, haga la prueba pulsando ^[. Si estaba ya en modo comando cuando pulsó Escape, no se preocupe. Podría emitir un «bip», pero seguiría encontrándose en el modo comando. La orden para salir de VI es :q ; es decir, que una vez se encuentre en modo comando, ha de teclear dos puntos, seguido de ‘q’, y continuación pulsar Enter. Si el archivo ha sufrido alguna modificación, el editor le avisará de esa circunstancia y no le permitirá cerrarlo. Si quiere eludir ese mensaje, la orden para salir de VI sin guardar los cambios es: q!. Naturalmente, lo habitual en un editor es que usted desee guardar los cambios que ha hecho. La orden para hacerlo es: w. También puede combinar esta orden con la de salir, del siguiente modo :wq. Y si lo desea puede guardar los cambios en un Operación de Sistema Operativo Multiusuario archivo diferente, especificando el nombre de éste tras :w. Por ejemplo, si quiere guardar el archivo en el que está trabajando con otro nombre, digamos archivo2, entonces tendría que escribir: w archivo2 y Enter. Otro modo de guardar los cambios y salir de VI es la orden ZZ. Cuando se encuentre en el modo comando, escriba ZZ; obtendrá el mismo resultado que con: wq. De ese modo se guardaría cualquier cambio que se hubiera operado en el archivo. Esta es la forma más sencilla para salir del editor: con sólo dos pulsaciones. Los dos modos de vi Lo primero que la mayor parte de los usuarios aprenden del editor VI es que cuenta con dos modos: comando e insertar. El modo comando permite introducir órdenes para manipular el texto. Normalmente estas órdenes no tienen más que uno o dos caracteres, pudiendo así introducirse con pocas pulsaciones. El modo insertar hace que todo lo que se pulse en el teclado se incorpore al archivo. VI se inicia en el modo comando. Hay varias formas de pasar al modo insertar. La más común consiste en teclear a o i. Más abajo se describen ambas órdenes. Una vez se encuentre en el modo insertar, podrá salir de él pulsando la tecla escape (si su terminal no tiene esa tecla, debería funcionar ^[ ). Puede pulsar escape dos veces seguidas y de esa manera no habrá duda de que se encuentra en modo comando. Pulsar escape mientras se encuentra en modo comando no hace que el editor salga de dicho modo; sonará un 51 pitido para confirmarle que se encuentra ya en ese modo. Cómo utilizar las funciones del modo comando En el modo comando las órdenes siguen normalmente el siguiente esquema (entre corchetes aparecen las variables optativas):[cifra] comando [dónde] La mayor parte de las instrucciones constan de un solo carácter, incluidas aquellas en las que es preciso pulsar la tecla Ctrl. En el siguiente apartado describiremos las instrucciones que más suelen emplearse en el editor VI. La cifra es cualquier número que comience por un carácter entre 1 y 9. Por ejemplo, la instrucción x borra el carácter que se encuentra en el lugar del cursor. Si, dentro del modo comando, se teclea 23x, se borrarán 23 caracteres. Algunas órdenes utilizan un parámetro optativo -dónde-, en el que puede especificarse cuántas líneas o a qué parte del documento afecta la orden. El parámetro dónde puede ser también cualquier orden que mueva el cursor. Vi es un editor de pantalla completa creado en el UNIX de Berkeley y extendido más tarde a todos los demás dialectos. La ventaja de éste editor radica en su compatibilidad con el resto de herramientas de edición UNIX . ESTRUCTURA DE ÓRDENES CON VI • Movimientos de cursor Vi contempla, una vez iniciada la sesión con él, dos modos: Modo comando: es el modo en el que arranca por defecto. Vale para dar comandos tales como: leer un fichero, escribir un fichero, búsqueda ó sustitución de caracteres dentro del texto actual. • Cambios de ventana Este modo es al que se vuelve siempre , pulsando la tecla <ESC>. Modo insercion/reemplazo: es el que se usa para escribir caracteres. Se entra a éste modo desde el modo comando pulsando la letra «i». Desde el modo comando, podemos pasar también a modo inserción escribiendo las siguientes letras: i : Pasar a modo inserción, delante de la posición del cursor. a: Igual, pero detrás de la posición del cursor. I: Pasar a modo inserción ,pero empezando a insertar al principio de la línea donde se esté. A: Igual, pero empezando al final de la línea donde se esté. o: Pasar a modo inserción, pero abriendo una línea nueva debajo de donde se esté. O: Igual , pero la línea nueva se abre arriba. <ESC>: Pasar a modo comando. Backspace: Borra la última letra escrita. <Control>v: Identifica el carácter que vamos a escibir a continuación como un 52 Operación de Sistema Operativo Multiusuario caracter especial, es decir, un escape, ó salto de hoja (^L), ó cualquier carácter ascii entre el 1 y el 31. ( 1=^A , 2=^B .....). • Salir de vi ZZ Grabar y salir. OPCIONES DEL EDITOR Pasando a modo comando, podemos emplear las siguientes secuencias para movernos por el texto: ^: Ir al principio de la línea. $: Ir al final de la línea. l,h: Izquierda / derecha. j,k: Abajo / Arriba. ^F (Control + F ): Una pantalla adelante. ^B (Control + B ): Una pantalla atrás. ^G (Control +G): Enseña el número de línea donde estamos posicionados. 1G: Al principio del todo. G: Al final del todo. /<cadena>: Busca <cadena> desde la línea actual hasta el final del texto. / Sigue buscando más ocurrencias de la cadena. ?<cadena>: Busca <cadena> desde la línea actual para atrás. ? Sigue buscando más ocurrencias, para atrás. ZZ Grabar y salir. dd: Borrar la línea donde se esté. J: Juntar la línea donde se esté y la de abajo. r: Reemplaza una sola letra. R: Reemplaza todo hasta que se pulse <ESC> . yy: yank/yank: Marca la línea actual. p: Copia la línea marcada despues del cursor. P: Copia la línea marcada antes del cursor. -.: Repite el último cambio. u Undo (anula el último cambio) U Undo , pero en la línea actual. Operación de Sistema Operativo Multiusuario Ordenes de «dos puntos»: Al pulsar en modo comando el carácter «:», el cursor se baja a la última linea y el editor saca los dos puntos en espera de que le demos algún comando de estos. Salimos de aquí pulsando <ESC> .Algunos son: :wq! (write/quit)Grabar y salir. :w! <nombre_fichero> (write) Graba el texto en <nombre_fichero>. :r <nombre_fichero> (read) Incluye el fichero como parte del texto en edición. :!<comando> Ejecutar <comando> . Vuelve al terminar el comando. :<número de línea> Ir a <número de línea>. :q! (quit) Salir sin grabar. :se nu :se nonu Numera las líneas.(set number,set nonumber-pone y quita). :1,5de Borra desde la 1 a la 5. :1,5co20 Copia desde la 1 a la 5 a partir de la línea 20. :1,5mo20 Igual, pero mueve.(desaparece desde la línea 1 a la 5). :g/XXX/s//YYY/g Cambia en todo el texto XXX por YYY. OPERACIONES CON PALABRAS El editor VI posee una serie de funciones que ayudan al programador a dar a sus códigos una forma pulcra. Existe una variable para determinar la tabulación que se da a los distintos niveles del código. Por ejemplo, la orden para hacer que la 53 tabulación tenga una anchura de cuatro espacios es :set sw=4. Las siguientes órdenes sirven para marcar las tabulaciones de una línea o para quitarlas, y pueden modificarse con cifra: << Corre la línea una tabulación hacia la izquierda. >> Corre la línea una tabulación hacia la derecha. El editor VI dispone también de una función muy útil para verificar que en su código fuente no han quedado paréntesis o corchetes sin cerrar. La orden % buscará el paréntesis o corchete izquierdo correspondiente a un determinado signo de paréntesis o corchete derecho, y viceversa. Coloque el cursor encima de un paréntesis o corchete y pulse % para llevar el cursor al paréntesis o corchete que le corresponde. Si hay un paréntesis o corchete desparejado, VI emitirá un pitido para indicarle que no se ha encontrado el símbolo correspondiente. 1.3.2 MANEJO DE CONTENIDO. • Ordenes más modo EX. importantes en Se puede personalizar el VI antes de comenzar. Hay varias opciones de edición, disponibles utilizando la orden :set. Las opciones de los editores VI y EX disponibles en Wiliki son las siguientes (puede obtener una lista completa tecleando :set all y Enter, dentro del modo comando): 54 /usr/lib/tags autoprint directory=/tmp flash hardtabs=8 keyboardedit keyboardedit! magic mesg noautoindent noshowmatch noautowrite nobeautify nodoubleescape noedcompatible noerrorbells noexrc noignorecase nolisp nolist nonovice nonumber nooptimize noreadonly noshowmode noslowopen noterse nowriteany paragraphs=IPLPPPQPP LIpplpipnpbp term=xterm prompt redraw remap report=5 scroll=11 sections=NHSHH HUuhsh+c shell=/bin/csh shiftwidth=8 tabstop=8 taglength=0 tags=tags timeout timeoutlen=500 ttytype=xterm warn window=23 wrapmargin=0 wrapscan Operación de Sistema Operativo Multiusuario A algunas de estas opciones se les pueden asignar valores con el signo ‘=’, mientras que otras simplemente están activadas o desactivadas. (Estas opciones de tipo on off se denominan booleanas, y, para indicar que no están activadas, llevan un «no» delante.) Las opciones mostradas aquí son las que se tienen por defecto, sin personalizar. A continuación describimos algunas de ellas, añadiendo sus abreviaturas. Por ejemplo, en el caso de la orden set autoindent, se puede teclear :set autoindent, o bien :set ai. Y para desactivarla :set noautoindent o :set noai. autoindent (ai) Esta opción hace que las líneas siguientes a una dada tengan su misma tabulación. Si quiere volver a la tabulación anterior, no tiene más que pulsar ^D en la posición del primer carácter. La orden ^D funciona sólo en el modo insertar, no en modo comando. También es posible determinar la anchura de las tabulaciones mediante la opción shiftwidth, descrita más abajo. exrc El archivo .exrc del directorio actual es leído al comenzar una sesión. Éste debe encontrarse en la variable de entorno EXINIT o en el archivo .exrc, en su directorio personal. mesg Desactive esta opción mediante :set nomesg, si no quiere que aparezca ningún mensaje en pantalla. number (nu) Operación de Sistema Operativo Multiusuario Muestra el número de línea en el margen izquierdo. shiftwidth (sw) Esta opción requiere que se le asigne un valor, y determina la anchura de las tabulaciones (órdenes << y >>). Por ejemplo, para que la tabulación sea de cuatro espacios escribirá lo siguiente :set sw=4. showmode (smd) Esta opción sirve para mostrar el modo actual del editor. Si se encuentra en el modo insertar, en la última línea de la pantallas aparecerá INPUT MODE. warn Esta opción le avisa si ha modificado el archivo pero todavía no lo ha guardado. window (wi) Esta opción determina el número de líneas que VI usará en pantalla. Por ejemplo, para hacer que VI utilice únicamente 12 líneas de su pantalla (si su modem es lento), indicaría lo siguiente: :set wi=12. wrapscan (ws) Esta opción afecta al comportamiento de la búsqueda de palabras. Cuando wrapscan está activado, si no se encuentra la palabra al llegar al final del archivo, tratará de buscarla desde el comienzo. wrapmargin (wm) Si esta opción tiene un valor mayor que cero, se activará el retorno manual. Es decir, si alcanza el número de espacios indicados a partir del extremo derecho de la pantalla, la palabra pasará a la línea siguiente sin necesidad de pulsar Enter. Por ejemplo, para mantener un margen 55 derecho de dos espacios, tendría que dar la orden: :set wm=2. Una orden del editor EX de utilidad en VI es la orden ab (abreviatura). Esto le permite asignar abreviaturas a determinadas secuencias de caracteres. La orden tiene la siguiente forma :ab <abreviatura> <secuencia_que_debe_sustituirla>. Por ejemplo, si tuviera que escribir la palabra «Humuhumunukunukuapua`a», pero no quisiera tener siempre que teclearla entera, podría usar una abreviatura. En este caso, podría introducir una orden como la siguiente: :ab 9u Humuhumunukunukuapua`a Así, siempre que pulse 9u separadamente, VI escribirá la palabra completa. Eso no sucederá si usted teclea 9universidad, por ejemplo. Para borrar una abreviatura previamente definida, utilizará la orden ‘unabbreviate’ (desabreviar). En el caso del ejemplo anterior, la orden sería «:una 9u». Para obtener un listado de las abreviaturas que ha definido, teclee simplemente :ab, sin nada detrás. Existen dos formas de personalizar el editor VI. Si crea un archivo de nombre .exrc en su directorio personal, todas las órdenes ahí especificadas serán leídas al arrancar el editor VI. El otro método consiste en crear una variable de entorno denominada EXINIT. Las opciones se grabarán el archivo de configuración de su shell. Si utiliza el shell C (/bin/csh), la orden, que se grabará en el archivo .cshrc es la siguiente: setenv EXINIT ‘...’ Si utiliza /bin/sh o /bin/ksh, la orden. que se grabará en el archivo the .profile, será la siguiente: export EXINIT EXINIT=’...’ No ponga ... como en el ejemplo. En ese lugar deberá poner las órdenes que desea activar. Por ejemplo, si quiere tabulación automática, numeración de líneas y un margen derecho de tres caracteres, en tal caso la orden setenv deberá aparecer (para el shell C) como sigue: setenv EXINIT ‘set ai nu wm=3’ Otra orden del editor EX que es útil para personalizar el VI es la que sirve para cambiar la función de las teclas. La hay de dos tipos: una para el modo comando y otra para el modo insertar. Estas dos órdenes son :map y :map!, respectivamente. Su funcionamiento es similar al de las abreviaturas: se pulsa una secuencia de teclas, y continuación otra secuencia de teclas que debe sustituir a la anterior. (Por lo general, las secuencias de teclas sustituidas son órdenes de VI.) 56 Si quiere poner más de una orden en el setenv EXINIT, sepárelas por medio de una barra vertical (|). Por ejemplo, para hacer que el carácter ‘G’ haga las veces de la orden ‘/g’ en el modo comando, tendrá que escribir :map g G, lo que combinado con la instrucción anterior sería: setenv EXINIT ‘set ai nu wm=3|map g G’ Si desea crear el archivo .exrc, puede escribir ahí exactamente lo mismo que se ha mostrado entre comillas, tras el EXINIT. Operación de Sistema Operativo Multiusuario • Marcas de posición. El editor VI cuenta con 36 búferes para almacenar fragmentos de texto, y también un búfer de uso general. Siempre que un fragmento de texto es borrado o extraído (copiado) del archivo, queda colocado en el búfer de uso general. La mayoría de los usuarios de VI apenas hacen uso de los otros buferes, y pueden arreglárselas sin ellos. El fragmento de texto se almacenará también en otro bufer si se especifica uno. El bufer se especifica mediante la orden «. Tras pulsar «, hay que introducir una letra o dígito para especificar el bufer. Por ejemplo, la orden: «mdd utiliza el búfer m, y los dos últimos caracteres significan que se va a borrar la línea entera. Del mismo modo, es posible pegar texto mediante la instrucción p o P. «mp pega el contenido del búfer m tras el lugar en el que se encuentra el cursor. En el caso de cualquiera de las instrucciones mencionadas en los dos apartados siguientes, estos búferes pueden utilizarse para almacenar temporalmente palabras o párrafos. • Mover bloques. La orden que habitualmente se usa para cortar es d. Esta instrucción borra texto del archivo. La orden puede ir precedida de una cifra y seguida de la indicación de un movimiento. Si duplica la orden pulsando dd, se borrará la línea entera. He aquí algunas combinaciones de este tipo: d^ borra desde la posición del cursor hasta el comienzo de la línea. borra desde la posición del cursor hasta el fin de la línea. dw borra desde la posición del cursor hasta el fin de la palabra. 3dd borra tres líneas desde la posición del cursor hacia abajo. Existe también la orden y (copiar) que opera de forma parecida a la orden d, sólo que sin borrar el texto del archivo. Las órdenes para pegar son p y P. La única diferencia entre ellas es el lugar en que pegan respecto del cursor. p pega el contenido del bufer general o específico tras la posición del cursor, mientras que P lo pega delante del cursor. Si se especifica una cifra antes de la orden pegar, el texto se pegará el número de veces que se haya indicado. Si utiliza un programa de terminal dentro de una estación de trabajo, puede cambiar el tamaño de la pantalla corriendo los lados de la ventana. Si tiene problemas con el tamaño de la ventana, la orden a teclear es la siguiente: eval ‘resize‘ Si esto no funciona la orden podría ser ésta: eval ‘/usr/bin/X11R6/resize‘ Éste es un problema que raras veces se producirá en versiones modernas de VI, tales como, por ejemplo, Vim. d$ Operación de Sistema Operativo Multiusuario 57 • Recuperación de archivos. El editor VI edita una copia temporal de su archivo, y, una vez que la edición ha finalizado o cuando usted le da la orden de guardar, el contenido de la copia temporal se graba en el archivo original. Si algo va mal durante la edición del archivo, el editor VI tratará de guardar el trabajo que usted estaba haciendo y lo almacenará para su posterior recuperación. (Nota: Si VI se cierra súbitamente mientras usted estaba trabajando con un archivo, le enviará un mensaje indicándole cómo recuperarlo. Para su recuperación se utiliza la opción -r. Si estaba usted editando el archivo vitalinfo y ha salido del sistema accidentalmente, la opción -r del editor ‘vi’ puede serle de ayuda. Esta orden tiene la forma siguiente: vi -r vitalinfo No obstante, una vez se ha hecho uso de la opción -r, DEBE guardar inmediatamente el trabajo, pues dicha opción sólo funciona una vez por cada sesión fallida de VI.). Hay dos cosas a tener en cuenta cuando se utiliza una estación de trabajo: la edición de un mismo archivo varias veces y el cambio de tamaño de la pantalla. Dado que VI edita una copia de su archivo original y guarda los contenidos de esa copia sobre el archivo original, si arranca el editor más de una vez y está editando el mismo archivo varias veces, si guardara el trabajo en una ventana y luego lo volviera a guardar en otra, los cambios operados en la primera ventana desaparecerían, sobrescritos por los de la segunda 58 ventana. Así pues, asegúrese de abrir una sola copia de VI por archivo. Si utiliza un programa de terminal dentro de una estación de trabajo, puede cambiar el tamaño de la pantalla corriendo los lados de la ventana. Si tiene problemas con el tamaño de la ventana, la orden a teclear es la siguiente: eval ‘resize‘ Si esto no funciona la orden podría ser ésta: eval ‘/usr/bin/X11R6/resize‘ Éste es un problema que raras veces se producirá en versiones modernas de VI, tales como, por ejemplo, Vim. • La calculadora Calculadora de precisión (hasta 80 decimales). especificable Shell cuenta con herramientas disponibles que ofrecen operaciones aritmeticas con enteros. Para decimales de punto flotante, se debe usar awk, dc (un paquete aritmético basado en pila) o bd (un calculador interactivo con una sintaxis como la de C. Estas calculadoras manejan los operadores ritméticos conocidos: +, _, *, /, y %. Ejemplos: $ expr 2+3 5 $ expr 2|* 3 Operación de Sistema Operativo Multiusuario 6 de estudio que potencialicen su estilo de aprendizaje. $ a+4 $a+’ exp. $a + 3’ $echo $a 7 $expr $a + ^ − 13 $_ $expr 3+2 Trabajo en equipo Introducir texto con vi y guardarlo en un fichero con extensión.doc, colocado en un subdirectorio situado en su directorio de arranque. 32 $_ CONTEXTUALIZACIÓN • Competencia analítica Promover habilidades cognitivas que les permitan utilizar hábitos y técnicas Realización del ejercicio − Elabora la práctica de ejercicio núm. 3 «Introducir un texto con vi ». − Manejar el editor vi. − Realizar ejercicios de personalización del vi, mover bloques, recuperar archivos y efectuar operaciones. RESULTADO DE APRENDIZAJE 1.4 Manejar el shell de UNIX mediante instrucciones de usuario. 1.4.1 SHELL. • Funciones órdenes. del intérprete de El intérprete de comandos ( shell ) es el interfase básico que ofrece UNIX de cara al usuario. Además de ejecutar otros programas, posee un lenguaje propio así como numerosas características adicio nales que se estudiarán en un capítulo posterior. Operación de Sistema Operativo Multiusuario Utilidades «de fábrica»; normalmente se trata de programas ejecutables que vienen junto con el Sistema Operativo; algunas de ellas son: Compiladores: C, assembler y en algunos casos Fortran 77 y C++. Herramientas de edición: Editores (vi,ex), formateadores (troff), filtros ... Soporte de comunicaciones: Herramientas basadas en TCP/IP (telnet,ftp ...) 59 Programas de Administración del Sistema (sysadm, sa, va..... ) Utilidades diversas y juegos ( éste último se suele instalar aparte ). • Modos de invocar una orden. Lo primero que la mayor parte de los usuarios aprenden del editor VI es que cuenta con dos modos: comando e insertar. El modo comando permite introducir órdenes para manipular el texto. Normalmente éstas órdenes no tienen más que uno o dos caracteres, pudiendo así introducirse con pocas pulsaciones. El modo insertar hace que todo lo que se pulse en el teclado se incorpore al archivo. VI se inicia en el modo comando. Hay varias formas de pasar al modo insertar. La más común consiste en teclear a o i. Más abajo se describen ambas órdenes. Una vez se encuentre en el modo insertar, podrá salir de él pulsando la tecla escape (si su terminal no tiene esa tecla, debería funcionar ^[ ). Puede pulsar escape dos veces seguidas y de esa manera no habrá duda de que se encuentra en modo comando. Pulsar escape mientras se encuentra en modo comando no hace que el editor salga de dicho modo; sonará un pitido para confirmarle que se encuentra ya en ese modo. En el modo comando las órdenes siguen normalmente el siguiente esquema (entre corchetes aparecen las variables optativas):[cifra] comando [dónde] La mayor parte de las instrucciones constan de un solo carácter, incluidas 60 aquellas en las que es preciso pulsar la tecla Ctrl. En el siguiente apartado describiremos las instrucciones que más suelen emplearse en el editor VI. La cifra es cualquier número que comience por un carácter entre 1 y 9. Por ejemplo, la instrucción x borra el carácter que se encuentra en el lugar del cursor. Si, dentro del modo comando, se teclea 23x, se borrarán 23 caracteres. Algunas órdenes utilizan un parámetro optativo -dónde-, en el que puede especificarse cuántas líneas o a qué parte del documento afecta la orden. El parámetro dónde puede ser también cualquier orden que mueva el cursor. • Histórico de órdenes. ar Creación y mantenimiento de librerías de módulos. at Ejecución de órdenes en la fecha y hora que se le especifique. banner Escritura en la salida estándar en caracteres grandes. basename Obtención de la parte final del nombre-camino (path-name). bc Calculadora de precisión especificable (hasta 80 decimales). cal Consulta al calendario del sistema. calendar Consulta actividades. a la agenda de cancel Cancelación de una petición de impresión. cat Volcado y/o encadenado contenido de uno o varios archivos. del Operación de Sistema Operativo Multiusuario cc Compilador de lenguaje c. cd Cambio de directorio actual de trabajo. chgrp Cambio de propiedad de grupo de archivos o directorios. chmod Cambio de permisos de un archivo o directorio. chown Cambio de propietario de un archivo o directorio. cmp Comparación del contenido de 2 archivos. cp Copia de archivos. en notación polaca df Consulta del espacio libre en disco. find Búsqueda de archivos en el árbol de archivos y directorios. finger Información sobre los usuarios del sistema. id Identificación del usuario conectado y del grupo al que pertenece. login Conexión a una sesión de trabajo. logname usuario. Nombre de news Consulta a las novedades del sistema. passwd Introducción o cambio de la palabra de paso (password) del usuario. pwd Consulta del directorio actual de trabajo rm Borrado (eliminación) de archivos. rmdir Borrado directorios. (eliminación) de tty Identificación de la terminal. date Fecha y hora del sistema. dc Calculadora inversa. mv Cambio de directorio y/o de nombre de un archivo. conexión del ls Listado del contenido de un directorio. mail Correo electrónico entre usuarios. mailx Sistema de mensajería interactivo. man Consulta al manual del sistema. mesg Control del permiso de escritura, por otros usuarios, sobre la terminal. mkdir Creación de nuevos directorios. more Visualización del contenido de un archivo, pantalla a pantalla. Operación de Sistema Operativo Multiusuario wall Envío de un mensaje a todas las terminales conectadas. who Lista a los usuarios conectados al sistema. who am i Identificación completa del usuario. write Comunicación terminales. directa entre • Archivos de configuración. Si bien la estructura de los directorios varía entre versiones y dialectos de UNIX, podemos mencionar algunos de los más representativos. /bin,/usr/bin,/usr/sbin,/usr/ucb: Directorios de programas ejecutables. Es aquí donde se mantienen la mayoría de los comandos. (/bin/ls , /bin/vi , /usr/bin/chmod)/etc : Programas y ficheros diversos : aquí residen la mayoría de los archivos de configuració 61 n y las shell-scripts de arranque y parada del equipo. /tmp,/usr/tmp,/var/tmp : Directorios «temporales»; el propio sistema operativo los usa como almacenamiento intermedio en muchas de sus tareas; normalmente, todo el contenido de éstos directorios se borra al apagar el equipo. (/usr/spool/lp), de comunicaciones (/usr/spool/uucp) y demás. /usr/mail: En éste directorio se halla el correo de todos los usuarios. /usr/preserve,/var/preserve: Aquí se guardan todas las copias de ficheros incompletamente terminados por los editores de UNIX. /home,/usr/acct,/var/acct : /dev: Directorio dispositivos. Directorios de usuarios. /var/adm,/usr/adm: Directorios de administración: programas de administrador, ficheros con informaciones de la paquetería instalada y demás. /usr/log, /var/log: Directorios para ficheros de «log» de sistemas y de programas. Normalmente, existirá un fichero «console» con toda la información que se desvía a la consola del sistema, y varios ficheros informativos, de advertencia y de errores del sistema. /lib,/usr/lib: 62 spool de ficheros ficheros de /usr/games: Juegos. Casi nunca están instalados. • Órdenes relacionadas con el entorno Las variables del shell La interfaz de usuario típica en UNIX Varias clases: sh, csh, bash, ksh... Lenguaje de programación de shell Control de procesos concurrentes, etc. Metacaracteres Directorios de archivos de librería. /usr/spool: Directorios de impresión. de de Cuando escribimos cualquier comando y pulsamos <INTRO>, es la shell y no UNIX quien se encarga de interpretar lo que estamos escribiendo y ordenando que se ejecute dicho comando. Aparte de los caracteres normales, la shell interpreta otros caracteres de modo especial: un grupo de caracteres se utiliza para generar Operación de Sistema Operativo Multiusuario nombres de ficheros sin necesidad de teclearlos explícitamente. Cuando la shell está interpretando un nombre, los caracteres * ? [ ] se utilizan para generar patrones. El nombre que contenga alguno de éstos caracteres es reemplazado por una lista de los ficheros del directorio actual cuyo nombre se ajuste al patrón generado. Las reglas de generación de patrones son: * Vale cualquier cadena de caracteres. ? Vale un carácter cualquiera. [ .. ] Vale cualquiera de los caracteres que coincida con los que estén entre corchetes. Ejemplo: Supongamos que en nuestro directorio actual tenemos los siguientes ficheros: $ ls tonto tonta diario mayor Veamos cada una de las salidas correspondientes a las reglas anteriores: $ ls * (valen todos) tonto tonta diario mayor $ ls *o (todos, pero tienen que acabar en «o») tonto diario $ ls tont? (que empiecen por tont y cualquier otro carácter) tonto tonta $ ls tont[oa] (que empiecen por tont y el siguiente sea «o» ó «a» ) Operación de Sistema Operativo Multiusuario 1.4.2 REDIRECCION SALIDA. • DE ENTRADA Y Redirección de entrada. La redirección de entrada estándar estándares se puede redirigir ( prog <entrada >salida). • Redirección de salida. Para un proceso de este tipo, se leen caracteres de un flujo (stream) estándar, y se escriben en un flujo estándar. • Redirección de errores. Las redirecciones de errores se programan en caracteres de flujo estándar enviándose a un archivo para su evaluación. • Deteniendo trabajos. • Reiniciando trabajos. y reiniciando Ya que, como hemos explicado anteriormente, la shell es un programa, existen varios, cada uno con sus características particulares. Veamos algunas de ellas: Bourne shell ( /bin/sh ): Creada por Steven Bourne de la AT&T. Es la más antigua de todas y, por tanto, la más fiable y compatible entre plataformas. Esta es en la que se basan las explicaciones posteriores. Korn shell (/bin/ksh): Creada por David G. Korn de los laboratorios Bell de la AT&T .Más moderna, toma todos los comandos de la Bourne y le añade varios más así como varias características de redición 63 interactiva de comandos, control de trabajos y mejor rendimiento en términos de velocidad que la anterior. Existen dos versiones, una primera «maldita» y la actual, de 16/11/1988. (podemos averiguar qué versi&oa cute;n tiene la nuestra ejecutando el comando «what /bin/ksh») Pero no es oro todo lo que reluce; cuando se trata de situaciones extremas ó complicadas donde la ksh falla, la de Bourne normalmente está más «blindada&qu ot; . C Shell, desarrollada por Bill Joy en la Universidad de California y, por tanto, más extendida entre UNIX BSD. Bastante más críptica que la de Bourne, incorpora no obstante sustanciales mejoras . 1.4.3 COMANDOS AVANZADOS. • Filtros. Filtro. Se crea con el fin de incluir solo la información importante, y así evitar duplicados de información. Otros filtros UNIX permite el uso de conductos y filtros en la línea de comandos. Un conducto (pipe) redirige la salida de un programa para que se convierta en entrada de otro. Un filtro es un programa elaborado para procesar un flujo de datos de entrada y producir otro de datos de salida. Los conductos y filtros suelen usarse para unir utilerías y realizar alguna tarea específica. 64 Pipelines La salida de un proceso se puede conectar a la entrada de otro: p1 | p2 | p3 Se emplean archivos especiales llamados tuberías o pipes, que funcionan como colas FIFO Filtros UNIX • Orden FIND. El comando «find» muestra en pantalla directorios y/o ficheros atendiendo a opciones determinadas. Si bien la sintaxis es d emasiado extensa para estudiarla en su totalidad, conviene ver algunos ejemplos: El comando toma como argumentos declaraciones en formato «find <directorio base> <opciones> -print». Por tanto, para sacar en pantalla todos los ficheros y directorios del disco, valdría con: find / -print Si se desean directorios: sólo ficheros ó sólo find / -type f -print ó find / -type d -print respectivamente. Buscar todos los ficheros y directorios que tengan más de 30 días de antigüedad: find / -atime +30 -print El resto de las opciones sirve para buscar ficheros con determinados permisos, Operación de Sistema Operativo Multiusuario mayores ó menores que un determinado tamaño. • Editor de flujo de SED. Existe una familia de programas en Unix que lee alguna entrada, realiza alguna transformación y escribe una salida. Entre ellos figuran el grep, egrep, fgrep, tail, sort, wc, etc. y se denominan filtros. Existen también dos transformadores de datos o filtros programables ya que permiten mediante un simple lenguaje de programación indicar que comportamiento seguir con los datos de entrada, ellos son el sed y awk (ambos derivan de una generalización del grep). grep: La sintaxis es: grep patrón archivos Examina los archivos o la entrada enstándar en busca del patrón e imprime cada línea que lo contenga. Por ejemplo: grep -n variable *.[ch] Busca variable en *.c o *.h grep From $MAIL Muestra los encabezados del los mensajes en el buzón grep From $MAIL | grep -v Pirulo Busca los mensajes que no vengan del usuario pirulo. grep -y pirulo $HOME/lib/agenda Busca el teléfono de pirulo en agenda who | grep pirulo Mira si pirulo se ha conectado La opción -n imprime números de línea, -v invierte el sentido (las que no satisfacen), y permite que se busque todo (con mayúsculas o minúsculas). Existen además ciertos caracteres que indican al comando alguna acción a realizar en forma predeterminada: c (normal, es decir indica el caracter c) \c (indica que si el caracter c era especial ha perdido su significado) ^ Indica inicio de línea $ Indica final de línea Operación de Sistema Operativo Multiusuario . Cualquier caracter individual [...] cualquier caracter en ...; el rango tipo a-z es válido [^...] Los que no se encuentren en ... \n lo igual al n-ésimo r * cero o más ocurrencias de r r+ una o más ocurrencias de r r? cero o una ocurrencia de r r1r2 r1 seguido de r2 r1|r2 r1 o r2 \(r\) expresión regular marcada r Ejemplos: grep ‘^From’ $MAIL Imprime las líneas que comienzan por From del buzón. grep [^0-9] *.c Imprime las líneas que contienen algún caracter que no sea un dígito. ls -l | grep ‘^d’ Lista los nombres de los subdirectorios ls -l | grep ‘^———rw-’ Lista los archivos que los permisos del public sean rwx * para cualquier cadena que comienza por x [a-z][A-Z] * cualquier cadena alfabética reconoce cualquier cosa hasta una nueva línea .*x hasta la última x en el renglón Debe tenerse en cuenta que el * se aplica sólo una vez, por ejemplo xy * reconoce una secuencia con xy y no xyxyxyx, además cualquier número incluye el cero por ejemplo [a-zA-Z] * busca una cadena de una letra seguida de cero más letras. fgrep y egrep permiten buscar cadenas múltiples (son más completos que el grep). El fgrep -f file permite leer de file los patrones a buscar. Ambos aceptan los caracteres igual que el grep per con adiciones: los paréntesis agrupan por ejemplo (xy) * buscará la cadena vacía, xy, xyxyx y así sucesivamente. La barra vertical es un operador or: piru(melon|lindon) encontrará pirumelon o pirulindon. Además x+ reconoce una o más x y x? reconoce cero o una pero no varias. 65 sed: El sed deriva directamente del ed por lo cual es fácil de aprender. La idea es sencilla: sed ‘lista de cmd del ed’ archivos Lee un renglón a la vez a partir de los archivos de entrada; aplica los comandos de la lista por ordena a cada renglón y escribe su forma editada en la salida estándar. Recordar que sed no modifica los archivos de entrada, sino que produce una salida modificada que hay que redireccionar si se quiere guardar. sed ‘s/UNIX/UNIX(tm)/g’ archivos salida Reemplaza en archivos UNIX por UNIX(tm) y los almacena en el archivo salida. Esta es una mala idea pues significa utilizar un archivo temporal para modificar el contenido de archivos, pero hay solución consultar el comando overwrite. Supongamos utilizar el du -a ./ dará una lista como y queremos eliminar los números y el tab que hay antes de la a: du -a ./ | sed ‘s/.\t//’ a.1 a.2 a.3 La sustitución borra todos los caracteres (.*) hasta incluir el tabulador (puesto como \t) de la derecha. sed 3q archivo imprime solo los tres primeros renglones de archivo y termina. sed -f file lee los comandos de file sed ‘/patrón/q’ imprime hasta incluir la primera línea que contenga patrón. sed ‘/patrón/d’ cancela todas las líneas que contengan patrón. sed -n ‘/patrón/p’ donde -n deshabilita la impresión automática en pantalla y p imprime solo la que tengan patrón. 66 sed ‘s/$/\/’ inserta una línea en blanco al final de cada línea. sed -n ’20,30p’ imprime desde la línea 20 a la 30. sed ‘1,10d’ borra desde la 1 a la 10 (es igual tail + 11) sed ‘1,/^$/d’ borra hasta la primera línea en blanco inclusive sed -n ‘/^$/,/^end/p’ imprime cada grupo de líneas desde la vacía hasta la que comienza por end. sed ‘$d’ borra la última línea. Resumen de comandos del sed: a\ anexar líneas en la salida hasta una que no termine en \ b label [branch] salto hasta el comando : label c\ cambiar líneas al siguiente texto d borrar línea i\ insertar texto siguiente antes de la siguiente salida l listar línea incluido caracteres no imprimibles p imprimir línea q abandonar r file leer archivo y copiar en la salida s/viejo/nuevo/mod sustituir viejo por nuevo si mod =g reemplazar todas la ocurrencias, =p imprimir, f=w file escribir en file t label prueba: ir a label si se hace una sustitución en el renglón actual w file escribir en file y/str1/str2/ reemplazar cada caracteres de str1 con cada caracter de str2 (sin rango) = imprimir número de línea !cmd hacer sed cmd sólo si no se selecciona la línea : label poner label en los comandos b y t { considerar los comandos hasta el siguiente } como un grupo CONTEXTUALIZACIÓN • Competencia analítica Aplicar la tecnología de sistemas operativos como administrador de aplicaciones y procesos de utilidad al quehacer cotidiano. Operación de Sistema Operativo Multiusuario − − − − Realización del ejercicio Sustituir el prompt por otro que visualice la cadena mande>. Modifica su fichero profile de modo que al iniciar una sesión de trabajo aparezcan por pantalla, la fecha, la hora, el directorio de trabajo y el número de personas que están conectadas en ese momento al sistema. Crea una orden denominada dir que sea equivalente a la orden ls -l y añadir la sentencia anterior al fichero profile. Listar del directorio /usr/bin aquellos ficheros cuyo nombre comience por la letra «c». Resumen − Interpreta instrucciones a través de shell. Operación de Sistema Operativo Multiusuario 67 PRÁCTICA DE EJERCICIO Y LISTA DE COTEJO Unidad de aprendizaje: 1 Práctica número: 1 Nombre de la práctica: Comandos iniciales UNIX Propósito de la práctica: Al finalizar la práctica, el alumno ejecutara comandos básicos del sistema operativo por medio del shell de UNIX. Escenario: Laboratorio de Informática. Duración: 6 hrs. Materiales • Software instalado de UNIX o software de emulación UNIX. Maquinaria y Equipo Herramienta • Terminal o Computadora (Pentium III) • Manual en línea de UNIX. • Cuaderno de notas. • Pluma o lápiz. 68 Operación de Sistema Operativo Multiusuario Procedimiento ­Aplicar las medidas de seguridad e higiene. • Evitar la manipulación de líquidos cerca del equipo. • No introducir objetos extraños en los dispositivos de disco. • No utilizar imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpiar el área de trabajo. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Encender equipo de cómputo. Abrir sesión de emulación de terminal UNIX. Entrar al UNIX Shell Digitar el comando who y teclear enter, anotar resultado. Digitar el comando who am I y teclear enter, anotar resultado. Digitar write [userid] y teclear enter, escribir un mensaje teclear ctrl. – d y teclear enter, anotar resultado. Digitar el comando mesg y teclear enter, anotar resultado. Digitar el comando data + “son las %r del %d de %y” teclear enter, anotar resultado. Digitar el comando banner con parámetro “Sali a comer” y teclear enter, anotar resultado. Digitar el comando cal 2005, y teclear enter, anotar resultado Digitar el comando mcal 11 2005 y teclear enter, anotar resultado Digitar el comando uname -a y teclear enter, anotar resultado Digitar el comando passwod y teclear enter, anotar resultado Digitar el comando man banner y teclear enter, anotar resultado Repetir los procedimientos con asesoría del PSP. Apagar el equipo de cómputo 4 Depositar los residuos recuperables disponiendo de 3 botes de reciclaje toner, discos y papel. Operación de Sistema Operativo Multiusuario 69 Lista de cotejo de la práctica Número 1: Comandos iniciales UNIX Nombre del alumno: Instrucciones: A continuación se presentan los criterios que van a ser verificados en el desempeño del alumno mediante la observación del mismo. De la siguiente lista marque con una 9 aquellas observaciones que hayan sido cumplidas por el alumno durante su desempeño Si Desarrollo No No Aplica ®Aplicó las medidas de seguridad e higiene. • Evitó la manipulación de líquidos cerca del equipo. • • • 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. No introdujo objetos extraños en los dispositivos de disco, No utilizó imanes cerca de discos flexibles, discos compactos ó del equipo. Limpió el área de trabajo. Encendió el equipo de cómputo. Abrió sesión de emulación UNIX. Entró al UNIX Shell Digitó el comando who y anotó resultado. Digitó el comando who am I y anotó resultado. Digitó write [userid], escribió mensaje y anotó resultado. Digitó el comando mesg y anotó resultado. Digitó el comando data tonel parámetro indicado y anotó resultado. Digitó el comando banner con parámetro y anotó resultado. Digitó el comando cal 2005, y anotó resultado Digitó el comando mcal 11 2005 y anotó resultado Digitó el comando uname -a y anotó resultado Digitó el comando passwod y anotó resultado Digitó el comando man banner y anotó resultado 70 Operación de Sistema Operativo Multiusuario Si Desarrollo No No Aplica 15. Repitió los procedimientos con asesoría del PSP. 16. Apagó adecuadamente el equipo de cómputo 4 Depositó los residuos recuperables. Observaciones: PSP: Hora de inicio: Operación de Sistema Operativo Multiusuario Hora de término: Evaluación: 71 Unidad de aprendizaje: 1 Práctica número: 2 Nombre de la práctica: Creación de directorios Propósito de la práctica: Al finalizar la práctica, el alumno creará directorios siguiendo los lineamientos de las estructuras de archivos y directorios existentes. Escenario: Laboratorio de Informática. Duración: 6 hrs. Materiales • Software instalado de UNIX o software de emulación UNIX. Maquinaria y Equipo Herramienta • Terminal o Computadora (Pentium III). • Manual en línea de UNIX. • Cuaderno de notas. • Pluma o lápiz. 72 Operación de Sistema Operativo Multiusuario Procedimiento ­Aplicar las medidas de seguridad e higiene. • Evitar la manipulación de líquidos cerca del equipo. • No introducir objetos extraños en los dispositivos de disco. • No utilizar imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpiar el área de trabajo. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Encender equipo de cómputo. Abrir sesión de emulación de terminal UNIX. Identificar el directorio raíz Identificar el directorio home y ubicarse en él. Identificar el directorio pc11user y ubicarse en él. Crear los directorios programas y alumno Digitar el comando mkdir Digitar las opciones –p Digitar el path a crear home/pc11user/programas/alumno como argumento de comando Digitar el comando ls –l Digitar el comando pr redireccionando al dispositivo de impresión Imprimir los resultados Repetir los procedimientos con asesoría del PSP creando otros directorios. 4 Depositar los residuos recuperables disponiendo de 3 botes de reciclaje toner, discos y papel. Operación de Sistema Operativo Multiusuario 73 Lista de cotejo de la práctica Número 2: Creación de directorios Nombre del alumno: Instrucciones: A continuación se presentan los criterios que van a ser verificados en el desempeño del alumno mediante la observación del mismo. De la siguiente lista marque con una 9 aquellas observaciones que hayan sido cumplidas por el alumno durante su desempeño Si Desarrollo No No Aplica ®Aplicó las medidas de seguridad e higiene. • Evitó la manipulación de líquidos cerca del equipo. • • • 1. 2. 3. 4. 5. 6. 7. 8. 9. No introdujo objetos extraños en los dispositivos de disco, No utilizó imanes cerca de discos flexibles, discos compactos ó del equipo. Limpió el área de trabajo. Encendió el equipo de cómputo. Abrió sesión de emulación UNIX. Identificó el directorio raíz Identificó el directorio home y se ubicó en él. Identificó el directorio pc11user y se ubicó en él. Creó los directorios programas y alumno Digitó el comando mkdir Digitó las opciones –p Digitó el path a crear home/pc11user/programas/alumno como argumento de comando 10. Digitó el comando ls –l 11. Digitó el comando pr redireccionando al dispositivo de impresión 12. Imprimió resultados 13. Repitió los procedimientos con asesoría del PSP creando otros directorios. 4 Depositó los residuos recuperables. Observaciones: PSP: Hora de inicio: 74 Hora de término: Evaluación: Operación de Sistema Operativo Multiusuario Unidad de aprendizaje: 1 Práctica número: 3 Nombre de la práctica: Manejo de archivos. Propósito de la práctica: Al finalizar la práctica, el alumno creará, modificará y borrará archivos en una sesión de UNIX Escenario: Laboratorio de Informática. Duración: 6 hrs. Materiales • Software instalado de UNIX o software de emulación UNIX. Maquinaria y Equipo Herramienta • Terminal o Computadora (Pentium III). • Manual en línea de UNIX. • Cuaderno de notas. • Pluma o lápiz. Operación de Sistema Operativo Multiusuario 75 Procedimiento ­Aplicar las medidas de seguridad e higiene. • Evitar la manipulación de líquidos cerca del equipo. • No introducir objetos extraños en los dispositivos de disco. • No utilizar imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpiar el área de trabajo. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Encender equipo de cómputo. Abrir sesión de emulación de terminal UNIX. Digitar el comando ls y teclear enter, anotar resultados. Digitar el comando cd nombre del directorio y teclear enter, anotar resultados. Digitar el comando cd \ y teclear enter, anotar resultados. Digitar el comando mkdir prueba y teclear enter, anotar resultados. Digitar el comando ls –l y teclear enter, anotar resultados. Digitar el comando cd/usr/bin y teclear enter, anotar resultados. Digitar el comando ls 1 more y teclear enter, anotar resultados. Digitar el comando cd\ y teclear enter, anotar resultados. Teclear CTRL –d para salir de shel de UNIX Apagar el equipo de cómputo Repetir los procedimientos con asesoría del PSP creando otros directorios. 4 Depositar los residuos recuperables disponiendo de 3 botes de reciclaje toner, discos y papel. 76 Operación de Sistema Operativo Multiusuario Lista de cotejo de la práctica Número 3: Manejo de archivos Nombre del alumno: Instrucciones: A continuación se presentan los criterios que van a ser verificados en el desempeño del alumno mediante la observación del mismo. De la siguiente lista marque con una 9 aquellas observaciones que hayan sido cumplidas por el alumno durante su desempeño Si Desarrollo No No Aplica ®Aplicó las medidas de seguridad e higiene. • Evitó la manipulación de líquidos cerca del equipo. • No introdujo objetos extraños en los dispositivos de disco, • No utilizó imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpió el área de trabajo. 1. Encendió el equipo de cómputo. 2. Abrió sesión de emulación UNIX. 3. Abrió sesión de emulación de terminal UNIX. 4. Digitó el comando ls y anotó resultados. 5. Digitó el comando cd nombre del directorio y anotó resultados. 6. Digitó el comando cd \ y anotó resultados. 7. Digitó el comando mkdir prueba y anotó resultados. 8. Digitó el comando ls –l y anotó resultados. 9. Digitó el comando cd/usr/bin y anotó resultados. 10. Digitó el comando ls 1 more y anotó resultados. 11. Digitó el comando cd\ y anotó resultados. 12. Tecleó CTRL –d para salir de sep de UNIX 13. Apagó el equipo de cómputo 14. Repitió los procedimientos con asesoría del PSP creando otros archivos. 4 Depositó los residuos recuperables. Observaciones: PSP: Hora de inicio: Operación de Sistema Operativo Multiusuario Hora de término: Evaluación: 77 Unidad de aprendizaje: 1 Práctica número: 4 Nombre de la práctica: Manejo de texto con vi Propósito de la práctica: Al finalizar la práctica, el alumno redactará un texto utilizando del editor vi para familiarizarse con movimientos de cursor y manejo de texto. Escenario: Laboratorio de Informática. Duración: 6 hrs. Materiales • Software instalado de UNIX o software de emulación UNIX. Maquinaria y Equipo Herramienta • Terminal o Computadora (Pentium III). • Manual en línea de UNIX. • Cuaderno de notas. • Pluma o lápiz. 78 Operación de Sistema Operativo Multiusuario Procedimiento ­Aplicar las medidas de seguridad e higiene. • Evitar la manipulación de líquidos cerca del equipo. • No introducir objetos extraños en los dispositivos de disco. • No utilizar imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpiar el área de trabajo. 1. 2. 3. 4. Encender equipo de cómputo. Abrir sesión de emulación de terminal UNIX. Escribir n el shell “vi prueba.doc”. Introducir el siguiente texto con vi. • Turismo en Grecia En 2002 unos 14,2 millones de turistas eligieron Grecia como destino de sus vacaciones, para visitar sus antigüedades y relajarse al sol del Mediterráneo. Ese año, las cifras reflejaron una entrada de dinero por turismo de 3.989 millones de dólares. • Comunicaciones en Grecia Grecia cuenta con servicios de radio y televisión, tanto privados como estatales. En 1997 el país tenía unos 5 millones de receptores de radio y 5 millones de aparatos de televisión. La mayoría de la prensa diaria griega se publica en Atenas o Salónica. Entre los diarios de mayor tirada están el Apogevmatini, el Eleftherotypia y el Ta Nea, todos ellos impresos en Atenas. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Situar el cursor al final del texto. Ir al principio del texto. Situar el cursor al principio de la línea 3. Ir ahora al final de la línea anterior. Eliminar la línea actual. Copiar el primer párrafo de texto en un buffer de nombre “a”. Teclear :wq. Teclear ctrl.-d para salir de shell. Apagar el equipo de cómputo. Repetir los procedimientos con asesoría del PSP creando otros directorios. 4 Depositar los residuos recuperables disponiendo de 3 botes de reciclaje toner, discos y papel. Operación de Sistema Operativo Multiusuario 79 Lista de cotejo de la práctica Número 4: Creación de directorios Nombre del alumno: Instrucciones: A continuación se presentan los criterios que van a ser verificados en el desempeño del alumno mediante la observación del mismo. De la siguiente lista marque con una 9 aquellas observaciones que hayan sido cumplidas por el alumno durante su desempeño Si Desarrollo No No Aplica ®Aplicó las medidas de seguridad e higiene. • Evitó la manipulación de líquidos cerca del equipo. • No introdujo objetos extraños en los dispositivos de disco, • No utilizó imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpió el área de trabajo. 1. Encendió el equipo de cómputo. 2. Abrió sesión de emulación UNIX. 3. Escribió el sep “vi prueba.doc” 4. Introdujo el texto indicado 5. Situó el cursor al final del texto. 6. Posicionó el cursor al principio del texto 7. Situó el cursor al principio de la línea 3 8. Situó el cursor al final de la línea anterior 9. Eliminó la línea indicada 10. Copió el primer párrafo de texto en un buffer de nombre “a” 11. Digitó :wq 12. Tecleó ctrl.-d para salir de shell 13. Apagó el equipo de cómputo 14. Repitió los procedimientos con asesoría del PSP creando otros directorios. 4 Depositó los residuos recuperables. Observaciones: PSP: Hora de inicio: 80 Hora de término: Evaluación: Operación de Sistema Operativo Multiusuario Unidad de aprendizaje: 1 Práctica número: 5 Nombre de la práctica: Ordenamiento de información Propósito de la práctica: Al finalizar la práctica, el alumno ordenará de acuerdo a diferentes criterios información en un archivo existente. Escenario: Laboratorio de Informática. Duración: 6 hrs. Materiales • Software instalado de UNIX o software de emulación UNIX. Maquinaria y Equipo Herramienta • Terminal o Computadora (Pentium III). • Manual en línea de UNIX. • Cuaderno de notas. • Pluma o lápiz. Operación de Sistema Operativo Multiusuario 81 Procedimiento ­Aplicar las medidas de seguridad e higiene. • Evitar la manipulación de líquidos cerca del equipo. • No introducir objetos extraños en los dispositivos de disco. • No utilizar imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpiar el área de trabajo. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Encender equipo de cómputo. Abrir sesión de emulación de terminal UNIX. Identificar el directorio raíz Identificar el directorio home y ubicarse en él. Crear un directorio denominado “diurno” Crear un directorio denominado “dirdos” Crear un directorio usuario y ubicarse en él. Crear archivo llamado “uno” con 10 renglones numerados del 1 al 10 y escribir dos columnas de palabras separadas por: (dos puntos). Crear archivo llamado “dos” con 10 renglones numerados del 11 al 20 y escribir dos columnas de números aleatorios separados por comas. Utilizando los archivos “uno” y “dos” digitar el comando sort con la opción -m , anotar resultados Utilizando los directorios diurno, dardos y usuario digitar el comando sort con la opción –d, anotar resultados Utilizando el archivo uno digitar el comando sort con la opción –f, anotar resultados Utilizando el archivo dos digitar el comando sort con la opción –r, anotar resultados Utilizando el archivo uno digitar el comando sort con la opción –t:, anotar resultados Digitar el comando sort utilizando el archivo uno y especificar un archivo de salida con la opción –o Digitar el comando sort utilizando el archivo dos y especificar orden numérico con la opción –n Repetir los procedimientos con asesoría del PSP creando otros directorios. 4 Depositar los residuos recuperables disponiendo de 3 botes de reciclaje tonner, discos y papel. 82 Operación de Sistema Operativo Multiusuario Lista de cotejo de la práctica Número 5: Ordenamiento de información. Nombre del alumno: Instrucciones: A continuación se presentan los criterios que van a ser verificados en el desempeño del alumno mediante la observación del mismo. De la siguiente lista marque con una 9 aquellas observaciones que hayan sido cumplidas por el alumno durante su desempeño. Desarrollo Si No No Aplica ®Aplicó las medidas de seguridad e higiene. • Evitó la manipulación de líquidos cerca del equipo. • • • 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. No introdujo objetos extraños en los dispositivos de disco, No utilizó imanes cerca de discos flexibles, discos compactos ó del equipo. Limpió el área de trabajo. Encendió el equipo de cómputo. Abrió sesión de emulación UNIX. Identificó el directorio raíz Identificó el directorio home y se ubicó en él. Creó un directorio denominado “diurno” Creó un directorio denominado “dirdos” Creó un directorio llamado usuario y ubicarse en él. Creó archivo llamado “uno” con 10 renglones numerados del 1 al 10 y escribir dos columnas de palabras separadas por: (dos puntos). Creó archivo llamado “dos” con 10 renglones numerados del 11 al 20 y escribir dos columnas de números aleatorios separados por comas. Digitó el comando sort con la opción -m , anotó resultados Digitó el comando sort con la opción –d, anotó resultados Digitó el comando sort con la opción –f, anotó resultados Digitó el comando sort con la opción –r, anotó resultados Operación de Sistema Operativo Multiusuario 9 10. 1 12. 1 14. 83 Si Desarrollo No No Aplica 14. Utilizó el archivo uno, digitó el comando sort con la opción –t:, anotó resultados 15. Digitó el comando sort utilizando el archivo uno y especificó un archivo de salida con la opción –o 16. Digitó el comando sort utilizando el archivo dos y especificó orden numérico con la opción –n 17. Repitió los procedimientos con asesoría del PSP creando otros directorios. 4 Depositó los residuos recuperables. Observaciones: PSP: Hora de inicio: 84 Hora de término: Evaluación: Operación de Sistema Operativo Multiusuario Unidad de aprendizaje: 1 Práctica número: 6 Nombre de la práctica Manejo de archivos con el comando out Propósito de la práctica: Al finalizar la práctica, el alumno manejara archivos existentes de acuerdo con los comandos de UNIX que le permitan la manipulación de los archivos. Escenario: Laboratorio de Informática. Duración: 6 hrs. Materiales • Software instalado de UNIX o software de emulación UNIX. Maquinaria y Equipo Herramienta • Terminal o Computadora (Pentium III). • Manual en línea de UNIX. • Cuaderno de notas. • Pluma o lápiz. Operación de Sistema Operativo Multiusuario 85 Procedimiento ­Aplicar las medidas de seguridad e higiene. • Evitar la manipulación de líquidos cerca del equipo. • No introducir objetos extraños en los dispositivos de disco. • No utilizar imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpiar el área de trabajo. 1. 2. 3. 4. 5. 6. Encender equipo de cómputo. Abrir sesión de emulación de terminal UNIX. Identificar el directorio raíz Identificar el directorio home y ubicarse en él. Crear el directorio pcuser y ubicarse en él. Crear un archivo llamado data.fil de acuerdo a: 01 : Ana Ramírez: 5556-78-90 : México D.F. : Presidente 02: Laura Díaz: 5589-22-22 : México D.F.: Gerente 03: Laura Rosales: 5555-11-22 : México D.F.: Ventas 7. Digitar el comando cut de acuerdo a cut –d: -f2,4,5 data.fil 8. Verificar que la salida sea: Ana Ramírez: México D.F.: Presidente Laura Díaz: México D.F.: Gerente Laura Rosales: México D.F.: Ventas 9. Borrar el archivo data.fil 10. Borrar el directorio pcuser 11. Repetir los procedimientos con asesoría del PSP explorando todas las opciones del comando. 4 Depositar los residuos recuperables disponiendo de 3 botes de reciclaje tonner, discos y papel. 86 Operación de Sistema Operativo Multiusuario Lista de cotejo de la práctica número 6: Manejo de archivos con el comando cut. Nombre del alumno: Instrucciones: A continuación se presentan los criterios que van a ser verificados en el desempeño del alumno mediante la observación del mismo. De la siguiente lista marque con una 9 aquellas observaciones que hayan sido cumplidas por el alumno durante su desempeño. Si Desarrollo No No Aplica ®Aplicó las medidas de seguridad e higiene. • Evitó la manipulación de líquidos cerca del equipo. • No introdujo objetos extraños en los dispositivos de disco, • No utilizó imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpió el área de trabajo. 1. Encendió el equipo de cómputo. 2. Abrió sesión de emulación UNIX. 3. Identificó el directorio raíz 4. Identificó el directorio home y se ubicó en él. 5. Creó el directorio pcuser y se ubicó en él. 6. Creó el archivo data.fil 7. Digitó el comando cut de acuerdo a lo especificado 8. Verificó el resultado de la ejecución del programa 9. Borró el archivo data.fil 10. Borró el directorio pcuser 11. Repitió los procedimientos con asesoría del PSP creando otros directorios. 4 Depositó los residuos recuperables. Observaciones: PSP: Hora de inicio: Operación de Sistema Operativo Multiusuario Hora de término: Evaluación: 87 Unidad de aprendizaje: 1 Práctica número: 7 Nombre de la práctica: Manejo de permisos Propósito de la práctica: Al finalizar la práctica, el alumno modificará y limitará atributos de permisos de propietario y grupo para lectura y escritura a través de comandos. Escenario: Laboratorio de Informática. Duración: 6 hrs. Materiales • Software instalado de UNIX o software de emulación UNIX. Maquinaria y Equipo Herramienta • Terminal o Computadora (Pentium III). • Manual en línea de UNIX. • Cuaderno de notas. • Pluma o lápiz. 88 Operación de Sistema Operativo Multiusuario Procedimiento ­Aplicar las medidas de seguridad e higiene. • Evitar la manipulación de líquidos cerca del equipo. • No introducir objetos extraños en los dispositivos de disco. • No utilizar imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpiar el área de trabajo. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Encender equipo de cómputo. Abrir sesión de UNIX o emulación de terminal UNIX. Entrar al Unix Shell. Teclear cd \ , teclear enter. Teclear mkdir prueba, teclear enter. Teclear pwd, teclear enter. Teclear en el directorio prueba, vi primer.doc, teclear enter. Escribir el siguiente texto: Este es mi primer cambio de permisos. Salvar el archivo con la instrucción: Wq, teclear enter. Cd \, teclear enter. Cd prueba, teclear enter. ls –l , teclear enter. Teclear chmod 354 primer, teclear enter. Teclear ls –l , teclear enter. Regresar los permisos anteriores. Repetir los procedimientos con asesoría del PSP cambiando permisos a otros archivos. Teclear ctrl. –d para salir del shell Apagar el equipo de cómputo 4 Depositar los residuos recuperables disponiendo de 3 botes de reciclaje tonner, discos y papel. Operación de Sistema Operativo Multiusuario 89 Lista de cotejo de la práctica Número 7: Manejo de permisos Nombre del alumno: Instrucciones: A continuación se presentan los criterios que van a ser verificados en el desempeño del alumno mediante la observación del mismo. De la siguiente lista marque con una 9 aquellas observaciones que hayan sido cumplidas por el alumno durante su desempeño Si Desarrollo No No Aplica ®Aplicó las medidas de seguridad e higiene. • Evitó la manipulación de líquidos cerca del equipo. • • • 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. No introdujo objetos extraños en los dispositivos de disco, No utilizó imanes cerca de discos flexibles, discos compactos ó del equipo. Limpió el área de trabajo. Encendió el equipo de cómputo. Abrió sesión de UNIX. Tecleó cd \ Tecleó mkdir prueba Tecleó pwd Tecleó en el directorio prueba, vi primer.doc, tecleó enter. Escribió el texto: Este es mi primer cambio de permisos Salvó el archivo con la instrucción: wq, tecleó enter. Tecleó cd\, tecleó enter Tecleo cd prueba, tecleó enter Tecleó ls –l, dio enter Tecleo chmod 354 primer, dio enter Tecleó ls –l, dio enter Regresó los permisos anteriores Repitió los procedimientos con asesoría del PSP cambiando permisos a otros archivos. 16. Salió del shell 17. Apagó el equipo 4 Depositó los residuos recuperables. 90 Operación de Sistema Operativo Multiusuario Observaciones: PSP: Hora de inicio: Operación de Sistema Operativo Multiusuario Hora de término: Evaluación: 91 Unidad de aprendizaje: 1 Práctica número: 8 Nombre de la práctica: Manejo de direccionamientos. Propósito de la práctica: Al finalizar la práctica, el alumno manejará direccionamientos entre directorios del sistema a través de comandos. Escenario: Laboratorio de Informática. Duración: 6 hrs. Materiales • Software instalado de UNIX o software de emulación UNIX. Maquinaria y Equipo Herramienta • Terminal o Computadora (Pentium III). • Manual en línea de UNIX. • Cuaderno de notas. • Pluma o lápiz. 92 Operación de Sistema Operativo Multiusuario Procedimiento ­Aplicar las medidas de seguridad e higiene. • Evitar la manipulación de líquidos cerca del equipo. • No introducir objetos extraños en los dispositivos de disco. • No utilizar imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpiar el área de trabajo. 1. 2. 3. 4. Encender equipo de cómputo. Abrir sesión de emulación de terminal UNIX. Entrar al Unix Shell. Hacer un esquema que refleje la estructura del árbol de los principales directorios del sistema hasta el tercer nivel. fuentes c C++ bin doc ps utiles correo 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Averiguar de todas las formas que conozca (al menos tres) cuál es su directorio HOME. Cree un subdirectorio que se llame pruebas cuyo padre sea el directorio raíz. ¿Qué ocurre y por qué?. Cree el siguiente árbol de directorios a partir de su directorio HOME: ¿Qué secuencia de órdenes ha utilizado?. Sitúese en el subdirectorio utiles e intente borrarlo desde él mismo. Desde el subdirectorio utiles, sitúese en el subdirectorio c Utilizando direccionamiento relativo. Indique todas las formas posibles para situarse desde el subdirectorio C, a su directorio HOME. Sitúese en el subdirectorio fuentes usando direccionamiento absoluto. Intente borrar, desde el subdirectorio fuentes, el subdirectorio docs usando la orden rmdir. ¿Qué ocurre y ¿por qué? 15. Teclear ctrl.-d para salir de shell. 16. Repetir los procedimientos con asesoría del PSP. 17. Apagar el equipo de cómputo Nota: El instructor deberá adecuar la práctica al equipo con el que se cuenta. 4 Depositar los residuos recuperables disponiendo de 3 botes de reciclaje tonner, discos y papel. Operación de Sistema Operativo Multiusuario 93 Lista de cotejo de la práctica Número 8: Manejo de direccionamientos Nombre del alumno: Instrucciones: A continuación se presentan los criterios que van a ser verificados en el desempeño del alumno mediante la observación del mismo. De la siguiente lista marque con una 9 aquellas observaciones que hayan sido cumplidas por el alumno durante su desempeño Si Desarrollo No No Aplica ®Aplicó las medidas de seguridad e higiene. • Evitó la manipulación de líquidos cerca del equipo. • No introdujo objetos extraños en los dispositivos de disco, • No utilizó imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpió el área de trabajo. 1. Encendió el equipo de cómputo. 2. Abrió sesión de emulación UNIX. 3. Entró a Unix Shell. 4. Hizo el esquema hasta el tercer nivel. 5. Averiguó en al menos tres formas cuál es su directorio HOME. 6. Creó el subdirectorio pruebas 7. Explicó que ocurrió y porqué 8. Creó completo el árbol de directorios. 9. Anotó las secuencias de ordenes utilizadas 10. Se situó en utiles y lo intentó borrar 11. Desde utiles se situó en c utilizando direccionamiento relativo 12. Indicó las formas posibles para situarse desde c en home 13. Se situó en fuentes usando direccionamiento absoluto 14. Uso la orden rmdir 15. Anotó lo que ocurrió y por qué 16. Salió del shell de UNIX. 17. Repitió los procedimientos con asesoría del PSP. 4 Depositó los residuos recuperables. 94 Operación de Sistema Operativo Multiusuario Observaciones: PSP: Hora de inicio: Operación de Sistema Operativo Multiusuario Hora de término: Evaluación: 95 RESUMEN El S.O. Unix fué creado a finales de la década de los 60 sobre la base de varios trabajos realizados conjuntamente por el MIT y Laboratorios BELL. Dichos trabajos (proyecto MULTICS) iban encaminados a la creación de un macrosistema de computación que diese servicio a miles de usuarios. Si bien el proyecto fracasó, posiblemente por intentar abarcar demasiado contando con unos elementos hardware limitados en ésa época, influyó; decisivamente sobre la evolución de los sistemas informáticos posteriores. Un antiguo componente de dicho proyecto (Ken Thompson) desarrolló por su cuenta un sistema operativo monousuario con la característica principal de un sistema de archivos jerárquico. 96 El sistema encontró muchos entusiastas y se hizo portable al reescribirse casi íntegramente en lenguaje «C», y se suministró en código fuente a las universidades como objeto de formación. Así, la universidad de California en Berkeley retocó dicho sistema (fundamentalmente, comunicaciones y diversas utilidades como el editor «vi»), y liberó lo que luego sería el BSD, uno de los dos «dialectos» principales del UNIX. Un sistema UNIX en modo multiusuario (puede arrancarse en modo monousuario para labores de administración) espera la entrada de un usuario al sistema, proceso que recibe el nombre de login. Operación de Sistema Operativo Multiusuario AUTOEVALUACIÓN DE CONOCIMIENTOS DEL CAPITULO 1 1. 2. 3. 4. ¿Para qué sirven los menús de compilación? ¿Cuál es la sintaxis de la instrucción MENÚ ? ¿Qué realiza la instrucción MESSAGE? ¿Qué instrucciones pueden asociarse a la instrucción ERROR para despliegue de mensajes? 5. ¿Cuál es la sintaxis de la instrucción PROMPT? Operación de Sistema Operativo Multiusuario 97 Respuestas a las autoevaluaciones de conocimientos por capítulo CAPÍTULO 1 1. Los menús de compilación son utilizados para compilar el código 4GL, o bien como módulo ejecutable, o bien como un módulo ligable. 2. menú «NOMBRE_DEL_MENU» command «OPCION» command key (LISTA_DE_TECLAS) command key (LISTA_DE_TECLAS) «OPCION» «MENSAJE DE AYUDA PARA OPCION» help NUMERO_DE_AYUDA instrucciones en 4gl ... (continue menu) (exit menu) (next option «OPCION» end menú 3. Se usa para desplegar una cadena de caracteres sobre la línea de mensajes. La línea de mensajes default se ubica en la línea 2 de la ventana activa. 4. reverse blink underline normal bold dim invisible 5. prompt TEXTO DEL MENSAJE ( attribute ( LISTA DE ATRIBUTOS ) ) for ( char ) NOMBRE DE VARIABLE ( help NUMERO DE AYUDA ) ( on key ( LISTA DE TECLAS ) INSTRUCCIÓN end prompt 98 Operación de Sistema Operativo Multiusuario ADMINISTRACIÓN DE PROCESOS DE SISTEMA OPERATIVO MULTIUSUARIO. Al finalizar finalizar la unidad, el alumno administrará cuentas, procesos y archivos por medios de shell y comandos, para gestionar eficazmente todos los procesos que conlleva el manejo de un Sistema Operativo Multisuario. Operación de Sistema Operativo Multiusuario 99 MAPA CURRICULAR DE LA UNIDAD DE APRENDIZAJE Operación de Sistema operativo Multiusuario Módulo 144 hrs. Unidad de Aprendizaje 1. Manejo de ambiente de sistema operativo multiusuario. 55 hrs. Resultados de Aprendizaje 100 2.Administración de procesos de sistema operativo multiusuario. 53 hrs. 2.1 Utilizar comandos con sus opciones por medio de instrucciones UNIX. 18 hrs. 2.2 Manejar la administración de cuentas de UNIX con base a permisos establecidos de usuarios 2.3 Organizar la información de archivos y discos mediante el sistema de archivos. 18 hrs. 17 hrs. Operación de Sistema Operativo Multiusuario SUMARIO ¾ ¾ ¾ ¾ ¾ ¾ USO DE SHELL RED PARADA Y ARRANQUE DEL SISTEMA UNIX ADMINISTRACION DE LOS USAURIOS Y GRUPOS SISTEMA DE ARCHIVOS ORDENES PARA ADMINISTRAR EL SISTEMA DE ARCHIVOS RESULTADO DE APRENDIZAJE 2.1. Utilizar comandos con sus opciones por medio de instrucciones UNIX 2.1.1 USO DE SHELL .Paso de parámetros a un programa de shell. Teclas usadas para el control de trabajos. Operación de Sistema Operativo Multiusuario 101 • Variables especiales de shell (funciones en programas de shell). Una variable de entorno en la shell es una referencia a un valor. Se distinguen dos tipos locales y globales. Una variable local es aquella que se define en el shell actual y sólo se conocerá en ese shell durante la sesión de conexión vigente. Una variable global es aquella que se exporta desde un proceso activo a todos los procesos hijos. Para crear una variable local : Una variable se referencia anteponiendo a su nombre el signo dòlar ‘$’. Utilizando el comando ‘echo’, que imprime por la salida estándar el valor que se le indique, podemos ver el contenido de algunas de éstas va riables: # echo TERM TERM (!! MUY MAL!! - Hemos dicho que la variable se referencia por $). # echo $TERM vt220 (AHORA SI) Para borrar una variable, empleamos el comando «unset» junto con el nombre de la variable que queremos quitar, como: # echo $cosa ( saca el valor de dicha variable ) ANTONIO ROMERO ( el que le dimos antes ) # cosa=»ANTONIO ROMERO» Para hacerla global # export cosa Para ver qué variables tenemos: # set LOGNAME=root TERM=vt220 PS1=# SHELL=/bin/sh ( .. salen mas .. ) Una variable se inicializa con la expresión <variable>=<valor> . Es imprescindible que el carácter de igual ‘=’ vaya SIN espacios. Son lícitas las siguientes declaraciones: # TERM=vt220 # TERM=»vt220" (TERM toma el mismo valor en ambos casos) # contador=0 102 # unset cosa ( BORRAR la variable ) # echo $cosa # ( ya no tiene nada ) Se debe tener cuidado con borrar variables empleadas por programas nativos de UNIX, tales como TERM! Si borráis ésta variable, el editor «vi» automáticamente dejará de funcionar. Otro problema que es susceptible de suceder es el siguiente: supongamos una variable denominada COSA y otra denominada COSAS. La shell, en el momento de evaluar la expresión «$COSAS», se encuentra ante la siguiente disyuntiva: Evaluar $COSA y pegar su contenido a la «S» ( <contenido de COSA> + «S» ) Evaluar $COSAS , empleando intuición. Cara a la galería, ambas evaluaciones por parte de la shell serían correctas, pero dependiendo de lo que nosotros queramos hacer puede producir efectos indeseados. A tal fin, en conveniente Operación de Sistema Operativo Multiusuario utilizar los caracteres « ;llave» -{}- para encerrar la variable que queremos expandir. De tal forma, para reflejar «COSA», escribiríamos: ${COSA} Y para reflejar «COSAS», ${COSAS} Con lo que tenemos la seguridad de que las variables siempre son bien interpretadas. Las llaves se utilizan SIEMPRE en el momento de evaluar la variable, no de asignarle valores. No tiene sentido hacer cosas como {COSAS}=tontería. Algunas de las variables usadas por el sistema ó por programas del mismo son: HOME:: Directorio personal . Usado por el comando «cd» , se cambia aquí al ser llamado sin argumentos. LOGNAME: Nombre del usuario con el que se ha comenzado la sesión. PATH: Lista de rutas de acceso, separadas por dos puntos ‘:’ y donde una entrada con un sólo punto identifica el «direcorio actual». Son válidas asignaciones como: # PATH=$PATH:/home/pepe:/home/antonio PS1: Símbolo principal del indicador de «preparado» del sistema. Normalmente, su valor será ‘#’ -o ‘$’. TERM: Tipo de terminal. Podemos ver cómo se inicializan las variables consultando los ficheros de inicialización. Estos ficheros son: /etc/profile: Fichero de inicialización global . Significa que, tras hacer login, todos los usuarios pasan a través del mismo. Inicializa variables como PATH, TERM .... <directorio usuario>/.profile: Fichero particular, reside en el «home directory» del usuario en cuestión. Es, por tanto, particular para cada uno de ellos y es aquí donde podemos configurar cosas tale s como que les salga un menú al entrar, mostrarles el correo ... Operación de Sistema Operativo Multiusuario Dependiendo de cuales sean las comillas utilizadas en una expresión, los resultados son los siguientes: Carácter backslash \ :Quita el significado especial del carácter a continuación de la barra invertida. Comillas simples ‘ ‘ :Quitan el significado especial de todos los caracteres encerrados entre comillas simples. Comillas dobles « « :Quitan el significado especial de todos los caracteres EXCEPTO los siguientes : $ (dolar) , \ (backslash) y ` (comilla de ejecución). Comillas de ejecución ‘ ‘ :Ejecutan el comando encerrado entre las mismas y sustituyen su valor por la salida estándar del comando que se ha ejecutado . Es mejor, sobre todo en el último caso, ver algunos ejemplos: Para sacar un cartel en pantalla que contenga comillas, deberemos «escaparlas» pues, si no, la shell las interpretaría, como en: # echo «Pulse «INTRO» para seguir» ( MAL!! - la shell ve 4 comillas y no las sacaría ! ) # echo «Pulse \»INTRO\» para seguir» ( AHORA SI sale bien ) También, podríamos haber escrito el texto entre comillas simples: # echo ‘Pulse «INTRO» para seguir’ ( BIEN como antes) lo que ocurre es que de ésta manera no se interpretaría nada; nos podría convenir algo como: # echo ‘Oye, $LOGNAME pulsa «INTRO» para seguir’ y saldría: Oye, $LOGNAME pulsa INTRO para seguir Lo cual no vale. Habría que poner: # echo «Oye, $LOGNAME pulsa \»INTRO\» para seguir» y saldría: Oye, root pulsa INTRO para seguir. 103 En el caso de comillas de ejecución , podemos escribir: Además de éstas, existen otras que detallam os a continuación: # echo «Oye, `logname` pulsa \»INTRO\» para seguir» $0 : Su contenido es el nombre de la shell-script que estamos ejecutando. $1 , $2 : Primer y segundo parámetro posicional. $# : Número de parámetros que han pasado a la shell. $ * : Un argumento que contiene todos los parámetros que se han pasado ( $1 , $2 ...) menos el $0. $? :Número donde se almacena el código de error del último comando que se ha ejecutado. $$ :Número de proceso actual (PID) $! :Ultimo número de proceso ejecutado. (sale bien, la shell sustituye el comando logname por su resultado) o bien, valdrían expresiones como: # echo «Y estas en el terminal: `tty`» Y estas en el terminal /dev/ttyp002 Hay que imaginarse, por tanto, que la shell «ve» el resultado del comando en la línea de ejecución. Valen también, como asignaciones a variables: es lógico, # TERMINAL=‘tty‘ # echo $TERMINAL /dev/ttyp001 La shell, además de interpretar y ejecutar comandos, tiene primitivas de control de ejecución de programas tales como sentencias condicionales y bucles. La interpretación del lenguaje se lleva a cabo prácticamente en tiempo real; a medida que va interpretando va ejecutando. Los programas, como se ha mencionado antes, se interpretan en tiempo de ejecución. Por tanto, la codificación de una shell-script es sumamente sencilla en el sentido en el que basta con escribir en un fichero de texto l os comandos y ejecutarlo. Variables Dentro de una shell, existen las variables de entorno que hayamos definido anteriormente, bien en la misma, en otra ó en los ficheros profile de inicialización. 104 # :COMENTARIO: Todo lo que haya a la derecha de la almohadilla se toma como comentario. Ejemplo: Supongamos que hemos escrito la siguiente shell-script llamada «prueba.sh»: echo «La escript se llama $0» echo «Me han llamado con $# argumentos» echo «El primero es $1» echo «Y todos son $*» echo «Hasta luego lucas!» Y la podemos ejecutar de dos maneras: 1) Directamente: # sh prueba.sh uno dos 2) Dando permisos y ejecutando como un comando: # chmod 777 prueba.sh # prueba.sh uno dos La salida: Me han llamado com 2 argumentos El primero es uno Y todos son uno dos Hasta luego lucas Hemos visto que los comandos se separan por líneas, y se van ejecutando de forma secuencial. Podemos, no obstante, poner Operación de Sistema Operativo Multiusuario varios comandos en la misma línea separandolos por punto y coma ‘;’. Si la ejecutamos como Además, podemos agrupar comandos mediante paréntesis, lo cual permite ejecutarlos en un subentorno ( las variables que usemos no nos van a interferir en nuestro proceso «padre») al volver al ‘#’ NO se ha modificado la variable! Para que SI la modifique, se llamaría como: # ( date ; who ) | wc –l Hay que suponerse al punto como un «include», que en vez de crear un proceso hijo «expande» el código dentro de nuestra shell actual. Normalmente, ejecutar una shell implica crear un proceso hijo, y el proceso padre (normalmente, nuestra sesión inicial de shell) espera a que dicho proceso acabe para continuar su ejecución ( si nosotros lanzamos un pro grama shell-script, hasta que éste no acaba (hijo), no nos aparece en pantalla el inductor de comandos ‘#’ (padre) ). Por definición, en UNIX un proceso hijo, al rodar en un espacio de datos distinto, hereda varias cosas del padre, entre ellas todas las variables de entorno; pero por ello, no puede modificar el entorno del padre ( si modificamos en una shell script el contenido, por ejemplo, de «TERM», al acabar dicha shell y volver al padre la variable continúa con su valor original. Hay situaciones en las cuales necesitamos que una shell modifique nuestro entorno actu al, y a tal efecto se ejecuta con un punto (.) delante de la shell-script. Es mejor ver éste último aspecto mediante un programa en shell.script: supongamos una shell que se llame «tipoterm» que nos pida el terminal y nos ponga la variable TERM de acuerdo a ésta entrada: # script para pedir el tipo de terminal echo «Por favor escriba que terminal tiene :» read TERM echo «Ha elegido — $TERM» Operación de Sistema Operativo Multiusuario # tipoterm # . tipoterm Comando read Con el fin de permitir una ejecución interactiva, existe el comando «read <nombre_variable>», el cual, en el momento de ejecución, espera una entrada de datos por teclado terminada en <INTRO>; lo que han introducido por el teclado va a la variable especificada. Supongamos la siguiente shell-script: echo «Como te llamas?» read nom echo «Hola $nom» Ejecución: Como te llamas ? jose ( aquí escribimos «jose» y pulsamos <INTRO> ) Hola jose el comando «read» , ha cargado «jose» en «nom». Secuencias condicionales : if .. fi: La sintaxis de ésta sentencia es: if <condicion> then ..... comandos .... else ..... comandos .... fi 105 (la cláusula «else» puede omitirse; sólo se usará cuando se requiera). echo «Jose NO esta registrado como usuario». fi Secuencia condicional case.. esac. La condición puede escribirse como «test <argumentos>» ó con corchetes. Es imprescindible en este último caso, poner espacios entre los corchetes y los valores. Posibles condiciones y su sintaxis: if [ <variable> = <valor> ] : variable es igual a valor. Ojo con los espacios en ‘=’ . if [ <variable> != <valor> ] : variable es distinta a valor. if [ <variable -eq <valor> ] : variable es igual a valor . La variable debe contener números. En éste caso , valen las comparaciones siguientes : -eq : Igual (equal) -ne : Distinto (not equal) -ge : Mayor ó igual (Greater or equal). -le : Menor ó igual (Less or equal). -lt : Menor que (Less than). -gt : Mayor que (Greater than). if [ -f <fichero> ] : Existe <fichero>. Ojo con los espacios. if [ -d <fichero> ] : Existe <fichero> y es un directorio. if [ -s <fichero> ] :Existe <fichero> y tiene un tamaño mayor de cero. if [ -x <fichero> ] : Existe <fichero> y es ejecutable. Sintaxis: case <variable> in <valor> ) <comando> ( la variable es = valor, ejecuta los comandos hasta ‘;;’ ) <comando> ;; <valor> ) <comando> <comando> ;; • ) <comando> ( Clausula «otherwise» ó «default» : Si no se cumple alguna <comando> de las anteriores ejecuta los comandos hasta ‘;;’ ) ;; esac ( Igual que if acaba en fi , case acaba en esac ) Ejemplos: minimenu.sh Ejemplo de ésto último sería el siguiente programa: clear # borrar pantalla echo «1.- Quien hay por ahi ?» # pintar opciones echo «2.- Cuanto disco queda ?» echo «3.- Nada. Salir. « echo «Cual quieres ? : \c» # el carácter «\c» evita que el echo salte nueva línea read opcion # «opcion» vale lo que se ha tecleado en pantalla case «$opcion» in # IMPORTANTE : Poner la variable como «$opcion» 1) who ;; # pues si el señor pulsa <INTRO> daría error al no valer nada. 2) df;; 3) echo «Adios»;; *) echo «Opcion $opcion Es Incorrecta» ;; esac Bucles FOR. Sintaxis : for <variable> in <lista> do <.. comandos ..> done if grep jose /etc/passwd. then # retorno del comando -grep- ha sido CERO. echo «Jose esta registrado como usuario». else # retorno del comando grep NO ha sido CERO. El bloque entre «for» y «done» da tantas vueltas como elementos existan en <lista>, tomando la variable cada uno de En el campo <condición> vale escribir comandos, los cuales se ejecutarán y el valor de la condición dependerá de dos factores: * Retorno 0 del comando = VERDADERO. * Retorno != 0 del comando = FALSO. 106 Operación de Sistema Operativo Multiusuario los elementos de <lista> para cada iteración. En ésto conviene no confun dirlo con los for..next existentes en los lenguajes de tipo algol (pascual, basic ...) que varían contadores. Supongamos un programa que contenga un bucle for de la siguiente manera; for j in rosa antonio do echo «Variable = $j» done Y la salida que produce es: Variable es rosa Variable es antonio Explicación: el bloque ha efectuado dos iteraciones (dos vueltas). Para la primera, la variable -j- toma el valor del primer elemento -rosa-, y para la segunda, antonio-. En el campo <lista> podemos sustituir la lista por patrones de ficheros para la shell, la cual expande dichos patrones por los ficheros correspondientes; de tal forma que al escribir for j in * la shell cambia el ‘*’ por todos los ficheros del directorio actual. Por tanto, el siguiente programa: for j in * do echo $j done equivale al comando ‘ls’ sin opciones merece la pena detenerse un momento para comprender ésto. Operación de Sistema Operativo Multiusuario Vale también poner en el campo <lista> comillas de ejecución junto con cualquier comando; la construcción - for j in ‘cat /etc/passwd‘ -, por ejemplo, ejecutaría tantas iteraciones como líneas tuviese dicho fichero, y para cada vuelta, la variable -j- contendría cada una de las líneas del mismo. Por tanto, valdrían expresiones como - for j in ‘who‘ - para procesar todos los usuarios activos en el sistema, - for j in ‘lpstat -o ‘ -, para procesar todos los listados pendientes , ó - for j in ‘ps -e‘ - para tratar todos los procesos de nuestra sesión. Bucles WHILE. Sintaxis : while <condición> do ( ... comandos ... ) done Aquí las iteraciones se producen mientras que la <condición> sea verdadera ( ó retorno = 0 ). En caso que sea falsa ( ó retorno != 0 ), el bucle termina. La sintaxis de <condición> es igual que en el comando -if- . Ejemplo: while [ «$opcion» != «3» ] do echo «Meta opcion» read opcion done ó también, utilizando comandos: echo «Escribe cosas y pulsa ^D para terminar» while read cosa do echo $cosa >> /tmp/borrame done echo «Las lineas que has escrito son :» cat /tmp/borrame 107 Explicación : El comando -read- devuelve un retorno VERDADERO (cero) mientras que no se pulse el carácter EOF ( ^D); por tanto, el bucle está indefinidamente dando vueltas hasta dar ése carácter. • Contadores: sentencia expr La sentencia expr evalúa una expresión y la muestra en la salida estándar. La expresión normalmente consiste de dos números ó variables de contenido numérico y un operador de suma, resta, multiplicación ó división. El «1» resultante va a sacar por la salida estándar. Pero como hemos puesto las comillas de ejecución, se asigna a pepe. Al final , $pepe vale 1. Pues ya se pueden ejecutar bucles con contadores. Considerese el siguiente programa: cnt=0 while [ $cnt -lt 50 ] do cnt=‘expr $cnt «+» 1‘ echo «Vuelta numero $cnt» done Se autoexplica. Operadores AND / OR. Son válidos los comandos siguientes: expr 100 «+» 1 # saca en pantalla 101 expr 100 «-» 1 # saca en pantalla 99 expr 100 «*» 2 # OJO CON LAS COMILLAS DOBLES- Previenen a la shell de sustituciones. # Bueno, todo el mundo sabe lo que es 100 * 2, no?. expr 100 «/» 2 Por tanto, podemos escribir : pepe=‘expr 10 «*» 5‘ # y la variable pepe vale 50. ó incluso: pepe=0 pepe=‘expr $pepe «+» 1‘ Esto último es bastante menos evidente. Para comprenderlo, hay que creerse que la shell ejecuta lo siguiente: Al principio , $pepe vale 0. En cualquier expresión de asignación, PRIMERO se calcula el resultado y DESPUES se ejecuta la asignación. Por tanto, lo primero que la shell hace es «expr 0 + 1». 108 Una construcción usual en la shell, utilizada principalmente por lo compacto de su código, pero con el inconveniente de que permite oscurecer el código son el operador «OR» -||- y el operador «AND&q uot; -&&- . El operador «OR» ejecuta el primer comando, y si el código de error del mismo es FALSO (distinto de cero), ejecuta el segundo comando. El operador «AND» ejecuta el primer comando, y si el código de error del mismo es VERDADERO (igual a cero), ejecuta el segundo comando. Veamos un ejemplo y, por favor, reléase a continuación los dos párrafos anteriores: cd /home/basura && rm -f * Explicación: nos cambiamos al directorio indicado. Sólamente en el caso de haber tenido éxito, nos cargamos todos los ficheros del directorio actual. ls /home/basurilla || mkdir /home/basurilla Operación de Sistema Operativo Multiusuario Explicación: El comando ls falla si no existe el directorio indicado. En tal caso, se crea. banner «hola» | lp && echo «Listado Mandado» || echo «Listado ha cascado» set -n :Noexec. Lee comandos, los interpreta pero NO los ejecuta. Vale para ver errores de sintaxis antes de probarlo de verdad. Explicación: El comando son dos , el banner y el lp. Si por lo que sea no se puede imprimir, da el mensaje de error; si va todo bien, sale Listado Mandado. set -e :Errexit. Terminar la ejecución inmediatamente si alguno de los comandos empleados devuelve un retorno distinto de VERDADERO ( 0 ) y NO se evalúa su retorno. El retorno de un comando se determina evaluado en las siguientes sentencias: Depuración de «shell scripts». if..fi , while do..done , until do..done. Si bien los métodos utilizados para ésto son bastante «toscos», ha de tenerse en cuenta que la shell NO se hizo como un lenguaje de programación de propósito general. a la izquierda del operador AND/OR (-||ó -&&- ). Cuando se requieren virguer&i acute;as, ha de acudirse bien a lenguajes convencionales ó bien a intérpretes más modernos y sofisticados (y más complicados, por supuesto), tales como el TCL (Task Control Language) ó el PERL, los cuales si bien son de libre dominio no vienen «de faábrica» en todos los equipos. Normalmente, emplearemos el comando «set», el cual modifica algunos de los comportamientos de la shell a la hora de interpretar los comandos: set -v: Verbose. Saca en la salida de error su entrada (es decir, las líneas del script según los va leyendo, que no ejecutando, pues pirmero se lee y después se ejecuta, que ésto es un intérprete y no hay que olvidarlo). set -x :Xtrace. Muestra cada comando según lo va ejecutando por la salida de error, antecedido por un «+». Operación de Sistema Operativo Multiusuario • Señales y orden trap. Las puertas falsas (trap doors o back doors) son un mecanismo establecido en el sistema por su diseñador o por alguien que ha modificado el funcionamiento del mismo. Su objetivo es ofrecer un modo de acceder al sistema esquivando todas las medidas de seguridad establecidas cuando se usa el procedimiento normal. Se trata pues de proporcionar una ruta directa y oculta de acceso al sistema. En algunas ocasiones las puertas falsas se establecen durante el desarrollo de la aplicación, con el fin de testearla o permitir un acceso directo y fácil a determinados módulos en caso de fallo del mecanismo normal de acceso. En general estas puertas se eliminan al distribuir la aplicación, pero siempre hay olvidos. El mecanismo de acceso, conocido por la persona que crea la puerta falsa, puede ser una combinación de teclas dadas, una secuencia bien definida de acciones, un login particular, etc. 109 Un ejemplo de puerta falsa es la que presentan las BIOS de las placas AWARD. A la hora de modificar sus parámetros podemos utilizar cualquiera de las siguientes contraseñas mágica: «condo» y «589589». Aunque el propietario del ordenador haya incorporado su propia contraseña, las dos anteriores suponen una puerta falsa que permite entrar a la configuración de la BIOS. 2.1.2 RED • Servicios de red. Dentro de este apartado vamos a comentar brevemente la función de algunos servicios de Unix y sus potenciales problemas de seguridad. Los aquí expuestos son servicios que habitualmente han de estar cerrados, por lo que no implican excesivos problemas de seguridad conocidos. Así, no vamos a entrar en muchos detalles con ellos; en puntos siguientes hablaremos con más extensión de otros servicios que suelen estar ofrecidos en todas las máquinas, como ftp, telnet o SMTP, y que en su mayoría presentan mayores problemas de seguridad. systat El servicio systat se asocia al puerto 11 de una máquina Unix, de forma que al recibir una petición mediante TCP el demonio inetd ofrece una imagen de la tabla de procesos del sistema, por ejemplo ejecutando una orden como ps -auwwx en Linux o ps -ef en Solaris; en algunos Unices se ofrece la salida de órdenes como who o w en lugar de la tabla de procesos: es fácil configurar lo que cada 110 administrador desee mostrar simplemente modificando la línea correspondiente de/etc/inetd.conf: anita:~# grep systat /etc/inetd.conf systat stream tcp nowait root /usr/bin/ps -ef anita:~# ps Bien se ofrezca la tabla de procesos o bien otro tipo de información sobre el sistema, este servicio es habitual encontarlo deshabilitado, ya que cualquier dato sobre nuestro sistema (especialmente procesos, nombres de usuario, máquinas desde las que conectan...) puede ser aprovechado por un pirata para atacar el equipo. Si por motivos de comodidad a la hora de administrar varios hosts dentro de una red local necesitamos tener abierto systat, debemos restringir las direcciones desde las que se puede acceder al servicio mediante TCP Wrappers. daytime El servicio daytime, asociado al puerto 13, tanto TCP como UDP, es un servicio interno de inetd (esto es, no hay un programa externo que lo sirva, el propio inetd se encarga de ello); al recibir una conexión a este puerto, el sistema mostrará la fecha y la hora, en un formato muy similar al resultado de la orden date: anita:~# telnet rosita daytime Trying 195.195.5.1... Connected to rosita. -Escape character is ‘^]’. Thu Apr 20 05:02:33 2000 Connection closed by foreign host. anita:~# Aunque a primera vista este servicio no represente un peligro para la integridad de nuestro sistema, siempre hemos de Operación de Sistema Operativo Multiusuario recordar una norma de seguridad fundamental: sólo hay que ofrecer los servicios estrictamente necesarios para el correcto funcionamiento de nuestras máquinas. Como daytime no es un servicio básico, suele ser recomendable cerrarlo; además, la información que proporciona, aunque escasa, puede ser suficiente para un atacante: le estamos indicando el estado del reloj de nuestro sistema, lo que por ejemplo le da una idea de la ubicación geográfica del equipo. Un servicio parecido en muchos aspectos a daytime es time (puerto 37, TCP y UDP); también indica la fecha y hora del equipo, pero esta vez en un formato que no es inteligible para las personas: anita:~# telnet rosita time Trying 195.195.5.1... Connected to rosita. Escape character is ‘^]’. [‘^Connection closed by foreign host. anita:~# Este servicio suele ser más útil que el anterior: aunque una persona no entienda la información mostrada por time, sí que lo hace una máquina Unix. De esta forma, se utiliza time en un servidor para que las estaciones cliente puedan sincronizar sus relojes con él con órdenes como netdate o rdate: luisa:~# date Thu Apr 20 02:19:15 CEST 2000 luisa:~# rdate rosita [rosita] Thu Apr 20 05:10:49 2000 luisa:~# date Thu Apr 20 02:20:02 CEST 2000 luisa:~# rdate -s rosita luisa:~# date Thu Apr 20 05:11:59 2000 luisa:~# Operación de Sistema Operativo Multiusuario Los problemas de time son en principio los mismos que los de daytime; aunque también es recomendable mantener ese servicio cerrado, es más fácil imaginar situaciones en las que un administrador desee ofrecer time en varias máquinas que imaginar la necesidad de ofrecer daytime. netstat De la misma forma que systat ofrecía información sobre el estado de nuestro sistema, netstat la ofrece sobre el estado de nuestra red. Este servicio, asociado al puerto 15 con protocolo TCP, ejecuta una orden como netstat (con argumentos que dependen del clon de Unix utilizado) para mostar principalmente las conexiones activas en la máquina; por ejemplo, si en Linux invocamos a netstat desde /etc/inetd.conf con la opción ‘-A inet’, al recibir una conexión se mostrará algo parecido a lo siguiente: anita:~# telnet rosita netstat Trying 195.195.5.1... Connected to rosita. Escape character is ‘^]’. Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 rosita:netstat anita:4990 ESTABLISHED Connection closed by foreign host. anita:~# Como sucedía con systat, es recomendable deshabilitar este servicio comentando la línea correspondiente de /etc/inetd.conf, o en todo caso restringir el acceso al mismo a máquinas de nuestra red local, mediante TCP Wrappers. La información sobre el estado del sistema de red - o al menos de parte del mismo 111 puede ser muy útil para un atacante, ya que por ejemplo le está mostrando nombres de hosts y además le permite hacerse una idea del tráfico que soporta la máquina, de los servicios que ofrece, de los hábitos de conexión de los usuarios. chargen chargen (puerto 19, TCP y UDP) es un generador de caracteres servido internamente por inetd, que se utiliza sobre todo para comprobar el estado de las conexiones en la red; cuando alguien accede a este servicio simplemente ve en su terminal una secuencia de caracteres ASCII que se repite indefinidamente. Los posibles problemas de seguridad relacionados con chargen suelen ser negaciones de servicio, tanto para la parte cliente como para la servidora. Sin duda el ejemplo más famoso de utilización de chargen es una de las anécdotas del experto en seguridad Tsutomu Shimomura (el principal contribuidor en la captura de Kevin Mitnick, el pirata más famoso de los noventa): cuando conectaba a un servidor de ftp anónimo, Shimomura se dió cuenta de que la máquina lanzaba un finger contra el cliente que realizaba la conexión. Esto no le gustó, y decidió comprobar si ese sistema utilizaba el finger habitual; para ello modificó el fichero /etc/inetd.conf de su sistema de forma que las peticiones finger se redireccionaran al generador de caracteres chargen. Conectó al servidor de nuevo, y al hacer éste otro finger, la máquina de Shimomura se dedicó a enviar megas y megas de caracteres ( chargen no finaliza hasta que el cliente corta la conexión); en unas pocas horas el sistema remoto quedó inoperativo, y a la 112 mañana siguiente ese finger automático había sido eliminado de la configuración del servidor. Ese servidor no habría sufrido una caída si hubiera utilizado safe_finger, un programa de Wietse Venema que se distribuye junto a TCP Wrappers y que limita la potencial cantidad de información que finger puede recibir. tftp tftp ( Trivial File Transfer Protocol) es un protocolo de transferencia de ficheros asociado al puerto 69 y basado en UDP que no proporciona ninguna seguridad. Por tanto en la mayoría de sistemas es obligatorio que este servicio esté desactivado; su uso principal es el arranque de estaciones diskless o de routers a través de la red, ya que la simpleza del protocolo permite implementarlo en un chip, y sólo en ese caso nos veremos obligados a ofrecer el servicio. Si es este el caso, los ficheros que deseemos que sean públicos se han de situar en un determinado directorio (dependiendo del clon de Unix, /tftpboot/, /etc/tftpboot/, /usr/local/boot/...) o utilizar otros nombres de directorio como argumentos del demonio en /etc/inetd.conf, algo no recomendable. Por ejemplo, si en /tftpboot/ guardamos una copia de la imagen del kernel, los clientes podrán acceder a ella mediante la orden tftp: luisa:~# tftp rosita tftp> get vmlinuz Received 531845 bytes in 3.4 seconds tftp> quit luisa:~# Operación de Sistema Operativo Multiusuario Podemos ver que en ningún momento se solicita un nombre de usuario o una clave, lo que nos da una idea de los graves problemas de seguridad que el ofrecer este servicio puede implicarnos. Hasta hace unos años, era normal que los fabricantes de sistemas Unix vendieran sus productos con tftp abierto y sin configurar, con lo que un pirata lo tenía muy fácil para conseguir cualquier fichero de contraseñas: luisa:~# t tp victima tftp> get /etc/passwd /tmp/salida Received 1845 bytes in 0.6 seconds tftp> quit luisa:~# finger Típicamente el servicio finger (puerto 79, TCP) ha sido una de las principales fuentes de probl mas de Unix. Este protocolo proporciona información - demasiado detallada - de los usuarios de una máquina, estén o no conectados en el momento de acceder al servicio; para hacerlo, se utiliza la aplicación finger desde un cliente, dándole como argumento un nombre de máquina precedido del símbolo ‘@’ y, opcionalmente, de un nombre de usuario ( finger sobre el sistema local no utiliza el servicio de red, por lo que no lo vamos a comentar aquí). En el primer caso, finger nos dará datos generales de los usuarios conectados en ese momento a la máquina, y en el segundo nos informará con más detalle del usuario especificado como parámetro, esté o no conectado: anita:~# finger @rosita [rosita] Login Name Tty Idle Login Time Office Office Phone Operación de Sistema Operativo Multiusuario toni Toni at ROSITA */0 28 Apr 20 04:43 (anita) root El Spiritu Santo 1 12 Apr 11 02:10 anita:~# finger toni@rosita [rosita] Login: toni Name: Toni at ROSITA Directory: /home/toni Shell: /bin/bash On since Thu Apr 20 04:43 (CEST) on pts/0 from anita 30 minutes 28 seconds idle (messages off) No mail. No Plan. anita:~# Como podemos ver, finger está proporcionando mucha información que podría ser de utilidad para un atacante: nombres de usuario, hábitos de conexión, cuentas inactivas...incluso algunas organizaciones rellenan exhaustivamente el campo gecos del fichero de contraseñas, con datos como números de habitación de los usuarios o incluso su teléfono. Está claro que esto es fácilmente aprovechable por un pirata para practicar ingeniería social contra nuestros usuarios - o contra el propio administrador -. Es básico para la integridad de nuestras máquinas deshabilitar este servicio, restringir su acceso a unos cuantos equipos de la red local mediante TCP Wrappers o utilizar versiones del demonio fingerd como ph ( Phone Book), que permiten especificar la información que se muestra al acceder al servicio desde cada máquina. POP El servicio POP ( Post Office Protocol, puertos 109 y 110 en TCP) se utiliza para que los usuarios puedan acceder a su correo sin necesidad de montar sistemas de ficheros compartidos mediante NFS: los clientes utilizan SMTP para enviar 113 correo y POP para recogerlo del servidor, de forma que el procesamiento se realice en la máquina del usuario. Se trata de un servicio que podríamos considerar peligroso, por lo que - como el resto, pero este especialmente debemos deshabilitarlo a no ser que sea estrictamente necesario ofrecerlo; en ese caso debemos restringir al máximo los lugares desde los que se puede acceder, mediante TCP Wrappers. En algunos sistemas se utiliza POP simplemente para evitar otorgar cuentas completas a los usuarios: si sólo van a utilizar la máquina para leer su correo, ¿por qué ofrecerles un shell ‘completo’, con acceso a todo el sistema? Realmente esto es cierto (sería un error permitir ejecutar ciertas órdenes a aquellos que sólo utilizarán el equipo para gestionar su correo), pero en muchas ocasiones esta solución no es del todo conveniente: aparte de los peligros que implica un servicio adicional, que de otra forma no utilizaríamos - en algunos demonios de POP han surgido bugs que incluso otorgaban un privilegio de root remoto sin necesidad de ninguna clave -, estamos generando un tránsito peligroso de contraseñas a través de la red. POP ofrece tres modelos distintos de autenticación: uno basado en Kerberos, apenas utilizado, otro basado en un protocolo desafío-respuesta (APOP, que tampoco se suele utilizar), y otro basado en un simple nombre de usuario con su password correspondiente. Este último, el más usado en todo tipo de entornos, es un excelente objetivo para un pirata con un sniffer: los usuarios suelen configurar sus clientes para que chequeen el buzón de correo cada pocos minutos, con lo que a intervalos muy cortos envían su clave a un puerto conocido de una máquina 114 conocida; al realizar toda esta comunicación en texto claro, un atacante no tiene más que interceptar la sesión POP para averiguar nombres de usuario y claves (aparte de poder leer el correo que baja del servidor al cliente). Si lo que deseamos es que nuestros usuarios no disfruten de una cuenta completa simplemente para gestionar su correo, podemos sustituir su shell en /etc/passwd por el nombre de dicho lector: ircd:x:1001:100:Gestion IRC,,,:/home/ircd:/usr/bin/pine En este caso hemos de tomar una precaución adicional: la mayoría de programas de correo ( elm, pine...) permiten escapes al shell, procedimientos que tarde o temprano ejecutan con éxito un intérprete de órdenes; por ejemplo, con elm no tenemos más que iniciar vi para escribir un mensaje y en el editor ejecutar :!/bin/sh para ejecutar este intérprete. Para evitar estos escapes o bien podemos modificar el código del gestor de correo - algo no muy habitual o utilizar ya versiones modificadas disponibles a través de Internet. auth Se llama socket a la combinación de una dirección de máquina y un puerto; esta entidad identifica un proceso único en la red ([CZ95]). Un par de sockets, uno en la máquina receptora y otro en la emisora definen una conexión en protocolos como TCP; esta conexión también será única en la red en un instante dado. Como vemos, no entra en juego ningún nombre de usuario: en TCP/IP se establecen canales de comunicación entre máquinas, no entre personas; no obstante, en muchas Operación de Sistema Operativo Multiusuario ocasiones nos puede interesar conocer el nombre de usuario bajo el que cierta conexión se inicia. Por ejemplo, de esta forma podríamos ofrecer o denegar un servicio en función del usuario que lo solicita, aparte de la máquina desde donde viene la petición. El protocolo auth (puerto 113, TCP) viene a solucionar este problema con un esquema muy simple: cuando un servidor necesita determinar el usuario que ha iniciado una conexión contacta con el demonio identd y le envía los datos necesarios para distinguir dicha conexión (los componentes de los dos sockets que intervienen) de las demás. De esta forma, el demonio identifica al usuario en cuestión y devuelve al servidor información sobre dicho usuario, generalmente su login. Por ejemplo, si utilizamos TCP Wrappers - un programa servidor que utiliza este mecanismo para determinar nombres de usuario siempre que sea posible -, se registará el login del usuario remoto que solicita un servicio en nuestra máquina si el sistema remoto tiene habilitado auth: luisa:~# tail -2 ~adm/syslog Apr 24 04:16:19 luisa wu.ftpd[1306]: connect from rosita Apr 24 04:16:21 luisa ftpd[1306]: ANONYMOUS FTP LOGIN FROM \ rosita [195.195.5.1], toni@ luisa:~# No obstante, si el sistema desde el que esa persona conecta no tiene habilitado dicho servicio, el nombre de usuario no se va a poder conseguir: luisa:~# tail -2 ~adm/syslog Apr 24 04:19:37 luisa wu.ftpd[1331]: connect from root@anita Operación de Sistema Operativo Multiusuario Apr 24 04:19:39 luisa ftpd[1331]: ANONYMOUS FTP LOGIN FROM \ root @ anita [195.195.5.3], toni@ luisa:~# El servicio auth no se debe utilizar nunca con propósitos de autenticación robusta, ya que dependemos no de nuestros sistemas, sino de la honestidad de la máquina remota; un atacante con el suficiente nivel de privilegio en esta puede enviarnos cualquier nombre de usuario que desee. Incluso en ciertas situaciones, si ident no está habilitado ni siquiera hacen falta privilegios para devolver un nombre falso: cualquier usuario puede hacerlo. En cambio, sí que es útil para detectar pequeñas violaciones de seguridad, por lo que quizás interese habilitar el servicio en nuestras máquinas (aunque limitemos su uso mediante TCP Wrappers. NNTP El servicio NNTP ( Network News Transfer Protocol, puerto 119 TCP) se utiliza para intercambiar mensajes de grupos de noticias entre servidores de news. Los diferentes demonios encargados de esta tarea (como in.nntpd o innd) suelen discriminar conexiones en función de la dirección o el nombre de la máquina cliente; por ejemplo, el primero utiliza el fichero nntp_access para decidir si ofrece el servicio de news a un determinado host, y si es así concretar de que forma puede acceder a él (sólo lectura, sólo ciertos grupos...). De esta forma, los servidores NNTP son muy vulnerables a cualquier ataque que permita falsear la identidad de la máquina origen, como el IP Spoofing. Los problemas relacionados con las news no suelen ser excesivamente 115 graves desde un punto de vista estrictamente técnico, pero en ocasiones sí que lo son aplicando una visión global. Por ejemplo, habría que evaluar el daño que le supone a la imagen de nuestra organización el que un atacante envíe mensajes insultantes o pornográficos utilizando nuestro nombre o nuestros recursos. También es un problema la mala educación de los usuarios en materias de seguridad informática: tienden a creer todo lo que leen en ciertos grupos de noticias, por lo que un atacante podría utilizar ingeniería social para perjudicar a nuestra organización. Otra amenaza común es el uso de grupos de news privados (internos) para tratar información confidencial en la organización: esto es un error, ya que si la privacidad del servidor se ve comprometida un atacante puede obtener datos que a priori no estaría autorizado a saber. Realmente, es muy poco probable que necesitemos ofrecer este servicio, por lo que lo más razonable para nuestra seguridad es deshabilitarlo. Generalmente sólo existen servidores de noticias en grandes organizaciones como las universidades -, y además lo normal es que sólo haya uno por entidad. Si debemos administrar ese equipo la mejor forma de proteger el servicio NNTP es utilizando un buen cortafuegos ([GS96]). NTP NTP ( Network Time Protocol, puerto 123 UDP y TCP) es un protocolo utilizado para sincronizar relojes de máquinas de una forma muy precisa; a pesar de su sofisticación no fué diseñado con una idea de robustez ante ataques, por lo que 116 puede convertirse en una gran fuente de problemas ([Bis90]) si no está correctamente configurado o si no utilizamos versiones actualizadas de nntpd, el demonio que ofrece este servicio. Son muchos los problemas de seguridad relacionados con un tiempo correcto; el más simple y obvio es la poca fiabilidad que ofrecerá nuestro sistema de log a la hora de determinar cuándo sucedió determinado evento: aunque se registrara que alguien hizo un telnet a las tres de la tarde, no podríamos ni siquiera asegurar que la hora es correcta. Otro problema típico radica en las facilidades que ofrece Unix para la planificación de tareas: si el reloj tiene problemas, es posible que ciertas tareas no se lleguen a ejecutar, que se ejecuten varias veces, o que se ejecuten cuando no han de hacerlo; esto es especialmente peligroso para tareas de las que depende nuestra seguridad, como la rotación de logs. Si hablamos de problemas más sofisticados, podemos pensar en sistemas distribuidos, en los que una correcta sincronización entre nodos es básica para garantizar el correcto funcionamiento del sistema global ([Tan95], [CDK94]...); la sincronización es muy importantes en modelos de autenticación como Kerberos, que utiliza marcas de tiempo como pruebas de frescura para evitar ataques por reenvío. Como hemos visto, una correcta sincronización del reloj de nuestro equipo es vital para la seguridad; no obstante, muy pocos sistemas necesitan la precisión de NTP, por lo que es habitual tener este servicio deshabilitado. En la mayoría de ocasiones el propio reloj de la máquina, o un protocolo mucho más simple, como time, Operación de Sistema Operativo Multiusuario es más que suficiente para sincronizar equipos. UUCP UUCP ( Unix to Unix CoPy, puerto 540 TCP) es un servicio que, como su nombre indica, se utiliza para copiar ficheros entre máquinas Unix, generalmente a través de líneas telefónicas o redes de baja velocidad; aunque hoy en día apenas se utiliza, durante años ha sido la base de los sistemas de correo electrónico y de news (incluso hoy en día algunos sistemas UUCP son capaces de transmitir noticias de Usenet más eficientemente que la más moderna implementación de NNTP). Dos riesgos fundamentales amenazan a UUCP: al tratarse de una transmisión en texto claro, un potencial atacante puede tener acceso a información privada de los usuarios, vulnerando su privacidad. Evidentemente, en el caso de transmisión de news esto no es muy relevante, ya que todos los mensajes son en principio de acceso público, pero la cosa cambia si estamos transmitiendo correo electrónico. El segundo riesgo es incluso más preocupante que la pérdida de privacidad: las contraseñas de los usuarios también se transmiten en texto claro, con el consiguiente peligro que supone la interceptación por parte de un pirata de dichas claves. Aunque si utilizamos líneas telefónicas la probabilidad de que un sniffer capture los datos enviados es menor que si utilizamos una red TCP, en ambos casos el riesgo está presente. Como siempre, y dado que como hemos dicho UUCP no se suele utilizar hoy en día, lo más recomendable es deshabilitar este servicio; es más, dado que suele existir un usuario uucp en todo sistema Unix (por motivos simplemente de Operación de Sistema Operativo Multiusuario compatibilidad), hemos de estar atentos a los posibles problemas que dicho usuario pueda generar. Es necesario asegurarse que no se permiten conexiones bajo este nombre de usuario, que en su directorio $HOME no existen un fichero .rhosts...las precauciones habituales con cualquier nombre de usuario de este tipo que tengamos en nuestro sistema; incluso nos puede interesar sustituir su shell original (si lo tiene) por uno como /bin/false, para que un posible atacante que se haga pasar por uucp no tenga posibilidad de ejecutar órdenes en la máquina. Si estamos obligados a ofrecer conexiones vía UUCP en nuestro sistema, una buena referencia para conocer más detalles de este mecanismo y su seguridad es [OT88] (sólo su fecha nos da una idea del grado de desuso en que ha caído UUCP); otra excelente fuente de información sobre la seguridad - e inseguridad - de UUCP es el capítulo 15 de [GS96]. Una medida de protección básica es asignar un login y password diferente para cada sistema que conecte con el nuestro mediante este método; aparte de incrementar la seguridad - si un atacante averigua una clave sólo podrá utilizar un acceso, no todos - así conseguimos un mayor refinamiento a la hora de registrar los eventos que se produzcan en nuestro sistema, lo que es muy útil de cara a perseguir un abuso del servicio por parte de usuarios no autorizados. Además, en situaciones extremas podemos configurar los módems para realizar un callback cuando reciben una petición, lo que asegura que estamos llamando al sistema deseado y no a otro - siempre que un atacante no haya podido modificar esos números -. 117 El servicio FTP FTP (File Transfer Protocol, puerto 21 TCP) es, como su nombre indica, un protocolo de transferencia de ficheros entre sistemas. Desde un equipo cliente conectamos a un servidor para descargar ficheros desde él - lo habitual - o para enviarle nuestros propios archivos. Un problema básico y grave de FTP es que está pensado para ofrecer la máxima velocidad en la conexión, pero ni mucho menos para ofrecer la máxima seguridad; todo el intercambio de información, desde el login y password del usuario en el servidor hasta la transferencia de cualquier fichero, se realiza en texto claro, con lo que un atacante lo tiene muy fácil para capturar todo ese tráfico y conseguir así un acceso válido al servidor. Incluso puede ser una amenaza a la privacidad de nuestros datos el hecho de que ese atacante también pueda capturar y reproducir los ficheros transferidos. Para solucionar este problema es conveniente concienciar a nuestros usuarios de la utilidad de aplicaciones como scp y sftp, incluidas en el paquete SSH, que permiten transferir ficheros pero cifrando todo el tráfico; de esta forma, son el mejor sustituto de FTP. Parece evidente que la conexión FTP a nuestro sistema ha de estar restringida a los usuarios que realmente lo necesiten: por ejemplo, un usuario como root en principio no va a necesitar utilizar este servicio, ya que por lo general va a trabajar en consola; otros usuarios considerados ‘del sistema’ (donde se incluye por ejemplo a postmaster, bin, uucp, shutdown, daemon...) tampoco necesitarán hacer uso de FTP. Podemos indicar este tipo de usuarios a los que no les está permitida una conexión vía FTP a nuestra máquina 118 en /etc/ftpusers, con un nombre por línea; un ejemplo de este fichero es el siguiente: luisa:~# cat /etc/ftpusers halt operator root shutdown sync bin daemon adm lp mail postmaster news uucp man games guest postgres # ‘postgres’ NO hace ftp nobody inferno luisa:~# FTP anónimo Los problemas relacionados con la seguridad del servicio FTP son especialmente preocupantes cuando se trata de configurar un servidor de FTP anónimo; muchos de estas máquinas situadas en universidades españolas se convierten en servidores de imágenes pornográficas o de warez (copias ilegales de programas comerciales). Conseguir un servidor de FTP anónimo seguro puede llegar a ser una tarea complicada: incluso en las páginas de ayuda de algunas variantes de Unix (como Solaris) se trata de facilitar el proceso para el administrador mediante un shellscript que - por defecto - presenta graves problemas de seguridad, ya que deja una copia del fichero de claves del sistema como un archivo de acceso público y anónimo. Para configurar correctamente un servidor de Operación de Sistema Operativo Multiusuario este tipo necesitamos en primer lugar crear al usuario ftp en /etc/passwd y /etc/shadow, así como su directorio de conexión (algunos Unices, como Linux, ya incorporan esto al instalar el sistema). Este directorio ha de pertenecer a root (ningún fichero o subdirectorio ha de pertenecer nunca a ftp) y al grupo al que pertenece ftp: con esto conseguimos que los permisos de propietario sean para el administrador y los de grupo para los usuarios anónimos; estos permisos serán 555. Dentro del $HOME de ftp hemos de crear el árbol de directorios mínimo para poder trabajar correctamente; esto es debido a la llamada a chroot() que se utiliza en los accesos anónimos, que permite a esos usuarios ver el directorio raíz de su conexión en el directorio real ~ftp/. Al menos dos directorios son necesarios: etc/ y bin/, ambos propiedad de root y con modo 111. En el primero de ellos hemos de crear un fichero passwd y otro group, utilizados no con propósitos de autenticación sino para visualizar el propietario y grupo de cada fichero en el entorno sobre el que se ha aplicado chroot() al ejecutar ls: por tanto, no hace falta ninguna contraseña en ese fichero passwd, y sólo ha de contener entradas para los usuarios que posean ficheros bajo la jerarquía de ftp, como root; de la misma forma, el fichero group sólo ha de contener las entradas correspondientes a grupos que posean ficheros en dicha jerarquía: anita:~# cat /export/home/ftp/etc/passwd root:*:0:1:El Spiritu Santo:/:/sbin/sh anita:~# cat /export/home/ftp/etc/group root::0: other::1: daemon::2: ftp::30000: anita:~# Operación de Sistema Operativo Multiusuario Como vemos, el usuario ftp tiene un shell denominado /bin/false; aunque aquí no tiene ningún efecto, en el archivo de contraseñas real de la máquina esto es útil para prevenir que dicho usuario pueda conectar mediante TELNET o similar. Por su parte, en el otro directorio que hemos creado (bin/) hemos de almacenar una copia del programa ls, de forma que los usuarios puedan listar los contenidos de los directorios cuyos permisos lo permitan; si utilizamos una versión estática del programa, como hace por ejemplo Linux, no hemos de configurar nada para que la aplicación funcione, pero si en cambio utilizamos un ls dinámico (como SunOS o Solaris) hemos de crear el directorio lib/ dentro de ~ftp/ y copiar en él las librerías necesarias para que el programa funcione (podemos ver de cuáles se trata con ldd). Con estos pasos ya tenemos configurada la base de nuestro servidor de FTP anónimo; no obstante, es habitual crear dos directorios más, uno denominado pub/ y otro incoming/, dentro de la misma jerarquía que los anteriores (esto es, en el $HOME del usuario ftp). El primero suele contener directorios con todos los ficheros que deseemos ofrecer a los usuarios anónimos; su modo ha de ser 555, o 2555 en los sistemas que utilicen el bit setgid en un directorio para que sus subdirectorios y ficheros hereden el grupo del propietario. El directorio incoming es justo lo contrario: sirve para que esos usuarios anónimos puedan enviar archivos a nuestra máquina. Y es aquí donde suelen comenzar muchos problemas: al permitir el upload de software, es posible que algunos piratas utilicen nuestra máquina para crear servidores warez, subiendo programas comerciales a este 119 directorio y luego indicando su localización exacta a otras personas, para que los puedan descargar. Por tanto, los permisos de incoming son vitales para nuestra seguridad (incluso si no deseamos que los usuarios anónimos nos envíen ficheros podemos borrar este directorio): esos permisos han de ser 1733, y el propietario del directorio es el root. ¿Para qué ponemos el bit de permanencia? Muy sencillo: para que los usuarios no puedan sobreescribir o borrar ficheros existentes; aunque la mayoría de servidores FTP no permiten a los usuarios anónimos sobreescribir ficheros, si no pusiéramos este modo un usuario normal del sistema sí que podría hacerlo. El siguiente shellscript puede utilizarse para configurar cómodamente un entorno restringido destinado a los usuarios de ftp anónimo siguiendo las directrices que acabamos de comentar; funciona correctamente (en teoría) sobre Solaris, Linux y AIX 3. Al igual que sucede con muchas tareas automatizadas, conviene repasar manualmente la estructura de directorios y ficheros creados para comprobar que todo es como esperabamos: anita:~# cat /usr/local/sbin/creaentorno #!/bin/sh # Script para crear un entorno chroot()eado.# Funciona OK en Linux, Solaris y AIX.## Esta variable es una lista con los programas que necesitamos en el# entorno restringido.PROGS=»/bin/ls»# Imprime modo de usoif (test $# -lt 1); then echo «Usage: $0 /path/to/chroot-environment» exitfi# Detectamos clon de UnixOS=`uname -s`# Creamos estructura 120 de directoriosecho «Creando estructura de directorios para $OS»if [ ! -d $1 ]; then mkdir -p $1fichown root $1for i in bin etc; do if [ ! -d $1/$i ] ; then mkdir -p $1/$i fi chown root $1/$idone# En funcion del Unix, la estructura sera una u otra...if [ $OS = «Linux» ]; then if [ ! -d $1/lib ]; then mkdir -p $1/lib fi chown root $1/li fi if ( test $OS = «SunOS» || test $OS = «AIX» ); then if [ ! -d $1/usr/lib ]; then mkdir -p $1/usr/lib fi chown root $1/usr/lib cd $1 ln -s ./usr/lib $1/lib fi # Instalamos programas y las librerias que necesitan echo «Instalando programas y librerias...» for i in $PROGS; do if [ ! -f $1/$i ]; then cp $i $1/bin fi chmod 111 $1/bin chown root $1/bin if [ $OS = «AIX» ]; then for j in ‘ldd $i|awk -F»(« ‘{if(NR!=1) print $1}’‘; do if [ ! -f $1/$j ]; then cp $j $1/lib fi chown root $1/$j done else for j in ‘ldd $i|awk ‘{print $3}’‘; do if [ ! -f $1/$j ]; then cp $j $1/lib fi chown root $1/$j done fi done # Estos ficheros quizas sea necesario retocarlos a mano, en funcion del tipo # de entorno restringido que fabriquemos. # Generamos PASSWD Operación de Sistema Operativo Multiusuario echo «Generando /etc/passwd...» awk -F: ‘$1==»root» {print $1":*:»$3":»$4":»$5":»$6":»$7}’ /etc/passwd >\ $1/etc/passwd awk -F: ‘$1==»bin» {print $1":*:»$3":»$4":»$5":»$6":»$7}’ /etc/passwd>>\ $1/etc/passwd awk -F: ‘$1==»daemon» {print $1":*:»$3":»$4":»$5":»$6":»$7}’ /etc/passwd>>\ $1/etc/passwd chmod 444 $1/etc/passwd chown root $1/etc/passwd # Quizas hay que anyadir otros grupos que nos interesen # Generamos GROUP con algunas entradas echo «Generando /etc/group...» awk -F: ‘$1==»root» {print $1":*:»$3":»$4}’ /etc/group>$1/etc/group awk -F: ‘$1==»bin» {print $1":*:»$3":»}’ /etc/group>>$1/etc/group awk -F: ‘$1==»daemon» {print $1":*:»$3":»}’ /etc/group>>$1/etc/group chmod 444 $1/etc/group chown root $1/etc/group # Generamos pub/ e incoming/ echo «Generando pub/ e incoming/...» if [ ! -d $1/pub ]; then mkdir -p $1/pub fi chmod 2555 $1/pub chown root $1/pub if [ ! -d $1/incoming ]; then mkdir -p $1/incoming fi chmod 1733 $1/incoming chown root $1/incoming # Si estamos en Solaris, aun no hemos acabado if [ $OS = «SunOS» ]; then # Mas librerias echo «$OS: Instalando librerias...» for i in ld.so.1 libc.so.1 libdl.so.1 libmp.so.2 libnsl.so.1 \ libsocket.so.1 nss_compat.so.1 nss_dns.so.1 nss_files.so.1 \ nss_nis.so.1 nss_nisplus.so.1 nss_xfn.so.1 straddr.so \ straddr.so.2; do cp /usr/lib/$i $1/usr/lib done if [ ! -d $1/dev ]; then mkdir -p $1/dev fi Operación de Sistema Operativo Multiusuario chown root $1/dev # Generamos dispositivos echo «$OS: Generando dispositivos...» for i in /dev/zero /dev/tcp /dev/udp /dev/ticotsord; do MAJOR=‘ls -lL $i|awk ‘{print $5}’|sed s/»,»//g‘ MINOR=‘ls -lL $i|awk ‘{print $6}’‘ TYPE=‘ls -lL $i|cut -c1-1‘ mknod $1/$i $TYPE $MAJOR $MINOR done chmod 666 $1/dev/* fi echo «FIN» # FIN de Solaris anita:~# Algunos problemas relacionados con incoming/ provienen de los permisos con que se crean sus ficheros y subdirectorios: aunque los usuarios anónimos no puedan leer el directorio, con algunos servidores ftpd sí que es posible que puedan leer los ficheros contenidos en él (y sus subdirectorios), con lo que sigue siendo posible acceder a los archivos conociendo su nombre exacto; para evitar este problema, muchos administradores planifican un sencillo shellscript para que cada cierto tiempo mueva los contenidos de incoming a otro lugar, fuera del alcance de los usuarios anónimos (por ejemplo, un subdirectorio con modo 000 de /tmp/). Ciertos servidores, como WUftpd, tienen un fichero de configuración (/etc/ftpaccess) donde indicar - entre otras cosas - los modos con que se van a crear entradas en incoming/. Otro ataque típico a los servidores de FTP es una negación de servicio llenando todo el espacio disponible para el upload de ficheros; para minimizar las consecuencias de este ataque, es conveniente situar el directorio ~ftp/ en una partición separada del resto del sistema de ficheros, donde sólo se encuentre dicho directorio; algunos demonios permiten directamente limitar 121 la cantidad de ficheros subidos al servidor en cada sesión. Por último, es una buena idea mostrar un mensaje cuando los usuarios anónimos conectan a nuestra máquina donde se indiquen claramente los fines del sistema y la atención a su uso indebido; este mensaje puede sernos útil tanto con fines jurídicos (así el atacante no podrá argumentar que desconocía la finalidad del sistema) como con fines disuasorios: si el pirata se da cuenta de que nos preocupamos por la seguridad de nuestro servidor, es posible que lo abandone y busque otro menos protegido. Por ejemplo, si utilizamos WUftpd, en ~ftp/welcome.msg podemos escribir el mensaje mostrado al conectar al sistema, y en diferentes ficheros .message el mensaje que se vuelca a acceder a un directorio (estos nombres son configurables en /etc/ftpaccess). Un ejemplo del mensaje de entrada puede ser el siguiente: anita:~# cat /export/home/ftp/welcome.msg * * * ANITA *** ———— Bienvenid@s a ANITA ———— Esta maquina es propiedad de la Universidad Politecnica de Valencia y sus fines son exclusivamente academicos y de investigacion. Cualquier otro uso sera perseguido y castigado con el maximo rigor. Cualquier actividad realizada en, desde o hacia este sistema esta sujeta a monitorizacion sin previo aviso. anita:~# El servicio TELNET El protocolo TELNET (TCP, puerto 23) permite utilizar una máquina como 122 terminal virtual de otra a través de la red, de forma que se crea un canal virtual de comunicaciones similar - pero mucho más inseguro - a utilizar una terminal físicamente conectada a un servidor; la idea es sencilla: estamos accediendo remotamente en modo texto a un equipo - en principio potente - igual que si estuviéramos utilizando su consola o una de sus terminales físicas, lo que nos permite aprovechar toda su potencia de cálculo si necesidad de desplazarnos hasta la ubicación de ese servidor, sino trabajando cómodamente desde nuestro propio equipo. TELNET es el clásico servicio que hasta haceunos años no se solía deshabilitar nunca: no es habitual adquirir una potente máquina corriendo Unix y permitir que sólo se trabaje en ella desde su consola; lo más normal es que este servicio esté disponible para que los usuarios puedan trabajar remotamente, al menos desde un conjunto de máquinas determinado. Evidentemente, reducir al mínimo imprescindible el conjunto de sistemas desde donde es posible la conexión es una primera medida de seguridad; no obstante, no suele ser suficiente: recordemos que TELNET no utiliza ningún tipo de cifrado, por lo que todo el tráfico entre equipos se realiza en texto claro. Cualquier atacante con un analizador de red (o un vulgar sniffer) puede capturar el login y el password utilizados en una conexión; el sniffing siempre es peligroso, pero más aún en sesiones TELNET en las que transmitimos nombres de usuarios y contraseñas: estamos otorgando a cualquiera que lea esos datos un acceso total a la máquina destino, bajo nuestra identidad. Por tanto, es muy recomendable no utilizar TELNET para conexiones remotas, sino Operación de Sistema Operativo Multiusuario sustituirlo por aplicaciones equivalentes pero que utilicen cifrado para la transmisión de datos: SSH o SSL-Telnet son las más comunes. En estos casos necesitamos además de la parte cliente en nuestro equipo, la parte servidora en la máquina remota escuchando en un puerto determinado. Aparte del problema de los atacantes esnifando claves, los demonios telnetd han sido también una fuente clásica de problemas de programación (se puede encontrar un excelente repaso a algunos de ellos en el capítulo 29 de [Ano97]); básicamente, cualquier versión de este demonio que no esté actualizada es una potencial fuente de problemas, por lo que conviene conseguir la última versión de telnetd para nuestro Unix particular, especialmente si aún tenemos una versión anterior a 1997. Otros problemas, como la posibilidad de que un atacante consiga recuperar una sesión que no ha sido cerrada correctamente, el uso de telnet para determinar qué puertos de un host están abiertos, o la utilización del servicio TELNET (junto a otros, como FTP) para averiguar el clon de Unix concreto (versión de kernel incluida) que un servidor utiliza, también han hecho famosa la inseguridad de este servicio. Antes hemos hablado de la configuración de un entorno restringido para usuarios ftp invitados, que accedían mediante su login y su contraseña pero que no veían la totalidad del sistema de ficheros de nuestra máquina. Es posible -aunque ni de lejos tan habitual- hacer algo parecido con ciertos usuarios interactivos, usuarios que conectarán al sistema mediante telnet utilizando también su login y su password, pero que no verán el sistema Operación de Sistema Operativo Multiusuario de ficheros completo: sólo la parte que a nosotros nos interese (en principio). Para que un usuario acceda mediante telnet a un entorno restringido con chroot() necesitamos en primer lugar un entorno parecido al que hemos visto antes: a partir de su directorio $HOME, una serie de subdirectorios bin/, lib/, etc/. . . Dentro de este último existirá al menos un fichero group y otro passwd (igual que sucedía antes, no se usan con propósitos de autenticación, por lo que no es necesario -ni recomendable- que existan claves reales en ninguno de ellos). En el directorio bin/ incluiremos los ejecutables que queremos que nuestro usuario pueda ejecutar, y en lib/ (o usr/lib/) las librerías que necesiten; si usamos el shellscript anterior -de nuevo, con alguna pequeña modificación- para crear este entorno, en la variable $PROGS podemos definir tales ejecutables para que automáticamente se copien junto a las librerías necesarias en el directorio correspondiente: PROGS=»/bin/ls /bin/sh» Finalmente, en el archivo /etc/passwd real hemos de definir un shell para el usuario como el siguiente: luisa:~# cat /home/toni/prog/shell.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <pwd.h> #define SHELL «/bin/sh» int main(){ struct passwd *entry=(struct passwd *)malloc(sizeof(struct passwd)); char *const ARGS[2]={SHELL,NULL}; while((entry=getpwent())->pw_uid!=getuid()); endpwent(); if(chdir(entry->pw_dir)<0) perror(«chdir()»); if(chroot(entry->pw_dir)<0) perror(«chroot()»); if(setuid(getuid())<0) perror(«setuid()»); 123 if(execvp(SHELL,ARGS)<0) perror(«execvp()»); // No alcanzado return(0); } luisa:~# Este código, convenientemente compilado, será el shell real del usuario restringido; como vemos, obtiene el directorio $HOME del mismo, hace un chroot() a él, y ejecuta en este entorno el shell secundario (bin/sh, que realmente será $HOME/bin/sh). Para que el chroot() sea correcto el programa ha de estar setuidado bajo la identidad de root (sólo el superusuario puede realizar esta llamada), con los riesgos que esto implica; al contrario de lo que diría Knuth, yo sólo defiendo que el código anterior funciona, no que sea correcto... o seguro :) Si tenemos que crear un entorno como este para usuarios interactivos hemos de tener en cuenta ciertas medidas de seguridad relativas a los ejecutables que situemos -o que permitamos situar- en dicho entorno. Para empezar, hemos de evitar a toda costa los ejecutables setuidados, así como las llamadas mknod(), chmod() o la propia chroot(); además, no debe ser posible obtener privilegios de administrador dentro del entorno restringido, ya que para el root estas restricciones pierden su sentido: no tenemos más que pensar que si un usuario con privilegios de root dentro del entorno es capaz de generar un dispositivo que represente un disco duro, con algo tan sencillo como la utilidad mknod, automáticamente accederá a la totalidad de ese disco, olvidando ya el chroot() y la potencial protección que pueda ofrecernos. Algo similar ocurre con 124 la memoria del sistema, ciertos dispositivos físicos, o estructuras de datos del núcleo: si esto es accesible desde el entorno restringido, es muy probable que nuestra seguridad se vea rota tarde o temprano (más bien temprano). -Tampoco es aconsejable permitir la ejecución de compiladores de C o de intérpretes de Perl. Como hemos dicho, este tipo de entornos es mucho menos habitual que los de ftp, aparte de bastante más peligrosos. Una tarea tan habitual como cambiar la contraseña no es posible -al menos de forma trivial- en este entorno (aunque podríamos modificar el código anterior para que se ofrezca al usuario esta posibilidad antes de situarlo en el entorno restringido). ¿Y que sucede si necesitamos que el usuario acceda no a un sólo directorio, sino a dos? Las soluciones -al menos las seguras- no son inmediatas. El servicio SMTP El servicio SMTP ( Simple Mail Transfer Protocol, puerto 25 TCP) se utiliza para transferir correo electrónico entre equipos remotos; estas máquinas pueden ubicarse físicamente en la misma sala, en la misma universidad, o en la otra parte del mundo, a miles de kilómetros de distancia. Este servicio suele ser atendido por un demonio denominado sendmail, que ha sido uno de los que más problemas de seguridad ha tenido a lo largo de la historia de Unix; y no es para menos: se trata de un software muy complejo y potente - incluso demasiado para las necesidades de la mayoría de servidores -, Operación de Sistema Operativo Multiusuario por lo es inevitable que en su código existan bugs; para hacernos una idea del grado de complejidad de sendmail simplemente tenemos que echarle un vistazo a su fichero de configuracion principal, /etc/sendmail.cf. Existen incluso libros casi dedicados exclusivamente a este archivo ([CA97a], [CA97b]...). Una medida de protección básica para nuestro servicio SMTP, y que muchos administradores desconocen, es la posibilidad de servir sendmail desde inetd en lugar de hacerlo como un demonio independiente, y por tanto poder restringir el acceso al mismo mediante TCP Wrappers. En la mayoría de organizaciones existe un servidor de correo principal que es el encargado de recoger el mail para todas las direcciones ‘*@*.upv.es’; el resto de equipos sólo recibirán correo desde este equipo - o desde otro que sirve sólo a un subdominio, y que a su vez recibe sólo desde el principal -. Entonces, parece claro que si nuestro sendmail sólo recibe correo válido desde una máquina, lo lógico es configurarlo para que sólo acepte peticiones desde ella: en lugar de lanzar el demonio al arrancar el sistema, en uno de los scripts de /etc/rc.d/ o similar, lo serviremos desde inetd. Para esto necesitamos en primer lugar modificar el script correspondiente para que sendmail no se lance como demonio en el arranque: en lugar de invocarlo como ‘sendmail -bd -q15m’ lo haremos como ‘sendmail -q15m’. Ademas, es necesario identificar el servicio en /etc/services, con una línea como la siguiente: luisa:~# grep smtp /etc/services smtp 25/tcp mail luisa:~# Operación de Sistema Operativo Multiusuario Tras reconocer el servicio, hemos de añadir una línea en /etc/inetd.conf indicando cómo se ha de ejecutar sendmail cuando inetd reciba una petición en el puerto 25; dicha línea es similar a la siguiente: luisa:~# grep smtp /etc/inetd.conf smtp stream tcp nowait root /usr/sbin/tcpd sendmail -bs luisa:~# Una vez realizados estos cambios podemos controlar el acceso a nuestro servicio SMTP mediante TCP Wrappers; por ejemplo, en el caso de la Universidad Politécnica, el servidor de correo principal se denomina vega.cc.upv.es. Para que sólo esta máquina nos pueda enviar correo, incluiremos una línea como la siguiente en /etc/hosts.allow: luisa:~# grep sendmail /etc/hosts.allow sendmail: vega.cc.upv.es luisa:~# El resto de sistemas no han de estar autorizados a conectar al puerto; esto incluye también a la máquina local: para un correcto funcionamiento de nuestro sistema de correo, ni siquiera hace falta que localhost tenga permiso para acceder a su puerto 25. En [Gon97] se explica cómo combinar estas restricciones ofrecidas por TCP Wrappers con un cortafuegos como TIS Firewall Toolkit; en esta obra también se habla con más detalle de los problemas que puede implicar el correo electrónico, y por supuesto de cómo solucionarlos. Evidentemente, esto es aplicable a sistemas que reciban correo de un único mailer; si debemos configurar el propio mailer de la organización, que por lo general recibirá correo de un número 125 indeterminado de máquinas, no podemos bloquear el acceso a su sendmail de esta forma. No obstante, en este caso podemos aplicar unas medidas de seguridad simples, como realizar una consulta inversa a DNS para asegurarnos de que sólo máquinas registradas envían correo o no permitir que nuestro sistema reenvíe correo que no provenga de direcciones registradas bajo su dominio. Estas medidas, básicas para evitar problemas de spam y mail bombing, son necesarias en la configuración de los sistemas de cualquier entidad. Servidores WWW Hoy en día las conexiones a servidores web son sin duda las más extendidas entre usuarios de Internet, hasta el punto de que muchas personas piensan que este servicio (HTTP, puerto 80 TCP) es el único que existe en la red - junto al IRC -. Lo que en un principio se diseñó para que unos cuantos físicos intercambiaran y consultaran artículos fácilmente, en la actualidad mueve a diario millones de dólares y es uno de los pilares fundamentales de cualquier empresa: es por tanto un objetivo muy atractivo para cualquier pirata. Los problemas de seguridad relacionados con el protocolo HTTP se dividen en tres grandes grupos en función de los datos a los que pueden afectar ([GS97]): Seguridad en el servidor. Es necesario garantizar que la información almacenada en la máquina servidora no pueda ser modificada sin autorización, que permanezca disponible y que sólo pueda 126 ser accedida por los usuarios a los que les esté legítimamente permitido. Seguridad en la red. Cuando un usuario conecta a un servidor web se produce un intercambio de información entre ambos; es vital garantizar que los datos que recibe el cliente desde el servidor sean los mismos que se están enviando (esto es, que no sufran modificaciones de terceros), y también garantizar que la información que el usuario envía hacia el servidor no sea capturada, destruida o modificada por un atacante. Esto es especialmente importante si la información en tránsito es secreta, como en el caso de los passwords que el usuario teclea para autenticarse en el servidor, o en el comercio electrónico y el intercambio de números de tarjetas de crédito. Seguridad en el cliente. Por último es necesario garantizar al usuario que lo que descarga de un servidor no va a perjudicar a la seguridad de su equipo; sin llegar a extremos de applets maliciosos o programas con virus, si simplemente el navegador del usuario ‘se cuelga’ al acceder al visitar las páginas de una organización, seguramente esa persona dejará de visitarlas, con la consecuente pérdida de imagen - y posiblemente de un futuro cliente - para esa entidad. Asegurar el servidor implica - aparte de las medidas habituales para cualquier máquina Unix - medidas excepcionales dedicadas al demonio servidor de web y su entorno de trabajo; estas medidas son propias para cada programa servidor, por Operación de Sistema Operativo Multiusuario lo que aquí no en traremos en detalles concretos sobre cada uno de ellos. No obstante, y sea cual sea el servidor utilizado (Apache, NCSA, Netscape...), es necesario seguir un consejo básico: minimizar el número de usuarios en la máquina y minimizar el número de servicios ofrecidos en ella; aunque lo normal es que una máquina dedicada a cualquier tarea con decenas - o con miles - de usuarios sea también el servidor web, es recomendable que dicho servidor sea un equipo dedicado a esa tarea. Los problemas relacionados con servidores web suelen proceder de errores de programación en los CGIs ubicados en el servidor. Un CGI ( Common Gateway Interface) es un código capaz de comunicarse con aplicaciones del servidor, de forma que desde una página se invoque a dichas aplicaciones pasándoles argumentos y el resultado se muestre en el navegador de un cliente; cuando rellenamos un formulario, vemos una imagen sensible, o simplemente incrementamos el contador de cierta página, estamos utilizando CGIs. Esta capacidad del CGI para comunicarse con el resto del sistema que alberga las páginas es lo que le otorga su potencia, pero también lo que causa mayores problemas de seguridad: un fallo en estos programas suele permitir a cualquier visitante de las páginas ejecutar órdenes en el sistema. Los errores más habituales en un CGI provienen de los datos recibidos desde el navegador del cliente: un simple formulario, en el que el visitante rellena ciertos campos, puede ser una puerta de acceso a nuestro sistema; es necesario comprobar la validez de todos y cada uno de los datos leídos antes de que sean procesados. Por ejemplo, Operación de Sistema Operativo Multiusuario imaginemos un CGI que pida un nombre de usuario por teclado y a continuación ejecute un finger contra ese nombre de usuario y muestre el resultado en el traremos en detalles concretos sobre cada uno de ellos. No obstante, y sea cual sea el servidor utilizado (Apache, NCSA, Netscape...), es necesario seguir un consejo básico: minimizar el número de usuarios en la máquina y minimizar el número de servicios ofrecidos en ella; aunque lo normal es que una máquina dedicada a cualquier tarea con decenas o con miles - de usuarios sea también el servidor web, es recomendable que dicho servidor sea un equipo dedicado a esa tarea. Los problemas relacionados con servidores web suelen proceder de errores de programación en los CGIs ubicados en el servidor. Un CGI ( Common Gateway Interface) es un código capaz de comunicarse con aplicaciones del servidor, de forma que desde una página se invoque a dichas aplicaciones pasándoles argumentos y el resultado se muestre en el navegador de un cliente; cuando rellenamos un formulario, vemos una imagen sensible, o simplemente incrementamos el contador de cierta página, estamos utilizando CGIs. Esta capacidad del CGI para comunicarse con el resto del sistema que alberga las páginas es lo que le otorga su potencia, pero también lo que causa mayores problemas de seguridad: un fallo en estos programas suele permitir a cualquier visitante de las páginas ejecutar órdenes en el sistema. Los errores más habituales en un CGI provienen de los datos recibidos desde el navegador del cliente: un simple formulario, en el que el visitante rellena ciertos campos, puede ser una puerta de acceso a nuestro sistema; 127 es necesario comprobar la validez de todos y cada uno de los datos leídos antes de que sean procesados. Por ejemplo, imaginemos un CGI que pida un nombre de usuario por teclado y a continuación ejecute un finger contra ese nombre de usuario y muestre el resultado en el sigue siendo una excelente opción para administración remota y para transmitir información confidencial en redes de propósito general. En último lugar es necesario hablar de la seguridad desde el punto de vista del cliente que visita páginas web; para el usuario, un servidor es seguro si protege la información que recibe y envía hacia él, manteniendo su privacidad, y si no conduce al usuario a descargar programas maliciosos - generalmente virus - en su equipo; si sucede lo contrario, la compañía responsable de las páginas se enfrenta a una importante pérdida de imagen - aparte de posibles problemas judiciales - de cara a sus usuarios: simplemente imaginemos que salta a los medios un fallo de seguridad en la versión electrónica de cierto banco; será difícil que todos sus usuarios sigan manteniendo la suficiente confianza en él como para guardar allí su dinero. También es necesario hablar de los applets hostiles - o simplemente de los mal diseñados - que en muchas ocasiones llegan a detener todas las copias del navegador en memoria; aunque sus implicaciones de seguridad no suelen ser muy graves, la pérdida de imagen de la compañía es también considerable en estos casos. En muy pocas máquinas se pueden permitir el lujo de deshabilitar este servicio, ya que como hemos dicho es de los más utilizados actualmente; no obstante, por alguna extraña razón personalmente no la llego a comprender en algunos clones de Unix (por ejemplo, ciertas variantes de Linux) el servicio HTTP está activado por defecto aún a sabiendas de que muchos de los usuarios de este sistema van a utilizarlo en su casa o como estación de trabajo independiente, donde evidentemente no es habitual - ni necesario en la mayoría de ocasiones ofrecerlo. Por supuesto, en estos casos es importante detener el demonio httpd y evitar que se vuelva a iniciar con el arranque de la máquina, modificando el script correspondiente. Siempre hemos de recordar que hemos de ofrecer sólo los servicios imprescindibles en cada sistema. Los servicios rLos servicios r-* de Unix BSD (aparecieron inicialmente en la versión 4.2 de esta variante de Unix) son herramientas con una parte cliente y una servidora que permiten la conexión remota entre máquinas, principalmente para servicios de terminal remota y transferencia de ficheros. Las herramientas clientes son rsh, rlogin y rcp, mientras que las servidoras son demonios como rexecd, rshd o rlogind (en algunas versiones de Unix, con in. delante del nombre del demonio); rdist y rdistd, otro par de estas herramientas r-*, no los vamos a tratar aquí. rlogin (puerto 513, TCP) se utiliza como terminal virtual de un sistema Unix , de 128 Operación de Sistema Operativo Multiusuario una forma muy parecida a TELNET. rsh (puerto 514, TCP) es utilizado para ejecutar comandos en una máquina remota sin necesidad de acceder a ella, y rcp (vía rsh) para copiar ficheros entre diferentes máquinas: luisa:~# rlogin -l toni rosita Overflow on /dev/null, please empty the bit bucket. rosita:~$ exit logout rlogin: connection closed. luisa:~# rsh -l toni rosita id uid=1000(toni) gid=100(users) groups=100(users) luisa:~# rcp prueba.tex toni@rosita:/tmp/ luisa:~# Como vemos, la última orden no ha solicitado ninguna contraseña; ha copiado el fichero local ‘prueba.tex’ en el directorio /tmp/ del sistema remoto, bajo la identidad del usuario toni. A continuación veremos por qué no se ha pedido clave para realizar esta acción. Estos servicios pretenden evitar el tránsito de contraseñas por la red, ya que este movimiento de claves implica molestias a los usuarios y también problemas de seguridad; para conseguirlo, entran en juego lo que los diseñadores del sistema de red de Unix BSD denominaron ‘máquinas fiables’ y ‘usuarios fiables’: cualquier usuario, puede hacer uso de recursos de una máquina remota sin necesidad de una clave si su conexión proviene de una máquina fiable o su nombre de usuario es fiable. Una máquina se puede considerar fiable de dos formas: o bien su nombre se encuentra en /etc/hosts.equiv, o bien se encuentra en un fichero denominado Operación de Sistema Operativo Multiusuario .rhosts y situado en el $HOME de algún usuario. Si estamos en el primer caso, cualquier usuario (excepto el root) del sistema remoto - y fiable - puede hacer acceder a nuestro equipo bajo el mismo login que tiene en el primero, sin necesidad de claves. En el segundo caso, utilizando los ficheros .rhosts, cualquier usuario del sistema remoto podrá conectar al nuestro pero sólo bajo el nombre de usuario en cuyo $HOME se encuentra el archivo. Por ejemplo, imaginemos la siguiente configuración: rosita:~# cat /etc/hosts.equiv luisa rosita:~# cat ~toni/.rhosts anita rosita:~# En esta situación, cualquier usuario de luisa puede acceder a rosita si su nombre de usua rio es el mismo; además, el usuario toni de anita puede también conectar a rosita sin necesidad de ninguna contraseña: anita:~$ rlogin rosita In the long run, every program becomes rococo, and then rubble. — Alan Perlis rosita:~$ id uid=1000(toni) gid=100(users) groups=100(users) rosita:~$ Aparte de máquinas fiables habíamos hablado de usuarios fiables; la idea es la misma que antes, pero aplicándola ahora a nombres de usuario junto a (o en lugar de) nombres de máquina. Podemos indicar estos nombres tanto en /etc/hosts.equiv como en los archivos .rhosts; no obstante, la primera opción no es recomendable, ya que estaríamos permitiendo al usuario fiable del sistema 129 remoto acceder sin contraseña a cualquier cuenta de nuestra máquina. De esta forma, si deseamos crear usuarios fiables de sistemas remotos, es necesario hacerlo en los archivos .rhosts. Por ejemplo, imaginemos que el usuario toni de nuestra máquina tiene un nombre de usuario distinto ( antonio) en un sistema remoto, y desea establecer una relación de confianza; para ello creará en su $HOME el siguiente archivo .rhosts: rosita:~# cat ~toni/.rhosts amparo antonio rosita:~# Entonces, desde la máquina amparo el usuario antonio podrá acceder a la cuenta de toni en nuestro sistema sin utilizar contraseñas: amparo:~$ id uid=102(antonio) gid=10(staff) amparo:~$ rlogin -l toni rosita It is practically impossible to teach good programming style to students that have had prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration. — Dijkstra rosita:~$ id uid=1000(toni) gid=100(users) groups=100(users) rosita:~$ Como podemos ver, las relaciones de confianza entre equipos Unix pueden ser muy útiles y cómodas, pero al mismo tiempo muy peligrosas: estamos confiando plenamente en sistemas remotos, por lo que si su seguridad se ve comprometida también se ve la nuestra. Las máquinas fiables se han de reducir a equipos de la misma organización, y 130 administrados por la misma persona; además, es necesario tener siempre presente que si tenemos habilitados los servicios r-* cualquier usuario puede establecer relaciones de confianza, lo que puede suponer una violación de nuestra política de seguridad. Es conveniente chequear los directorios $HOME en busca de ficheros .rhosts (en la sección 10.2.6 se presentaba un shellscript que convenientemente planificado puede ayudarnos en esta tarea); muchos administradores prefieren no complicarse buscando estos ficheros, y configuran sus sistemas para que en cada $HOME exista un fichero con este nombre, propiedad de root y con modo 000: así los usuarios no tienen ocasión de otorgar confianza a sistemas remotos. Esto se puede conseguir con el siguiente shellscript: #!/bin/sh for i in ‘cat /etc/passwd |awk -F: ‘{print $6}’‘; do cd $i > .rhosts chmod 0 .rhosts done Las relaciones de confianza son transitivas: si una máquina confía en otra, lo hace también en todas en las que confía ella. De esta forma se crean anillos de confianza entre máquinas, y como las relaciones suelen estar basadas en el nombre del equipo se trata de objetivos ideales para un atacante mediante IP Spoofing: si un pirata consigue hacer pasar su equipo por uno de los confiables, automáticamente ha conseguido acceso casi ilimitado - al resto de las máquinas. X Window El entorno X Window proporciona herramientas increíblemente potentes, Operación de Sistema Operativo Multiusuario pero que si no son correctamente configuradas pueden convertirse en peligrosas. Este sistema está formado por una serie de piezas que trabajan conjuntamente para ofrecer al usuario final un interfaz gráfico: La más importante de ellas, sobre todo desde el punto de vista de la seguridad es el servidor X. Este programa generalmente se ejecuta en la terminal de usuario, y tiene como función principal ofrecer unas primitivas básicas de dibujo (trazado de rectas, relleno de áreas...) sobre la pantalla; además gestiona eventos de teclado y ratón. Las aplicaciones X son programas de usuario que lanzan llamadas contra un servidor X. Mientras que el servidor se ejecuta habitualmente en la terminal desde donde conecta el usuario las aplicaciones se pueden lanzar desde el mismo equipo o también desde una máquina más potente, de forma que aprovechamos la capacidad de procesamiento de ese equipo pero visualizamos el resultado en la terminal gráfica; en este caso se ha de indicar a los clientes la ubicación del servidor, mediante la variable de entorno $DISPLAY o mediante la opción de línea de comandos ‘-display’. El gestor de ventanas es un caso particular de aplicación, ya que se encarga de ofrecer un entorno de trabajo más amigable al usuario que está trabajando en la terminal: dibujo de marcos, menús, cerrado de ventanas. Es el servidor X Window quien establece su política de seguridad para permitir a determinados clientes utilizar sus servicios. Para ello existen dos mecanismos básicos: la autenticación por Operación de Sistema Operativo Multiusuario testigo y la autenticación por máquina ([Fis95]; otros esquemas, como SUN-DES1, no los vamos a contemplar aquí. Autenticación por máquina La autenticación por máquina cliente ( host authentication) es el mecanismo más simple, pero la seguridad que proporciona es muy limitada; es útil en entornos donde los clientes X se ejecutan o bien en estaciones monousuarios o bien en equipos donde todos los usuarios son confiables ([Vic94]). Además, en sistemas antiguos es el único modelo de seguridad disponible, por lo que en ocasiones no queda más remedio que limitarse a él. Funciona configurando el servidor para permitir conexiones a él provenientes de una lista de máquinas, por ejemplo con la orden xhosts: anita:~# xhost +luisa luisa being added to access control list anita:~# Si ejecutamos la sentencia anterior en la máquina donde se ejecuta el servidor, cualquier usuario del sistema remoto estará autorizado a lanzar aplicaciones contra él12.3: luisa:~# xterm -display anita:0.0 & [1] 11974 luisa:~# La orden xhost sin opciones nos dará una lista de los clientes que pueden lanzar aplicaciones contra el servidor, mientras que la opción especial ‘+’ deshabilitará este control de acceso, algo que evidentemente no es recomendable: cualquier usuario de cualquier sistema podrá utilizar nuestro servidor: anita:~# xhost access control enabled, only authorized clients can connect LOCAL: INET:anita 131 INET:localhost INET:luisa anita:~# xhost + access control disabled, clients can connect from any host anita:~# xhost access control disabled, clients can connect from any host LOCAL: INET:anita INET:localhost INET:luisa anita:~# Una medida de seguridad básica utilizando este modelo es habilitar la máquina en nuestra lista de hosts sólo el tiempo necesario para que el cliente arranque, y deshabilitarla después; así la ejecución de la aplicación cliente funcionará normalmente, pero no se podrán lanzar nuevas peticiones al servidor. También para eliminar una dirección de la lista utilizamos la orden xhost: anita:~# xhost access control enabled, only authorized clients can connect LOCAL: INET:anita INET:localhost INET:luisa anita:~# xhost -luisa luisa being removed from access control list anita:~# xhost access control enabled, only authorized clients can connect LOCAL: INET:anita INET:localhost anita:~# De esta forma, cuando alguien intente lanzar una aplicación contra nuestro servidor desde un sistema no autorizado verá un mensaje de error similar al siguiente: 132 luisa:~# xterm -display anita:0.0 Xlib: connection to «anita:0.0» refused by server Xlib: Client is not authorized to connect to Server Error: Can’t open display: anita:0.0 luisa:~# Como hemos dicho, este modelo de seguridad es demasiado vulnerable; por un lado, estamos autenticando clientes en base a una dirección o a un nombre de máquina, algo fácilmente falsificable por un atacante. Por otro, aunque los usuarios de los sistemas a los que permitimos utilizar nuestro servidor sean conocidos, fiables, y amantes de la naturaleza, nada nos demuestra que sus sistemas sean seguros, por lo que si sus equipos se ven comprometidos, nuestro servidor también. Autenticación por testigo Este mecanismo de X Window es el más seguro, y por tanto el más recomendado; en él, el servidor controla el acceso de los clientes mediante una ‘cookie’ MITMAGIC-COOKIE-1, que no es más que un código de acceso aleatorio de 128 bits en un formato legible por la máquina: esta cookie actua como un password temporal, de forma que sólo los clientes que conozcan ese password podrán acceder al servidor. La cookie es generada por xdm o por el propio usuario al principio de cada sesión, con xauth, y guardada en el fichero $HOME/.Xauthority; a partir de ese momento, los programas clientes leerán su valor y lo enviarán al servidor cada vez que deseen conectar a él. Podemos comprobar que poseemos - al menos - la cookie correspondiente a nuestro display con una orden como la siguiente: luisa:~# xauth list Operación de Sistema Operativo Multiusuario luisa:0 MIT-MAGIC-COOKIE-1 8c1d09aab44573a524467c4e8faaaeb5 luisa/unix:0 MIT-MAGIC-COOKIE-1 8c1d09aab44573a524467c4e8faaaeb5 luisa:~# El comando anterior, xauth, se utiliza para manejar la información de las cookies de cada usuario; por ejemplo, un uso muy habitual es la transferencia de cookies a máquinas remotas, para que puedan así conectar al servidor X de un determinado equipo. Para ello debemos extraer la cookie de nuestro $DISPLAY y enviarla al fichero $HOME/.Xauthority del sistema remoto, con una orden como esta: luisa:~# xauth extract - $DISPLAY | ssh anita -l toni xauth merge luisa:~# Este mecanismo tiene principalmente dos problemas de seguridad: por un lado, las cookies se transmiten en texto claro por la red, por lo que son susceptibles de ser interceptadas; por otro, al estar guardadas en el fichero $HOME/.Xauthority, cualquiera que lo pueda leer tendrá acceso a ellas: es muy importante que este archivo tenga permiso de lectura y escritura sólo para su propietario, y que también tomemos precauciones si los directorios $HOME de los usuarios son exportados vía NFS. • Identificación. Dada la característica multiusuario del sistema UNIX y por motivos de seguridad, el acceso al mismo está restringido. Sólo tendrán acceso al sistema aquellos usuarios a los que el administrador haya asignado previamente un identificativo (ID). El identificativo de usuario, asignado por el administrador, puede tener longitud variable, pero tan sólo serán significativos los primeros ocho Operación de Sistema Operativo Multiusuario caracteres. espacios. No están permitidos los Para incrementar la seguridad, cada usuario puede añadir opcionalmente una contraseña de acceso al sistema. La existencia de contraseña puede ser impuesta por el administrador. Cuando se va a trabajar desde un terminal conectado directamente al ordenador, nada más encenderlo aparecerá un mensaje solicitando la identificación del usuario. Este mensaje puede ser modificado por el administrador. En este momento el usuario puede introducir el identificativo que se le haya asignado y pulsar retorno de carro. Es importante que el identificativo sea introducido en minúsculas, pues en caso contrario el sistema asume que el terminal sólo dispone de mayúsculas y mantendrá la comunicación de esta forma durante toda la sesión de trabajo. Esto puede traer complicaciones, pues el sistema UNIX diferencia mayúsculas de minúsculas. En caso de que el usuario tuviera contraseña de acceso al sistema, le será solicitada a continuación por medio de la palabra «passwd». Para mayor seguridad, la contraseña tecleada por el usuario no aparece jamás en la pantalla. Cualquier equivocación al teclear el identificativo hará que el sistema solicite una contraseña y una vez tecleada ésta, contestará con «login incorrect» y volverá a pedir el identificativo. Con esto se complica el intento de acceso al sistema por usuarios no autorizados, pues no pueden distinguir si el error lo han cometido al introducir el identificativo o la contraseña. Tan sólo cuando el identificativo de usuario y la contraseña de acceso se han 133 introducido correctamente, aparecerán en pantalla una serie de mensajes (mensaje del día, etc.) y el sistema queda preparado para recibir órdenes del usuario. Siempre que el sistema esté en espera para recibir órdenes, aparecerá en la pantalla un mensaje indicativo o prompt. Hay más de un tipo de prompt, dependiendo del SHELL: - Bourne $ - Berkeley % - Creados por el usuario - Super usuario # Para finalizar la sesión de trabajo basta mantener pulsada la tecla «Control» y pulsar la d. Otra forma de finalizar la sesión es tecleando exit seguido de retorno de carro. Una vez finalizada la sesión, el sistema vuelve a mostrar los mensajes con los que solicita el identificativo de usuario. En este momento se puede apagar el terminal. • Resolución de nombres y direcciones. Como el proceso de comunicación entre dos máquinas en la red lleva consigo un intercambio de paquetes. Cada máquina tiene una dirección única en Internet, de modo que para que un paquete llegue a una máquina, basta con que en él se especifique la dirección de destino de ésta. Las direcciones tienen el formato de cuatro números de 0 a 255 separados por puntos. Una dirección Internet es por ejemplo 150.214.70.2. Todos los paquetes con destino a esa máquina tendrán como dirección de destino 150.214.70.2 . Este número es conocido como dirección Internet o número IP. 134 Este nombre es equivalente a la dirección Internet o dirección IP. Así el nombre equivalente para el número 150.214.70.3 es «platea.pntic.mec.es». En este distinguimos entre el nombre del ordenador propiamente dicho «platea», el subdomino «pntic» y el dominio «mec.es» que identifica la red en que se encuentra el ordenador. Así, sabemos que «platea» es una máquina que pertenece a la red del PNTIC del MEC, y que forma parte de todas las redes españolas «es». Se ha visto, de forma somera como se comunican los ordenadores a través de una red. Normalmente estos procesos deberían pasar inadvertidos para el usuario. De ello se encargan las distintas aplicaciones o programas que utilizan la red, estos son cada vez más sofisticados y potentes, creando la ilusión de que hay cosas que se están realizando en modo local, cuando en realidad se están utilizando recursos de máquinas remotas (discos, CPU, aplicaciones,...). • Conexión remota. • Servidores archie Debe utilizar la herramienta Telnet y conectarse a alguno de los servidores que existen. Cuando aparezca el «login» utilice «archie», no se necesita password. Al entrar aparecerá una pantalla de ayuda explicando como usar el sistema. Pero en cualquier caso, siempre se puede solicitar ayuda sobre Archie con el comando «help». Y si la que se busca es especifica de un comando entonces se utiliza «help» Operación de Sistema Operativo Multiusuario seguido del comando. Por ejemplo, «help prog». Buscar.’ documentos.- Pruebe primero la búsqueda por nombre de fichero. Simplemente indique la ‘subcadena’ que quiera localizar a lo largo de todos los nombres archivados en la Base de Datos. Independientemente de que lo teclee en mayúsculas, minúsculas o ambos tipos conjuntamente, Archie lo encontrará también. Puede hacer una búsqueda que tenga o no en cuenta como está escrita la subcadena. Y pronto recibirá en su cuenta todos los resultados que solicitó por correo electrónico. CONTEXTUALIZACIÓN • Competencia tecnológica Utilizar herramientas de hardware y software disponibles. Por ejemplo: prog education. Cuando Archie mostrará: acaba la búsqueda, Los ficheros cuyos nombres contengan la cadena «education». Los ordenadores, servidores de FTP anonymous, donde conseguir dichos ficheros. El subdirectorio donde se encuentran archivados. Si desea tener una copia de los resultados en su propia cuenta por correo,simplemente teclee: Estudio individual Realizar un programa de shell que reciba desde línea de órdenes tres palabras y se encargue de mostrarlas por pantalla ordenadas alfabéticamente práctica de ejercicio núm. 4 «Ordenes del sistema de red». − Realizar un programa de shell que visualice por pantalla los números del 1 al 100, así como, sus cuadros. − Ejecutar las órdenes para el servicio de red. − mail <su_dirección_completa_de_correo> Ahora intente una búsqueda rápida por el contenido del fichero. Simplemente poniendo: whatis education Le mostrará todas la apariciones que ha localizado de esa subcadena en la Base de Datos. De nuevo si desea tener una copia de esto teclee su dirección de correo electrónico. − Repetición del ejercicio Repetir el ejercicio anterior. Para terminar la sesión Archie teclee: quit Operación de Sistema Operativo Multiusuario 135 RESULTADO DE APRENDIZAJE 2.2. Manejar la administración de cuentas de UNIX con base a permisos establecidos de usuarios. 2.2.1. PARADA Y ARRANQUE DEL SISTEMA UNIX • Campos de /etc/initlab. Se puede dividir en dos etapas principales: el arranque del núcleo del sistema operativo (SO), y la inicialización que lleva acabo el programa «init». Nada más encender la máquina, normalmente toma el control algún tipo de ROM que se encarga de verificar la integridad del hardware. En las PC es la BIOS, y el las «Sun» es la PROM. Una vez que la ROM haya terminado su testeo cede el control al sistema operativo. Este mecanismo depende de cada arquitectura en particular, en los PC se carga el primer sector del disco rígido primario (o disquete), que es el MBR (Master Boot Record), en las Sun, la PROM ofrece la posibilidad de elegir el dispositivo de desde donde se cargará el SO, esto puede ser tan atípico como un lector de cinta magnética o una red local. En las modernas placas madres la BIOS permite la carga del SO desde un CD-ROM. El gestor de arranque, que suele estar en los primeros clusters del dispositivo elegido, se encarga de cargar y ejecutar el núcleo UNIX, llamado normalmente vmunix, en Linux vmlinuz. Para cargar 136 dicho archivo, o bien la información sobre los clusters donde se halla en el mismo gestor, como es el caso del LILO, o bien el gestor es tan inteligente de entender un sistema de archivos UNIX, como es el caso de las Estaciones de Trabajo. Una vez cargado en un segmento de memoria reservada para tal fin, el gestor lo interpreta y cede el control al SO. • Acciones de INIT después del arranque. El núcleo se ejecuta en modo supervisor del procesador, inicia las tablas de interrupciones, excepciones, etc, (en el caso de Linux ver /usr/src/linux/arch/i386/kernel/head.S, esta rutina se encarga de ser la antesala a la rutina main()) la gestión de la memoria paginada MMU (Memory Management Unit) y finalmente el planificador de procesos o «scheduler». Despues reconoce uno por uno los dispositivos para los que fue configurado, e inicia los controladores correpondientes (device drivers). Una vez terminada esta operación monta el «directorio raíz», una vez más el dispositivo donde se encuentra debe estar definido en el propio ejecutable encargado. Si no lo encuentra el SO genera un error especial llamado «pánico» (panic). Este tipo de error es bloqueante para el SO, y no continúa hasta que sea Operación de Sistema Operativo Multiusuario corregido (en el caso de las PC apagando la máquina, en los sitemas MainFrame lanza un «prompt» y un intérprete propio de comandos para corregirlo). • Archivo /etc/inittab. Cuando ha conseguido montar el directorio raíz, el núcleo busca en /etc un programa llamado «init» (el Linux está en /sbin/init) que se encargará de continuar la iniciación del SO. El proceso original (PID 0) ejecuta una llamada «fork()», se clona en el proceso PID 1 que hace otra llamada «exec()» al «init» que sustituye en memoria al clonado. El proceso PID 0 pasa a realizar tareas que depende de los SO, en Linux pasa a ser el «swapper», en BSD el «kernel memory manager», etc. Previamente a la ejecución del init el PID 1 pasa a modo usuario y la única forma de acceder al modo supervisor es por una llamada al sistema (system call). El programa init lee su configuración del archivo ubicado en /etc/inittab. Con el programa «init» el Sistema V introduce el concepto de niveles de ejecución o «runlevels». Estos son estados del SO en función de los serviciós que puede ofrecer. Hay niveles diferentes para arrancar la máquina en modo mantenimiento (single user), multiusuario, o para arrancar el sistema de ventanas XWindow. • Comando PATH. Lista de rutas de acceso, separadas por dos puntos ‘:’ y donde una entrada con un sólo punto identifica el «direcorio actual». Son válidas asignaciones como: • Procesos gatty. Las entradas que encontramos en el fichero inittab son los guiones (script) que contiene los comandos de inicialización del sistema. También hay líneas que contienen comandos a ejecutarse en caso de sucesos excepcionales, como ser un corte de energía. Los indicadores del proceso tienen ciertas instrucciones especiales como ser: «wait»,para esperar a que termine antes de continuar, «respawn», para ejecutar otra copia cuando termina, o «once», para ejecutar por única vez. • Identificadores de proceso grupo de procesos. En el Sistema V normalmente hay un guión que debe ejecutarse siempre y que contiene los mecanismos especiales de ejecución independientes del nivel. Éste posee la entrada ‘si’ en general el guión se llama rc.sysinit. Luego le pasa el control a los guiones ubicados en /etc/rc.d/rc... que según el nivel lanzan los procesos en segundo plano supervisados por el init (demonios). Estos demonios se encargan de gestionar el transporte del correo (sendmail), impresión (lpd), etc. • Permisos. Una vez activados los servicios de procesos y grupos de procesos, se lanzan los procesos que permiten la entrada de los usuarios al sistema con previa autenticación. Estos son los encargados de llamar los intérpretes de comandos especificados en /etc/passwd. # PATH=$PATH:/home/pepe:/home/antonio Operación de Sistema Operativo Multiusuario 137 • Parada del sistema UNIX. Las paradas de sistema Unix son creadas para autorizar o no a usuarios con características de sistema determinadas. El administrador del sistema no debe tener restricciones ni paradas del sistema Unix. 2.2.2 ADMINISTRACION USUARIOS Y GRUPOS DE LOS • El archivo /etc/passwd. Antes de plantearse configurar y administrar una máquina UNIX es necesario tener ciertos conocimientos generales de uso: La mayoría de los servicios (demonios) se configuran mediante un fichero de texto plano. Por ello es imprescindible conocer un editor de texto. El editor «vi» está siempre disponible, por lo que es fundamental conocer las ordenes básicas de éste. La hoja de manual en línea es una buena fuente de información: $ man vi. O la ayuda de GNU: $ info vi. Es necesario conocer el esquema de permisos. UNIX basa toda la seguridad interna en el esquema de protección de los ficheros. La forma más fácil de realizar tareas repetitivas de mantenimiento y seguridad es utilizando scripts interpretados. Inicialmente sólo se disponía del shell, pero actualmente se dispone de una gran variedad de lenguajes interpretados: 138 • El archivo /etc/group. Perl (Practical Language) Extraction and Report Es un interprete muy versátil que permite realizar todo tipo de operaciones sobre ficheros con un potente analizador de expresiones. Muy utilizado para la administración y para la creación de CGI’s. TCL/TK TCL es un lenguaje interpretado con algunas reminiscencias de Lisp, que junto con la librería gráfica TK forman una herramienta perfecta para producir en muy poco tiempo pequeñas aplicaciones gráficas. AWK No es realmente un lenguaje pensado para administrar, pero es un interprete compacto (un sólo fichero ejecutable), con un lenguaje de programación muy similar a «C». El lenguaje AWK se podría describir como una fusión de «C» y BASIC todo ello interpretado y con funciones para el trabajo con expresiones regulares. Al igual que el editor «vi» este programa suele estar disponible en todos los sistemas UNIX • Añadir usuarios al sistema. La administración del sistema consiste básicamente en gestionar los recursos del sistema para que se puedan utilizar de la forma más eficiente posible así como llevar control de los usuarios potenciales del sistema. Entrando más en detalle, las Operación de Sistema Operativo Multiusuario tareas de administración del sistema más comunes son las siguientes: Instalar el sistema operativo. Añadir, eliminar y controlar usuarios y sus contraseñas. Instalar software de aplicación. Instalar hardware (como tarjetas, impresoras, terminales y modems). Mantener la seguridad e integridad del sistema y de la red. Diagnosticar y arreglar problemas software y hardware cuando ocurran. Comprobar el uso de los sistemas de archivos para asegurarse que no están llenos y además controlar el uso indiscriminado de éstos. Mantener impresoras, terminales remotos. modems y Realizar copias de seguridad de los sistemas de archivos. Recuperar archivos seguridad. desde copias de Mantener servicios de red, correo y otros servicios de comunicaciones. Optimizar el uso de los recursos del sistema. Asistir a los usuarios en sus necesidades. • • Comunicación administrador y usuarios. entre El administrador tiene la obligación de estar en constante monitoreo de cada uno de sus usuarios para poder llevar un seguimiento del control de flujo de información. Esto lo lleva a cabo por medio de restricciones, permisos y protección de ficheros y, dado el caso, la desconexión de una terminal. • Medidas de seguridad en un sistema UNIX. Protección de archivos. Cuando administramos un sistema informático, ya sea el ordenador de nuestro hogar o toda una red de computadoras, no debemos de olvidar que el trabajo no sólo consiste en configuración y mantenimiento. El hecho de administrar un sistema lleva implícita la obligación de protegerlo contra elementos maliciosos que directa o indirectamente puedan causar perjuicio para la integridad del mismo o hacia la confidencialidad de los datos que en él se guardan. La versatilidad y filosofía de Unix permite emprender esta tarea como una aventura, en contra de la lejana utopía de proteger entornos de ventanitas }:) Suspensión de usuarios a grupos. Los comandos y archivos relativos a la administración del sistema varía de una versión a otra del UNIX, pero la filosofía es siempre la misma. Operación de Sistema Operativo Multiusuario Desconexión de terminales Existen dos casos concretos en que es conveniente el almacenamiento de información en otros medios que no sean 139 los discos del sistema. Debido a la desconexión de terminales. Seguridad terminal para el usuario en su El primero de estos casos se usa para mejorar la utilización de los recursos de disco, y consiste en copiar a otros medios (cintas o disquetes) los archivos de datos u otro tipo, que no se utilizan habitualmente para, a continuación, borrarlos del disco. Cuando sea necesario volver a utilizar la información «archivada», se recuperarán desde el medio correspondiente. Lógicamente, este caso puede variar de importancia dependiendo de la capacidad de los discos instalados. Observación en los archivos de control. Sin duda alguna, el segundo caso es de una importancia especial. Se trata de mantener copias de seguridad de toda la información contenida en el disco, lo más actualizada posible para poder recuperarla en caso de que, ya sea por fallo hardware de la máquina o por error humano, esta información se pierda. CONTEXTUALIZACIÓN • Competencia analítica Aplicar la tecnología de sistemas operativos como administrador de aplicaciones y procesos de utilidad al quehacer cotidiano. 140 Realización del ejercicio Determinar el valor de la variable PATH para el superusuario y compruebe si está activada con el valor adecuado. − Comprobar que los directorios de sistema tienen todos sus derechos habilitados correctamente. − Investigación documental − Obtener información sobre proceso init para determinar configuración particular de sistema. − Trabajar en equipo − Deter la máquina utilizando orden shutdown, esperando minutos y enviando un mensaje finalización. el la su la 2 de Investigación de campo − Verificar qué terminales son seguros y cuáles no en su sistema. − Iniciar una sesión como root y determine si los subdirectorios /etc, /usr/bin y /usr/lib tienen los derechos adecuados para la seguridad del sistema práctica de ejercicio núm. 5 «Permisos. − Transformar permisos a lectura y escritura. Operación de Sistema Operativo Multiusuario RESULTADO DE APRENDIZAJE 2.3. Organizar la información de archivos y discos mediante el sistema de archivos. 2.3.1. SISTEMA DE ARCHIVOS • Características. CARACTERÍSTICAS DEL SISTEMA DE ARCHIVOS Un fichero es una colección de información que se almacena en un disco o cinta magnética. organizar y almacenar información. Existen 2 tipos de ficheros del sistema: • Almacenamiento ALMACENAMIENTO DE FICHEROS Ficheros ordinarios: estos ficheros contienen datos, textos y programas ejecutables (comandos). Los ficheros del sistema son estructuras que los ordenadores utilizan para Ficheros directorios: estos ficheros contienen nombres de ficheros. Los Operación de Sistema Operativo Multiusuario 141 directorios no se utilizan para almacenar datos, si no que se utilizan para organizar otros ficheros en grupos. Los directorios pueden contener otros directorios, ficheros ordinarios o estar vacíos. Todos los ficheros tienen asociado un «nombre de fichero»; este nombre identifica el fichero y su contenido. Un fichero ordinario es siempre el último fichero en un path (camino). El primer directorio de la estructura es el directorio raíz; todos los demás ficheros y directorios parten de él. El directorio raíz se designa con un nombre especial, /. Ningún otro fichero puede tener este nombre. En el sistema UNIX, todos los ficheros forman parte de la jerarquía. Cualquier fichero de esta estructura es parte de una red de directorios conectados. Esta red de directorios, junto con el nombre de un fichero particular, constituye el pathname para un fichero. El nombre de un fichero puede tener de 1 a 255 caracteres; pero se pueden utilizar únicamente los siguientes caracteres: a) b) c) d) e) f) Letras mayúsculas ( A - Z ). Letras minúsculas ( a - z ). Números ( 0 - 9 ). Subrayado ( _ ). Punto ( . ). Coma ( , ). Cada fichero se identifica con un único pathname, que describe su localización con respecto a los otros directorios. Se puede especificar un nombre de fichero utilizando pathnames absolutos o relativos: Un pathname absoluto especifica la localización de un fichero desde el directorio raíz. Por lo tanto, todos los pathnames absolutos deben de empezar con un slash (/). La estructura del conjunto de todos los ficheros del sistema, es una estructura de árbol invertido, como se puede apreciar en la figura siguiente. Un directorio equivale a abrir una rama dentro del árbol. Un pathname relativo especifica la localización de un fichero con respecto al directorio en que se está trabajando, en lugar del directorio raíz, por lo que no empienzan con un slash (/). Observemos que: El home directory es un subdirectorio del directorio raíz (root) en el que se entra 142 El punto (.) se refiere al directorio en que se está, y dos puntos (..) se refiere al directorio anterior. Operación de Sistema Operativo Multiusuario cada vez que se hace login; es donde van a residir los ficheros del usuario. Normalmente tiene el mismo nombre que el nombre de usuario. El comando pwd ( print working directory) nos dice en qué directorio estamos. El formato es simplemente : pwd Lista el contenido del directorio en que nos encontramos. Si ponemos sólo ls se obtiene una lista con el nombre de los ficheros; si se quiere obtener más información sobre esos ficheros se utilizan las opciones del comando, cuya sintaxis general es: ls [-alsF] fichero Estas opciones se pueden combinar para obtener la información que queramos al mismo tiempo; por ejemplo, ls -sF, dará la lista de los ficheros en la que el nombre de cada fichero va precedido por su tamaño (en kilobytes) y va seguido de un slash (/) en el caso de que sea un directorio o de un asterisco (*) en el caso de que sea un fichero ejecutable. Por último, indicaremos que se puede listar el contenido de un directorio diferente al que estamos, sin más que especificar el path correspondiente a continuación de las opciones; por ejemplo: ls -s /usr/Johnson/documentación • Tipos de Archivos. Directorios. usuario no sabe en qué disco están los ficheros que está utilizando. Un fichero (o archivo) es un conjunto de información al que se le da un nombre (nombre del fichero). Existen tres tipos de ficheros en UNIX: Ordinarios: Son cadenas de bytes terminadas con <ctrl>D (este código significa fin de fichero). Pueden ser texto, objetos, ejecutables, bibliotecas de módulos, ... Directorios: Contienen nombres de ficheros y su dirección física. Puede pensarse en ellos como carpetas que contienen ficheros y directorios. Un directorio dentro de otro directorio se denomina subdirectorio. Especiales: Asociados a dispositivos entrada/salida. Contienen referencias a los drivers (programas que manejan directamente los dispositivos y que forman parte del núcleo). Pueden ser de tipo «bloque» (apuntan a dispositivos tipo disco) y «carácter» (apuntan a dispositivos como terminales, impresoras, etc). Por convenio, residen en el directorio /dev. Archivos de dispositivo Al elegir los nombres de los ficheros, es conveniente limitarse a utilizar sólo los caracteres que correspondan a letras, números, el carácter subrayado _ y el carácter punto. • Estructura archivos. del sistema de UNIX emplea un sistema de ficheros jerárquico de directorios-ficheros. Los ficheros cuyo nombre comience por punto permanecen ocultos. No existe, a nivel de usuario, el concepto de volumen, ni de dispositivo físico. Es decir, el En UNIX existe una jerarquía de directorios que para un sistema estándar sería: Operación de Sistema Operativo Multiusuario 143 • Tuberías con nombre Los ficheros se especifican por: {camino jerárquico}/nombre{.ext} donde las llaves ({}) pueden ser o no necesarias. Los ficheros pueden constar de una extensión que es lo que aparece tras el punto (.). Un ejemplo sería: • Bloque de arranque. Supongamos la siguiente estructura de ficheros-directorios: Y que nos encontramos en el directorio otros_archivos. Las referencias a los diferentes ficheros se harían de la siguiente manera: • Lista de nodos índice. Existen 3 ficheros implementados en UNIX: estándar Entrada estándar (stdinput): Teclado (0) Salida estándar (stdoutput): Pantalla (1) Errores estándar (stderr): Pantalla (2) La redirección entrada/salida, que se explicará más adelante, permite cambiar estas asignaciones en cualquier momento. • Bloques de datos. Los bloques de datos están determinados por sus características en conjunto, ya sean de lectura, escritura, eliminación, etc. • Superbloque. Normalmente, será más corto y sencillo utilizar el acceso relativo excepto en determinados casos (por ejemplo, en nuestro caso, /bin/fgrep). UNIX no mantiene versiones de ficheros, por lo que es necesario prestar especial atención a acciones como borrarlos o modificarlos. 144 Operación de Sistema Operativo Multiusuario 2.3.2 ORDENES PARA ADMINISTRAR EL SISTEMA DE ARCHIVOS • Creación archivos. de un sistema de crypt(1) La orden crypt permite cifrar y descifrar ficheros en diferentes sistemas Unix; si no recibe parámetros lee los datos de la entrada estándar y los escribe en la salida estándar, por lo que seguramente habremos de redirigir ambas a los nombres de fichero adecuados. Un ejemplo simple de su uso puede ser el siguiente: $ crypt <fichero.txt >fichero.crypt Enter key: $ En el anterior ejemplo hemos cifrado utilizando crypt el archivo fichero.txt y guardado el resultado en fichero.crypt; el original en texto claro se mantiene en nuestro directorio, por lo que si queremos evitar que alguien lo lea deberemos borrarlo. • Montaje de archivos. un sistema de Para descifrar un fichero cifrado mediante crypt (por ejemplo, el anterior) utilizamos la misma orden y la misma clave: $ crypt <fichero.crypt>salida.txt Enter key: $ El anterior comando ha descifrado fichero.crypt con la clave tecleada y guardado el resultado en el archivo salida.txt, que coincidirá en contenido con Operación de Sistema Operativo Multiusuario el anterior fichero.txt. crypt no se debe utilizar nunca para cifrar información confidencial; la seguridad del algoritmo de cifra utilizado por esta orden es mínima, ya que crypt se basa en una máquina con un rotor de 256 elementos similar en muchos aspectos a la alemana Enigma, con unos métodos de ataque rápidos y conocidos por todos ([RW84]). Por si esto fuera poco, si en lugar de teclear la clave cuando la orden nos lo solicita lo hacemos en línea de comandos, como en el siguiente ejemplo: $ crypt clave < fichero.txt > fichero.crypt $ Entonces a la debilidad criptográfica de crypt se une el hecho de que en muchos Unices cualquier usuario puede observar la clave con una orden tan simple como ps (no obstante, para minimizar este riesgo, el propio programa guarda la clave y la elimina de su línea de argumentos nada más leerla). Obviamente, la orden crypt(1) no tiene nada que ver con la función crypt(3), utilizada a la hora de cifrar claves de usuarios, que está basada en una variante del algoritmo DES y se puede considerar segura en la mayoría de entornos. • Información del Espacio en disco. La información referente al espacio en disco se puede obtener tecleando el comando ls, nos desplegará la lista de los diferentes archivos y directorios del sistema, así como el espacio sobrante en el disco. • Copias de seguridad. 145 Órdenes para realizar las copias de seguridad Las copias de seguridad del sistema son con frecuencia el único mecanismo de recuperación que poseen los administradores para restaurar una máquina que por cualquier motivo - no siempre se ha de tratar de un pirata que borra los discos - ha perdido datos. Por tanto, una correcta política para realizar, almacenar y, en caso de ser necesario, restaurar los backups es vital en la planificación de seguridad de todo sistema. Asociados a los backups suelen existir unos problemas de seguridad típicos en muchas organizaciones. Por ejemplo, uno de estos problemas es la no verificación de las copias realizadas: el administrador ha diseñado una política de copias de seguridad correcta, incluso exhaustiva en muchas ocasiones, pero nadie se encarga de verificar estas copias...hasta que es necesario restaurar ficheros de ellas. Evidentemente, cuando llega ese momento el responsable del sistema se encuentra ante un gran problema, problema que se podría haber evitado simplemente teniendo la precaución de verificar el correcto funcionamiento de los backups; por supuesto, restaurar una copia completa para comprobar que todo es correcto puede ser demasiado trabajo para los métodos habituales de operación, por lo que lo que se suele hacer es tratar de recuperar varios ficheros aleatorios del backup, asumiendo que si esta recuperación funciona, toda la copia es correcta. Otro problema clásico de las copias de seguridad es la política de etiquetado a seguir. Son pocos los administradores que no etiquetan los dispositivos de backup, 146 algo que evidentemente no es muy útil: si llega el momento de recuperar ficheros, el operador ha de ir cinta por cinta (o disco por disco, o CD-ROM por CD-ROM...) tratando de averiguar dónde se encuentran las últimas versiones de tales archivos. No obstante, muchos administradores siguen una política de etiquetado exhaustiva, proporcionando todo tipo de detalles sobre el contenido exacto de cada medio; esto, que en principio puede parecer una posición correcta, no lo es tanto: si por cualquier motivo un atacante consigue sustraer una cinta, no tiene que investigar mucho para conocer su contenido exacto, lo que le proporciona acceso a información muy concreta (y muy valiosa) de nuestros sistemas sin ni siquiera penetrar en ellos. La política correcta para etiquetar los backups ha de ser tal que un administrador pueda conocer la situación exacta de cada fichero, pero que no suceda lo mismo con un atacante que roba el medio de almacenamiento; esto se consigue, por ejemplo, con códigos impresos en cada etiqueta, códigos cuyosignificado sea conocido por los operadores de copias de seguridad pero no por un potencial atacante. La ubicación final de las copias de seguridad también suele ser errónea en muchos entornos; generalmente, los operadores tienden a almacenar los backups muy cerca de los sistemas, cuando no en la misma sala. Esto, que se realiza para una mayor comodidad de los técnicos y para recuperar ficheros fácilmente, es un grave error: no hay más que imaginar cualquier desastre del entorno, como un incendio o una inundación, para hacerse una idea de lo que les sucedería a los backups en esos Operación de Sistema Operativo Multiusuario casos. Evidentemente, se destruirían junto a los sistemas, por lo que nuestra organización perdería toda su información; no obstante, existen voces que reivindican como correcto el almacenaje de las copias de seguridad junto a los propios equipos, ya que así se consigue centralizar un poco la seguridad (protegiendo una única estancia se salvaguarda tanto las máquinas como las copias). Lo habitual en cualquier organización suele ser un término medio entre ambas aproximaciones: por ejemplo, podemos tener un juego de copias de seguridad completas en un lugar diferente a la sala de operaciones, pero protegido y aislado como esta, y un juego para uso diario en la propia sala, de forma que los operadores tengan fácil la tarea de recuperar ficheros; también podemos utilizar armarios ignífugos que requieran de ciertas combinaciones para su apertura (combinaciones que sólo determinado personal ha de conocer), si decidimos almacenar todos los backups en la misma estancia que los equipos. Por último, ¿qué almacenar? Obviamente debemos realizar copias de seguridad de los archivos que sean únicos a nuestro sistema; esto suele incluir directorios como /etc/, /usr/local/ o la ubicación de los directorios de usuario (dependiendo del Unix utilizado, /export/home/, /users/, /home/...). Por supuesto, realizar una copia de seguridad de directorios como /dev/ o /proc/ no tiene ninguna utilidad, de la misma forma que no la tiene realizar backups de directorios del sistema como /bin/ o /lib/: su contenido está almacenado en la distribución original del sistema operativo (por ejemplo, los CD-ROMs que utilizamos para instalarlo). Operación de Sistema Operativo Multiusuario • Compresores Existen multitud de dispositivos diferentes donde almacenar nuestras copias de seguridad, desde un simple disco flexible hasta unidades de cinta de última generación. Evidentemente, cada uno tiene sus ventajas y sus inconvenientes, pero utilicemos el medio que utilicemos, éste ha de cumplir una norma básica: ha de ser estándar. Con toda probabilidad muchos administradores pueden presumir de poseer los streamers más modernos, con unidades de cinta del tamaño de una cajetilla de tabaco que son capaces de almacenar gigas y más gigas de información; no obstante, utilizar dispositivos de última generación para guardar los backups de nuestros sistemas puede convertirse en un problema: ¿qué sucede si necesitamos recuperar datos y no disponemos de esa unidad lectora tan avanzada? Imaginemos simplemente que se produce un incendio y desaparece una máquina, y con ella el dispositivo que utilizamos para realizar copias de seguridad. En esta situación, o disponemos de otra unidad idéntica a la perdida, o recuperar nuestra información va a ser algo difícil. Si en lugar de un dispositivo moderno, rápido y seguramente muy fiable, pero incompatible con el resto, hubiéramos utilizado algo más habitual (una cinta de 8mm., un CD-ROM, o incluso un disco duro) no tendríamos problemas en leerlo desde cualquier sistema Unix, sin importar el hardware sobre el que trabaja. Aquí vamos a comentar algunos de los dispositivos de copia de seguridad más utilizados hoy en día; de todos ellos (o de otros, no listados aquí) cada administrador ha de elegir el que más se adapte a sus necesidades. En la tabla 7.1 147 se muestra una comparativa de todos ellos. Discos flexibles Sí, aunque los clásicos diskettes cada día se utilicen menos, aún se pueden considerar un dispositivo donde almacenar copias de seguridad. Se trata de un medio muy barato y portable entre diferentes operativos (evidentemente, esta portabilidad existe si utilizamos el disco como un dispositivo secuencial, sin crear sistemas de ficheros). Por contra, su fiabilidad es muy baja: la información almacenada se puede borrar fácilmente si el disco se aproxima a aparatos que emiten cualquier tipo de radiación, como un teléfono móvil o un detector de metales. Además, la capacidad de almacenamiento de los floppies es muy baja, de poco más de 1 MB por unidad; esto hace que sea casi imposible utilizarlos como medio de backup de grandes cantidades de datos, restringiendo su uso a ficheros individuales. Un diskette puede utilizarse creando en él un sistema de ficheros, montándolo bajo un directorio, y copiando en los archivos a guardar. Por ejemplo, podemos hacer un backup de nuestro fichero de claves en un disco flexible de esta forma. luisa:~# mkfs -t ext2 /dev/fd0 mke2fs 1.14, 9-Jan-1999 for EXT2 FS 0.5b, 95/08/09 Linux ext2 filesystem format Filesystem label= 360 inodes, 1440 blocks 72 blocks (5.00%) reserved for the super user First data block=1 Block size=1024 (log=0) Fragment size=1024 (log=0) 1 block group 8192 blocks per group, 8192 fragments per group 360 inodes per group 148 Writing inode tables: done Writing superblocks and filesystem accounting information: done luisa:~# mount -t ext2 /dev/fd0 /mnt/ luisa:~# cp /etc/passwd /mnt/ luisa:~# umount /mnt/ luisa:~# Si quisiéramos recuperar el archivo, no tendríamos más que montar de nuevo el diskette y copiar el fichero en su ubicación original. No obstante, este uso de los discos flexibles es minoritario; es más habitual utilizarlo como un dispositivo secuencial (como una cinta), sin crear en él sistemas de ficheros - que quizás son incompatibles entre diferentes clones de Unix - sino accediendo directamente al dispositivo. Por ejemplo, si de nuevo queremos hacer un backup de nuestro fichero de passwords, pero siguiendo este modelo de trabajo, podemos utilizar la orden tar (comentada más adelante) para conseguirlo: luisa:~# tar cvf /dev/fd0 /etc/passwd tar: Removing leading ‘/’ from absolute path names in the archive etc/passwd luisa:~# Para recuperar ahora el archivo guardado, volvemos a utilizar la orden tar indicando como contenedor la unidad de disco correspondiente: luisa:~# tar xvf /dev/fd0 etc/passwd luisa:~# Discos duros Es posible utilizar una unidad de disco duro completa (o una partición) para realizar copias de seguridad; como sucedía con los discos flexibles, podemos crear un sistema de ficheros sobre la unidad o la partición correspondiente, montarla, y copiar los ficheros que nos interese guardar en ella (o recuperarlos). Operación de Sistema Operativo Multiusuario De la misma forma, también podemos usar la unidad como un dispositivo secuencial y convertirlo en un contenedor tar o cpio; en este caso hemos de estar muy atentos a la hora de especificar la unidad, ya que es muy fácil equivocarse de dispositivo y machacar completamente la información de un disco completo (antes también podía suceder, pero ahora la probabilidad de error es más alta). Por ejemplo, si en lugar del nombre del dispositivo correcto (supongamos /dev/hdc) especificamos otro (como /dev/hdd), estaremos destruyendo la información guardada en este último. Algo muy interesante en algunas situaciones es utilizar como dispositivo de copia un disco duro idéntico al que está instalado en nuestro sistema, y del que deseamos hacer el backup; en este caso es muy sencillo hacer una copia de seguridad completa. Imaginemos por ejemplo que /dev/hda y /dev/hdc son dos discos exactamente iguales; en este caso, si queremos conseguir una imagen especular del primero sobre el segundo, no tenemos más que utilizar la orden dd con los parámetros adecuados: luisa:~# dd if=/dev/hda of=/dev/hdc bs=2048 1523+0 records in 1523+0 records out luisa:~# Cintas magnéticas Las cintas magnéticas han sido durante años (y siguen siendo en la actualidad) el dispositivo de backup por excelencia. Las más antiguas, las cintas de nueve pistas, son las que mucha gente imagina al hablar de este medio: un elemento circular con la cinta enrollada en él; este tipo de dispositivos se utilizó durante Operación de Sistema Operativo Multiusuario mucho tiempo, pero en la actualidad está en desuso, ya que a pesar de su alta fiabilidad y su relativa velocidad de trabajo, la capacidad de este medio es muy limitada (de hecho, las más avanzadas son capaces de almacenar menos de 300 MB., algo que no es suficiente en la mayor parte de sistemas actuales). Después de las cintas de 9 pistas aparecieron las cintas de un cuarto de pulgada (denominadas QIC), mucho más pequeñas en tamaño que las anteriores y con una capacidad máxima de varios Gigabytes (aunque la mayor parte de ellas almacenan menos de un Giga); se trata de cintas más baratas que las de 9 pistas, pero también más lentas. El medio ya no va descubierto, sino que va cubierto de una envoltura de plástico. A finales de los ochenta aparece un nuevo modelo de cinta que relegó a las cintas QIC a un segundo plano y que se ha convertido en el medio más utilizado en la actualidad: se trata de las cintas de 8mm., diseñadas en su origen para almacenar vídeo. Estas cintas, del tamaño de una cassette de audio, tienen una capacidad de hasta cinco Gigabytes, lo que las hace perfectas para la mayoría de sistemas: como toda la información a salvaguardar cabe en un mismo dispositivo, el operador puede introducir la cinta en la unidad del sistema, ejecutar un sencillo shellscript, y dejar que el backup se realice durante toda la noche; al día siguiente no tiene más que verificar que no ha habido errores, retirar la cinta de la unidad, y etiquetarla correctamente antes de guardarla. De esta forma se consigue que 149 el proceso de copia de seguridad sea sencillo y efectivo. No obstante, este tipo de cintas tiene un grave inconveniente: como hemos dicho, originalmente estaban diseñadas para almacenar vídeo, y se basan en la misma tecnología para registrar la información. Pero con una importante diferencia ([P$^$94]): mientras que perder unos bits de la cinta donde hemos grabado los mejores momentos de nuestra última fiesta no tiene mucha importancia, si esos mismos bits los perdemos de una cinta de backup el resto de su contenido puede resultar inservible. Es más, es probable que después de unos cuantos usos (incluidas las lecturas) la cinta se dañe irreversiblemente. Para intentar solucionar estos problemas aparecieron las cintas DAT, de 4mm., diseñadas ya en origen para almacenar datos; estos dispositivos, algo más pequeños que las cintas de 8mm. pero con una capacidad similar, son el mejor sustituto de las cintas antiguas: son mucho más resistentes que éstas, y además relativamente baratas (aunque algo más caras que las de 8mm.). Hemos dicho que en las cintas de 8mm. (y en las de 4mm.) se pueden almacenar hasta 5 GB. de información. No obstante, algunos fabricantes anuncian capacidades de hasta 14 GB. utilizando compresión hardware, sin dejar muy claro si las cintas utilizadas son estándar o no ([Fri95]); evidentemente, esto puede llevarnos a problemas de los que antes hemos comentado: ¿qué sucede si necesitamos recuperar datos y no disponemos de la unidad lectora original? Es algo vital que 150 nos aseguremos la capacidad de una fácil recuperación en caso de pérdida de nuestros datos (este es el objetivo de los backups al fin y al cabo), por lo que quizás no es conveniente utilizar esta compresión hardware a no ser que sea estrictamente necesario y no hayamos podido aplicar otra solución. CD-ROMs En la actualidad sólo se utilizan cintas magnéticas en equipos antiguos o a la hora de almacenar grandes cantidades de datos - del orden de Gigabytes. Hoy en día, muchas máquinas Unix poseen unidades grabadoras de CD-ROM, un hardware barato y, lo que es más importante, que utiliza dispositivos de muy bajo coste y con una capacidad de almacenamiento suficiente para muchos sistemas: con una unidad grabadora, podemos almacenar más de 650 Megabytes en un CD-ROM que cuesta menos de 150 pesetas. Por estos motivos, muchos administradores se decantan por realizar sus copias de seguridad en uno o varios CD-ROMs; esto es especialmente habitual en estaciones de trabajo o en PCs de sobremesa corriendo algún clon de Unix (Linux, Solaris o FreeBSD por regla general), donde la cantidad de datos a salvaguardar no es muy elevada y se ajusta a un par de unidades de CD, cuando no a una sola. Operación de Sistema Operativo Multiusuario Determinar el número de bloques ocupado por el directorio /etc y /usr. − Comprobar el estado del sistema de ficheros raíz y corrija los posibles errores. − Modificar el fichero /etcfstab para que el anterior sistema de ficheros sea montado de forma automática cuando se inicia el sistema. − Organizar información a través de ficheros. − CONTEXTUALIZACIÓN • Competencia analítica Aplicar la tecnología de sistemas operativos como administrador de aplicaciones y procesos de utilidad al quehacer cotidiano. Realización del ejercicio Determinar qué sistemas de ficheros hay montados en su sistema. − Probar para crear un sistema de ficheros en el disco flexible. Una vez creado, montará en un directorio denominado /fd. Probará a acceder al sistema de ficheros recién montado. − Operación de Sistema Operativo Multiusuario 151 PRÁCTICAS DE EJERCICIO Y LISTA DE COTEJO Unidad de aprendizaje: 2 Práctica número: 9 Nombre de la práctica: Manejo de ambiente UNIX. Propósito de la práctica: Al finalizar la práctica, el alumno manejará comandos en el sistema operativo que le permitirán obtener información del ambiente UNIX. Escenario: Laboratorio de Informática. Duración: 6 hrs. Materiales • Software instalado de UNIX o software de emulación UNIX. • Manual en línea de UNIX. • Cuaderno de notas. • Pluma o lápiz. Maquinaria y Equipo • Terminal o Computadora (Pentium III). Herramienta Procedimiento ­Aplicar las medidas de seguridad e higiene. • Evitar la manipulación de líquidos cerca del equipo. • No introducir objetos extraños en los dispositivos de disco. • No utilizar imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpiar el área de trabajo. 1. Encender equipo de cómputo. 2. Entrar al Unix Shell. 3. Hacer un esquema que refleje la estructura del árbol de los principales directorios del sistema hasta el tercer nivel. fuentes c C++ bin doc ps utiles correo 4. Muestre el contenido del directorio padre del directorio raíz. ¿Qué ocurre?. 4. Sitúese en el subdirectorio /dev y liste el contenido del mismo. 5. Sitúese en su directorio HOME y liste el contenido del subdirectorio /dev en formato largo. ¿Qué indican los caracteres c y b que aparecen a la izquierda de los permisos de Accesó a los archivos?. 6. Liste todos los archivos, incluidos aquellos cuyo nombre comienza por punto (.), del archivo raíz en formato largo. Indique cuántos archivos, enlaces y directorios cuelgan del directorio raíz. 7. Indique cuántos subdirectorios tiene el subdirectorio /etc de todas las formas que conozca. 8. Averigüe los usuarios que están conectados al sistema en este momento. 9. Averigüe cuántos usuarios tienen cuenta en el sistema. 10. Visualice el contenido del archivo /etc/hosts. 11. Copie el archivo /etc/hosts en su subdirectorio docs. 12. Calcule el número de líneas, palabras y caracteres del archivo hosts. 13. Busque aquellas líneas del archivo /etc/passwd que contengan la subcadena sso3. 14. Copie, desde su directorio HOME, el archivo hosts del directorio docs en los directorios ps y utiles. 15. Repetir los procedimientos con asesoría del PSP. 16. Salir del shell 17. Apagar el equipo de cómputo 4 Depositar los residuos recuperables disponiendo de 3 botes de reciclaje tonner, discos y papel. Operación de Sistema Operativo Multiusuario 153 Lista de cotejo de la práctica número 9: Manejo de ambiente UNIX Nombre del alumno: Instrucciones: A continuación se presentan los criterios que van a ser verificados en el desempeño del alumno mediante la observación del mismo. De la siguiente lista marque con una 9 aquellas observaciones que hayan sido cumplidas por el alumno durante su desempeño. Si Desarrollo No No Aplica ®Aplicó las medidas de seguridad e higiene. • Evitó la manipulación de líquidos cerca del equipo. • No introdujo objetos extraños en los dispositivos de disco, • No utilizó imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpió el área de trabajo. 1. Encendió el equipo de cómputo. 2. Abrió sesión de UNIX. 3. Hizo el esquema hasta el tercer nivel. 4. Mostró el contenido del directorio padre del directorio raíz 5. Se situó en el subdirectorio /dev y listó el contenido del mismo 6. Se situó en el directorio HOME y listó el contenido del subdirectorio /dev en formato largo. 7. Listó todos los archivos. Indicó cuántos archivos, enlaces y directorios cuelgan del directorio raíz. 8. Indicó cuántos subdirectorios tiene el subdirectorio /etc 9. Averiguó los usuarios que estaban conectados al sistema en este momento. 10. Averiguó cuántos usuarios tienen cuenta en el sistema. 11. Visualizó el contenido del archivo /etc/hosts. 12. Copió el archivo /etc/hosts en su subdirectorio docs. 13. Calculó el número de líneas, palabras y caracteres del archivo hosts. 154 Operación de Sistema Operativo Multiusuario Si Desarrollo No No Aplica 14. Buscó aquellas líneas del archivo /etc/passwd que contengan la subcadena sso3 15. Copió, desde su directorio HOME, el archivo hosts del directorio docs en los directorios ps y utiles. 16. Repitió los procedimientos con asesoría del PSP. 17. Salió del shell de UNIX. 18. Apagó el equipo de cómputo. 4 Depositó los residuos recuperables. Observaciones: PSP: Hora de inicio: Operación de Sistema Operativo Multiusuario Hora de término: Evaluación: 155 Unidad de aprendizaje: 2 Práctica número: 10 Nombre de la práctica: Manejo de enlaces Propósito de la práctica: Al finalizar la práctica, el alumno manejará enlaces a través de comandos Escenario: Laboratorio de Informática. Duración: 6 hrs. Materiales • Software instalado de UNIX o software de emulación UNIX. Maquinaria y Equipo • Terminal o Computadora Herramienta (Pentium III) • Manual en línea de UNIX. • Cuaderno de notas. • Pluma o lápiz. 156 Operación de Sistema Operativo Multiusuario Procedimiento ­Aplicar las medidas de seguridad e higiene. • Evitar la manipulación de líquidos cerca del equipo. • No introducir objetos extraños en los dispositivos de disco. • No utilizar imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpiar el área de trabajo. 1. Encender equipo de cómputo. 2. Entrar al Unix Shell. 3. Hacer un esquema que refleje la estructura del árbol de los principales directorios del sistema hasta el tercer nivel. fuentes c C++ bin doc ps utiles correo 4. Cree en su directorio HOME un archivo que denomine mppc.c con el siguiente contenido usando la orden cat: #include <stdio.h> main ( ) { printf(“Este es un programa en C\n”) ; } 5. 6. 7. 8. 9. 10. 11. Mueva este archivo al subdirectorio c. Sitúese en el directorio c++ y haga un enlace al archivo mppc.c del directorio c con el mismo nombre. Haga otro enlace pero con el nombre mppc2.c. Compruebe cuántos enlaces tiene el archivo mpp2.c y cuántos el mppc.c del directorio c. Compruebe que se trata del mismo archivo observando su número de nodoi (ver opciones de ls). Elimine el archivo mppc.c del subdirectorio c++. ¿Cuántos enlaces existen ahora del archivo mpp2.c?. Añada la siguiente línea al final del archivo mppc.c con la orden cat >>: /* Esto es un comentario en c */ // Esto es un comentario en c++ 12. Compruebe que esta modificación afecta también al archivo mpp2.c. 13. Elimine el archivo original y observe cómo se sigue accediendo al archivo con el enlace restante. Operación de Sistema Operativo Multiusuario 157 Procedimiento 14. 15. 16. 17. 18. 19. 20. 21. Compruébese que el archivo es el mismo por su número de inodo. Cree un archivo de texto, llamado texto, y haga un enlace simbólico al mismo. Compruebe que se trata de archivos distintos obteniendo sus números de nodoi. Elimine el archivo original y compruebe que ya no es posible acceder al contenido del mismo mediante el enlace. Cree un nuevo archivo, llamado también texto. ¿Qué pasa si mostramos el contenido del enlace anterior? Repetir los procedimientos con asesoría del PSP. Salir del shell Apagar el equipo de cómputo 4 Depositar los residuos recuperables disponiendo de 3 botes de reciclaje tonner, discos y papel. 158 Operación de Sistema Operativo Multiusuario Lista de cotejo de la práctica número 10: Manejo de enlaces Nombre del alumno: Instrucciones: A continuación se presentan los criterios que van a ser verificados en el desempeño del alumno mediante la observación del mismo. De la siguiente lista marque con una 9 aquellas observaciones que hayan sido cumplidas por el alumno durante su desempeño Desarrollo Si No No Aplica ®Aplicó las medidas de seguridad e higiene. • Evitó la manipulación de líquidos cerca del equipo. • No introdujo objetos extraños en los dispositivos de disco, • No utilizó imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpió el área de trabajo. 1. Encendió el equipo de cómputo. 2. Abrió sesión de UNIX. 3. Hizo el esquema hasta el tercer nivel. 4. Creó directorio HOME, y archivo que denomine mppc.c usando la orden cat 5. Movió este archivo al subdirectorio c. 6. Sitó el directorio c++ e hizó un enlace al archivo mppc.c del directorio c con el mismo nombre. 7. Hizó otro enlace pero con el nombre mppc2.c. 8. Comprobó cuántos enlaces tiene el archivo mpp2.c y cuántos el mppc.c del directorio c. 9. Comprobó que se trata del mismo archivo observando su número de nodoi (ver opciones de ls). 10. Eliminó el archivo mppc.c del subdirectorio c++. ¿Cuántos enlaces existen ahora del archivo mpp2.c?. Operación de Sistema Operativo Multiusuario 159 Si Desarrollo No No Aplica 11. Añadió la siguiente línea al final del archivo mppc.c con la orden cat >>: 12. Compruebe que esta modificación afecta también al archivo mpp2.c. 13. Eliminó el archivo original y observe cómo se sigue accediendo al archivo con el enlace restante. 14. Comprobó que el archivo es el mismo por su número de inodo. 15. Creó un archivo de texto, llamado texto, y haga un enlace simbólico al mismo. 16. Comprobó que se trata de archivos distintos obteniendo sus números de nodoi. 17. Eliminó el archivo original. 18. Creó un nuevo archivo, llamado también texto. 19. Repitió los procedimientos con asesoría del PSP. 20. Salió del shell de UNIX. 21. Apagó el equipo de cómputo. 4 Depositó los residuos recuperables. Observaciones: PSP: Hora de inicio: 160 Hora de término: Evaluación: Operación de Sistema Operativo Multiusuario Unidad de aprendizaje: 2 Práctica número: 11 Nombre de la práctica: Manejo y clasificación de archivos y directorios Propósito de la práctica: Al finalizar la práctica, el alumno manejará y clasificara archivos y directorios a través de comandos Escenario: Laboratorio de Informática. Duración: 6 hrs. Materiales • Software instalado de UNIX o software de emulación UNIX. Maquinaria y Equipo • Terminal o Computadora Herramienta (Pentium III). • Manual en línea de UNIX. • Cuaderno de notas. • Pluma o lápiz. Operación de Sistema Operativo Multiusuario 161 Procedimiento ­Aplicar las medidas de seguridad e higiene. • Evitar la manipulación de líquidos cerca del equipo. • No introducir objetos extraños en los dispositivos de disco. • No utilizar imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpiar el área de trabajo. 1. Encender equipo de cómputo. 2. Entrar al Unix Shell. 3. Hacer un esquema que refleje la estructura del árbol de los principales directorios del sistema hasta el tercer nivel. fuentes c C++ doc bin ps utiles correo 4. Sitúese en subdirectorio fuentes. Borre su contenido usando la orden rm. 5. Ordene de forma descendente el archivo /etc/hosts, seleccione las cinco primeras líneas y guárdelas en un archivo en el subdirectorio correo. 6. Muestre todos los archivos del subdirectorio /bin que comiencen por l. ¿Qué ocurre?. 7. Igual que el anterior pero que comiencen por c y tengan al menos dos caracteres. 8. Igual que el anterior pero que comiencen por d, c ó l y terminen por s ó d. 9. Igual que el anterior pero que comiencen por d, c ó l, terminen por s ó d y ocupen más de 20 bloques. 10. Liste los nombres de los archivos que cuelgan a partir del directorio /usr/bin cuyo nombre comienza por p. 11. Obtenga los subdirectorios del sistema que han sido modificados en los últimos 20 días. ¿Por qué aparecen mensajes de error?. 12. Muestre el contenido del directorio HOME de un usuario definido por el PSP. 13. Obtenga los nombres de los archivos que son propiedad del súper usuario (root). 14. Obtenga los nombres de archivos del directorio /usr cuyo nombre empiece por s y tengan un tamaño inferior a 20 bloques. 15. Obtenga los nombres de archivos del directorio /usr cuyo nombre empiece por s o tengan un tamaño inferior a 20 bloques, seleccione los 10 primeros y almacénelos en un archivo. 16. Repetir los procedimientos con asesoría del PSP. 17. Salir del shell 18. Apagar el equipo de cómputo 4 Depositar los residuos recuperables disponiendo de 3 botes de reciclaje tonner, discos y papel. 162 Operación de Sistema Operativo Multiusuario Lista de cotejo de la práctica número 11: Manejo y clasificación de archivos y directorios Nombre del alumno: Instrucciones: A continuación se presentan los criterios que van a ser verificados en el desempeño del alumno mediante la observación del mismo. De la siguiente lista marque con una 9 aquellas observaciones que hayan sido cumplidas por el alumno durante su desempeño Desarrollo Si No No Aplica ®Aplicó las medidas de seguridad e higiene. • Evitó la manipulación de líquidos cerca del equipo. • No introdujo objetos extraños en los dispositivos de disco, • No utilizó imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpió el área de trabajo. 1. Encendió el equipo de cómputo. 2. Abrió sesión de UNIX. 3. Hizo el esquema hasta el tercer nivel. 4. Se situó en subdirectorio fuentes. Borró su contenido usando la orden rm. 5. Ordenó descendente el archivo /etc/hosts, seleccionó las cinco primeras líneas y las guardó en un archivo en el subdirectorio correo. 6. Mostró todos los archivos del subdirectorio /bin que comiencen por l. 7. Repitió el ejercicio comenzando por c y tengan al menos dos caracteres 8. Repitió el ejercicio comenzando por d, c ó l y terminen por s ó d. 9. Repitió el ejercicio comenzando por d, c ó l, terminen por s ó d y ocupen más de 20 bloques. Operación de Sistema Operativo Multiusuario 163 Si Desarrollo No No Aplica 10. Listó los nombres de los archivos que cuelgan a partir del directorio /usr/bin cuyo nombre comienza por p. 11. Obtuvo los subdirectorios del sistema que han sido modificados en los últimos 20 días. ¿Explico por qué aparecen mensajes de error?. 12. Mostró el contenido del directorio HOME de un usuario definido por el PSP. 13. Obtuvo los nombres de archivos que son propiedad del súper usuario (root). 14. Obtuvo los nombres de archivos del directorio /usr cuyo nombre empiece por s y tengan un tamaño inferior a 20 bloques. 15. Obtuvo los nombres de archivos del directorio /usr cuyo nombre empiece por s o tengan un tamaño inferior a 20 bloques, seleccionó los 10 primeros y los almacenó en un archivo. 16. Repitió los procedimientos con asesoría del PSP. 17. Salió del shell de UNIX. 18. Apagó el equipo de cómputo. 4 Depositó los residuos recuperables. Observaciones: PSP: Hora de inicio: 164 Hora de término: Evaluación: Operación de Sistema Operativo Multiusuario Unidad de aprendizaje: 2 Práctica número: 12 Nombre de la práctica: Manejo de estadísticas de archivos y directorios Propósito de la práctica: Al finalizar la práctica, el alumno manejará estadísticas de archivos y directorios a través de comandos Escenario: Laboratorio de Informática. Duración: 6 hrs. Materiales • Software instalado de UNIX o software de emulación UNIX. Maquinaria y Equipo • Terminal o Computadora Herramienta (Pentium III). • Manual en línea de UNIX. • Cuaderno de notas. • Pluma o lápiz. Operación de Sistema Operativo Multiusuario 165 Procedimiento ­Aplicar las medidas de seguridad e higiene. • Evitar la manipulación de líquidos cerca del equipo. • No introducir objetos extraños en los dispositivos de disco. • No utilizar imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpiar el área de trabajo. 1. Encender equipo de cómputo. 2. Entrar al Unix Shell. 3. Hacer un esquema que refleje la estructura del árbol de los principales directorios del sistema hasta el tercer nivel. fuentes c C++ bin doc ps utiles correo 4. Supongamos que tenemos un archivo sobre el que existen varios enlaces duros (por ejemplo el usado en la práctica sobre enlaces). ¿Cómo podríamos, con una única orden eliminar dicho archivo y todos sus enlaces? 5. Obtenga un listado largo de los archivos del sistema cuyo nombre contenga la subcadena as. 6. Calcule el espacio en disco que ocupa el subdirectorio /usr. 7. Calcule el espacio en disco que ocupa su directorio HOME. 8. Calcule el espacio libre y ocupado del sistema de archivos. 9. Determine los tipos de los archivos del directorio raíz. 10. Determine los tipos de los archivos de los subdirectorios /bin, /etc y /dev y almacene el resultado en un archivo que se llame tipos.txt en su directorio HOME. 11. Copie el archivo tipos.txt al archivo fichs.txt en el subdirectorio correo usando la orden cat. 12. Calcule cuántas entradas tienen los subdirectorios /bin y /etc. 13. Calcule cuántos directorios hay en el sistema. 14. Calcule cuántos archivos hay en el sistema. Ejecute la orden necesaria en background y redireccione el resultado al archivo numero de su directorio HOME. ¿Cuándo se sabe que se ha terminado la orden?. Nota. Lanzar la orden en un shell Bourne y redirigir la salida de error. 15. Repetir los procedimientos con asesoría del PSP. 16. Salir del shell 17. Apagar el equipo de cómputo 4 Depositar los residuos recuperables disponiendo de 3 botes de reciclaje tonner, discos y papel. 166 Operación de Sistema Operativo Multiusuario Lista de cotejo de la práctica número 12: Manejo de estadísticas de archivos y directorios Nombre del alumno: Instrucciones: A continuación se presentan los criterios que van a ser verificados en el desempeño del alumno mediante la observación del mismo. De la siguiente lista marque con una 9 aquellas observaciones que hayan sido cumplidas por el alumno durante su desempeño Desarrollo Si No No Aplica ®Aplicó las medidas de seguridad e higiene. • Evitó la manipulación de líquidos cerca del equipo. • No introdujo objetos extraños en los dispositivos de disco, • No utilizó imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpió el área de trabajo. 1. Encendió el equipo de cómputo. 2. Abrió sesión de UNIX. 3. Hizo el esquema hasta el tercer nivel. 4. Eliminó el archivo y sus enlaces. 5. Obtuvo el listado largo. 6. Calculó el espacio en disco que ocupa el subdirectorio /usr. 7. Calculó el espacio en disco que ocupa su directorio HOME. 8. Calculó el espacio libre y ocupado del sistema de archivos. 9. Determinó los tipos de los archivos del directorio raíz 10. Determinó los tipos de los archivos de los subdirectorios /bin, /etc y /dev y almacenó el resultado en un archivo que se llamó tipos.txt en su directorio HOME 11. Copió el archivo tipos.txt al archivo fichs.txt en el subdirectorio correo usando la orden cat. 12. Calculó cuántas entradas tienen los subdirectorios /bin y /etc. Operación de Sistema Operativo Multiusuario 167 Si Desarrollo No No Aplica 13. Calculó cuántos directorios hay en el sistema 14. Calculó cuantos archivos hay en el sistema. 15. Repitió los procedimientos con asesoría del PSP. 16. Salió del shell de UNIX. 17. Apagó el equipo de cómputo. 4 Depositó los residuos recuperables. Observaciones: PSP: Hora de inicio: 168 Hora de término: Evaluación: Operación de Sistema Operativo Multiusuario Unidad de aprendizaje: 2 Práctica número: 13 Nombre de la práctica: Manejo de procesos Propósito de la práctica: Al finalizar la práctica, el alumno manejará procesos a través de comandos Escenario: Laboratorio de Informática. Duración: 6 hrs. Materiales • Software instalado de UNIX o software de emulación UNIX. Maquinaria y Equipo • Terminal o Computadora Herramienta (Pentium III). • Manual en línea de UNIX. • Cuaderno de notas. • Pluma o lápiz. Operación de Sistema Operativo Multiusuario 169 Procedimiento ­Aplicar las medidas de seguridad e higiene. • Evitar la manipulación de líquidos cerca del equipo. • No introducir objetos extraños en los dispositivos de disco. • No utilizar imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpiar el área de trabajo. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Encender equipo de cómputo. Entrar al Unix Shell. Averigüe los permisos que tienen los archivos del directorio raíz. Obtenga un listado de todos los procesos que le pertenecen. Use la orden man para ver el formato de la orden ps. Pruebe y anote cuáles son las principales opciones. Obtenga un listado de todos los procesos que se están ejecutando en el sistema, paginando la salida. Averigüe los procesos que se están ejecutando en el sistema que pertenezcan al usuario root. Ejecute en background un proceso que almacene en un archivo el nombre de aquellos archivos cuyo tamaño es mayor de 200 bloques a partir del archivo raíz. Transcurridos unos segundos, si no ha terminado, elimine el proceso. Lance un proceso de larga duración (por ejemplo, una orden find sobre todo el sistema). Detenga su ejecución con CTRL-Z y observe que el proceso sigue estando en el sistema. Elimínelo. Busque en el manual cómo funciona la familia de órdenes jobs. Pruebe, con el ejemplo anterior, cómo se puede reanudar un proceso que previamente ha sido detenido. Haga algunos ejemplos de procesos para ver cómo se puede cambiar la ejecución entre primer y segundo plano y viceversa. Supongamos que se tiene una orden ejecutando en segundo plano (p.e., un find) y queremos detenerla temporalmente (no abortarla). ¿Cómo lo haría? Averigüe a qué grupo pertenece. Repetir los procedimientos con asesoría del PSP. Salir del shell Apagar el equipo de cómputo 4 Depositar los residuos recuperables disponiendo de 3 botes de reciclaje tonner, discos y papel. 170 Operación de Sistema Operativo Multiusuario Lista de cotejo de la práctica número 13: Manejo de procesos Nombre del alumno: Instrucciones: A continuación se presentan los criterios que van a ser verificados en el desempeño del alumno mediante la observación del mismo. De la siguiente lista marque con una 9 aquellas observaciones que hayan sido cumplidas por el alumno durante su desempeño. Desarrollo Si No No Aplica ®Aplicó las medidas de seguridad e higiene. • Evitó la manipulación de líquidos cerca del equipo. • No introdujo objetos extraños en los dispositivos de disco, • No utilizó imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpió el área de trabajo. 1. Encendió el equipo de cómputo. 2. Abrió sesión de UNIX. 3. Averiguó los permisos que tienen los archivos del directorio raíz. 4. Obtuvo un listado de todos los procesos que le pertenecen 5. Usó la orden man para ver el formato de la orden ps. Probó y anotó cuáles son las principales opciones 6. Obtuvo un listado de todos los procesos que se están ejecutando en el sistema, paginando la salida 7. Averiguo los procesos que se están ejecutando en el sistema que pertenezcan al usuario root. 8. Ejecutó en background un proceso que almacene en archivo el nombre de los archivos cuyo tamaño es mayor de 200 bloques a partir del archivo raíz. 9. Lanzó un proceso de larga duración, Detuvo su ejecución con CTRL-Z y observó que el proceso sigue estando en el sistema. Lo eliminó 10. Buscó en el manual cómo funciona la familia de órdenes jobs. Probó, con el ejemplo anterior, cómo se puede reanudar un proceso que previamente ha sido detenido. 11. Hizo algunos ejemplos de procesos para ver cómo se puede cambiar la ejecución entre primer y segundo plano y viceversa. 12. Detuvo temporalmente una orden ejecutando en segundo plano 13. Averiguó a que grupo pertenecía 14. Repitió los procedimientos con asesoría del PSP. 15. Salió del shell de UNIX. 16. Apagó el equipo de cómputo. 4 Depositó los residuos recuperables. Operación de Sistema Operativo Multiusuario 171 Observaciones: PSP: Hora de inicio: 172 Hora de término: Evaluación: Operación de Sistema Operativo Multiusuario Unidad de aprendizaje: 2 Práctica número: 14 Nombre de la práctica: Manejo de atributos de archivos y compresión de archivos Propósito de la práctica: Al finalizar la práctica, el alumno manejará atributos de archivos y podrá comprimir archivos a través de comandos Escenario: Laboratorio de Informática. Duración: 6 hrs. Materiales • Software instalado de UNIX o software de emulación UNIX. Maquinaria y Equipo • Terminal o Computadora Herramienta (Pentium III). • Manual en línea de UNIX. • Cuaderno de notas. • Pluma o lápiz. Operación de Sistema Operativo Multiusuario 173 Procedimiento ­Aplicar las medidas de seguridad e higiene. • Evitar la manipulación de líquidos cerca del equipo. • No introducir objetos extraños en los dispositivos de disco. • No utilizar imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpiar el área de trabajo. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Encender equipo de cómputo. Entrar al Unix Shell. Comprobar cuál es el valor de la mascara de usuario. Cree un archivo nuevo y compruebe los permisos que adquiere. Modifique la máscara de usuario para que los miembros de su grupo puedan leer sus nuevos archivos y los de otros grupos no. Cree un nuevo archivo y directorio y compare sus permisos con los del problema anterior. Modifique los permisos del archivo y directorio del apartado anterior para que únicamente pueda ser leído y modificado por el propietario. Usar la forma octal del modo. Modifique los permisos del directorio de conexión para que los demás miembros del grupo tengan permiso de lectura únicamente. Cree un nuevo archivo y protéjalo al máximo de forma que ni siquiera pueda leerlo. Restablezca sus permisos para que pueda borrarlo. Queremos que los archivos de nueva creación adquieran los permisos rw-r-----, ¿qué orden usaremos? Utilice la orden tar para hacer un archivo tar del contenido de su directorio HOME. Guárdelo en un archivo que se llame copia.tar. Observe el contenido del archivo copia.tar. Comprima el archivo copia.tar con la orden compress. Descomprima el archivo copia.tar.Z y expanda su contenido a partir del subdirectorio ps. Obtenga la descripción y sintaxis de la orden talk. Póngase de acuerdo con otro usuario y utilicen dicha orden. Repetir los procedimientos con asesoría del PSP. Salir del shell Apagar el equipo de cómputo. Nota: El instructor deberá adecuar la práctica al equipo con el que se cuenta. 4 Depositar los residuos recuperables disponiendo de 3 botes de reciclaje tonner, discos y papel. 174 Operación de Sistema Operativo Multiusuario Lista de cotejo de la práctica Número 14: Manejo de atributos de archivos y compresión de archivos. Nombre del alumno: Instrucciones: A continuación se presentan los criterios que van a ser verificados en el desempeño del alumno mediante la observación del mismo. De la siguiente lista marque con una 9 aquellas observaciones que hayan sido cumplidas por el alumno durante su desempeño Si Desarrollo ®Aplicó las medidas de seguridad e higiene. • Evitó la manipulación de líquidos cerca del equipo. • No introdujo objetos extraños en los dispositivos de disco, • No utilizó imanes cerca de discos flexibles, discos compactos ó del equipo. • Limpió el área de trabajo. 1. Encendió el equipo de cómputo. 2. Abrió sesión de UNIX. 3. Comprobó cuál es el valor de la mascara de usuario. 4. Creó un archivo nuevo y comprobó los permisos que adquiere. 5. Modificó la máscara de usuario y creó un nuevo archivo y directorio y comparó sus permisos. 6. Modificó los permisos del archivo y directorio del apartado anterior para que únicamente pueda ser leído y modificado por el propietario. 7. Modificó los permisos del directorio de conexión para que los demás miembros del grupo tengan permiso de lectura únicamente. 8. Creó un nuevo archivo y lo protegió al máximo de forma que ni siquiera pudo leerlo. Restableció sus permisos y lo borró. 9. Creó nuevos con los permisos rw-r----10. Utilizó la orden tar para hacer un archivo tar del contenido de su directorio HOME. Lo guardó en un archivo llamado copia.tar. 11. Observó el contenido del archivo copia.tar. 12. Comprimió el archivo copia.tar con la orden compress. 13. Descomprimió el archivo copia.tar.Z y expandió su contenido a partir del subdirectorio ps. 14. Obtuvo la descripción y sintaxis de la orden talk y utilizó dicha orden. 15. Repitió los procedimientos con asesoría del PSP. 16. Salió del shell de UNIX. 17. Apagó el equipo de cómputo. 4 Depositó los residuos recuperables. Operación de Sistema Operativo Multiusuario No No Aplica • 175 Observaciones: PSP: Hora de inicio: 176 Hora de término: Evaluación: Operación de Sistema Operativo Multiusuario RESUMEN Una variable de entorno en la shell es una referencia a un valor. Se distinguen dos tipos : locales y globales. Una variable local es aquella que se define en el shell actual y sólo se conocerá en ese shell durante la sesión de conexión vigente. Una variable global es aquella que se exporta desde un proceso activo a todos los procesos hijos Con lo que tenemos la seguridad de que las variables siempre son bien interpretadas . Las llaves se utilizan SIEMPRE en el momento de evaluar la variable , no de asignarle valores. No tiene sentido hacer cosas como {COSAS}=tontería Operación de Sistema Operativo Multiusuario Los programas , se interpretan en tiempo de ejecución. Por tanto , la codificación de una shell-script es sumamente sencilla en el sentido en el que basta con escribir en un fichero de texto l os comandos y ejecutarlo. Dentro de una shell , existen las variables de entorno que hayamos definido anteriormente , bien en la misma , en otra ó en los ficheros profile de inicialización. Además de éstas , existen otras que detallam os a continuación 177 AUTOEVALUACIÓN DE CONOCIMIENTOS DEL CAPITULO 2 1. 2. 3. 4. 5. 178 ¿ Cuál es la sintaxis de la instrucción OPTIONS? ¿ Cuál es la utilidad MKMESSAGE? ¿ Qué archivos se generan al crear una forma? ¿Qué realiza la instrucción OPEN FORM y cuál es su sintaxis? ¿ Cuáles son los atributos de las ventanas? Operación de Sistema Operativo Multiusuario RESULTADOS DE AUTOEVALUACIÓN DE CONOCIMIENTOS 1. options message line NUMERO DE LA LÍNEA DE MENSAJE, error line NUMERO DE LA LÍNEA DE ERROR, prompt line NUMERO DE LA LÍNEA DE PETICIÓN DE RESPUESTA 2. Es una facilidad que permite al usuario crear su propio sistema de archivos de ayuda para una aplicación, debe ser invocado desde el sistema operativo, para que compile un archivo de texto con mensajes de ayuda y de esta forma pueda ser invocado por un programa 4GL. 3. *.per que es un archivo ascii con las especificaciones de la forma *.frm que es un archivo ejecutable con la versión compilada de la forma. Un usuario no puede modificar un archivo .frm 4 La instrucción OPEN FORM se utiliza para asociar el nombre de una forma 4GL con un archivo previamente compilado que contiene las especificaciones de una forma. open form FORM-NAME from «FORM-FILE» 5. ATRIBUTOS DEFAULT BORDER NO BORDER REVERSE NO REVERSE PROMPT LINE FIRST MESSAGE LINE FIRST + 1 FORM LINE FIRST + 2 COMMENT LINE LAST Operación de Sistema Operativo Multiusuario 179 GLOSARIO DE TÉRMINOS DE E-CBNC Campo de aplicación Competencia laboral Criterio de desempeño Parte constitutiva de una Norma Técnica de Competencia Laboral que describe el conjunto de circunstancias laborales posibles en las que una persona debe ser capaz de demostrar dominio sobre el elemento de competencia. Es decir, el campo de aplicación describe el ambiente laboral donde el individuo aplica el elemento de competencia y ofrece indicadores para juzgar que las demostraciones del desempeño son suficientes para validarlo Aptitud de un individuo para desempeñar una misma función productiva en diferentes contextos y con base en los requerimientos de calidad esperados por el sector productivo. Esta aptitud se logra con la adquisición y desarrollo de conocimientos, habilidades y capacidades que son expresados en el saber, el hacer y el saber-hacer. Parte constitutiva de una Norma Técnica de Competencia Laboral que se refiere al conjunto de atributos que deberán presentar tanto los resultados obtenidos, como el desempeño mismo de un elemento de competencia; es decir, el cómo y el qué se espera del desempeño. Los criterios de desempeño se asocian a los elementos de competencia. Son una descripción de los requisitos de calidad para el resultado obtenido en el desempeño laboral; permiten establecer si se alcanza o no el resultado descrito en el elemento de competencia. Elemento de Competencia. Es la descripción de la realización que debe ser lograda por una persona en al ámbito de su ocupación. Se refiere a una acción, un comportamiento o un resultado que se debe demostrar por lo tanto es una función realizada por un individuo. La desagregación de funciones realizada a lo largo del proceso de análisis funcional usualmente no sobrepasa de cuatro a cinco niveles. Estas diferentes funciones, cuando ya pueden ser ejecutadas por personas y describen acciones que se pueden lograr y resumir, reciben el nombre de elementos de competencia. Evidencia de conocimiento. Parte constitutiva de una Norma Técnica de Competencia Laboral que hace referencia al conocimiento y comprensión necesarios para lograr el desempeño competente. Puede referirse a los conocimientos teóricos y de principios de base científica que el alumno y el trabajador deben dominar, así como a sus habilidades cognitivas en relación con el elemento de competencia al que pertenecen. 180 Operación de Sistema Operativo Multiusuario Evidencia por producto Evidencia de Desempeño. Hacen referencia a los objetos que pueden usarse como prueba de que la persona realizó lo establecido en la Norma Técnica de Competencia Laboral. Las evidencias por producto son pruebas reales, observables y tangibles de las consecuencias del desempeño Parte constitutiva de una Norma Técnica de Competencia Laboral, que hace referencia a una serie de resultados y/o productos, requeridos por el criterio de desempeño y delimitados por el campo de aplicación, que permite probar y evaluar la competencia del trabajador. Cabe hacer notar que en este apartado se incluirán las manifestaciones que correspondan a las denominadas habilidades sociales del trabajador. Son descripciones sobre variables o condiciones cuyo estado permite inferir que el desempeño fue efectivamente logrado. Las evidencias directas tienen que ver con la técnica utilizada en el ejercicio de una competencia y se verifican mediante la observación. La evidencia por desempeño se refiere a las situaciones que pueden usarse como pruebas de que el individuo cumple con los requerimientos de la Norma Técnicas de Competencia Laboral. Evidencia de actitud Formación ocupacional Las Normas Técnicas de Competencia Laboral incluyen también la referencia a las actitudes subyacentes en el desempeño evaluado Módulo ocupacional Unidad autónoma integrada por unidades de aprendizaje con la finalidad de combinar diversos propósitos y experiencias de aprendizaje en una secuencia integral de manera que cada una de ellas se complementa hasta lograr el dominio y desarrollo de una función productiva. Norma Técnica de Competencia Laboral Documento en el que se registran las especificaciones con base en las cuales se espera sea desempeñada una función productiva. Cada Norma Técnica de Competencia Laboral esta constituida por unidades y elementos de competencia, criterios de desempeño, campo de aplicación y evidencias de desempeño y conocimiento. Proceso por medio del cual se construye un desarrollo individual referido a un grupo común de competencias para el desempeño relevante de diversas ocupaciones en el medio laboral. Operación de Sistema Operativo Multiusuario 181 GLOSARIO DE TÉRMINOS TÉCNICOS Glosariovi « D P X Y d p x y Insertar nuevo texto A I O a i o Desplazar el cursor dentro de un archivo ^B ^D ^F ^H ^J 182 El editor VI es un editor que opera en modo consola, utilizado por muchos usuarios de Unix. El editor VI posee características muy útiles para los programadores, pero muchos principiantes evitan emplearlo porque se ven abrumados por sus variadas funciones. Este tutorial ha sido escrito con el propósito de ayudar a los principiantes a familiarizarse con el uso del editor VI, pero también contiene apartados de interés para quienes ya lo utilizan habitualmente Especifica un búfer para ser utilizado por cualquiera de las órdenes que se sirven de ellos. Añada una letra o número tras el signo « para signarle un búfer. Borra desde la posición actual del cursor hasta el final de la línea. Pega el búfer especificado delante de la línea o posición actual del cursor. Si no se especifica ningún búfer (con la orden « ), entonces ‘P’ hace uso del búfer general. Borra el carácter anterior al cursor. Graba la línea actual en el búfer especificado. Si no se especifica ninguno la grabará en el búfer general. Borra hasta dónde. «dd» borra la línea actual. Una cifra indica el número de líneas a borrar. Cualquier cosa borrada se grabará en el búfer especificado con la orden «. Si no se especifica ningún búfer, utilizará el búfer general. Pega el contenido del búfer especificado tras la línea o posición actual del cursor. Si no se especifica ningún búfer (con la orden « ), entonces ‘p’ hace uso del búfer general. Borra el carácter sobre el que se halla el cursor. Una cifra indicará cuántos caracteres han de borrarse. Los caracteres se borrarán tras el cursor. Graba hasta , colocándolo en un búfer. «yy» graba la línea actual. Una cifra indicará cuántas líneas han de grabarse. El búfer puede especificarse con la orden «. Si no se especifica ninguno, se utilizará el búfer general. Añade el texto al final de la línea actual. Inserta el texto desde el comienzo de la línea. Introduce el modo insertar en una nueva línea encima de la posición actual del cursor. Cambia al modo insertar. Los caracteres escritos se insertarán tras la posición actual del cursor. Una cifra insertará el texto añadido la cantidad de veces indicada. Cambia al modo insertar. Los caracteres escritos se insertarán delante de la posición actual del cursor. Una cifra insertará el texto añadido la cantidad de veces indicada. Introduce el modo insertar en una nueva línea bajo la posición actual del cursor. Nos lleva una página atrás. Con una cifra, nos desplazará el número de páginas indicado. Nos lleva media ventana hacia delante. Con una cifra, nos desplazará el número de líneas indicado. Nos lleva una página hacia delante. Con una cifra, nos desplazará el número de páginas indicado. Mueve el cursor un espacio hacia la izquierda. Con una cifra, nos desplazará el número de espacios indicado. Mueve el cursor una línea hacia abajo en la misma columna. Con una cifra, lo hará descender el número de líneas indicado. Operación de Sistema Operativo Multiusuario ^M ^N ^P ^U $ % ^ ( ) { } | + _ 0 B E G H L M W b e h j k l w Desplazar el cursor por la pantalla ^E ^Y z Lleva el cursor al primer carácter de la línea siguiente. Mueve el cursor una línea hacia abajo en la misma columna. Con una cifra, lo hará descender el número de líneas indicado. Mueve el cursor una línea hacia arriba en la misma columna. Con una cifra, lo hará subir el número de líneas indicado. Nos lleva media ventana hacia atrás. Con una cifra, nos desplazará el número de líneas indicado. Desplaza el cursor hasta el final de la línea actual. Con una cifra, nos llevará cuantas líneas adelante indiquemos. Desplaza el cursor hasta el paréntesis o comillas correspondientes. Lleva el cursor hasta el primer lugar que no está en blanco. Lleva el cursor al comienzo de una frase. Lleva el cursor al comienzo de la frase siguiente. Lleva el cursor al párrafo anterior. Lleva el cursor al siguiente párrafo. Lleva el cursor a la columna especificada por la cifra. Lleva el cursor hasta el primer lugar de la línea siguiente que no está en blanco. Lleva el cursor hasta el primer lugar de la línea anterior que no está en blanco. Lleva el cursor hasta el primer lugar de la línea actual que no está en blanco. (Cero) Lleva el cursor a la primera columna de la línea actual. Lleva el cursor una palabra hacia atrás, incluyendo los signos de puntuación. Lleva el cursor al final de la palabra actual, incluyendo los signos de puntuación. Nos lleva al número de línea especificado en la cifra. Si no se indica una cifra, nos llevará al final del archivo. Lleva el cursor hasta el primer lugar de la parte superior de la pantalla que no está en blanco. Lleva el cursor hasta el primer lugar de la parte inferior de la pantalla que no está en blanco. Lleva el cursor hasta el primer lugar del centro de la pantalla que no está en blanco. Lleva el cursor hacia delante hasta el comienzo de una palabra, incluyendo los signos de puntuación. Lleva el cursor una palabra hacia atrás. Si el cursor se encuentra en medio de una palabra, desplazará el cursor hasta el primer carácter de esa palabra. Lleva el cursor una palabra hacia delante. Si el cursor se encuentra en medio de una palabra, desplazará el cursor hasta el último carácter de esa palabra. Mueve el cursor una posición hacia la izquierda. Lleva el cursor una línea hacia abajo. Lleva el cursor una línea hacia arriba. Mueve el cursor una posición hacia la derecha. Lleva el cursor una palabra hacia delante. Si el cursor se encuentra en medio de una palabra, desplazará el cursor hasta el primer carácãer de la siguiente palabra. Nos lleva una línea hacia delante. Con una cifra, nos desplazará el número de líneas indicado. Nos lleva una línea hacia atrás. Con una cifra, nos desplazará el número de líneas indicado. Rehace la pantalla con las opciones que se especifiquen a continuación. «z<enter>» coloca la línea actual en el extremo superior de la pantalla; «z.» coloca la línea actual en Operación de Sistema Operativo Multiusuario 183 Reemplazar texto C R S c r s Buscar texto o caracteres , / ; ? F N T n t Manipulación de caracteres/For mateo de líneas ~ < > J Guardar y salir ^\ Q ZZ ^G ^L ^R 184 el centro de la pantalla; y «z-» coloca la línea actual en el extremo inferior de la pantalla. Si especifica una cifra antes de la orden ‘z’, trasladará la línea especificada al lugar señalado. Por ejemplo, «16z.» coloca la línea 16 en el centro de la pantalla. Para cambiar lo que hay a partir de la posición actual del cursor hasta el fin de la línea. Sustituye los caracteres en pantalla por los que continuación se introduzcan; para finalizar hay que pulsar la tecla Esc. Para cambiar una línea entera. Para cambiar hasta . «cc» cambia la línea actual. Si se especifica una cifra, cambiará el número de líneas especificado. Para sustituir el carácter sobre el que se encuentra el cursor. Especifique una cifra para sustituir un determinado número de caracteres. Para sustituir el carácter sobre el que se encuentra el cursor y pasar a modo insertar. Especifique una cifra para sustituir un determinado número de caracteres. Un signo de dollar ($) aparecerá en el último carácter a sustituir. Repite las últimas órdenes f, F, t or T en la dirección opuesta. Busca hacia abajo, en el archivo, la secuencia especificada tras /. Repite las últimas órdenes f, F, t or T. Busca hacia arriba, en el archivo, la secuencia especificada tras ?. Busca en la línea actual, hacia atrás, la secuencia especificada tras la orden ‘F’. Si encuentra, el cursor se desplaza hasta ella. Repite la última búsqueda realizada mediante ‘/’ o ‘?’, en la dirección opuesta. Busca en la línea actual, hacia atrás, el carácter especificado tras la orden ‘T’. Si encuentra, el cursor se desplaza a la columna posterior a él. f Busca en la línea actual el carácter especificado tras la orden ‘f’. Si lo encuentra, cursor se desplaza hasta él. Repite la última búsqueda realizada mediante ‘/’ o ‘?’. Busca en la línea actual el carácter especificado tras la orden ‘t’. Si lo encuentra, cursor se desplaza hasta la columna que lo precede. la lo el el Cambia el carácter que se encuentra bajo el cursor de mayúscula a minúscula o viceversa. Desplaza el número de líneas especificado una tabulación hacia la izquierda. «<<« desplaza la línea actual hasta la izquierda, pudiendo especificarse también una cifra. Desplaza el número de líneas especificado una tabulación hacia la derecha. «>>» desplaza la línea actual hasta la derecha, pudiendo especificarse también una cifra. Junta la línea actual con la siguiente. Puede especificarse una cifra para juntar un determinado número de líneas. Salir del modo «VI» y entrar en modo «EX». El editor EX es un editor de líneas sobre el que se ha construido el editor VI. La orden de EX para regresar a VI es «:vi». Salir del modo «VI» y entrar en modo «EX». El editor EX es un editor línea-a-línea. La orden de EX para regresar a VI es «:vi». Salir del editor guardando los cambios que se hubieran hecho. Muestra el nombre del archivo actual y su estado. Para limpiar y rehacer la pantalla. Operación de Sistema Operativo Multiusuario ^[ ^^ ! & . : @ U m u Órdenes de EX :ab secuencia1 secuencia2 :map teclas nueva_secuenc ia_de_teclas :q Para rehacer la pantalla eliminando las líneas erróneas. Igual que la tecla Esc. Cancela las órdenes parcialmente escritas. Regresar al último archivo editado. Ejecutar un shell. Si se especifica una cifra el programa que se ejecuta utilizando !, tomará la(s) linea(s) especificadas como entrada (input) y reemplazará dichas líneas con el resultado obtenido (output) del programa ejecutado. «!!» ejecuta un programa utilizando como entrada la línea actual. Por ejemplo, «!4jsort» tomará la línea en que se encuentra el cursor más las cuatro siguientes y ejecutará sort. Tras activar la orden aparecerá un signo de exclamación donde usted podrá escribir las instrucción completa. Repite la orden previa «:s». Repite la última orden que modificó el archivo. Para comenzar a escribir una orden del editor EX. La orden se ejecutará una vez que el usuario pulse Enter. (Véase el siguiente apartado.) Imprime el comando almacenado en el búfer especificado. Devuelve la línea actual al estado en que se encontraba antes de que el cursor se colocara en ella. Marca la posición actual con el carácter especificado tras la orden ‘m’. Deshace el último cambio operado en el archivo. Pulsando ‘u’ de nuevo rehará el cambio. El editor VI está construido sobre otro editor, denominado EX. El editor EX sólo edita por líneas. Para introducir una orden de EX desde el editor VI, deberá utilizar la orden :. La lista que ofrecemos a continuación no es completa, pero aparecen ahí las órdenes que habitualmente más se emplean. Si se quiere que una orden -como «:s» o «:w» modifique más de una línea, hay que especificar el intervalo al que afectará dicha orden. Por ejemplo, para hacer alguna sustitución entre las líneas 3 y 15, la orden sería «:3,15s/esto/estotro/g». Abreviatura. De este modo, si en VI se escribe la secuencia 1, ewl editor insertará automáticamente las palabras correspondientes (secuencia2). Por ejemplo, la orden «:ab lup Licencia de Uso Público» haría que siempre que se escribiese «lup» se insertara la expresión «Licencia de Uso Público». Esto le permite que una tecla o secuencia de teclas desempeñe la misma función que determinada tecla o secuencia de teclas. Salir de VI. Si se ha hecho algún cambio, el editor producirá un mensaje de aviso. Salir de VI sin guardar los cambios. :q! :s/secuencia/nu eva_secuencia/ opción Sustitución. Esta orden sustituye la secuencia especificada por la nueva_secuencia. Si no :set [all] :una secuencia :unm teclas :vi nombre_de_ar chivo :w se añade ninguna opción, sólo sustituirá la primera aparición de la secuencia. Si se indica la opción ‘g’, la sustitución se hará en todos los lugares en que aparezca. Por ejemplo, la orden «:1,$s/Dwayne/Dwight/g» sustituirá todo «Dwayne» por «Dwight». Configura algunas opciones para personalizar VI y EX. La orden «:set all» muestra todas las opciones posibles. (Consúltese el apartado de personalización de VI para ver algunas de ellas.) Borra la abreviatura previamente definida por «:ab». Borra la asignación de funciones a nuevas teclas, definidas a través de «:map». Comienza la edición de un nuevo archivo. Si no han sido guardados los cambios, el editor le avisará de ello. Operación de Sistema Operativo Multiusuario 185 :w nombre_de_ar chivo :w >> nombre_de_ar chivo :wq 186 Guarda el trabajo en el archivo actual. Escribe el contenido del búfer en el archivo especificado. Añade el contenido del búfer en el archivo especificado. Escribe el contenido del búfer y cierra el editor. Operación de Sistema Operativo Multiusuario REFERENCIAS DOCUMENTALES • Benedí Palacios, José Alberto, UNIX, Ediciones Anaya Multimedia, España, 2004. • Hansen Augie, ¡Aprenda C ya!, Microsoft Press, 1988. • T. Hawryszkiewycz, Análisis y diseño de bases de datos, Grupo Noriega Editores, 1996. • Kernighan Brian W., El lenguaje de programación C, Prentice Hall, 1986. • L.Viescas Jhon, Guía Completa de Microsoft Access 2 para Windows, McGraw Hill, 1994. • Mansoor Sarwar, Syed, Robert Koretsky, Syed Aqeel Sarwar. El libro de UNIX. 2da. Edición, Ed. Pearson Educación, España, 2002. • Miren Begoña Albizuri, Estructuras de Datos e Introducción a Bases de Datos, Grupo Noriega Editores, 1996. • Sánchez, Sebastián. Unix y Linux / guía práctica, Alfaomega Grupo Editor, México, D.F., 2002. • Tenenbaum Aaron M., Estructuras de datos en C, Prentice Hall, 1993. Operación de Sistema Operativo Multiusuario 187