Vista previa del material en texto
UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 1 - Prologo Aprender implica esfuerzo. Esta es la noción que se ha ido perdiendo. Que aprender es un trabajo, una tarea nada sencilla que demanda sacrificios. Que aprender supone que cada persona emprenda un esfuerzo individual destinado a modificarse a sí misma, por lo general con ayuda de otros. Allí interviene el docente, que con su conocimiento y experiencia guía al alumno a esa exploración y, sobre todo, lo interesa en emprenderla. Afirma un proverbio chino. “Los maestros abren la puerta, tú debes entrar por ti mismo”. UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 2 - Introducción En un primer momento nos propusimos confeccionar un apunte netamente practico, con actividades de laboratorio autocontenidas, es decir actividades resueltas y explicadas paso a paso. Pero a medida que fuimos avanzando en su desarrollo, sentimos la necesidad de complementar esas actividades con fundamentos teóricos, de cómo Linux administra los recursos de un sistema informático. El presente material es una guía Teórica-Práctica que contiene los conceptos teóricos propios de Linux y a su vez relaciona y refuerza los conceptos teóricos de los Sistemas Operativos en general. Cada tema es tratado conceptualmente y en forma practica por lo que se hace deseable disponer de al menos una PC para seguir las actividades que se van planteando. Los temas tratados en este trabajo han sido desarrollados con un nivel mínimo y homogéneo de profundidad, de forma tal que el alumno cuente con las bases necesarias para introducirse en el fascinante mundo de Linux y le sea posible la investigación posterior de los temas que sean de su interés. La organización de su contenido esta dividido en capítulos según el tema. Los capítulos contienen temas diagramados para desarrollar aproximadamente en una clase de laboratorio. Al final de cada capítulo hay actividades para reforzar la teoría y/o actividades practicas de laboratorio. Estas actividades integran los conceptos vistos en temas anteriores, están resueltas y acompañadas de una breve explicación conceptual. Además de las actividades de cada capítulo, se anexa una guía de ejercicios de practica libre, también resuelta, cuyo fin es reforzar los conceptos desarrollados, estas actividades se encuentran bajo el titulo de Prácticos Integradores. Al realizar este trabajo no pensamos que resultaría una tarea tan ardua, ya que hemos dedicado muchas horas de trabajo e investigación con el fin de lograr un material lo mas completo posible y en un lenguaje entendible para el alumno. Es por ello que la labor terminada nos han dejado la grata sensación de haber cumplido nuestros objetivos. Es nuestro compromiso agregar en la siguiente edición algunos temas que creemos son importantes de tratar pero, pero como el tiempo es tirano no pudimos incluirlos en la presente edición. Está de mas decir que serán bienvenidas todas las sugerencias y/o aportes que los docente y alumnos nos hagan llegar. UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 3 - 1 LINUX Primeros conceptos UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 4 - Que es Linux? LINUX es un sistema operativo gratuito y de libre distribución. Una de cuyas mayores ventajas es su portabilidad a diferentes tipos de computadores, por lo que existen versiones de LINUX para casi todos los tipos de computadores, desde PC y Mac hasta estaciones de trabajo y supercomputadores. Al contrario que otros sistemas operativos, LINUX no está pensado para ser fácil de emplear, sino para ser sumamente flexible. Por lo tanto LINUX no es en general tan sencillo de emplear como otros sistemas operativos, aunque, se están realizando grandes esfuerzos para facilitar su uso. Pese a todo la enorme flexibilidad de LINUX y su gran estabilidad ( y el bajo costo) han hecho de este sistema operativo una opción para tener en cuenta por aquellos usuarios que se dediquen a trabajar a través de redes, naveguen por Internet, o se dediquen a la programación. Además el futuro de LINUX es brillante y cada vez más y más gente y más y más empresas (entre otras IBM, Intel, Corel) están apoyando este proyecto, con lo que el sistema será cada vez más sencillo de emplear y los programas serán cada vez mejores. Historia La aparición de LINUX en el mundo de la informática fue una evolución de la cultura de Unix. Este se desarrolló a mediado de los ’70 cuando los miniordenadores y los grandes sistemas dominaban el mundo corporativo. El problema histórico de Unix ha sido su inaccesibilidad a los programadores y desarrolladores que querían trabajar con él fuera de los grandes sistemas de ordenadores. Aunque posteriormente aparecieron versiones de Unix para PC, las primeras versiones comerciales costaban mas que el PC en el que se debían ejecutar. Esto facilitó el nacimiento de LINUX, de la mano de Linus Torvalds, un estudiante de la universidad finlandesa de Helsinki, quien, en 1991, se abocó a la tarea de reemplazar a Minix, un clon de Unix de pequeñas proporciones y finalidad académica, desarrollado años antes por Andrew Tannenbaun. En un principio Linus Torvalds escribió todo LINUX en Assembler , pero luego, llegada la hora de escribir algunos drivers, comenzó a utilizar C, con lo que notó una importante aceleración en los tiempos de desarrollo. A fines de Agosto de 1991, Torbalds ya tenía una precaria versión 00.1 de Linux, que era capaz de montar disquetes y contaba con un pequeño sistema de archivos, pero no fue anunciada como oficial ya que necesitaba de Minix para compilarla. En Octubre del ’91 fue anunciada oficialmente la versión 0.02, esta versión podía ejecutar las utilidades bash, gcc, gnu-make, gnu- sed, y compress. Esta versión no era muy usable. A medida que avanzaba en su desarrollo, Torvalds fue dejando el código fuente de las sucesivas versiones del kernel (núcleo) y utilidades de Linux a disponibilidad de los usuarios de Internet. Este fue sin duda un gran acierto, ya que hizo posible que una multitud de desarrolladores de todo el mundo se familiarizaran con el código, lo cual significó un gran aporte de sugerencias, evolucionando luego hacia el desarrollo distribuido de software, que ha permitido a Linux alcanzar un alto nivel de desarrollo y madurez, así también como un amplio grado de aceptación. Aunque el Linux actual se ha desarrollado con el aporte de programadores del mundo, Torvalds aún mantiene el control sobre los cambios en la parte básica del sistema operativo, el núcleo. UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 5 - Esta es la mascota oficial de Linux, que fue elegida por el creador, para representar el sistema operativo que él había creado. Hoy en día todo el mundo asocia a este simpático pingüino con el sistema operativo Linux. Características Actualmente, Linux posee todas las características que pueden encontrarse en cualquier sistema Unix moderno: Multitarea real: La palabra multitarea describe la capacidad de ejecutar muchos programas al mismo tiempo sin detener la ejecución de cada aplicación. La multitarea es una virtud codiciada por muchos sistemas operativos, pero lograda por muy pocos. Casi todos los que dicen serlo lo son a medias; en cambio, la multitarea que usa LINUX administra los recursos garantizando que todos los procesos en ejecución, incluidos los que corren en background, tengansu tiempo de procesador. Multiusuario: LINUX es un sistema operativo multitarea y, obviamente, debe ser multiusuario, es decir que permite a distintas personas acceder al sistema compartiendo los recursos que el Administrador del Sistema (superusuario, root) le asigne de acuerdo con su jerarquía, dándole además a cada uno la privacidad y protección necesarias. Soporta consolas virtuales: lo que permite tener más de una sesión abierta en la consola de texto y conmutar entre ellas fácilmente. Soporta los estándares POSIX, BSD, IEEE y System V. Opera con todos los sistemas de ficheros estándar, como FAT de DOS, VFAT de Windows, OS2/FS, IS09660 (CD-ROM), Minix y otros. Sistema Operativo de Red: Su protocolo es TCP/IP (incluido en el kernel) y acepta todas la placas de red, SLIP, PPP para acceso serial a TCP/IP, PLIP para conexiones en paralelo, NFS Sistema de Archivos de Red, Telnet, NNTP, SMTP, IPX, AppleTalk. Por medio de la utilización del paquete Samba, Linux puede interactuar con servidores Windows NT y estaciones Windows For Workgroups y Windows95, para acceder desde Linux a recursos compartidos desde maquinas Windows (directorios e impresoras), y viceversa. El kernel incluye soporte para IPX, lo que le permite funcionar como ruteador en redes Novell. Direccionamiento de 32 bits reales en una PC y de 64 en una Alpha. Su kernel utiliza las característica del modo protegido de los micros 386 y superiores. Soporte completo de hardware, multimedia, módems, impresoras, placas de video, monitores, teclados, mouse, etc. Poderoso entorno gráfico con innumerables sistemas de ventanas. Los más populares son FWVM, GNOME, KDE, CDE, Enlightenment, Afterstep, NextLevel, @rM, etc. G.N.U.: si bien Linus Torvalds es el titular del derecho de autor de LINUX, todo, incluido el kernel con sus fuentes, está bajo licencia GNU. Esta licencia permite que todo el software desarrollado bajo este concepto sea de libre distribución, de modo que se ofrece software de calidad al público en general sin que los programadores pierdan sus derechos de autor y dejando abierta la posibilidad para que cualquier otro programador pueda ampliar o modificar el programa. Librerías compartidas: shared libraries, gracias a esta característica, no es necesario que las rutinas contenidas en librerías estándar se carguen más de una vez en memoria, ya que cualquier programa que se encuentre en tiempo de ejecución puede acceder a ellas. De esta manera, los binarios (ejecutables) de LINUX son de menor tamaño y permiten ahorrar espacio en disco y memoria. UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 6 - Carga por demanda: en la mayoría de los sistemas operativos, cada nuevo proceso (aplicación) que se lanza demanda memoria y recursos, y cuando se termina la RAM, automáticamente se comienza a hacer uso de la memoria virtual. Esto no ocurre en LINUX, puesto que su administración inteligente de memoria pasa a memoria virtual cualquier proceso que se encuentre activo pero no en uso, con lo que se garantiza RAM para las aplicaciones activas y en uso. Administración de memoria: todos los procesos tienen garantizada una zona protegida de memoria para su ejecución, sin que el mal funcionamiento de una aplicación cuelgue todo el equipo. Aplicaciones: gracias a la licencia GNU, el caudal de aplicaciones disponibles para LINUX crece a un ritmo vertiginoso, especialmente en Internet. Podemos decir que existe software para casi todas las necesidades. La única limitación para los usuarios de habla hispana es el idioma, ya que es muy difícil encontrar software traducido o de origen latino para LINUX. Herramientas de Desarrollo: LINUX es un sistema operativo hecho y pensado por programadores para programadores. A partir de esto, múltiples lenguajes de programación están disponibles bajo Linux. Sin duda el principal de ellos es GNU C/C++, pero también es posible desarrollar en Java, Objective-C, Pascal, LISP, BASIC, Perl, Ada, Eiffel, FORTRAN, Forth, Prolog, Oberon, Simula, Modula-2 y Modula-3, Smalltalk, y algunos otros. También, existen varios motores de bases de datos que pueden utilizarse bajo Linux; algunos de ellos son motores relacionales (tales como mBase, Thypoon, MiniSQL, Ingres y Postgres), y otros orientados a objetos (tal como LINCKS). La mayoría de ellos son de carácter experimental o académico, por lo que no igualan las prestaciones de los motores de base de datos comerciales, en especial las relacionadas con performace; sin embargo, el hecho de que su costo sea nulo hace que sea una opción a tener en cuenta al desarrollar un servidor de Intranet de pequeñas proporciones. Seguridad: En lo referente a seguridad, puede mencionarse que el kernel de Linux tiene el soporte necesario para construir firewalls basados en filtrado de paquetes; también existe una versión para Linux de SOCKS, software de firewalling muy popular en los ambientes Unix. Convivencia: Linux es capaz de convivir en el mismo disco duro con otros sistemas operativos tales como DOS, Windows u OS/2, permitiendo la selección en el arranque del sistema operativo a bootear. Además de soportar su sistema de archivos nativo (ext2fs), Linux tiene soporte para acceder en modo de lectura/escritura a sistemas de archivo FAT (DOS) y VFAT (Windows95) y en modo de solo lectura a sistemas de archivo NTFS (Windows NT). Sitios en Internet • Linux Home Page: http://www.linux.org • Grupo de Usuarios Linux de Argentina: http://www.linux.org.ar • Edición Infomagic: http://www.infomagic.com • Distribucion RedHat Linux: http://www.redhat.com • HOW-TOs: los instructivos pueden obtenerse de los siguientes URLs ftp://ftp.funet.fi/pub/OS/Linux/doc/HOWTO - ftp://tsx-11.mit.edu/pub/linux/docs/HOWTO ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO • Linux Documentation Project: serie de libros sobre Linux; pueden obtenerse de ftp://sunsite.unc.edu/pub/Linux/docs/LDP UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 7 - Requerimientos del sistema Linux tiene menos requisitos de hardware, para realizar más funciones, que Windows 98 o NT estándar. Por ej., un 486 a 100MHz y 16 Mb de RAM puede ser utilizada como una estación de trabajo. Este sistema es capaz de ejecutar X Window , acceder a Internet y actuar como servidor de una red local. Si le interesa utilizar el sistema Linux con mayores prestaciones deberá contar con los siguientes componentes: • Una CPU de la familia de los Pentium, mínimo de 133MHz. • 32 Mbytes de RAM son suficientes para el funcionamiento de una estación normal. Pero con 64 Mb obtendremos una clara diferencia en el rendimiento general del sistema. • Disco duro de 2GB, los discos grandes ofrecen mejores prestaciones. • Una tarjeta de video para la que existan controladores disponibles. X Window® puede funcionar con tan solo 4 MB de RAM, pero su desempeño será mucho más lento. Algunas aplicaciones para X Window® pueden necesitar 16 MB, 32 MB o 64 MB de RAM, como es el caso de Netscape Communicator 4.7. Si desea instalar Linux en su PC con las suficientes aplicaciones para ser totalmente funcional y productivo y contar con el espacio necesario para instalar un paquete de oficina (como StarOffice 5.1) y trabajar con sus archivos, es recomendable contar con al menos 1.2 GB de espacio en disco, al menos 32 MB de RAM y un microprocesador AMD K6, K6-II, K6-III, Pentium, Pentium MMX, Pentium II, Pentium III, o Cyrix MII . Si usted posee hardware casi obsoleto tenga en cuenta que se puede ejecutar Linux en un 386 con sólo 4Mb de RAM, es decir que instalaremos un Linux mínimo. Sin embargo una máquina así tendrá las siguientes limitaciones: • No podrá ejecutar la interfaz gráfica ( X- Window System). • Habrá un número reducido de programas en multitarea. • El bajo rendimiento evitaráel uso del sistema para determinadas tareas críticas. Ej: como servidor de red o de correo. No obstante, esta mínima configuración nos permitirá utilizar el sistema como terminal de un servidor Linux o Unix y como servidor de bajo rendimiento para servicios como DNS (Domain Name Server) o servidor de comprobación para una red pequeña. Arquitectura En la arquitectura de Linux podemos identificar un núcleo o kernel y sobre él una capa de shell o interfaz de usuario. El kernel es la parte del sistema operativo mas cercana al hardware del computador y se considera como el corazón del sistema. Dentro de él podemos distinguir los siguientes módulos: § Gestión de procesos § Gestión de archivos § Gestión de memoria § Gestión de Entrada –Salida § Interfaz de llamadas al sistema La interfaz de llamadas al sistema recibe los pedidos de los programas de usuario o de programas de biblioteca. En los cepos el S.O. determina si un error producido en uno de estos procesos es fatal y dependerá del diseño del S.O. la acción que se lleve a cabo. El Subsistema de control de procesos se encarga de la interrupciones, la planificación de procesos, la comunicación entre los procesos y la gestión de memoria. El Subsistema de Archivos intercambia los datos entre la memoria y los dispositivos externos. Control de Hardware, son rutinas primitivas que interactúan directamente con el hardware. UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 8 - No todas las funciones de un determinado módulo deben formar parte fija del kernel, sino que pueden ser cargados como módulos en tiempos de ejecución. Durante la configuración del kernel es cuando se determina cuales de ellas se incorporan en forma fija al mismo y cuáles como módulo. Los módulos del kernel se guardan en lib/modules/<versión> (donde versión corresponde a la versión actual del kernel). Siempre que sea posible se debe aprovechar la posibilidad de usar módulos. Las funciones del kernel que no se necesitan durante el arranque de la computadora, se deben tratar como módulos, de este modo se asegura que el kernel no crezca demasiado, y que ni la BIOS ni ningún gestor de arranque, tenga problemas al cargar el kernel. Un ejemplo claro de las funciones que siempre tienen que formar parte del kernel, es el driver del disco duro, el soporte del sistema de archivos ext2, mientras que el soporte de isofs, msdos o sound siempre se deberían compilar como módulos. Esto permite que cada modulo pida servicios al núcleo del sistema quien cargará en memoria las rutinas o módulos necesarios para determinadas tareas. Fig. 1. Diagrama de bloques del núcleo de un sistema UNIX-LINUX [Stallings] Distribuciones Una distribución es un conjunto de utilerías, herramientas y programas que facilitan el trabajo con el sistema. Las distribuciones se pueden diseñar a partir de diferentes versiones del núcleo, pueden incluir conjuntos diferentes de aplicaciones, utilidades y controladores, y pueden ofrecer distintos procedimientos de instalación y actualización. Actualmente son varias las distribuciones de Linux más difundidas, entre ellas podemos mencionar Debian, Slackware, Suse, RedHat, Mandrake, Conectiva, Caldera, Ututo (desarrollo argentino). El único elemento común entre ellas es el kernel. Programa de Usuario cepos Bibliotecas Nivel de Usuario Nivel del Núcleo Comunicación entre procesos Subsistemas de Control de Planificador Procesos Gestión de Memoria Caracteres Bloques Nivel del Núcleo Nivel del Hardware Control de Hardware Hardware Interfaz de llamada al sistema Subsistemas de Archivos Cache de Buffers Controladores de Dispositivos UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 9 - Versiones del Kernel Existen dos versiones del Linux kernel: Versión de producción: La versión de producción, es la versión estable hasta el momento. Esta versión es el resultado final de las versiones de desarrollo o experimentales. Cuando el equipo de desarrollo del kernel experimental, decide que ha conseguido un kernel estable y con la suficiente calidad, se lanza una nueva versión de producción o estable. Esta versión es la que se debería utilizar para un uso normal del sistema, ya que son las versiones consideradas mas estables y libres de fallos en el momento de su lanzamiento. Versión de desarrollo: Esta versión es experimental y es la que utilizan los desarrolladores para programar, comprobar y verificar nuevas características, correcciones, etc. Estos núcleos suelen ser inestables y no se deberían usar, a no ser que sepas lo que haces. Como interpretar los números de las versiones: • Las versiones del kernel se numeran con 3 números, de la siguiente forma: XX.YY.ZZ • XX: Indica la serie principal del kernel. Hasta el momento solo existen la 1 y 2. Este numero cambia cuando la manera de funcionamiento del kernel ha sufrido un cambio muy importante. • YY: Indica si la versión es de desarrollo o de producción. Un numero impar, significa que es de desarrollo, uno par, que es de producción. ZZ: Indica nuevas versiones dentro de una versión, en las que lo único que se ha modificado, son fallos de programación /bugs. Unos ejemplos nos ayudaran a entenderlo mejor: • ej1: versión del kernel 2.0.0: Kernel de la serie 2 (XX=2), versión de producción 0 (YY=0 par), primera versión de 2.0 (ZZ=0) • ej2: versión del kernel 2.0.1: Kernel de la serie 2, versión 0, en el que se han corregido errores de programación presentes en la versión 2.0.0 (ZZ=1) • ej3: versión del kernel 2.1.100: versión 100 del kernel de desarrollo 2.1. Tipos de Shell LINUX dispone de varios programas que se encargan de interpretar los comandos que introduce el usuario y realiza las acciones oportunas en respuesta, estos programas se denominan shell. El trabajo con Linux (por defecto) no se realiza de una forma gráfica, sino introduciendo comandos de forma manual. El shell es capaz de interpretar una gran gama de comandos y sentencias. Permite construir muchos programas y comandos, llamados shellscripts, que nos da la posibilidad de automatizar diversas tareas. Existen muchos tipos de shells orientados a caracteres (modo texto). A éstos shells los encontramos como archivos ejecutables en el directorio /bin. Los shells más utilizados son • ash: A shell • csh: C shell • tcsh: una extención al C shell • ksh: Korn Shell UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 10 - • bsh: Bourne Shell • bash: Bourne Again Shell El carácter indicativo de Bourne y Korn shell es el signo $. El signo % se refiere a C shell, estando reservado el símbolo # para la cuenta de administrador. El más utilizados por las distintas distribuciones Linux, es bash. Toma las facilidades de csh y ksh. Ofrece entre otras posibilidades las siguientes: Completamiento durante la escritura. Al teclear uno o varios caracteres se puede pulsar TAB con el objetivo de que en caso de que pueda completarse de forma unívoca un comando, nombre de fichero o una variable (en dependencia del contexto), se realice el completamiento de forma autómatica (se escriba el resto de la palabra). Historial de comandos. Esta es una facilidad de muchos otros shells que permite el movimiento (con las teclas de cursor arriba y abajo) a través de los últimos N comandos ejecutados, en la sesión actual o en las anteriores. N por defecto es 1000, pero puede modificarse. Estructuras de control if, for, while, select y case Definición de funciones y alias para comandos Las funciones permiten definir subrutinas y los alias, asociar nombres a comandos con ciertas opciones y argumentos de forma más nemotécnica o abreviada. El usuario puede cambiar el shellasignado por defecto simplemente tipeando el nombre de éste, por ejemplo: $ csh <Enter> % < Aparece el prompt % de C shell.> Interfaces Una vez instalado e inicializado el sistema operativo Linux, se dispone de dos vías fundamentales de interacción: una de texto conocida como consola o terminal y una gráfica. Para muchas personas el hecho de tener que introducir los comandos de forma manual les puede parecer intimidante y dificultoso, por lo que, casi todas las distribuciones más recientes incluyen el sistema X Window , el cual es el encargado de controlar y manejar la interfaz de usuario en forma gráfica. Para el caso de Linux se utiliza una implementación de X Window con código abierto (open source) denominada XFree86 que también está disponible para otros sistemas tipo Unix. La arquitectura de un sistema X es del tipo cliente-servidor. El servidor se encarga de tomar la entrada de los usuarios y hacerla llegar a las aplicaciones clientes, además de recibir y redireccionar las salidas de estas aplicaciones. Por lo general el servidor X se ejecuta en la misma estación que las aplicaciones clientes, pero la posibilidad más atractiva y útil de este tipo de servicio es el poder ejecutar aplicaciones clientes en máquinas remotas e interactuar con ellas en otra máquina que cuente con un servidor X. De esta forma se puede configurar terminales X de pocas disponibilidades en hardware pero que ejecuten un servidor X capaz de servir aplicaciones gráficas que se ejecutan remotamente en otra máquina más potente. También existe la posibilidad de que desde una única estación de trabajo con un servidor X se interactúe con aplicaciones gráficas que se ejecutan realmente en distintas máquinas . UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 11 - Actividades 1 1. Enumere las características principales del SO Linux. 2. El núcleo del sistema LINUX, se denomina: a. Shell b. BIOS c. Kernel d. File System e. Ninguna 3. Marque cuales de los siguientes son shells de Linux: a. msh b. ash c. bsh d. bash e. csh f. xsh g. ksh h. fsh 4. En comparación con otros S.O. con Linux se pueden realizar más funciones con menos requerimientos de hardware. Verdadero Falso 5. Cuales son las interfaces posibles de Linux? Actividad 2 1. Un linux totalmente funcional y productivo (interfaz gráfica , staroffice, etc) requiere como mínimo el siguiente hardware: a. 512 Mbyte de disco b. 1,2 Gb de disco c. 2 Gb de disco d. Procesador 386 e. 32Mb de RAM f. 4 Mb de RAM g. procesador Pentium o superior h. 16 Mb de RAM 2. Los módulos del Kernel en el directorio /lib/modules/<versión> V ó F 3. Explique a que hace referencia <versión> , del punto anterior. 4. Todas las funciones de un determinado módulo deben formar parte fija del kernel. V ó F 5. Las siguientes son distribuciones de Linux: a. RedHat b. Conectiva c. Karatte d. Caldera e. AutoLink f. Suse UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 12 - 2 Entrada al Sistema UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 13 - El concepto de arranque en Linux Al encender la computadora, luego de realizar los chequeos de rutina, se carga el kernel desde el disco rígido. El Kernel toma el mando de todo el hardware, lee los valores predeterminados de la BIOS e inicializa las interfaces elementales de la placa base. Acto seguido realiza la carga del Files-system, es decir que monta la partición raíz al directorio /. El Kernel establece sus tablas y realiza una serie de procesos internos antes de llamar al proceso init . Estos procesos internos son los que tienen PID (identificador de proceso) negativo. El proceso init tiene PID igual a uno, y lo podemos considerar como el padre de todos los procesos. Es el que realiza realmente la inicialización del sistema. Como lo ejecuta directamente el kernel, init no puede ser interrumpido ni aún por la señal 9, que se utiliza para interrumpir cualquier proceso. Init lee el fichero de configuración /etc/inittab desde donde ejecuta diferentes procesos. En cada terminal virtual, init ejecuta un proceso /etc/getty, que dispone la terminal para que el usuario pueda conectarse. Para ello getty arranca el proceso login. Desde el archivo de configuración inittab, init ejecuta los procesos rc. Existen varios rc ubicados en /etc. Estos procesos ejecutan comandos de inicialización como por ejemplo montar sistemas de archivos, inicializar el espacio de intercambio (swap), configurar la red y arrancar los demonios; es decir, lleva al sistema a un entado en el que puede recibir ordenes de los usuarios. Por ejemplo, /etc/rc.d/init.d/network arranca las interfaces de red. Sencillamente el archivo /etc/sysconfig/init controla cómo el sistema aparecerá y funcionará durante el momento de arranque. Se usan los siguientes valores: ♦ BOOTUP=<value>, donde <value> es uno de los siguientes: w BOOTUP=color significa el color estándar del despliegue al momento de arranque, donde el éxito o falla de dispositivos y servicios al iniciarse es mostrado en diferentes colores. w BOOTUP=verbose es un tipo de despliegue viejo, que provee de más información que el simple mensaje de éxito o falla. w Cualquier otra cosa significa un nuevo despliegue, pero sin el formato ANSI. ♦ RES_COL=<value>, donde <value> es el número de la columna de la pantalla para comenzar las etiquetas de estado. Predeterminado a 60. ♦ MOVE_TO_COL=<value>, donde <value> mueve el cursor al valor en la línea RES_COL a través del comando echo -en. ♦ SETCOLOR_SUCCESS=<value>, donde <value> coloca el color a un color que indica el éxito a través del comando echo -en. El color predeterminado es verde. ♦ SETCOLOR_FAILURE=<value>, donde <value> configura el color a un color que indica la falla a través del comando echo -en. El color predeterminado es rojo. ♦ SETCOLOR_WARNING=<value>, donde <value> coloca el color para indicar advertencia a través del comando echo -en. Por defecto el color es amarillo. ♦ SETCOLOR_NORMAL=<value>, donde <value> reconfigura el color a "normal" a través de echo. ♦ LOGLEVEL=<value>, donde <value> configura el nivel de conexión de la consola inicial para el kernel. El valor por defecto es 3; 8 significa cualquier cosa (incluyendo depuración); 1 significa pánico del kernel. El demonio syslogd ignora esta configuración una vez que se ha arrancado. ♦ PROMPT=<value>, donde <value> es uno de los siguientes valores boleanos: w yes — Activa la verificación de claves para el modo interactivo. w no — Desactiva la verificación de claves para el modo interactivo. UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 14 - En inittab también se especifica el nivel de ejecución (Runlevel) del sistema. El Runlevel estándar, en el cual arranca el sistema, está en el archivo /etc/inittab, en initdefault, y dependerá de la distribución que se haya instalado (en el caso de de Red Hat 6.2 el nivel es por defecto es 5) Existen siete niveles de ejecución, a saber: Runlevel Descripción 0 Halt (Do NOT set initdefault to this) 1 Single User Mode 2 Multiuser without NFS 3 Full Multiuser mode 4 Unused 5 X11 6 Reboot (Do NOT set initdfault to this) Se puede cambiar a otro Runlevel, mediante la orden init y el nivel correspondiente: $ init 1 Si los usuarios quieren ingresar directamente al entorno gráfico X Window, se puede cambiar el Runlevel a: $ init 5 Al realizar un cambio de Runlevel, se ejecutan losprogramas de parada del Runlevel actual, por lo que los procesos que se estaban ejecutando finalizan, luego se inicializan los programas de arranque del nuevo Runlevel. En el Runlevel 1 el sistema se inicia en modo monousuario, en donde la máquina no tiene recursos de red, y solo admite un único usuario. Este modo de trabajo es muy útil cuando el supervisor (usuario root) necesita realizar tareas de mantenimiento, sin tener que preocuparse de que pueda haber otros usuarios realizando tareas. En algunas versiones cuando sucede una fallo general de sistema éste se reinicia automáticamente en modo monousuario. Cierre del sistema Antes de apagar la máquina (servidor) deberá ejecutar el comando shutdown, que envía un aviso de cierre del sistema a los usuarios que están conectados, y envía una señal a los procesos activos, dándoles tiempo para almacenar sus datos. Cumplido éste tiempo los mata con la orden kill. No es conveniente apagar la máquina sin la ejecución de ésta orden pues debemos dar tiempo al núcleo del sistema operativo de guardar en el disco toda la información que está en memoria, como puede ser, archivos abiertos y actualizados. Linux también mueve y actualiza archivos básicos del sistema por lo que al apagar directamente la máquina podrá dañar éstos archivos y el sistema Linux tendrá problemas luego para ejecutarse. La estructura de la orden de cierre es la siguiente: shutdown [-t segundos ] [ -opciones] tiempo [mensaje de aviso ] El mensaje de aviso de cierre del sistema comienza por “Broadcast Message …” a todos los usuarios conectados. Luego por defecto, shutdow hace una pausa de 60 segundos antes de continuar con el proceso de desconexión. Podemos cambiar este intervalo de tiempo con la opción –t y número de seguntos de espera: # /sbin/shutdown -t180 UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 15 - Es decir que esperará 3 minutos para que los usuarios cierren sus aplicaciones y graben sus datos. Cabe aclarar que ésta órden es ejecutada por el usuario supervisor, quién utiliza su clave para ejecutar éste proceso. La página man para shutdown tiene una lista completa de opciones, pero las dos más usadas son: # /sbin/shutdown -h now # /sbin/shutdown -r now Después de apagar todo, la opción -h detendrá la máquina, y la opción -r la reiniciará. Los usuarios no root pueden usar los comandos reboot y halt para apagar el equipo mientras se está en niveles de ejecución 1 hasta 5. Sin embargo, no todos los sistemas operativos Linux soportan esta característica. Si la computadora no se apaga, tenga cuidado de no apagar la computadora hasta que aparezca un mensaje indicando que el sistema ha sido detenido. Si no espera por este mensaje puede significar que no todas las particiones de discos duros han sido desmontadas, y puede llevar a un sistema de archivos corrupto. Inicio de sesión Para comenzar a trabajar con el sistema operativo es necesario abrir una sesión de trabajo, para ello deberá introducir el nombre de usuario y contraseña, las cuales lee y verifica el programa login. De esta manera el sistema proporciona seguridad, ya que lleva la cuenta de quién es el dueño de los archivos y quién tiene acceso a ellos. Dependiendo de la configuración, la pantalla que aparecerá puede ser en modo gráfico o en modo texto. El comando login es el que pide el nombre de usuario (username) con el cual el SO identifica una cuenta de usuario. Luego pide la palabra clave, la cual no se visualiza en pantalla. Login toma el username y verifica su existencia en el archivo /etc/password. La clave se verifica contra el archivo /etc/shadow. Login: username <Enter> Password: Cuando el usuario introduce la contraseña no habrá eco desde el sistema, por lo que hay que ser cuidadoso a la hora de teclearla. Una vez que el sistema acepta al nuevo usuario, aparecerá una serie de mensajes en pantalla dependiendo de la configuración del sistema, por último se mostrará el indicativo del shell, el signo $ (para bash). El usuario comienza su sesión en un directorio de trabajo que le es propio, donde él es el dueño, generalmente /home/nombre de usuario. Cierre de sesion Cerrar la sesión es muy importante porque, varios usuarios estar compartiendo los recursos del sistema. Este lleva la pista del usuario que termina su sesión, cierra los archivos del usuario y finaliza los procesos activos. Si éstos procesos quedan funcionando, provocan una carga innecesaria en el sistema y perjudican a otros usuarios. Para cerrar la sesión desde el indicativo de comandos, teclee: $ logout quién, una vez que cierra la sesión, llama a login. También puede utilizar el comando exit o teclear ctrl. d. UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 16 - Terminales Virtuales Al igual que Unix, Linux ofrece el mecanismo de consolas de texto o terminales virtuales. Este consiste en que a partir de una entrada (el teclado) y con una salida (el monitor) se simulen varias terminales, donde el mismo, o distintos usuarios puedan conectarse indistintamente. De esta forma, es posible tener más de una sesión abierta en la misma máquina y trabajar en ellas indistintamente. Este mecanismo también facilita la característica multiusuario del sistema Linux, pues las diferentes conexiones se pueden establecer con diferentes usuarios. Se puede acceder a las terminales virtuales tecleando Crtl+ALT+F1, Crtl+ALT+F2, Crtl+ALT+F3, Crtl+ALT+F4, Crtl+ALT+F5, Crtl+ALT+F6. En cada una de ellas se debe loguear un usuario. Estando en modo texto podemos presionar Crtl+ALT+F7 que nos conduce al entorno gráfico Xwindow, desde dónde podemos abrir consolas virtuales con las teclas Alt+F1 a Alt+F6 en este caso el sistema no solicita abrir una nueva sesión de trabajo con el comando login. Es posible abrir terminales xterm desde Xwindow con ALT+F2 y ejecutando el comando xterm. Formato de la línea de comandos Antes de conocer los comandos de Linux su formato, se hace necesario saber primero ¿Qué es un comando?. Para linux, un comando es cualquier archivo ejecutable . Por lo que cada usuario puede construir archivos con una estructura especial que le permita ser ejecutados, y añadirlo a su lista de comandos. Linux utiliza un formato sencillo para la línea de comandos , en donde la mayoría de ellos está formado por sólo dos letras. El formato general es: Comando [-opciones ] argumento1 argumento2 • El nombre del comando es siempre necesario. • Los comandos siempre van escritos en letra minúscula y la mayoría de las opciones también. • Las opciones son caracteres o adverbios que siempre van precedidos de un guión. • Los argumentos pueden o no ser necesarios, sin embargo los nombres de archivos que especifique pueden ser rutas de acceso relativas o absolutas. Por ejemplo: ls ../../dev • En los argumentos podemos utilizar metacaracteres, como son * y ?. $ ls -a –color=yes /usr/conf* La orden anterior lista todos los archivos, ocultos y no oculto, cuyo nombre comience con las letras conf, diferenciando con colores los distintos tipos de archivos. No olvide que los nombres de los archivos de Linux incluidos los comandos distinguen las mayúsculas de las minúsculas. El sistema ordena alfabéticamente las mayúsculas antes que las minúsculas. UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 17 - Actividad 1 1. Abra una sesión de trabajo con un nombre de usuario que le asigne su administrador. En este ejemplo utilizaremos el username usuarioxx login: usuarioxx password: A continuación aparecerá el prompt del sistema que dependerá del shell que utilice el usuario. 2. Tipee el comando who que le permitiráver que usuarios han iniciado una sesión con el sistema. La salida de este comando nos muestra, en la segunda columna, la terminal virtual (archivo especial de dispositivo) en el cual esta trabajando el usuarioxx 3. Abra otra sesión de trabajo con el username usuarioyy Ctrl.+Alt+F2 login: usuarioyy password: Ejecute el comando who nuevamente . Cuántos usuarios informa el sistema que están conectados? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Puede distinguir en que terminales esta trabajando cada usuario? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4. Diga qué es una terminal virtual. Actividad 2 1. Regrese al entorno grafico con Ctrl.+Alt+F7 y abra una consola virtual con Alt+F1, y otra con Alt+F2 y ejecute el siguiente comando en la consola activa: ls -R /home 2. Ejecute en la consola numero 1 el siguiente comando ls -R /etc En cada una de las consolas virtuales esta ejecutándose una tarea distinta, observe que ambas están siendo atendidas por el microprocesador en un pseudoparalelismo, por lo que estamos frente a un ejemplo claro de multitarea. Puede alternar de una consola a otra con el simple movimiento del mouse 3. Ejecute el comando who y podrá observar que usuarioyy esta activo en varias consolas. Identifique en cuantas está activo y en cuales. 4. Cambie al shell de C. csh UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 18 - Actividad 3 1. Que función cumple el proceso getty? a) Inicializa la terminal b) Inicializa los drivers c) Determina el runlevel 2. El Runlevel por defecto es: a) Monousuario b) Multiusuario con red y Xwindow c) Multiusuario sin red 3. El proceso shutdown efectúa: a) Cierre de sesión b) Termina los procesos y cierra archivos c) Cierra archivos solamente 4. Cual es la función del comando login? 5. Explique la diferencia entre los comandos shutdown y logout. 6. Explique cual es la estructura de la línea de comandos. 7. Al realizar un cambio de Runlevel no es necesario dar de baja a los procesos que se están ejecutando. V ó F 8. Al iniciarse una sesión de trabajo, que datos requiere el comando login, y que archivos utiliza para validar los mismo? UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 19 - 3 Conociendo el Sistema de Archivos (File System) UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 20 - El Sistema de Archivos Una de las principales funciones de un Sistema Operativo es la administración del almacenamiento de la información, para lo cual es necesario contar con un “Sistema de Archivos” o “File System”. Con este término se hace referencia, por un lado, a los mecanismos y estructuras que el sistema operativo utiliza para organizar la información en medios físicos tales como discos y diskettes (aspecto físico del sistema de archivos), y por otro a la visión que es ofrecida al usuario para permitir la manipulación de la información almacenada (una abstracción, o perspectiva lógica del sistema de archivos). El File System de Linux En Linux (como en cualquier Sistema Operativo) se puede diferenciar el sistema de archivos que está almacenado en las particiones del disco y otros dispositivos, y el sistema de archivos tal y como lo presenta al usuario un equipo ejecutando Linux como software de base. En Linux se monta un sistema de archivos de disco en el sistema de archivos del equipo en funcionamiento. Un disco duro no es más que un gran espacio sobre el que se puede escribir unos y ceros. Un sistema de archivos impone cierta estructura en ello, y hace que parezca que hay archivos dentro de directorios, y directorios dentro de directorios. Cada archivo se representa por un i-nodo, que contiene información de a quién pertenece el archivo, cuándo se creó y dónde encontrar su contenido. Los directorios también se representan por medio de i-nodos, pero estos contienen información sobre dónde encontrar los i-nodos de los archivos que están en el directorio. Por ejemplo, si el sistema quiere leer /home/maría/imagen1.jpg primero busca el i-nodo del directorio raíz ”/ “, luego busca el i-nodo del directorio home en el contenido de “/”, luego busca el i-nodo del directorio maría en el contenido de /home, luego el i-nodo de imagen1.jpg que le dirá qué bloques del disco leer. La facultad que tienen los directorios de poder contener, a su vez, otros directorios (denominados subdirectorios) permite una organización o estructura jerárquica con la forma de un árbol invertido. El directorio inicial de esa jerarquía se denomina directorio raíz y se simboliza con una barra de división (/). En Linux la palabra raíz se utiliza para denominar dos conceptos. Uno es el usuario raíz (user root) la persona con control absoluto en la administración del sistema. El otro es el concepto de directorio raíz: un directorio específico que se considera la base del sistema de archivos. Cada file system pertenece a una clase o tipo que define la característica administrativa. Así como Windows 9x, usa FAT, y Windows NT hace lo suyo con NTFS, el LINUX en particular adopta el sistema de archivo Ext2 . Aparte con este sistema de archivos Linux puede manejar los antiguos minix y ext y otros sistemas no propios de Linux como los sistemas Fat de MS-DOS y Windows y el sistema iso9660 de los CD-Rom. Características de Ext2 (Extended File System 2) • El ext2 es un sistema de archivos mucho más avanzado que el MS-DOS, con soporte de corrección y detección de errores, compresión de archivos, mayor tolerancia a la fragmentación de archivos y con tiempos de respuesta muy superiores, aunque a un coste superior de utilización de memoria. • El ext2 tiene una unidad similar al Cluster, llamada bloque, y que es, por lo general de 1K, especificable por el usuario e independiente del tamaño de la partición, lo cual asegura un buen aprovechamiento del espacio libre con archivos pequeños. • El ext2 tiene soporte para detección de un sistema de archivos desmontado incorrectamente cuando el sistema se apaga de forma errónea, y capacidad para autorecuperarlo en caso de fallo accidental. • El ext2 mantiene información de la última vez que se montó y se accedió al volumen (sistema de archivos), el número de veces que se ha montado dicho volumen desde la última UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 21 - comprobación automática, y así como la fecha en la que se comprobó su integridad por última vez. • El ext2 permite asignar un porcentaje del disco duro que se reserva para el uso de usuarios con un "uid" (identificación de usuario) y "gid" (identifcación de grupo) específicos. Organización de los directorios Se denomina “root file system” al sistema de archivos que contiene al sistema operativo y los directorios y archivos que se distribuyen con el mismo. En todas las distribuciones de Linux (incluso con las distintas versiones), todo parte del directorio raíz ( / ) del que “cuelgan” los demás directorios. Los más importantes se enumeran a continuación, explicando lo que contienen: /bin: contiene los archivos ejecutables básicos que constituyen las herramientas elementales para trabajar /lib: contiene las librerías de los lenguajes instalados como por ejemplo el lenguaje C. /etc: contiene todos los archivos de configuración de la mayoría de los programas, así como los scripts de inicio del sistema. /dev: contiene los archivos que permiten acceder a los dispositivos (hardware) del sistema. /usr: contiene una gran cantidad de software que se emplea para ejecutar los programas que demandan los usuarios. Es para archivosque puedan ser compartidos en todo el sistema(red). Es recomendable que este directorio tenga su propia partición y sea montable en sólo lectura. /var: contiene los archivos de datos variables. Esto incluye archivos y directorios spool, datos de administración, de registro y archivos temporales. /tmp: se usa para almacenar archivos que permanecerán temporalmente en el sistema. /mnt: se usa como raíz de los directorios destinados a trabajar como puntos de montaje de los distintos file system que se montan en el sistema, por ejemplo CD-ROMs y disquetes. /home: se usa como directorio raíz de los directorios privados de los usuarios. Cada usuario normalmente tiene asignado un directorio que lleva su nombre, donde tiene todos los permisos que le posibilitan realizar casi todas las operaciones con archivos y sub-directorios. /proc: es un directorio virtual que se crea en la memoria, donde se organiza cierta información - relativa a la ejecución de los procesos- que maneja el sistema en el momento actual. /sbin: contiene los archivos ejecutables para el supervisor o root /boot: Contiene los archivos necesario para el arranque del sistema, sin embargo su existencia es opcional pues estos archivos podrá esta en el directorio raíz. Linux le permitirá obtener un listado de los archivos de casi cualquier directorio (excepto de aquellos que no tienen permiso para ser accedidos). Para visualizar el contenido de un directorio utilizamos el comando ls Por Ej. # ls / bin lib etc dev usr var tmp mnt home proc sbin La ejecución de este comando nos muestra el contenido del directorio raíz que mencionamos anteriormente. Ahora obtengamos un listado de los archivos del directorio usr que esta dentro de “/ ” $ ls /usr bin X11R6 include lib local games sbin Como vemos este directorio contiene a su vez otro árbol de directorios propio donde: UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 22 - /usr/ bin : contiene archivos binarios que no son parte de la distribución base /usr / X11R6 : contiene los archivos de la implementación de las X Window de la Free86 /usr / include : contiene las cabeceras de las librerías /usr / lib : contiene las librerías /usr / local : es un subdirectorio para programas adicionales /usr / games : obviamente juegos /usr / sbin : subdirectorio semejante a /sbin La estructura jerárquica que posee el sistema de archivos tiene la ventaja de permitir organizar los archivos en grupos comunes lógicamente o de naturaleza similar. Los archivos relacionados entre sí, residen juntos en el mismo directorio. Directorio de conexión o Home Directory El shell de inicio de sesión del usuario tiene un directorio de inicio de sesión con el nombre de usuario, que se encuentra por debajo /home. Por ejemplo si tenemos los siguientes usuarios: ana, luis, maría, por debajo de /home tendremos 3 subdirectorios de esta forma: /home/ ana /home/ luis /home/ maría Desde el punto de vista de la navegación por el sistema de archivos, estos directorios son idénticos al resto, pero son importantes porque al iniciar su sesión, cada usuario es ubicado en ese punto del file system, luego el usuario podrá desplazarse por los demas directorios, de acuerdo a los permisos que le hayan otorgado. Directorio de trabajo Un directorio de trabajo, es el directorio que tiene activo un proceso en un momento determinado, es un atributo de un proceso, no de una persona ni de un programa. Antes de comenzar a desplazarse por los directorios y subdirectorios del sistema de archivos, desearíamos conocer donde nos encontramos, para ello existe el comando pwd, que nos indica en que directorio se encuentra un usuario en ese momento. Por ej. $ pwd /home/maría/ Trayectorias o rutas de acceso Una trayectoria o ruta de acceso no es más que un camino capaz de designar la ubicación de un archivo o directorio en el que estamos trabajando. Se pueden clasificar en trayectorias (rutas de acceso) absolutas o relativas. Las trayectorias absolutas comienzan siempre en el directorio raíz (comenzarán con el símbolo “/”) y continúa con los directorios que hay que recorrer hasta llegar al archivo buscado, con el símbolo “/ “ entre los componentes de la ruta. Si se desea ejecutar el programa C++ que se encuentra en el subdirectorio /usr/bin se deberá definir la trayectoria absoluta del archivo en cuestión . $ /usr/bin/c++ Otra forma de ejecutar el archivo C++ es cambiar de directorio de trabajo y luego ejecutar el programa. Para ello existe el comando cd que nos permite desplazarnos o cambiar de un directorio a otro. Finalmente la secuencia de comandos será la siguiente: UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 23 - $ cd usr/bin $ c++ El uso habitual de estas rutas de acceso absolutas hace que el trabajo sea bastante tedioso, por lo que surge el concepto de trayectoria relativa. Observe que al ejecutar el comando pwd se muestra por pantalla la trayectoria absoluta al directorio donde está ubicado el usuario. Una trayectoria relativa comienza en un directorio distinto del raíz, utilizando el directorio de trabajo como punto de partida para especificar el archivo o directorio. También existen directorios considerados como especiales, que son los directorios ( . ) y ( . . ). Cuando se crea un directorio, dentro de este se crean automáticamente dos directorios: el directorio punto ( . ) , que representa al directorio actual y el directorio punto-punto ( . . ) que representa al directorio padre del directorio actual. Ambos pueden usarse para designar a sus directorios equivalentes al formar parte de una trayectoria. Veamos un ejemplo en el siguiente grafico Para referirnos al archivo Nota utilizamos la siguiente trayectoria absoluta: $ home/maría/Nota Para utilizar la trayectoria relativa debemos tener en cuenta nuestro directorio de trabajo. Si el directorio de trabajo es maría se designa: $ Nota ó $ . / Nota Si el directorio de trabajo fuese luis se designa $ ../maria/Nota Donde indicamos el directorio padre de nuestro directorio de trabajo (home) y luego el directorio (maría) donde se encuentra el archivo Nota Cuando ejecutamos un comando sólo con su nombre, podríamos pensar que el archivo ejecutable está en nuestro directorio de trabajo. Sin embargo el sistema busca el archivo en la lista de directorios que están definidos como rutas de acceso predeterminada (PATH). Este tema se ampliará en el capitulo que trata sobre Variables del shell. Recorriendo el File System A partir de ahora se hará una breve recorrida a algunos componentes del File System o directorio raíz para ello utilizaremos el comando ls con la opción –l que nos muestra un listado extendido del contenido de un directorio. / homedev bin ana luis maría texto datos Nota archivo UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 24 - $ ls – l / Y obtenemos lo siguiente: drwxr-xr-x 2 root root 4096 May 10 2002 bin drwxr-xr-x 3 root root 1024 May 10 2002 boot drwxr-xr-x 7 root root 36864 May 10 2002 dev drwxr-xr-x 43 root root 4096 May 10 2002 etc drwxr-xr-x 6 root root 4096 Feb 6 1996 home . . . . . . . Para ver el contenido de un directorio en particular, podemos cambiarnos de directorio con el comando cd o bien ejecutar el comando ls (desde nuestrodirectorio de trabajo) colocando la trayectoria del directorio deseado como argumento. Por ejemplo, si deseamos ver el contenido del directorio bin, tecleamos: $ cd /bin $ ls o bien $ ls /bin y obtendremos: cat chgrp chmod chown cp date dd df dmesg echo ed false gzip gunzip kill in login mkdir more mount mv ps pwd rm rmdir sh su tar true . . . . . El directorio /bin contiene los archivos binarios de comandos que pueden ser utilizados por todos los usuarios y el administrador del sistema, pero que son requeridos en el modo mono-usuario (single-user mode) puede también contener comandos que son utilizados indirectamente por algunos scripts. Todos los binarios utilizables sólo por root, tales como daemons, init, getty, update, etc.,estarán localizados en /sbin. Dentro de /bin no hay subdirectorios. $ ls /boot Este directorio contiene todo para arrancar excepto los archivos de configuración y el instalador de mapas. En su sentido más sencillo /boot es para cualquier cosa que se utiliza antes de que el kernel ejecute init. Ésto incluye sectores maestros de arranque (master boot sectors) guardados, archivos de mapeo de sectores y cualquier otra cosa que no es editada directamente a mano. El kernel de Linux puede estar localizado en / ó en /boot. Si está localizado en “/ “ recomendamos usar el nombre VMLINUX[versión] o VMLINUZ[versión], nombres que han sido usados en paquetes fuentes del kernel de Linux recientes. $ ls /home Es una localización sugerida (Opcional) para los directorios de los usuarios, aun así, recomendamos que todas las distribuciones Linux usen este lugar como la localización por defecto de esos directorios. En sistemas pequeños, cada directorio de usuario es uno de los subdirectorios debajo de /home, por ejemplo /home/maría, /home/ana, etc. En sistemas grandes es útil subdividir los directorios home. La subdivisión puede ser llevada a cabo utilizando subdirectorios tales como /home/docentes, /home/estudiantes, etc. UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 25 - Actividad 1 1. Cuál es el tipo de File System en Linux, y cual es la estructura que utiliza? 2. En Linux, los comandos básicos de ejecución del sistema se encuentran en : a. /bin b. /dev c. /etc d. /lib e. Ninguna 3. En Linux, los periféricos se manejan a través de archivos especiales ubicados en: a. /bin b. /dev c. /etc d. /lib e. Ninguna 4. Explicar el concepto de directorio de trabajo. Actividad 2 1. Mostrar el contenido del directorio raiz. Identifique algunos de sus directorios. ls / 2. Igual al anterior pero acceder con camino relativo. ls ../.. 3. Mostrar el contenido del directorio /dev ls /dev /dev es el directorio de los dispositivos. Los archivos en /dev son conocidos como los controladores de dispositivos (device drivers) que son usados para acceder a los dispositivos del sistema y recursos como discos duros, impresoras, memoria, etc. Contendrá un archivo por cada dispositivo que el kernel de Linux puede soportar. También contiene un script llamado MAKEDEV el cual puede crear dispositivos cuando se necesiten. 4. Muestre nuevamente el contenido de /dev, pero utilice la trayectoria relativa desde su directorio de trabajo. ls ../../dev] (en el caso que su home directory sea el directorio de login) 5. Cambiar al directorio /etc y mostrar su contenido en forma extendida cd /etc ls – l /etc Contiene archivos y directorios de configuración de sistema local de máquina. Algunos de ellos son: X11 : Archivos deconfiguracion para el x11. Este directorio es necesario para permitir el control local si /usr se monta sólo-lectura. Los archivos que deben ir en este directorio incluyen Xconfig (y/o XF86Config) y Xmodmap. skel : Esqueletos de configuracion de usuarios, que le son dados por defecto cuando un nuevo usuario recibe una cuenta. 6. Teclear en su terminal el comando necesario para determinar cual es su directorio de trabajo y escriba la respuesta. pwd __________________________ 7. Es el directorio de inicio de sesión? _____ 8. El archivo cat (manual del comando de igual nombre) se encuentra en el subdirectorio man1 dentro del directorio man que a su vez depende /usr, cual es la trayectoria absoluta para llegar a éste archivo?__________________________________________ UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 26 - 9. Y cual es la trayectoria relativa, si su directorio de trabajo es /usr/bin/? Actividad 3 1. Dar 4 trayectorias distintas al archivo /etc/group. Indique en cada caso el directorio de trabajo. 2. Mencionar que archivos contienen los directorios /bin y /sbin. Explique las diferencias. 3. Mostrar el contenido del directorio donde Linux archiva los drivers. 4. Acceder al directorio /boot y analizar su contenido. 5. Definir y diferenciar directorio de trabajo y Home directory. 6. La posibilidad que brinda el file system de nombrar a más de un archivo con el mismo nombre simbolico (por ejemplo proc-linux) esta dada por: a. la tabla de asignación de archivos b. la estructura jerarquica de archivos c. los archivos . y .. d. los Runlevel UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 27 - 4 Manejo de Archivos UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 28 - Desde el punto de vista del sistema, un archivo no es más que una secuencia de bytes ya no identificado con un nombre simbólico sino un número i-nodo que permite su localización en disco. Desde el punto de vista del usuario, los archivos existen para guardar información y luego poder recuperarla. El usuario le otorga a éstos un nombre simbólico para poder designarlos. Linux dispone de un numeroso conjunto de utilidades para manipular archivos (individualmente o en grupos) tipeando comandos en una terminal. A través de esta modalidad de trabajo es posible alcanzar un alto nivel de flexibilidad y versatilidad para realizar operaciones de cualquier grado de complejidad. En este capítulo veremos cómo utilizar los comandos básicos para la manipulación de archivos y directorios por ejemplo crear y borrar, mostrar el contenido, copiar y mover archivos dentro del File System y además cómo Linux permite compartir los archivos. Pero para tratar estos temas es necesario introducir antes el concepto de redireccionamiento que es de gran utilidad para el uso eficiente de los comandos. Archivos La base del sistema de archivos de Linux, es obviamente el archivo, que no es otra cosa que la estructura empleada por el sistema operativo para almacenar información en un dispositivo físico como un disco duro, un disquete, un CD-ROM o un DVD. Como es natural un archivo puede contener cualquier tipo de información, Todos los archivos de Linux tienen un nombre, el cual debe cumplir ciertas reglas: • Un nombre de archivo puede tener entre 1 y 255 caracteres. • Se puede utilizar cualquier carácter excepto la barra inclinada / y no es recomendable emplear los caracteres con significado especial en Linux, que son los siguientes: = \ ^ ~ ' " ` * ; - ? [ ] ( ) !& ~ < >. Para emplear archivos con estos caracteres o espacios hay que introducir el nombre del archivo entre comillas. • Se pueden utilizar números exclusivamentesi así se desea. Cabe aclarar que Linux es sensible a las letras mayúsculas y minúsculas por lo tanto se consideran diferentes, y no es lo mismo el nombre archivo nota.txt que Nota.txt ó nota.Txt En LINUX existen los siguientes tipos de archivos : - archivo común o regular d directorio b archivo especial de bloque c archivo especial de carácter l archivo enlazado Regulares son aquellos que pueden contener cualquier tipo de información, desde una imagen, un texto, un sonido, etc. Directorios (o carpetas), es un archivo especial que agrupa otros archivos de una forma estructurada. Especiales, son la base sobre la que se asienta Linux, puesto que representan los dispositivos o periféricos conectados a un ordenador, como puede ser una impresora. De esta forma introducir información en ese archivo equivale a enviar información a la impresora. Para el usuario estos dispositivos tienen el mismo aspecto y uso que los archivos ordinarios. Enlazados: Los enlaces le permiten dar a un único archivo múltiples nombres, existen enlaces duros y enlaces simbólicos. UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 29 - Implantación de archivos (i-nodo) Al momento de crear un nuevo archivo el sistema le otorga a éste un número que es fijo y único: el i-nodo. Crea a su vez una entrada en la tabla de directorio donde va a estar ubicado el archivo. Esta entrada de directorio en Linux consta del nombre del archivo y de un número denominado i-nodo, que es único para cada archivo. Es la ficha administrativa o estructura que contiene los datos que permiten administrar al archivo. Este i-nodo contiene los atributos de archivo o sub-directorio y los punteros que permiten localizar en orden cada uno de los bloques del archivo o sub-directorio en el disco. Bytes 2 14 Número de nodo-i Fig. 2 . Una entrada de directorio en Linux [Tanenbaum] Podemos visualizar la tabla de directorio con la opción –i del comando ls, de la siguiente manera: $ls -i / 45689 bin 45692 boot : : : : El sistema de archivos para abrir un archivo (de cualquier tipo) toma el nombre y localiza sus bloques en disco. Supongamos que queremos leer el archivo texto creado en nuestro subdirectorio de usuario : /home/usuarioxx/texto El Sistema de archivo localiza el i-nodo del directorio raíz, que se encuentra en un lugar fijo del disco, cuando accede a este i-nodo lee su contenido y determina la ubicación del i-nodo del suddirectorio home y busca en él la ubicación del siguiente componente que es usuarioxx. Lee el i-nodo de este archivo y lo mantiene en memoria hasta cerrar el archivo. El sistema operativo lleva un control de las operaciones posibles de dicho archivo mediante atributos adicionales que se suman a los del i-nodo. Fig. 3. Pasos en la búsqueda de /home/usuarioxx/texto [Tanenbaum] Nombre de archivo El nodo-i 6 corresponde a /home El nodo-i 26 corresponde a /home/usuarioxx 1 * modo 6 * modo 26 * 1 ** tamaño 1 ** tamaño 6 ** 4 bin tiempo 19 dick tiempo 64 grants 7 dev 30 erik 92 books 14 lib 132 51 jim 406 60 texto 9 usr 26 usuarioxx 81 monix 6 home 45 bal 17 src 8 tmp El nodo-i 6 indica que /home está en el bloque 132 El nodo-i 26 indica que /home/usuarioxx está en el bloque 406 El bloque 406 es para el directorio /home/usuarioxx /home/usuarioxx/texto corresponde al nodo-i 60 La búsqueda por resultado en el nodo- i 6 Directorio raíz El bloque 132 es el directorio /home /home/usuarioxx corresponde al nodo-i 26 UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 30 - El i-nodo en disco contiene los siguientes campos : 1. UID del propietario. El UID es un numero que le asigna el sistema operativo a cada usuario cuando este se registra en el sistema. Cada usuario para poder trabajar en la terminal (o computadora ) debe registrarse en el sistema. Cada archivo tiene un propietari , que es el usuario que creo el archivo. 2. El GID del grupo asociado al archivo. El GID es un número que el sistema operativo le asigna a un grupo de usuarios. Todo usuario pertenece por lo menos a un grupo de usuarios, normalmente definido por el administrador del sistema. También cada archivo “pertenece” a un grupo. El administrador del sistema es un usuario que tiene una jerarquía especial que le permite realizar operaciones que normalmente no están permitidas a usuarios normales. Dicho administrador se llama root en el sistema operativo LINUX. 3. Tipo de archivo. Ya mencionamos los distintos tipos de archivos. Cuando el i-nodo no tiene asignado ningún archivo, el tipo se define como tipo 0 . De esa forma se reconoce cuando un i-nodo esta libre. 4. Protección rwx. Protección rwx para el propietario del archivo; protección rwx para los integrantes del grupo del archivo; protección rwx para el resto de los usuarios. Los archivos se protegen contra lectura (r) ; contra escritura (w) y contra ejecución (x). 5. Fecha y hora del ultimo acceso al archivo. 6. Fecha y hora de la ultima modificación ( o creación ) del archivo. 7. Fecha y hora de la ultima modificación del i-nodo. 8. Numero de enlaces (links). Pueden haber varios nombres (enlaces) asociados con un mismo i-nodo. En otras palabras varios nombres de archivos comparten el mismo archivo físico. 9. Punteros a los bloques del archivo. Son números de 32 bits que permiten localizar a un bloque físico del disco que contiene información del archivo. 10. Tamaño del archivo en bytes. Algunos de estos campos pueden ser vistos con la orden ls –l (listado extendido) $ ls –l / drwxr-xr-x 2 root root 4096 may 2 13:42 bin drwxr-xr-x 3 root root 1024 may 2 13:43 boot : : : Este comando muestra en formato largo o extendido la información de los archivos del directorio raíz. Estos son algunos de los atributos del archivo, de izquierda a derecha: Tipo de archivo: - archivo comun d directorio b archivo especial de bloque c archivo especial de carácter l archivo enlazado Permisos: son nueve caracteres, donde la 1ra. terna rwx (lectura, escritura y ejecución) pertenecen al dueño del archivo, la 2da. terna son los permisos del grupo y la 3ra. son para los otros usuarios. Enlace: este campo es numérico e indica la cantidad de enlaces que tiene el archivo. Nombre del dueño del archivo Nombre del Grupo Tamaño del archivo: información dada en bytes. Fecha y hora : de modificación del archivo Redireccionamiento de E/S Cada vez que se ejecuta un shell, se abren los ficheros stdin, stdout y stderr. El archivo stdin está asociado al teclado, tiene 0 como descriptor de archivo y representa a la entrada estandar de cualquier comando. Por ejemplo, los comandos cat, write y mail permiten que el UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 31 - usuario introduzca por teclado las líneas de datos, y esperan a que se les indique con <ctrl..d > que la carga a finalizado. Estos comandos toman la entrada de datos del archivo stdin. Mediante la redirección de entrada se puede indicar a un comando que tome como entrada los datos de un archivo determinado distinto a stdin, utilizando el símbolo < y el nombre del archivo de entrada. Por ejemplo: $ mail nom-usuario < mensaje donde nom-usuario es el nombre del destinatario de los datos contenidos en el archivo mensaje. La redirecciónde entrada no produce modificaciones en el fichero que se utiliza como entrada. Los comandos envían su salida por defecto a la salida estandar, la pantalla, es decir al archivo stdout asociado a ella. El descriptor de éste archivo es 1. La redirección de salida permite recoger la información que presenta un comando en pantalla y almacenarla en un archivo. Para indicar la redirección de salida se utilizan los símbolos > y >>. Al utilizar el símbolo > el archivo de salida se sobrescribe con los nuevos datos; en el caso que el archivo no exista, se crea con la misma orden. $ ls / > dire el comando ls lista el contenido del directorio raiz, sin embargo la salida no aparecerá por pantalla sino que se redirecciona al archivo dire, que sino existe, se crea con la misma operación. Al utilizar >>, redireccionamos la salida a un archivo determinado y si éste no existe se crea. Si el archivo existe, los nuevos datos redireccionados se añaden al final del archivo sin dañar las líneas del archivo que ya existían. $ ls /dev >> dire con el símbolo >>, agregamos al final del archivo dire un listado de los archivos del directorio /dev. stderr es un fichero estándar que recibe los mensajes de error, tiene asociado el descriptor 2. Cuando el shell no puede ejecutar un comando muestra un mensaje de error por la pantalla, si necesitamos redireccionar los mensajes de error tendremos que insertar en la línea de comandos el descriptor 2 del archivo sterr acompañado por > o >>, como sigue: $ cp 2> fichero.err como al comando cp no le hemos pasado como argumento el nombre del archivo a copiar, generará un mensaje de error que en vez de mostrarse por pantalla, se redirecciona al archivo fichero.err. Si visualizamos el archivo creado fichero.err obtendremos la siguiente salida: $ cat fichero.err cp : faltan argumentos (ficheros) pruebe cp – help’para mas información Crear archivos - cat La forma más sencilla de crear un archivo es utilizando el comando cat, que también nos permite ver el contenido un archivo y concatenar archivos, pero lo que nos interesa es que cat junto con el concepto de redireccionamiento, nos permite crear archivos de la siguiente forma: $ cat > nom-archivo El comando cat toma datos de la entrada estandar (el teclado) y los redirecciona (los guarda) a un archivo. En éste caso el usuario puede tipear todas las líneas necesarias y UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 32 - justificarlas con la tecla <Enter>, pero una vez justificadas, no podrá regresar a corregir lo escrito. Para grabar los datos y regresar al shell pulse ctrl.d. Por ejemplo: Si necesitamos crear el archivo materias, que tenga el nombre de las materias que estamos cursando : $ cat > materias deberemos ingresar: > Sistemas Operativos > Química > Estadística ctrl.. d Esta información ha quedado guardada en el archivo materias en nuestro directorio. El concepto de redireccionamiento es muy importante pues nos permite crear un archivo con la salida que genere cualquier comando, provocando que la salida de éste ya no sea enviada a la salida estándar sino a un determinado archivo. Así por ejemplo podríamos querer crear un archivo con todos los comandos que están en /bin: $ ls /bin > comandos el comando ls debe mostrar por pantalla un listado de los archivos del directorio /bin. Sin embargo con la línea de comando anterior, el shell devuelve sólo el prompt. Pero si ejecuta la orden ls podrá ver al archivo comandos formando parte del listado: $ ls materias comandos Borrar Archivos - rm Para borrar un archivo utilice el comando rm de la siguiente manera: $ rm nom-archivo al ejecutar este comando, borramos en la tabla del directorio la entrada correspondiente a nom- archivo. El argumento puede incluir una lista de archivo a borrar o puede también utilizar metacaracteres (consultar el Apéndice 1). Por ejemplo: $ rm materias comandos esta orden borra dos archivos, materias y comandos, que están en el directorio actual. Opciones de rm: -i pide al usuario que confirme la eliminación del archivo. -f borra el archivo sin tener en cuenta los permisos del archivo. -r se utiliza para borrar el contenido de un directorio en forma recursiva, incluso borra el directorio dado como argumento. Crear Directorios - mkdir Para crear un directorio se utiliza el comando mkdir . UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 33 - $ mkdir directorio-nuevo Crea el directorio directorio-nuevo por debajo del directorio actual o de trabajo. Si queremos crear un directorio, como subdirectorio de otro específico, debemos tipear la ruta absoluta o relativa del directorio nuevo. $ mkdir /home/ana/directorio-nuevo Sólo podemos pasarle como argumento al comando mkdir el nombre de un directorio. Para crear otros directorios deberá utilizar nuevamente el comando mkdir. Borrar Directorios - rmdir Si lo que deseamos es eliminar el directorio tenemos que emplear el comando rmdir. $ rmdir directorio-nuevo Para poder eliminar un directorio éste debe estar vacío. Por lo tanto la tarea previa a la eliminación de cualquier directorio, es eliminar todos los archivos que éste contiene. Sin embargo podemos eliminar un directorio y subdirectorios con el comando rm –r, pues borra en forma recursiva desde el directorio que se dio como argumento. Supongamos que listados es un directorio que necesitamos borrar, pero no está vacío, por lo que debemos tipear: $rm –r listados esta orden borra todos los archivos y subdirectorios que contiene listados, incluso borra el mismo directorio listados. Es conveniente prestar mucha atención antes de ejecutar el comando rm y rm ∗ Mostrar Archivos El sistema operativo Linux nos permite utilizar más de un comando para leer el contenido de un archivo, ya sea , en forma completa, paginado o ver sólo partes del archivo. Los archivos de configuración y de instrucciones son de texto por lo que resulta interesante acceder a ésta información. Los comandos que trataremos en esta sección son : cat, more, less, head y tail. cat La forma más sencilla de ver un archivo es con el comando cat. Muestra el contenido de todos los archivos que se le dé como argumento. Por ejemplo: $cat datos practico suponiendo que datos y practico son archivos del directorio de trabajo, cat muestra por pantalla en forma secuencial el contenido de ambos archivos. Es posible también, con este mismo comando concatenar archivos, simplemente redireccionando la salida secuencial del ejemplo anterior a un tercer archivo: $cat datos practico > salida así podemos concatenar dos o más archivos y guardarlos en un archivo de salida, sin que esto produzca modificaciones en los archivos tomados como argumento. UTN - FRC LINUX Cátedra: Sistemas Operativos Ing. Allende – Ing. Serna - 34 - more Uno de los problemas que presenta la utilización del comando cat es que produce la visualización completa del archivo, sin pausas, por lo que si éste es demasiado largo sólo podremos ver las últimas 20 líneas. El comando more nos permite ver el contenido de un archivo, página por página. Por defecto en cada página muestra 21 líneas. La línea de comandos para more es la siguiente: $ more [-n° de líneas p/página] nom-archivos $more - 15 datos por supuesto también a more podemos darle como argumento el nombre de más de un archivo, y los mostrará en forma secuencial. Una vez que el comando more nos esta mostrando el contenido de un archivo, tenemos opción a ejecutar algunos comandos: - barra espaciadora: avanza a la