153
I NSTITUTO  U NIVERSITARIO  G ASTÓN  D ACHARY I NSTITUCIÓN  U NIVERSITARIA  P RIVADA S ALTA  Y  C OLÓN  - P OSADAS DE  J ULIO  Y  B UENOS  A IRES  - O BERÁ  [email protected] . [email protected] .  http://www.dachary.edu.ar M ARZO  2004 CARLOS CÉSAR OEGG [email protected] CARLOS MANUEL TOLEDO [email protected] C URSOS  L INUX

Linux (Curso)

Embed Size (px)

DESCRIPTION

Taller GNULinux

Citation preview

Page 1: Linux (Curso)

I N S T I T U T O  UN I V E R S I T A R I O  G A S T Ó N  D A C H A R YI N S T I T U C I Ó N U N I V E R S I T A R I A P R I V A D A

S A L T A  Y  C O L Ó N  ­   P O S A D A S

9   D E  J U L I O  Y  B U E N O S  A I R E S  ­   O B E R Á 

i n f o r m e s @ d a c h a r y . e d u . a r.o b e r a @ d a c h a r y . e d u . a r.

 h t t p : / / w w w . d a c h a r y . e d u . a r

M A R Z O  2004

CARLOS CÉSAR OEGG [email protected]

CARLOS MANUEL TOLEDO  [email protected]

C U R S O S LI N U X

Page 2: Linux (Curso)

CURSOS LINUX

INTRODUCCIÓN

La mayor parte de los ordenadores que existen en la actualidad están diseñadosde forma que puedan ejecutar diversas tareas o programas. Estos programas pueden irdesde   un   procesador   de   textos,   a   un   programa   para   la   animación   de   gráficostridimensionales o distintos tipos de juegos. Para su correcto funcionamiento debenser además capaces de acceder a las recursos de que dispone el ordenador, como porejemplo escribir o leer datos en un disco duro, mostrar un gráfico por pantalla, etc.Es evidente, que si cada programa actuase de una forma independiente, existiríangraves   problemas   y   conflictos,   puesto   que,   por   ejemplo,   tendrían   libertad   paraescribir sus datos sobre los de otro, etc.

Para solucionar este tipo de problemas se desarrollaron los Sistemas Operativos,los cuales aportan unos mecanismos y reglas básicas de funcionamiento, de forma quelos programas puedan acceder a los recursos del ordenador de una forma adecuada.Aunque ésta fue la funcionalidad inicial de los sistemas operativos, con el tiempo sehan añadido muchas otras, como la ejecución de programas, el control de la memoriadel ordenador, la creación y control de interfaces gráficas de usuario, etc.

En la actualidad existen una gran cantidad de sistemas operativos dependiendodel tipo de ordenador en el que se va a ejecutar. Por ejemplo para los PC uno de lossistemas operativos más difundidos en Microsoft Windows, tanto en las versiones 95,98, 2000 y NT 4.0. Otros posibles sistemas operativos para este tipo  de ordenadoresson  Solaris,  OS/2,  BeOS,  Microsoft   DOS,   o   uno   de   los   sistemas   operativos   máspoderosos y en rápida expansión para PC, LINUX.  También existen sistemas operativosde alto rendimiento tales como AIX, HPX, IRIX, etc.

¿Qué es LINUX?

Linux  es un sistema operativo de libre distribución inspirado en el sistemaUnix, escrito por Linus Torvalds con la ayuda de miles de programadores en Internet.Unix es un sistema operativo  desarrollado en 1970, una de cuyas mayores ventajas esque es fácilmente portable a diferentes tipos de ordenadores, por lo que existenversiones de  Unix  para casi todos los tipos de ordenadores, desde  PC  y  Mac  hastaestaciones   de   trabajo   y   supercomputadoras.   Al   contrario   que   otros   sistemasoperativos, como por ejemplo MacOS (Sistema operativo de los Apple Macintosh), Unixno está pensado para ser fácil de emplear, sino para ser sumamente flexible. Por lotanto 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 laenorme flexibilidad de  Linux  y su gran estabilidad (y el bajo coste) han hecho deeste sistema operativo una opción muy a tener en cuenta por aquellos usuarios que sedediquen a trabajar a través de redes, naveguen por  Internet, o se dediquen a laprogramación. Además el futuro de Linux es brillante y cada vez más y más gente y másy más empresas (entre otras IBM, Intel, Corel) están apoyando este proyecto, con loque el sistema será cada vez más sencillo de emplear y los programas serán cada vezmejores.

¿Qué son las distribuciones?

Uno de los primeros conceptos que aparecen al iniciarse en Linux es el conceptode distribución.

Una distribución es un agrupamiento del núcleo del sistema operativo Linux (laparte desarrollada por Linus Torvalds) y otra serie de aplicaciones de uso general ono tan general. En principio las empresas que desarrollan las distribuciones de Linuxestán en su derecho al cobrar una cierta cantidad por el software que ofrecen, aunqueen la mayor parte de las ocasiones se pueden conseguir estas distribuciones desde

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  2

Page 3: Linux (Curso)

CURSOS LINUX

Internet, de  revistas, publicaciones, etc., siendo todas estas formas  gratuitas  ylegales.

Las distribuciones más conocidas son  RedHat,  Debian,  Slackware,  SuSE y CorelLinux, todas ellas incluyen el software más reciente y empleado lo cual incluyecompiladores   de   C/C++,   editores   de   texto,   juegos,   programas   para   el   acceso   aInternet, así como el entorno gráfico de Linux: X Window.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  3

Page 4: Linux (Curso)

CURSOS LINUX

HISTORIA DE UNIX

Al surgir los sistemas de procesamiento por lotes en la década de los 60, elprogramador escribía un trabajo en las tarjetas perforadas y lo llevaba al cuarto demáquinas. Al ensamblar un número suficiente de trabajos, el operador los leía como unsolo   lote.   Para  evitar   algo   que  todos   consideraban   un  orden   no   satisfactorio  eimproductivo se inventó el concepto de tiempo compartido en Dartmouth College y MIT.El sistema de Dartmouth sólo ejecutaba BASIC y tuvo un éxito comercial a corto plazo.El sistema del MIT, CTSS era de propósito general y tuvo un enorme éxito entre lacomunidad científica. Después de poco tiempo los investigadores del MIT unieron susfuerzas con Bell Laboratories y General Electric e iniciaron el diseño de un sistemade   segunda   generación,   MULTICS   (MULTimplexed   Information   and   Computing   Service,Servicio de información y cómputo con multiplexión).

MULTICS fue un fracaso. Se le diseñó para soportar en Hw cientos de usuarios enforma un poco más poderosa que una PC.

Bell   Labs   abandonó   el   proyecto,   por   lo   que   uno   de   sus   investigadores,   KenThompson, decidió volver a escribir un nuevo MULTICS (en lenguaje ensamblador) en unaminicompudadora   PDP­7.   A   pesar   del   tamaño   de   la   PDP­7,   el   sistema   de   Thompsonfuncionó.   En   consecuencia,   otro   investigador   del   Bell   Labs,   Brian   Kernighan,   lodenominó de manera burlona UNICS(Sistema de Información y Cómputo con Uniplexión).

El trabajo de Thompson impresionó a sus colegas de Bell Labs de tal forma, quepronto   se   le   unió   Dennis   Ritchie.   En   ese   tiempo   se   hicieron   dos   desarrollosprincipales. El primero fue el traslado de UNIX a una PDP­11/70 (Hw de protección dememoria), lo que le permitía soportar varios usuarios al mismo tiempo.

El   segundo   fue   el   desarrollo   del   lenguaje   C   por   Dennis   Ritchie   (para   latransportabilidad de UNIX).

En 1974, Thompson y Ritchie publicaron un artículo relativo a UNIX, lo que lepermitió obtener el premio Turing. La publicación de este artículo estimuló a muchasuniversidades para pedir a Bell Labs una copia de UNIX. Puesto que la compañía dueñade Bell Labs, AT&T, era un monopolio regulado y no podía entrar al negocio de lacomputación, otorgó a bajo costo las licencias de UNIX a las universidades.

En una de esas coincidencias, la PDP­11 era la computadora a elegir en casitodos lo s departamentos de ciencia de la computación en las universidades y lossistemas   operativos   que   venían   con   ella   eran   considerado,   por   los   profesores   yestudiantes, un desastre.  UNIX vino a llenar el hueco, debido en particular a que seproporcionaba con todo el código fuente, de modo que las personas podían jugar con élde mil formas.   Se organizaron reuniones científicas en torno a UNIX, donde seindicaban el descubrimiento de un oscuro error y la forma de arreglarlo (similares auna   novela   de   Shakespeare).     Como   resultado   de   esta   actividad,   las   mejoras   sedifundieron con rapidez.     Toda una generación de estudiantes se educó con estossistemas,   lo   cual  contribuyó   a   su  difusión   después   de  que   ellos   terminaron  suscarreras y fueron a trabajar en la industria

Una vez escrito UNIX en C, su traslado a una nueva máquina fue más fácil que enlos primeros días. El traslado requería primero que se escriba un compilador C parala nueva máquina y luego escribir los controladores de los dispositivos. Y por últimose   debería   escribir   un   pequeño   código   (en   ensamblador)   para   controlar   lasinterrupciones y las rutinas de manejo de la memoria.

Después de la separación de AT&T en 1984 por parte del gobierno de los EUA, lacompañía fue libre de establecer una subsidiara en la rama de la computación. Pocotiempo después, AT&T lanzó su primer producto comercial de UNIX, el System III, nofue bien recibido por lo que se reemplazó por una versión mejorada, el System V.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  4

Page 5: Linux (Curso)

CURSOS LINUX

El UNIX de Berkeley:

Una de las muchas universidades que adquirió pronto UNIX fue la Universidad deCalifornia en Berkeley. Puesto que disponía de todo el código fuente, Berkeley pudomodificar el sistema de una manera sustancial. Por medio del apoyo económico de DARPA(Agencia de Proyectos de Investigación Especial de la Defensa), Bekerley produjo ydistribuyó una versión mejorada de UNIX denominada 1BSD (Distribución de Software deBerkeley).

Las   distribuciones   de   Bekerley,   agregaban   el   uso   de   memoria   virtual   ypaginación, nombre de los archivos mayor a 14 caracteres, y una mejor implementaciónde estos, lo cual mejoraba la velocidad en sus búsquedas. Se introdujo el uso deredes, lo que hizo que el protocolo de redes BSD, TCP/IP, se convirtiera en unestándar de hecho, mucho más utilizado que los estándares oficiales, como OSI.

Bekerley también añadió gran cantidad de programas como ser (vi, compiladores,etc.). Lo que le llevo al BSD establecerse con firmeza en el mundo académico, deinvestigación y de defensa.

UNIX Estándar:

A fines de la década de los ochenta, se utilizaba ampliamente dos versiones deUNIX distintas, el 4.3BSD y la versión 3 del System V. Esta división en el mundoUNIX, inhibió en gran parte su éxito comercial, puesto que los vendedores de softwareno podían escribir programas con la esperanza que se pudieran ejecutar en cualquiersistema   de   UNIX.  Los   primeros   intentos  fracasaron   (Ej.:   la  AT&T   lanzo   el  SVID,Definición de Interfaz del Sistema V) pero con tuvo efecto en el campo del BSD quetan sólo lo ignoró.

El primer intento serio se inició bajo los auspicios de la IEEE. Cientos depersonas de las industrias, universidades y el gobierno intervinieron. El nombre delproyecto era POSIX (Portable Operating Systems unIX).

El   comité   POSIX   produjo   el   estándar   1003.1   que   definía   un   conjunto   deprocedimientos   de   biblioteca   que   cualquier   sistema   conforme   con   UNIX   deberíaproporcionar. La idea de POSIX es que un vendedor de software pudiera escribir unprograma donde sólo utilice procedimientos  definidos en 1003.1 y él podía estarseguro que dicho programa se ejecutase en cualquier sistema UNIX.

El estándar 1003.1 fue excepcionalmente bueno. La posición para su elaboraciónfue la siguiente: si una característica se incluía en el System V y en el BSD, seincluía en el estándar, caso contrario, no.

El estándar 1003.1 solo se refiere a las llamadas al sistema, pero existen ungran número de documentos relacionados  que intentan lograr un estándar para losprogramas de utilería.

Luego que se resolvió la controversia entre el System V y el BSD, surgió unanueva. Un grupo de vendedores encabezados por IBM, DEC y HP no aceptaban la idea quela AT&T tuviera el control del resto de UNIX, por lo que establecieron un consorcioconocido como OSF (Open Software Fundation) para producir un sistema que cumplieracon todos lo estándares de la IEEE pero con características adicionales, tales comoel sistema de ventanas X11, una interfaz gráfica para el usuario (MOTIF), cómputodistribuido, etc.

La reacción de la AT&T fue forma su propio consorcio, UI (UNIX International)para hacer exactamente lo mismo. 

El resultado neto es que tenemos ahora dos poderosos grupos industriales, quecada uno ofrece una versión propia de UNIX.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  5

Page 6: Linux (Curso)

CURSOS LINUX

Una propiedad en común de todos estos sistemas es que son inmensos y complejos,todo lo contrario a la idea original de UNIX.

Esta situación ha producido sistemas como MINIX, con la idea de ser los bastantepequeños como para ser comprendidos con código fuente disponible utilizado con fineseducativos.

Objetivos de UNIX:

UNIX   es   un   sistema   interactivo   de   tiempo   compartido.     Fue   diseñado   porprogramadores y para programadores, y cuyo uso será un ambiente en donde la mayoríade   los   usuarios   son   relativamente   sofisticados   y   comprometidos   en   proyectos   dedesarrollo de software.  En muchos casos, un gran número de programadores cooperan demanera   activa   para   producir   un   solo   sistema,   por   lo   que   UNIX   tiene   ampliasfacilidades para permitir el trabajo en conjunto.

Los   programadores   desean   que   sus   sistemas   sean   sencillos,   elegantes   yconsistentes.   Por ejemplo, en el nivel inferior, un archivo debe ser una simplecolección de bytes.

Otra   cosa   que   desean   los   programadores   experimentados   es   potencia   yflexibilidad.   Esto quiere decir que un sistema debe tener un número pequeño deelementos básico, combinable entre sí en una infinidad de maneras para adecuarse a laaplicación.   Uno de los criterios guía de UNIX es que todo programa debe realizarsólo una cosa y hacerla bien.

Por último, la mayoría de los programadores aborrecen la redundancia inútil (Porque escribir copy si se puede escribir cp?)

Un   enfoque   opuesto   es   que   le   programador   seleccione   el   programa   grep   (sinargumentos) y que entones grep se anuncia sí mismo de la forma “Hola, soy grep, buscopatrones en los archivos.   Por favor escribí tu patrón”.   Después de obtener elpatrón, grep pide un nombre de archivo.  Después, pregunta si existen más nombres dearchivo.  Por último, resume lo que va a hacer y pregunta si es correcto.  Aunqueeste tipo de interfaz con el usuario podría ser adecuado para novatos, tiende amolestar a programadores experimentados.  LOS PROGRAMADORES QUIEREN ALGUIEN QUE LESSIRVA, NO UNA NIÑERA.

Interfaces de UNIX:

El sistema UNIX se ejecuta sobre el Hardware.  Su función es controlar a éste yproporciona una interfaz de llamadas al sistema para todos lo programas.   Estasllamadas al sistema permiten a los programas del usuario crear y manejar procesos,archivos y otros recursos.

Laos programas hacen llamadas al sistema al colocar argumentos en registro (o unpila) y ejecutar instrucciones de señalamientos, para alternar del modo usuario amodo   núcleo   e   iniciar   UNIX.     Puesto   que   no   existe   una   forma   de   escribir   unainstrucción   de   señalamiento   en   C,   se   proporciona   una   biblioteca,   con   el   unprocedimiento por cada llamada al sistema.   Estos procedimientos se escriben enlenguaje ensamblador, pero pueden ser llamados desde C.  Cada uno de ellos comienzapor colocar argumentos en un lugar adecuado, para después ejecutar la instrucción deseñalamiento al núcleo.

Así, para ejecutar una llamada al sistema read, un programa en C puede llamar alprocedimiento   de   biblioteca   read.     POSIX   no   define   la   interfaz   de   llamadas   alsistemas sino que los procedimientos de biblioteca.

En   otras   palabras   POSIX   indica   los   procedimientos   de   biblioteca   que   debeproporcionar el sistema, los que son sus parámetros, lo que debe realizar y losresultados que deben producir.  No hace mención alguna a las llamadas al sistema.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  6

Page 7: Linux (Curso)

CURSOS LINUX

Los programas estándares se especifican en POSIX 1003.2, tales como el shell,compiladores, etc.

Se puede hablar de 3 interfaces distintas con UNIX: la verdadera interfaz dellamadas   al   sistema,   la   interfaz   de   bibliotecas   y   la   interfaz   formada   por     elconjunto de programas estándares y utilerías.  Mientras que esto último es lo que elusuario casual considera como UNIX, no tiene nada que ver con el sistema operativo ensí y se puede reemplazar con facilidad (Ej.: reemplazar el shell por una GUI).

Esta flexibilidad le permite a UNIX sobrevivir a los numerosos cambios en latecnología subyacente.

Procesos en UNIX:

Son las únicas entidades activas,   cada procesos ejecuta un solo programa ytiene un solo hilo de control.

La llamada fork() crea una copia exacta del proceso original.   El padre y elhijo tienen sus propias imágenes privadas en la memoria.   Si el padre cambia másadelante   alguna   de   sus   variables,   lo   cambios   no   son   visibles   para   el   hijo   yviceversa.

Los archivos abiertos se comparten entre el padre y el hijo.   Es decir, sicierto archivo es abierto por el padre antes de fork(), continuará abierto tanto enel padre como en el hijo después de fork().  Los cambios hechos en el archivo porcualquiera de ellos será visible para el otro.  Para distinguir el código del padre yel hijo, la llamada fork() regresa un 0 al hijo y el valor de pid del hijo al padre.

Ej.:pid = fork();if(pid < 0){

/* fork falla */}else if (pid > 0){

/* Código del padre */}else{

/* Código del hijo */}

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  7

Page 8: Linux (Curso)

CURSOS LINUX

Los hijos a su vez, también pueden tener hijos, un proceso original puede tenerun árbol completo de descendientes.

Al arranca el sistema, el núcleo crea un proceso llamado init.

init lee la cantidad de terminales que necesita el sistema y crea un procesohijo para cada terminal y se duerme hasta que uno de los hijos termina.  Cada hijoejecuta el programa login e intenta leer el nombre del usuario.  Cuando alguien sesienta frente a la terminal y se loguea login se cubre a sí mismo con el shell delusuario, el cual espera entonces el primer comando.

Cuando el shell ve un comando como

sort <f | head

Crea dos proceso, sort y head y establece un pipe (tubo) entre los dos, de formaque la salida estándar de sort se conecte a la entrada estándar de head.  Si el tubose llena, el sistema detiene la ejecución de sort hasta que head ha retirado algunosdatos del tubo.

Otra forma de comunicación entre los procesos es mediante interrupciones desoftware.   (señales).   Los procesos pueden indicar al sistema lo que desean queocurra al llegar una señal.  Las opciones son por defecto son ignorarla, atraparla odejar que la señal mate al proceso.   Hay señales que no puede ser ignoradas niatrapadas (Ej.: KILL).   Si un proceso opta por atrapar las señales enviadas a él,debe especificar un procedimiento para su manejo.   Al llegar la señal, el controlpasa   de   manera   inmediata   al   manejador   de   la   señal   correspondiente.     Cuando   elmanejador termina, regresa el control, similar a las interrupciones de hardware.  Unproceso sólo puede enviar señales a miembros de su propio grupo, el cual esta formadopor su padres (y ascendientes), hermanos e hijos (y descendientes).

Las  señales  se  suelen  ocupar  con  otros  fines.    Por  ejemplo, si  un  procesorealiza aritmética de punto flotante y de forma inadvertida divide entre 0, obtieneuna señal SIGFPE (excepción de punto flotante).

SEÑALES REQUERIDAS POR POSIX

SIGABRT Aborta un proceso

SIGALRM Alarma

SIGFPE Error de punto flotante

SIGHUP Se ha colgado la línea telefónica

SIGKILL Mata un proceso

SIGINT Se presionado la tecla DEL para interrumpir un proceso

SIGOUIT Se oprimido la tecla que solicita un vaciado de núcleo

SIGILL El proceso ha ejecutado una operación de máquina no válida.

SICPIPE El proceso ha escrito un pipe sin lectores

SIGSEGVEl proceso ha realizado una referencia a una dirección de memoria noválida

SIGTERM Se utiliza para solicitar que un proceso termine de manera correcta

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  8

Page 9: Linux (Curso)

CURSOS LINUX

SIGUSR1 Nos disponible para uso de aplicaciones de usuario

SIGUSR2 Idem

Cada proceso adquiere en forma automática el UID de la persona que lo creó,excepto si el programa se encuentra con el bit SetUID encendido (se explica másadelante su funcionamiento) el cual permite colocar un conjunto de programas quehacen uso del poder de otros usuarios (generalmente el root) pero en forma controladay limitada.

ESTÁNDARES BASE DE POSIX1003.1. Servicios básicos del SO

1003.1a Extensiones a los servicios básicos

1003.1b Extensiones de tiempo real

1003.1c Extensiones de hilos (thread)

1003.1d Extensiones adicionales de tiempo real

1003.1e Extensiones de seguridad

1003.2. Shell y utilidades

1003.2b Utilidades adicionales

El modelo de memoria de UNIX:

Para que los programas sean portables y poder implantar UNIX en máquina conunidades de manejo de memoria con amplias diferencias  cada proceso en UNIX tiene unespacio de direcciones con tres segmentos: texto, datos y pila.

El  segmento de texto  contiene las instrucciones de máquina que conforman elcódigo ejecutable del programa.   Este es de sólo lectura.   Los programas que semodificaban   a   sí   mismo   pasaron   de   moda   desde   1950,   puesto   que   era   difícil   sucomprensión y depuración.  Así que el segmento de texto no crece ni disminuye.

El  segmento   de   datos  es   un   espacio   para   almacenar   las   variables,   cadenas,arreglos y otros datos del programa.  Tiene dos partes, los datos inicializados y losno inicializados o BSS.  La parte inicializada contiene las variables y constantesdel compilador que necesitan un valor al iniciar el programa.

Por ejemplo en C, es posible declarar una cadena de caracteres e inicializarlaal mismo tiempo.  Para implantar esta construcción, el compilador asigna a la cadenaun lugar en el espacio de direcciones y garantiza que al inicializar el programa,esta posición contenga a la cadena adecuada.  Desde el punto de vista del SO, losdatos inicializados  no son tan distintos del texto del programa (ambos contienepatrones de bits creados por el compilador).

La existencia de datos no inicializados es en realidad una optimización.  Cuandouna variable global no se inicializa de forma explícita, la semántica del lenguaje Cindica que su valor inicial es =.   En la práctica, la mayoría de las variablesglobales no se inicializa y sus valores iniciales son entonces 0.   Esto se puedeimplantar al tener una sección del archivo ejecutable en binario igual al número debytes de datos e inicializarlos todos, incluyendo a aquellos que tenían un valorpredefinido 0.  Esto no se hace para ahorrar espacio en el archivo ejecutable. Sinoque el archivo contiene todas las variables inicializadas en forma explícita despuésdel texto del programa.  Las variables no inicializadas se concentran después de lasinicializadas, de forma que lo único que debe hacer el compilador es colocar unapalabra en el encabezado para indicar los bytes por asignar.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  9

Page 10: Linux (Curso)

CURSOS LINUX

Para aclara este punto, consideremos la figura (a).  Aquí el texto del programaes de 8K y los datos inicializadas también son de 8K.  Los datos no inicializados(BSS) son de 4K.  El archivo ejecutable sólo tiene 16K (texto + datos inicializados),más un breve encabezado que indica al sistema que asigne otros 4K después de losdatos inicializados y 0 antes de comenzar el programa.  Este truco evita almacenar 4Kde cero en el archivo ejecutable.

A diferencias con el segmento de texto, el segmento de datos puede cambiar.  Losprogramas modifican sus variables todo el tiempo.  UNIX permite que el segmento dedatos crezca y se reduzca al asignar y liberar la memoria.  Así un programa puedeincrementar su segmento de datos utilizando el procedimiento malloc.

El tercer segmento es el segmento de pila.  En la mayoría de las máquinas, éstecomienza en la parte superior del espacio de direcciones virtuales y crece haciaabajo en dirección 0. Si la pila crece debajo de la parte inferior del segmento de lamisma, ocurre, por lo general, un fallo de hardware y el sistema operativo recude ellímite inferior del segmento de la pila en unos cuantos miles de bytes (por ejemplo,una página).  Los programas no controla en forma explícita su tamaño.

Al iniciar un programa la pila no está vacía, sino que contiene las variablesdel entorno (shell), así como la línea de comandos escrita en el shell para llamardicho programa.   De esta manera, un programa puede descubrir sus argumentos.   Porejemplo cuando se escribe el comando “cp src dest” el programa cp se inicia con lacadena “cp src dest” en la pila, de forma que pueda determinar los nombres de losarchivos fuente y destino.

Cuando   dos   usuarios   ejecutan   un   mismo   programa   sería   ineficiente   tener   doscopias del texto.   En vez de esto, muchos UNIX soportan los segmentos de texto

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  10

Page 11: Linux (Curso)

CURSOS LINUX

compartidos.   En la figura anterior se puede observar dos procesos que tienen elmismo segmento de texto.  La asociación se realiza mediante el Hw de memoria virtual.

Los segmentos de datos y de pila nunca se comparten.   Si estos crecen y noexiste espacio contiguo, se desplazan a otra posición de memoria.

El sistema de archivos en UNIX:

Cuando   un   proceso   desea   leer   o   escribir   un   archivo,   primero   debe   abrirlomediante la llamada al sistema OPEN.  El sistema verifica si el archivo existe y deser así, inspecciona los bits de derechos para ver si el que hace la llamada tienepermitido el acceso al archivo de la manera deseada.  Si se permite el acceso, elsistema regresa un entero positivo llamado “descriptor de archivo” a quien hizo lallamada.  Si no tiene acceso regresa el valor “­1”.  Los posteriores referencias alarchivo se realiza por medio de su descriptor.

Al iniciar un proceso siempre se dispone de tres descriptores: 0 para la entradaestándar, 1 para la salida estándar y 2 para el error estándar.  El primer archivoabierto recibe el descriptor 3, el siguiente 4, etc.   Al cerrarse un archivo, selibera su descriptor.

Existen dos formas para especificar los nombre de archivos en UNÍX.  A primerautiliza una “ruta absoluta”, que indica la forma de llegar al archivo desde eldirectorio raíz  (Ej.: /usr/ast/book/ch1).  Esto indica al sistema que busque en eldirectorio raíz un directorio de nombre “usr”, después busque ahí otro directorio“ast”.  A su vez este directorio contiene un directorio “book”, el cual contiene elarchivo “ch1”.

La segunda forma es designar el directorio que el usuario se encuntra trabajandocomo “directorio de trabajo”.  Los nombre de las rutas de acceso se pueden determinarentonces   en   forma   relativa   al   directorio   de   trabajo.     Esto   de   denomina   “rutarelativa”.  Por ejemplo, si /usr/ast/book es el directorio de trabajo, entonces elcomando de shell “cp ch1 backup”, tiene el mismo efecto que “cp /usr/ast/boot/ch1 /usr/ast/book/backup”.

Muchas computadoras tienen dos o más discos. Cuando existen varias unidades dedisco, surge una cuestión de la forma de controlarlas.  Una solución es colocar unsistema de archivos autocontenido en cada uno de ellos y mantenerlos independientes.Consideremos por ejemplo, la situación de la figura a.  Cada uno de ellos tiene supropio directorio raíz y sus archivos.   Con esta solución, el usuario tiene queespecificar   tanto   el   dispositivo   como   el   archivo   cuando   se   necesite   algo   nopredefinido.   Por ejemplo, para copiar el archivo x al directorio d (si H: es elpredefinido), se debe escribir: “cp d:/x /a/d/x”.   Este es el punto de vista quetoman los sistemas operativos MS­DOS, Windows y VMS

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  11

Page 12: Linux (Curso)

CURSOS LINUX

La solución de UNIX es permitir que un disco se monte en el árbol de directoriode otro disco.  Por ejemplo se podría monta el disco flexible en el directorio /b, loque produce el sistema de archivos de la figura b.  El usuario ve entonces un únicoárbol de archivos y no tiene que preocuparse por el lugar donde reside un archivo enun dispositivo.  El comando anterior se convierte en que es igual al caso en que todoestuviera en el disco duro desde el principio (cp /b/x /a/d/x).

Otra   propiedad   de   los   archivos   en   UNIX     es   la   “Cerradura”.     En   algunasaplicaciones, dos o más procesos podrían utilizar el mismo archivo al mismo tiempo,lo   que   produciría   condiciones   de   competencia.     Una   solución   es   programar   laaplicación con regiones críticas.  Sin embargo, si los procesos pertenecen a usuariosindependientes que ni siquiera se conocen, por lo general este tipo de coordinaciónes difícil.

POSIX  proporciona un mecanismo para que los procesos cierren un archivo desdeun solo byte hasta todo el archivo.  El mecanismo de cerradura (locking) requiere quequien haga la llamada determine el archivo por cerrar, el byte de inicio y el númerode bytes.

Se proporciona dos tipos de cerraduras, compartida y exclusiva.  Si una porciónde un archivo ya tiene una cerradura compartida en él, se permite un segundo intentopor coloca una cerradura compartida en él, pero fracasará un intento por colocar unacerradura exclusiva en él.  Si una parte de un archivo tiene una cerradura exclusiva,todos los intentos por cerrar cualquier parte de ella fracasarán, hasta que se liberela cerradura.  Para poder colocar conexito una cerradura, cada byte de la región porcerrar deberá estar disponible.

Al colocar una cerradura, un proceso debe especificar si desea quedar o nobloqueado en caso de que no pueda colocar la cerradura.  Si se opta por el bloqueo,al   eliminar   la   cerradura   existente,   el   proceso   se   desbloquea   y   se   coloca   lacerradura.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  12

Page 13: Linux (Curso)

CURSOS LINUX

Las regiones cerradas se pueden traslapar.  Por ejemplo en la figura “a” vemosque el proceso A ha colocado una cerradura compartida en los bytes 4 a 7 de ciertoarchivo.  Más adelante, el proceso B coloca una cerradura compartida en los bytes 6 a9, como se muestra en la figura “b”.  Por último, C cierra los bytes 2 a 11. Mientraslas cerraduras sean compartidas, pueden coexistir.

Consideremos ahora lo que ocurre si un proceso intenta adquirir una cerraduraexclusiva del byte 9, con una solicitud de bloqueo si falla la cerradura.  Puesto quedos cerraduras previas cubren a este bloque, quien hizo la llamada se bloqueará ypermanecerá así hasta que tanto B como C liberen sus cerraduras.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  13

Page 14: Linux (Curso)

CURSOS LINUX

HISTORIA DE LINUX

Linux se ve y se siente muy parecido a cualquier otro sistema UNIX, y de hecho lacompatibilidad con UNIX ha sido una importante meta de diseño.

Su desarrollo se inició en 1991, cuando un estudiante finlandés, Linus Torvalds,escribió y bautizó un pequeño núcleo para el procesador 80386.

En   los   albores   de   su   desarrollo,   el   código   fuente   de   Linux   se   ofrecíagratuitamente en Internet.  En consecuencia, su historia ha sido una de colaboraciónde muchos usuarios de todo el mundo que se comunican casi exclusivamente a través deInternet. 

Desde un núcleo inicial que implementaba parcialmente un subconjunto pequeño delos   servicios   de   sistema   de   UNIX,   Linux   ha   crecido   para   incluir   cada   vez   másfuncionalidad UNIX.

Se requiere mucho más que un núcleo para producir un sistema operativo completo.Resulta útil hacer la distinción entre el núcleo (kernel) de Linux y un sistemaLinux, el núcleo de Linux es una entidad de software totalmente original desarrolladadesde cero por la comunidad Linux; el sistema Linux, incluye multitud de componentes,algunos   escritos   desde   cero,   otros   tomados   en   préstamo   de   otros   proyectos   dedesarrollo o creado en colaboración con otros equipos.

Por   ejemplo,   un   sistema   Linux   típico   incluye   aplicaciones   como   ser:OpenOffice.org, Netscape, NFS, etc (desarrolladas por Sun Microsystem); el sistema dearchivos JFS (desarrollado por IBM); cp, mv, rm (desarrollados por la Open SoftwareFundation).

A medida que Linux ha madurado, se ha hecho necesario otra capa de funcionalidadencima del sistema.   Una distribución Linux incluye todos los componentes estándardel sistema Linux, más un conjunto de herramientas administrativas que simplifican lainstalación   y   administración   (crea   y   eliminar   usuarios,   administrar   sistemas   dearchivos, etc.)

El núcleo de Linux:

El 14 de mayo de 1991, se liberó la primera versión de Linux al público, laversión 0.01.  Esta versión no trabaja con redes, sólo se ejecutaba en procesadoresIntel compatibles con el 80386, contaba con un soporte de drivers extremadamentelimitado.   El subsistema de memoria virtual también era muy básico, sin embargomanejaba páginas compartidas con copia en escritura.  El único sistema de archivosque reconocía era el de Minix.   No obstante, el núcleo implementaba correctamenteprocesos UNIX con espacio de direcciones protegido.

No fue sino hasta el 14 de marzo de 1994 que apareció la siguiente versión deLinux, la 1.0.  La función más importante que incorporaba era el soporte para redes,que incluía los protocolos TCP/IP e interfaz de socket compatible con BSD.  Se añadiósoporte de drivers de dispositivos para ejecutar IP en una ethernet o (empleandoprotocolos PPP o SLIP) por líneas seriales o módems.

El núcleo 1.0 también incluía un sistema de archivos nuevo muy mejorado sin laslimitaciones   del   sistema   de   archivos   Minix   original   y   reconocía   una   gama   decontroladores SCSI para acceso a discos de alto desempeño.  El subsistema de memoriavirtual también se extendió par apoyar el intercambio de archivos por paginación y lacorrespondencia en memoria de archivos arbitrarios.

Se incluyó emulación de punto flotante en el núcleo para usuarios del 80386 que notenían coprocesador matemático 80387, y se implementó la comunicación entre procesos(IPC)   al   estilo   System   V,   que   incluía   memoria   compartida,   semáforos   y   cola   de

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  14

Page 15: Linux (Curso)

CURSOS LINUX

mensajes.   También se proporcionó soporte para módulos del núcleo que se podíancargar y descarga dinámicamente.

En   estas   fecha   se   inició   el   desarrollo   de   la   serie   de   núcleos   1.1,   perosubsecuentemente aparecieron numerosos parches para corregir errores de la versión1.0.  Este patrón se adoptó como la convención de numeración estándar para núcleos deLinux: los núcleos con numeración menor impar, como 1.1, 1.3 o 2.1 son núcleos dedesarrollo, los números de versión menor pares son núcleos estables, de producción.Las actualizaciones de los núcleos estables sólo pretenden ser versiones de remedios,mientras   que   los   núcleos   de   desarrollo   podrían   incluir   funciones   más   nuevas   yrelativamente poco probadas.

En marzo de 1995 se liberó el núcleo 1.2 que incluyó soporte para buses PCI, elmodo 8086 y una implementación más completa de la pila de protocolos de redes, queincluía funcionalidad de contabilización y firewall.

El núcleo 1.2 también representó el último de los núcleos de Linux exclusivos paraPC.     La   distribución   fuente   incluía   soporte   parcialmente   implementado   paraprocesadores SPARC, Alpha y MIPS, aunque la plena integración de estas arquitecturasno comenzó sino hasta después de liberarse el núcleo 1.2 estable.

La versión 2.0 de Linux se lanzó en Junio de 1996.   Esta versión incluía dosnuevas   capacidades   importantes:   soporte   de   múltiples   arquitecturas,   incluido   eltraslado a un sistema Alpha de 64 bits, y soporte de arquitecturas multiprocesador.También hay distribuciones de Linux basadas en 2.0 para procesadores de la serieMotorola 68000 y para sistemas Sun SPARC.

Las modificaciones de 2.0 no se limitaron a los dos aspectos mencionados.   Elcódigo de gestión de memoria se mejoró sustancialmente para contar con un cachéunificado para datos del sistema de archivos independiente del uso de caches dedispositivos por bloques.  Como resultado de este cambio, el desempeño del sistema dearchivos y la memoria virtual mejoró considerablemente.  Por primera vez, el uso decaches del sistema de archivos se extendió a los sistemas de archivos de red.

El   núcleo   2.0   también   permitió   mejorar   mucho   el   desempeño   de   TCP/IP,   y   seañadieron varios protocolos de redes nuevos, incluidos AppleTalk, trabajo con redesde radioaficionados AX.25 y soporte para ISDN.   Se agregó la capacidad de montarNetware remoto y volúmenes de redes SMB (Samba).

Otra mejora importante fue el manejo de cuotas del sistema de archivos y clases deplanificación de procesos en tiempo real compatibles con POSIX.

El sistema Linux

En muchos sentidos, el núcleo de Linux es el corazón del proyecto Linux, perootros componentes constituyen el sistema operativo Linux completo.  Mientras que elnúcleo de Linux se compone exclusivamente de código escrito desde cero una buenaparte del software de soporte no es exclusivo de Linux, sino común a varios sistemasoperativos del tipo UNIX.   En particular utiliza muchas herramientas desarrolladascomo parte del sistema operativo BSD de Berkeley, el X Window System del MIT y elproyecto GNU de Free Software Fundation.

Este   compartimiento   de   herramientas   ha   funcionado   en   ambas   direcciones.     Lasbibliotecas de sistema principales de Linux originalmente se iniciaron en el proyectoGNU, pero la comunidad Linux dedicó mucho esfuerzo a mejorar las bibliotecas pararemediar omisiones, ineficiencias y errores.  Otros componentes como el compilador deC de GNU (gcc), ya tenían la calidad suficiente para usarse directamente en Linux.Las herramientas de administración de redes en Linux se derivaron de código queinicialmente se había desarrollado para 4.3BSD, pero derivados más recientes de BSDcomo FreeBSD han tomado prestado a su vez código de Linux, como la biblioteca dematemáticas que emula la funcionalidad de punto flotante de Intel y los drivers desonido para PC.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  15

Page 16: Linux (Curso)

CURSOS LINUX

El sistema Linux global es mantenido por una red informal de desarrolladores quecolaboran   por   Internet,   con   grupos   pequeños   o   individuales   que   se   encargan   demantener la integridad de componentes específicos.

Licencia de Linux:

El núcleo de Linux se distribuye bajo la Licencia GPL (GNU Public Licence) de GNU,cuyos términos estableció la Free Software Foundation.  Linux no es software dedominio público, ya que ello implicaría que los autores han renunciado a sus derechossobre el software, pero los derechos del código de Linux siguen siendo propiedad desus diversos propietarios.  No obstante, Linux es software gratuito en el sentido deque la gente puede copiarlo, modificarlo, usarlo a su antojo y regalar sus propiascopias sin restricción alguna.

Las implicaciones principales de los términos de la licencia de Linux son queninguna persona que use Linux o cree su propio derivado de Linux (actividadenteramente legítima) puede registrar como propiedad intelectual suya el productoderivado.  El software liberado bajo la GPL no puede redistribuirse como productoexclusivamente binario.  Si se produce software sujeto a la GPL, entonces se deberáproporcionar el código fuente.  Esta restricción no prohíbe la elaboración o venta dedistribuciones de software exclusivamente binarias, en tanto la persona que recibelos binario también tenga la oportunidad de obtener el código fuente pagando unacuota de distribución razonable.

Características de Linux:

• Multi­tarea: Linux soporta multitarea expulsiva real. Todos los procesos correntotalmente con independencia los unos de los otros. Ningún proceso tiene quepreocuparse con ceder el procesador a los otros procesos. 

• Acceso multi­usuario: Linux permite trabajar simultáneamente con el sistema avarios usuarios. 

• Multi­procesador: Linux puede correr sobre arquitecturas multiprocesador. Estosignifica que el sistema operativo puede distribuir muchas aplicaciones entrevarios procesadores, y de una forma totalmente paralela. 

• Independencia de arquitectura: Linux corre sobre muchas plataformas hardware. 

• Ejecución con carga por demanda:  Sólo aquellas partes de un programa que serequieren actualmente para ejecutarse son cargadas en memoria. Cuando se creaun proceso mediante fork(), no se trata de buscar memoria inmediatamente, sinoque la memoria del proceso padre es usada conjuntamente por los dos procesos.Si a continuación el nuevo proceso accede a partes de la memoria en modoescritura, esta sección es copiada antes de ser modificada. Este concepto esconocido como copy­on­write. 

• Memoria virtual:  A pesar de los mejores esfuerzos en usar la memoria físicaeficientemente,   puede   ocurrir   que   la   memoria   disponible   esté   totalmenteocupada. Linux entonces busca páginas que puedan ser liberadas. Las páginascuyo   contenido   ya   está   guardado   en   el   disco   ­por   ejemplo,   ficheros   delprograma­ son descartadas. Todas las demás páginas son copiadas al disco. Siuna   de   estas   páginas   de   memoria   es   accedida   a   continuación   deberá   serrecargada.

• Caché   dinámica   de   disco   duro:  Linux   ajusta   dinámicamente   el   tamaño   de   lamemoria caché en uso para adaptarse a la situación actual de la memoria. Si enun   momento   dado   no   hay   más   memoria   disponible,   el   tamaño   de   la   caché   es

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  16

Page 17: Linux (Curso)

CURSOS LINUX

reducida para liberar memoria. Una vez la memoria es liberada de nuevo, el áreade caché se incrementa. 

• Bibliotecas compartidas: Las bibliotecas ­librerías­ son colecciones de rutinasque un programa necesita. Existe un número de bibliotecas estándar usadas pormás de un proceso al mismo tiempo. De esta forma tiene sentido cargar el códigode programa de estas bibliotecas en memoria una sola vez, en vez de una porcada proceso. Esto es posible gracias a las bibliotecas compartidas. Como estasbibliotecas son cargadas en memoria sólo cuando el proceso se está ejecutando,también son conocidas como bibliotecas enlazadas dinámicamente. 

• Soporte para el estándar POSIX 1003.1: POSIX 1003.1 define una mínima interfazde una sistema operativo tipo UNIX. Este estándar está ahora soportado portodos los sistemas operativos más recientes y sofisticados. LINUX también losoporta. También han sido implementadas interfaces adicionales para UNIX SystemV y BSD. Todo el software escrito para UNIX puede generalmente ser directamenteportado a Linux. 

• Modo   protegido:  Linux   utiliza   los   mecanismos   de   protección   de   memoria   delprocesador   para   evitar  que   el   proceso  acceda   a   la  memoria   del   núcleo  delsistema o de otros procesos. Esto es un importante logro con respecto a laseguridad del sistema. De esta forma, un programa erróneo no podrá tirar abajoel sistema. 

• Soporte para teclados y fuentes locales :  Bajo Linux se pueden utilizar unaamplia variedad de teclados y conjuntos de caracteres. 

• Diferentes sistemas de ficheros : Linux soporta una gran variedad de sistemasde ficheros. El sistema de ficheros más utilizado en la actualidad es el Ext2.Este soporta nombres de ficheros de hasta 255 caracteres y tiene una serie decaracterísticas   que   lo   hacen   más   seguro   y   eficiente   que   los   sistemas   deficheros convencionales de UNIX. Otros sistemas de ficheros implementados sonel sistema de ficheros de MSDOS y VFAT, para acceder a particiones de MS­DOS yWindows 95/98, el sistema de ficheros ISO para acceder a CDROMs y NFS paraacceder a sistemas de ficheros de otras máquinas UNIX presentes en una red.Igualmente existe soporte para sistemas de ficheros HPFS ­para OS/2­ y paraNTFS ­Windows NT­ 

• Soporte TCP/IP, SLIP y PPP : Linux puede ser integrado en redes locales UNIX.Pueden ser utilizados todos los servicios de red, como NFS o Login Remoto. SLIPy PPP soporta el uso del protocolo TCP/IP sobre líneas serie. Esto significaque es posible enlazar con Internet a través de la red de telefonía públicausando un módem.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  17

Page 18: Linux (Curso)

CURSOS LINUX

35 AÑOS DE HISTORIA Y EVOLUCIÓN DE UNIX      

1.965: MULTICS: MIT, General Electric, Bell Labs de AT&T.

1.968: Bell Labs se retira de MULTICS.

1.969: Ken Thompson, Dennis Ritchie, Rudd Canaday y otros colaboran y desarrollanel  UNICS en lenguaje ensamblador.

1.970: Brian Kernighan lo bautiza Unix.

1.971: Unix en Lenguaje B en una DEC PDP­7.

1.972: Unix en Lenguaje C en un DEC PDP­11 con innovadoras herramientas deprocesamiento de texto.

1.973: Bell Labs y AT&T usan Unix internamente en unos 12 equipos.

1.974:

Bell Labs publica la descripción de Unix: un sistema operativo portableescrito en un lenguaje avanzado de 3ra generación Lenguaje C, multiusuario,multitarea, con capacidad de procesamiento en línea, sistema de archivosjerárquico, editor, compilador de C y herramientas de procesamiento detexto.

1.975:

Las Universidades empiezan a manifestar intereses por compartir el producto.Bell Labs distribuye Unix con fuentes de manera abierta y libre a los entesdel ambiente académico y científico solicitantes a cambio de pagar losgastos de medio magnético, manual y flete; y deben reportar todainvestigación y mejora que se desarrolle con el Sistema. Berkeley 1BSD.

1.976: Es instalado en las Universidades importantes de USA y Europa.

1.977: 500 instalaciones registradas.

1.978: Unix versión 6; se estiman 700 instalaciones. Berkeley 2BSD.

1.979:

Primera versión del Sistema UUCP para comunicación de datos entrecomputadoras. Berkeley 3BSD.Es instalado en Venezuela en la Universidad Simón Bolívar.Se Licencia Unix versión 7, que se populariza de manera explosiva comoplataforma para experimentar y desarrollar tecnología, probar algoritmos,protocolos de comunicación, lenguajes de programación y manejadores de Basede Datos.

1.980:

Berkeley despacha Unix 4.0BSD al Departamento de Defensa de USA. En la RedDARPANET desde 1.979 se usa UUCP y se empieza a utilizar TCP/IP bajo Unix4.0BSD.Arranca la cruzada de la Computación Personal y la era de la integración aescala en Microprocesadores.

1.981:

Unificación de versiones: Unix System III, Licencia Comercial.Surge nuevos proveedores de Computadoras bajo Unix como Onys, Plexus,Convergent Techs., Altos y Ohio Scie. AT&T anuncia línea de computadorasbajo Unix. Sperry, Motorolla y NCR anuncia línea de minicomputadoras basadasen Microprocesadores 68000 y Unix.

1.982:Varias versiones comerciales de Unix (Xenix, Citix, Centix, etc).Berkeley incorpora UUCP HDB que puede operar sobre TCP/IP.Unix para arquitectura IBM S/370.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  18

Page 19: Linux (Curso)

CURSOS LINUX

1.983:

Unix System V unifica versiones y llama a un estándar.  Sun, HP, Apollo,Data General, Tecktronics, Silicon Graphics e Intergraph lanzan lasEstaciones Gráficas de Trabajo Profesional bajo Unix dedicadas alprocesamiento gráfico y CAD.DARPA y Berkeley aseguran que Unix 4.1BSD ofrece mayor rendimiento y mejoresherramientas en un Digital VAX que el propio sistema operativo Digital VMS.Más de 130.000 instalaciones.

1.984:

Unix System V Release 2 incorpora los últimos avances tecnológicos enmanipulación y administración de recursos, protocolos de comunicación,lenguajes, Base de Datos, procesamiento distribuido y paralelismo. Elproyecto de Interfaces Gráficas con Ventanas e Iconos (Athena X­WindowSystem) se desarrolla e implementa bajo Unix.Más de 200.000 instalaciones.

1.985:

Xenix System V para PC con 80286 y el novedoso 80386.Sun implementa NFS (Networf File System/Shearing) sobre TCP/IP paracompartir archivos en Red.Surgen productos para interconectar PC con Redes Unix.Cray, Amdhal, Elxsi y Alliant establecen a Unix como estándar para susSupercomputadores con procesamiento paralelo.IBM anuncia el desarrollo de AIX para S/370 y Serie/1.HP anuncia línea de computadoras Basadas en Tecnología RISC bajo Unix.Carnegie Mellon University anuncia versión de Unix MATCH diseñado contecnología de Microkernel Orientado a Objetos.NSFnet, Milnet y Arpanet utilizan TCP/IP a plenitud=Internet.Se publican críticas a Unix para tratar de frenar su avance.Más de 420.000 instalaciones.

1.986:

Unix System V release 3.0 incorpora nuevos servicios, Facilidades deInterconexión, poderosos esquemas para la administración de Recursos queaumentan el rendimiento.SUN publica definición de Protocolos de RED necesarios para implementar NFS(Network File System/Shearing).AT&T provee RFS (Remote File System).ETHERNET se convierte en protocolo estándar para Redes Locales y X.25 paraRedes Amplias. TCP/IP protocolo estándar para Redes Locales y Amplias. ElDepartamento de Defensa de USA manifiesta su intención de adquirir soloequipos bajo Unix, pero pide aumentar controles de acceso y seguridad.Manejadores de Base de Datos Relacional que ofrecen SQL como INFORMIX,UNIFY, INGRES, Oracle y otros, impulsan a Unix al mercado Aplicacional.Más de 680.000 instalaciones registradas.ORGANIZACIONES QUE EMITEN ESTÁNDARES COBRAN GRAN IMPORTANCIA Y COINCIDEN ENSUS APRECIACIONES.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  19

Page 20: Linux (Curso)

CURSOS LINUX

1.987:

AT&T propone nuevas estrategias de mercadeo Unix COMO SOLUCION TOTAL.AT&T y SUN anuncian la Fusión de sus centros de Desarrollo y absorben partedel personal de Berkeley.IBM lanza su primera Estación Gráfica de Trabajo Profesional con TecnologíaRISC y Unix (RT/AIX).SUN anuncia su arquitectura RISC abierta SPARC.Motorola anuncia su línea de procesadores RISC 88000.Opciones adquiribles para Unix ofrecen soporte de Redes Ethernet con TCP/IP,NFS, Interconexión SNA y Emulación 3270, DECNET, X.25 y X.400 sobrecualquier plataforma.Productos para CAD/CAM, CAD/CAE, procesamiento de Imágenes, Análisis deEstructuras y Sólidos, Dibujo Gráfico, Animación y Edición de publicaciones,inundan el Mercado de las Estaciones Gráficas de Trabajo Profesional bajoUnix.Se expande el uso de Redes Locales de Micros bajo DOS con Redes Ethernet yprotocolos propietarios (Novell IPX/SPX).Unix System V para Micros 80386 y Tarjetas MultiPuertos inician la cruzadade los Supermicros sobre los Minis.La Organización de Standards IEEE anuncian que Unix será protocolizado comoPOSIX, un Sistema Operativo Standard.INTEL anuncia línea de procesadores RISC i860 y su participación en elmercado (al igual que Motorola) como proveedor de SuperMicros bajo Unix.La Organización MAP (Manufacturing Automation Protocol) anuncia que suStandard es Unix.Estadísticas advierten que Unix está rebasando los limites en lasproyecciones de crecimiento del Mercado.Gran escándalo provocan demandas por copias de software, reproducción yventa ilegal, violación de derechos de autor.XEROX y MIT intercambian opiniones sobre Interfaces Gráficas.Unix gana popularidad en EUROPA, NIXDORF, BULL, GOULD, Olivetti y otrospromocionan líneas de Equipos bajo Unix.Mas de 1.000.000 de instalaciones registradas.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  20

Page 21: Linux (Curso)

CURSOS LINUX

1.988:

Unix System V release 3.2 y Unix SUN/OS: Unix como Sistema Operativo deRED ?Se anuncian productos para Utilizar equipo Unix como servidor de Redes deMicros con DOS.Apple anuncia su Macc IIx con Unix A­UX.El X Consortium y X/Open (Organizaciones de Estándares) proclaman a Unixcomo Sistema Operativo Unix y a X Window System como protocolo estándar paradesarrollo de Interfaces y Aplicaciones Gráficas.Unix domina mercado de los Non­Stop/Fault­Tolerant Systems.IBM, Digital y HP se unen para crear la OSF (Open Software Fundation).AT&T, Sun, NCR, Sperry­Burroughs­Unisys, Xerox, y muchos otros se unen paracrear UI (Unix International).Se inicia la Guerra de las Interfaces Gráficas AT&T, Sun y Xerox (UI) apoyana OpenLook, y la OSF y Microsoft a Motif/Presentation Manager, pero Digitala DecWindows y HP a NewWave.Se demuestran Micros Intel80386 con Unix ó Xenix como sustitutos de minis,soportando hasta 30 usuarios.Steve Jobs, el creador de Apple, anuncia su Personal Graphic Station NEXTcon Unix Match (con Micro Kernel y orientado a objetos) con X­Window yNextStep.Sperry y Bourroughs se fusionan de Unisys (Universal ­Unix­ Systems)consolidan sus líneas de equipos todas bajo Unix.En Unix Expo, IBM sorprende al presentar AIX como Solución Total, en laexhibición se demuestran Micros, Estaciones Gráficas, Servidores, Minis yMain 4381 y 3090 todos bajo AIX y en Red TCP/IP compartiendo recursos conNFS y X­Windows/Motif/Presentation Manager.UI y OSF presionan para mejorar la documentación dirigida a el usuario, eluso de aplicaciones administrativas con Interfaz Gráfica para facilitar laadministración y uso de Unix.El Mercado se inunda de gran cantidad de publicaciones y textos de fácillectura sobre Unix y X­Window orientados al usuario, operador yadministrador.Proliferan las Aplicaciones de Automatización de Oficina con Hoja deCálculo, Procesamiento de Palabras, Agenda y Correo Electrónico.Andrew Tanenbaum publica un texto académico sobre Sistemas Operativosacompañado de una versión de Unix basado en POSIX, escrita por él, llamadaMinix.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  21

Page 22: Linux (Curso)

CURSOS LINUX

1.989:

UI se consolida, recluta a Motorola, Altos, Sony, y unas 20 empresas más.OSF recluta más empresas, y algunas son miembros de ambas organizaciones UIy OSF.Gracias al aceleramiento del ciclo de CPU (los MegaHertz) de losMicroprocesadores Intel y Motorola, surgen supermicros Unix, algunos convarios CPU, que aplastan a los minis.Los proveedores de Estaciones de Trabajo Gráfico basadas en RISC tambiénatacan a los minis con Servidores de Red Unix.Gracias a Novell, las Redes deMicros bajo DOS compiten con los minis y los servidores Unix multiusuario.Los Supercomputadores bajo Unix baja de precio amenazando el mercado de losMain­Frames.HP absorbe a Apollo para afianzar su posición en el mercado de lasEstaciones de Trabajo Gráfico.  Locus con Merge, e Interactive con VP/ixproveen emulación de máquina virtual DOS bajo Unix, integrando ambos mundos.UI anuncia para 1.990 a Unix System V Release 4 Sistema OperativoMultiusuario de Red, como la unificación de Unix BSD, AIX, Xenix, Unix AT&Ty Unix Sun/OS, con algunas de las mejoras de Match (carga dinámica delibrerías y drivers) e incorporando W­Window X11R4 X/Open, NFS, OpenLook yMotif (libre escogencia del usuario).OSF anuncia para finales de 1.991 el Sistema Operativo Multiusuario de RedOSF/1, como unificación de Unix BSD, AIX, Xenix, AT&T Unix System V Release2 y Match, NFS, X­Window X11R4 X/Open, Motif.Producto opcional para Unix alcanza el Nivel de Seguridad C2 exigido por elDepartamento de Defensa de USA.Internet: TCP/IP, NFS, e­mail, Unix: 500 redes, 150.000 nodos.Estadísticas proyectan que el Mercado Unix abarcará para 1.992 el 25 % delMercado Mundial de Computación en general.Se estiman más de 3.000.000 de instalaciones (mundial).

1.990:

Proveedores de Aplicaciones bajo DOS migran sus productos a Unix y no aOS/2.Sony Lanza línea de Estaciones y Servidores RISC bajo Unix.Compaq, Wyse y otros fabricantes de Micros y Periféricos lanzan al mercadoEquipos Multiusuarios bajo Unix.El bus ISA de los AT prevalece sobre el Microcanal PS/2.Se libera el Bus EISA para servidores bajo Unix y Novell.Empieza la era prometedora del los X­Terminals.IBM anuncia para el 91 línea nueva completa de Estaciones y Servidores bajoAIX.Digital anuncia Estaciones y Servidores Risc bajo Unix.Intel anuncia para 1991 procesador CISC/RISC 80586.Surge Ethernet 10BaseT sobre pares telefónicos.Se propone formato unica binario para ejecutables bajo Unix, independientedel Hardware/CPU.Surge en Unix el concepto de licencia flotante de usuario de Red paraaplicaciones con arquitectura Cliente­Servidor.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  22

Page 23: Linux (Curso)

CURSOS LINUX

1.991:

Un estudiante universitario en Finlandia llamado Linus Torvals estátrabajando en modificaciones a Minix; solicitando información por correoelectrónico en La Internet sobre la definición y contenido del estándarPOSIX, Linux Torvals recoge apoyo de curiosos e interesados en su proyecto:Linux, una versión de Unix/Posix de libre distribución. ¿free version of aMinix­lookalike for AT­386 computers?Sun: El Computador es La RedUSL: Unix Solución Total: Servidores y Estaciones.Microsoft: abandona OS/2, se lo venderá a IBM, e impulsa Windows 3.0.Internet: estamos gestando la WWW para todo el Mundo (Unix).Novell: estamos arrasando en las Redes pequeñas.Linus Torvals: Linux 0.11+VM.Consideración de Diseño del Kernel: Portabilidad y Eficiencia.

1.992:

Microsoft: Windows 3.1 si funcionará bien con la red Novell.USL: propone lanzar Unix a los Micros a precios de Micros.Novell: IPX/SPX es mejor que TCP/IP­NFS para redes locales.Internet: browser WWW, FTP, E­MAIL, HTML bajo X­Windows/Unix.NO HAY ACUERDO: Unix International, Open Software Fundation, X/Open, IBM,NCR, HP, Sun, SCO, Digital, . . . Todos con Unix.Linus Torvals: Linux 0.96 estable ?, corre X­Window (y otros GNU)

1.993:

Microsoft: NetBios­Lan Manager en Windows 3.11 y desarrollaremos WindowsNT:TCP/IP es malo!.Novell: Compra a USL (Unix) y crea Unixware (se aborta proyecto de lanzarUnix a los Micros).Internet: WWW para TODO el MUNDO (browser, ftp, correo y html para cualquiersistema operativo).Desarrolladores del ambiente Unix comercial apoyan el proyecto GNU, Internety WWW, en los cuales no hay controversia comercial.Linux recluta contribuyentes y cosecha software y drivers.

1.994:

IBM: el nuevo OS/2 Warp es mejor que Windows 3.11, HP, NCR, Unisys, IBM,Digital, Cray, ...: Todos los Servidores.Estaciones Gráficas Profesionales y MainFrame a Unix.Microsoft: estamos trabajando para que WindowsNT reemplace a Novell.Unix: Novell no ha podido manejar el problema comercial de Unix.Linux 1.0 ya esta listo para su entrada al ruedo con Linux’95.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  23

Page 24: Linux (Curso)

CURSOS LINUX

1.995:

Microsoft: Windows95, NetBeui y SMB para todo el mundo; tarde e inseguro.Unix, Sun y Silicon Graphics famosas por los efectos especiales del cine.Microsoft: WindowsNT 3.5 está ganando terreno frente a Novell.SCO compra a Univel (USL­Novell Unixware).Linus Torvals: ya tenemos el contrato de Licencia de Linux’95 GPL.Desarrolladores del ambiente Unix deciden apoyar el proyecto Linux GPL, lafalta de acuerdos, los problemas comerciales y de licenciamiento estánafectando el desarrollo, el mercadeo de Unix y su popularidad.Empieza la cruzada de Linux en el Mercado Comercial: Red Hat, Suse yCaldera.Internet: Se puede hacer comercio electrónico en la WWW.Microsoft: La Internet y el WWW existen y son muy importantes, todos aInternet.

1.996:

Microsoft: pruebe Internet Explorer.Microsoft: WindowsNT está arrasando con Novell, ahora le toca a Unix.Microsoft esta perdiendo los juicios y compra compañías de software.Internet: Audio, video, teleconferencia y comercio electrónico.Microsoft: Windows95 Service Pack 1Unix domina el mercado de los servidores Web, y Solaris es el líder.

1.997:

Microsoft: ya estamos penetrando La Internet y el WWW, tenemos MSN, InternetExplorer y Windows NT4 con Web Server y Exchange Server.Oracle, Informix, Sybase, Progress, y la mayoría de las productoras demanejadores de Bases de Datos portan sus productos a WindowsNT.WindowsNT 4.0 empieza a penetrar el mercado de los Servidores .Estaciones Gráficas Unix.Microsoft: prueba SQL Server y Visual Studio con Web Development.Sun y Microsoft inician intercambio público de opiniones contrarias sobre LaInternet.Linux es reconocido como un Unix sólido y estable.Netscape y Microsoft inician intercambio público de opiniones contrariassobre la WWW.Microsoft y Novell adoptan TCP/IP como protocolo de red principal.Sun: Java para todo el mundo.Estaciones Apple caen frente a Windows95.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  24

Page 25: Linux (Curso)

CURSOS LINUX

1.998:

WindowsNT 4.0 penetra el mercado de los servidores Web en La Internet.Microsoft sigue comprando compañías y tecnologías relacionadas con laInternet.Microsoft enfrenta muchas demandas y acusaciones por practicas monopólicas yantiéticas.WindowsNT 4.0 es el Sistema Operativo con mayor proyección de crecimiento.Todos las casas de desarrollo de software comercial desarrollan versiones desus productos para Winodws NT 4.0.Novell pierde mercado en las redes pequeñas.Windows95 y Office97 no es Y2K compliant, pero si lo serán Windows98 yOffice98; Windows NT5 y Windows98 se consolidarán en Windows2000.El crecimiento de Unix cae por la penetración de Windows NT 4.0Linux participa fuertemente en el mercado comercial de servidores Web.Procesamiento de Datos, y Estaciones de Trabajo.Oracle, Informix, Sybase, Progress, y la mayoría de las casas productoras demanejadores de Bases de Datos portan sus productos a Linux.Corel y otras casas de software Windows anuncian portar productos a Linux.Existen gran variedad de distribuciones comerciales de Linux.La comunidad organizada Linux empieza a tener mucha presencia, fuerza deopinión y reconocimiento en toda La Internet y en la comunidad Unixcomercial.Solaris, FreeBSD y Linux dominan las estadísticas de Servidores de grandes eimportantes Web Sites en La Internet.IBM: Aix será su plataforma preferida para su estrategia e­Business.Linux debuta en los efectos especiales del cine compartiendo escena con SGIen Titanic.StartDivision incorpora compatibilidad con formatos de Office98 en suStarOffice.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  25

Page 26: Linux (Curso)

CURSOS LINUX

1.999:

Las encuestas realizadas en La Internet revelan que el Sistema Operativopreferido por la comunidad de desarrolladores del WWW es Linux, comoservidor Web y Estación.IBM, HP, Dell y Compaq ofrecen línea de Servidores y Estaciones bajo Linux.Compaq/Digital­Alpha, Motorola y PowerPC no soportarán más a Windows NT,ofrecerán soporte a Unix y Linux.Unix se recupera en las estadísticas del mercado de Servidores.Linux tiene el dominio del mercado de los Servidores Web.Linux le roba terreno en las proyecciones de crecimiento y mercado aWindowsNT.Intel invierte grandes capitales en compañías relacionadas con Linux.Gracias al movimiento Linux, se consolida el movimiento del software libre(free) como tendencia comercial viable y sustentable.Sun compra StarDivision y despacha gratis StarOffice para uso personal ocomercial(OpenOffice.org)

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  26

Page 27: Linux (Curso)

CURSOS LINUX

COMANDOS BÁSICOS

Como   se   ha   dicho   anteriormente,   estas   herramientas,   tienen   un   tiempo   dedesarrollo y prueba mucho mayores que sus símiles en interfaz gráfica, y aunque no loparezca, una vez familiarizado con el entorno de texto, resulta ágil y cómodo paralas tareas diarias.

Este Grupo de comandos, llamados muchas veces “Caja de herramientas UNIX”, poseedetrás de cada herramienta un filosofía de desarrollo.  Cada uno de los comando fuecreado con dos ideas en mente:

­ Debe realizar una sola función.­ Dicha función debe realizarse correctamente.

Con esto en mente, la simpleza de las herramientas permite que puedan combinarsepara solucionar diferentes problemas que individualmente no podrían.

Nota:El estándar POSIX 1003.2 especifica la sintaxis y semántica de un pocomenos de 100 programas principalmente en los que se refieren a comandospara el manejo de archivos  y directorios  (cp, mv, rm, mkdir, rmdir,etc.), filtros (sed, grep, tail, etc.) y compiladores y herramientas dedesarrollo de programas (make, cc, etc.).  La idea de lograr un estándarde ellos es hacer posible que cualquiera escriba scripts del shell queutilicen estos programas y funcionen en todos los sistemas UNIX.

Terminar una sesiónlogoutexitCTRL­D

Nota: CTRL­D no significa exit, sino que representa el carácter de control EOT (EndOf Text, fin de texto).Cuando el shell recibe un carácter fin de texto termina su ejecución.

Apagar el sistema

Pasos que se deben realizar:­Terminar los procesos de usuario (SIGTERM y SIGKILL).­Bajar los servicios (stop).­Guarda los datos del cache de disco (sync)­Desmontar los FS (umount).

Comandos:shutdown [­hr] tiempo [mensaje]

halt (Es igual a ejecutar ­­> shutdown –h now)reboot (Es igual a ejecutar ­­> shutdown –r now)

tiempo: indica el momento en el que se va a apagar el sistema en formato hh:mm,también se puede expresar la cantidad de minutos que restan (+10, faltan 10 minutospara que se apague el sistema).  Puede ser now (o bien +0).

h: apaga el sistema (igual que halt)r: reinicia el sistema (igual que reboot)

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  27

Page 28: Linux (Curso)

CURSOS LINUX

Si   no   especificamos   ningún   parámetro   el   sistema   se   coloca   en   modo   demantenimiento. En este modo solo la cuenta del root se encuentra habilitada. Para quese cierre del todo el sistema ejecutamos nuevamente el comando shutdown o exit.

pwd(Print Working Directory)El comando pwd imprime en la pantalla el directorio donde el usuario se encuentratrabajando actualmente.

pwd

Todas las órdenes que teclea el usuario son dadas en términos de su directorio detrabajo actual.

manAbreviatura de manual. Ayuda en línea.Para cambiar el idioma se ocupa

man [selección_manual] nombre_programa

selección_manual:1 ­ Herramientas/comandos del usuario.2 ­ Llamadas al sistema.3 ­ Llamadas a bibliotecas.4 – Archivos especiales, información de controladores y dispositivos.5 ­ Archivos de configuración (Ej.: /etc/passwd)6 ­ Juegos.7 ­ Paquetes (misceláneas).8 ­ Herramientas de administración del sistema.n ­ Nuevos elementos.

Nota:Para visualizar las páginas man en castellano estas se deben intalar yluego modificar la variable de entorno LANG.Obviamente, esta debe modificarse cada vez que se reinicie el equipo ocolocarla dentro de un script de arranque para que la modificación serealice en forma automática.

$ export LANG=es_ES

Ficheros y directoriosFichero: conjunto de información que se le asigna un nombre. Los nombres pueden

contener cualquier caracter hasta 255 caracteres de longitud, excepto /).  En UNIX sedefine como una secuencia de 0 o más bytes que contiene información arbitraria.

Directorio: Colección de archivos o ficheros, con fines de organización.Conjunto de nombres de ficheros junto con sus correspondientes Nros. de i­nodos.

Cambio de directorio

cd <directorio>

"cd" (change directory) que como su nombre lo indica, sirve para movernos de undirectorio a otro. Por ejemplo, si nos encontramos en el directorio raíz (/) yqueremos entrar al directorio "etc" que se encuentra en dicho directorio debemosteclear "cd" mas el nombre del directorio al que queramos entrar:

localhost:/# cd etc

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  28

Page 29: Linux (Curso)

CURSOS LINUX

localhost:/etc#

El directorio especial . referencia al directorio actual.El directorio espacial .. referencia al directorio padre

Supongamos, que nos encontramos en /home/pepe y queremos movernos al directorio /home, podemos hacerlo de las siguientes maneras:

localhost:/home/pepe# cd /homeo bien

localhost:/# cd ..

Noten que los dos puntos ".." se encuentran separados del comando "cd" por unespacio, esto es porque si ponemos todo junto el comando no será reconocido, ya queel sistema buscara entre los archivos ejecutables el comando "cd.." que por supuesto,no existe.

Este es un comando interno del shell.

Listar los archivos

ls [opciones] [directorio]

OpcionesPosee más de 26.

­l: (long) listado largo, muestra hora y fecha de la última modificación,permisos, propietarios, enlaces, etc.­a: Muestra todos los archivos, inclusive los ocultos.­A: Idem, solo que ignora los directorios especiales (.) y (..)­1: Listado de una sola columna.­d: Lista los nombres de los directorios en vez de los archivos contenidos enél.­F: brinda información si son directorios(/), archivos ejecutables (*) y links(@).­­color: similar a ­F solamente que distingue a los archivos por medio decolores.­h: Despliega el tamaño de los archivos en formato en Kb, Mb, Gb, en vez dehacerlo en bytes (Facilita la lectura y conversión de unidades)­i: muestra el número de i­nodo índice.­R: Listado recursivo de todos los archivos y subdirectorios.­r: orden inverso.­S: ordena los archivos por tamaño.­t: ordena los archivos por fecha de modificación.

Algunas opciones de ls se guardan en la variable de entorno $LS_OPTIONS.

directorio: si le pasamos el nombre de un directorio mostrará el contenido del mismoy no el del directorio de trabajo actual.

tipo_archivo | permisos | links | usuario | grupo | tamaño | ultima mod. | nombre | link

Primer   fila   desplegada  por   ls   indica   la   cantidad   de  bloques   del   dispositivo  dealmacenamiento que ocupa el archivo.

Limpiar la pantalla

clear

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  29

Page 30: Linux (Curso)

CURSOS LINUX

Mensaje de bienvenidaSe muestra al iniciar la sesión del usuario.Se guarda en el archivo /etc/motd.

Copiar archivosSolo copia los archivos a los que tengamos acceso de lectura.Por defecto sobrescriben en caso de existir el archivo en destino.Trabaja sin mensajes.

cp [­frivup] origen destino

Opciones:Si en el destino existe un archivo con el mismo nombre

­f: fuerza la escritura.­i: copia interactiva, antes de copiar consulta con el usuario.­u: copia solo si el archivo a ser reemplazado es más antiguo (actualización).­r: copia directorios y subdirectorios.­v: visualiza todas las operaciones que esté realizando.­p: preserva los permisos, el usuario y grupo del archivos a copias.  Tenga en

cuenta que esta opción depende del sistema de archivos que se esté ocupando.   Porejemplo, si tenemos un archivo llamado mi_archivo en /home/juan cuyo sistema dearchivos es ext2, y queremos copiarlos a /windows, que posee un sistema de archivosFAT,   los   atributos   de   mi_archivo   se   perderán,   ya   que   FAT   no   soporta   estascaracterísticas.

Mover archivosTenemos que tener acceso de lectura y escritura sobre el archivo a mover.

mv [­fivu] origen destino

Este comando se ocupa tanto para mover archivos, como para renombrarlos (cambiar sunombre).

Borrar archivosHe aquí uno de los comandos más peligrosos.Siguiendo la buena filosofía UNIX, este comando no solicita confirmación para borrarel/los archivos.

rm [­friv] archivo

Archivo puede ser el nombre de un archivo o una expresión regular.

Opciones:­r: borra en forma recursiva todo el árbol de directorios.­v: Visualiza los archivos eliminados.­f: Fuerza el borrado

Editor de textos vi

Sintaxis:vi [file_name]

Para obtener ayuda adicional se puede ocupar el programa vimtutor.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  30

Page 31: Linux (Curso)

CURSOS LINUX

Comandos:

General

:! <comando> Ejecuta un comando externo

:r <archivo> Inserta el contenido de archivo

<esc> Cambia a modo normal o de comandos

[num] <comando> <objeto> num ­­> Nro de veces que se ejecuta el comando

[num] c <objeto>

:q! Salir sin guardar cambios

:wq Guardar y salir

ZZ Guardar y salir

:w [archivo] Guardar en archivo

:w #,# [archivo]Guarda parte de un archivo, donde # indica lascolumnas desde y hasta.

:syntax enableResalta con colores las sintaxis.  Si se coloca en elarchivo de configuración no debe ir (:)

CTRL­KProduce diágrafos.Ej.: CTRL­K n ­­> ñ     CTRL­K a ­­> á

Borrado

dd Borra una línea

ndd Borra n líneas

d$Borra desde la posición actual hasta el final de lalínea

dwBorra desde la posición actual hasta el final de lapalabra, incluyendo el espacio

deBorra desde el cursor hasta el final de la palabra,sin incluir el espacio

x Borra el carácter bajo el cursor

c Change, funciona igual que borrar

cw Cambiar toda una palabra o parte de ella

Insercióni Insertar texto antes del carácter que está el cursor

a Insertar texto después del carácter que está el cursor

A Inserta texto al final de la línea

o

Abre espacio para una nueva línea después de la líneaque se encuentra el cursor y permite insertar texto enla nueva línea.

O

Abre espacio para una nueva línea antes de la líneaque se encuentra el cursor y permite insertar texto enla nueva línea.

I Insertar texto al comienzo de la línea

Desplazamiento:n Para ir a la línea n

0 Para movernos al comienzo de la línea

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  31

Page 32: Linux (Curso)

CURSOS LINUX

$ Ir al final de la línea

SHIFT­G Moverse al final del archivo

SHIFT­t Moverse a una línea del archivo

CTRL­gMuestra la posición del archivo donde nos encontramosy su estado

Deshaceru Deshacer los cambios

U Deshacer los cambios de toda la línea

CTRL­R Rehacer

pColoca el último carácter/es borrado o copiado tras elcursor

Sobrescribir

r Reemplazar el carácter que se encuentra bajo el cursor

R Reemplaza más de un carácter

s Sustituye un caracter

S Sustituye una línea entera

Búsqueda y reemplazo/ <palabra> Busca <palabra>

n Vuelve a buscar la misma frase

SHIFT­N Buscar la misma frase, pero en dirección opuesta

:s/vieja/nueva/gReemplaza vieja por nueva, g indica que seaglobalmente

% Busca la pareja de { [ (

:set ic Ignora las mayúsculas y minúscula en las búsquedas

MovimientoCTRL­d Moverse hacia abajo media pantalla

CTRL­u Moverse hacia arriba media pantalla

h Mueve el cursor un carácter a la izquierda

j Mueve el cursor una línea abajo

k Mueve el cursor una línea arriba

l Mueve el cursor a la derecha

GESTION DE USUARIOSLinux es un sistema operativo multitarea y multiusuario. Esto quiere decir que

es capaz de ejecutar varios programas (o tareas) y albergar a varios usuarios deforma simultánea.

Por lo tanto, todos los usuarios de Linux deben tener una cuenta de usuario enel sistema que establezca los privilegios del mismo. A su vez Linux organiza a losusuarios en grupos de forma que se puedan establecer privilegios a un determinadogrupo de trabajo, para el acceso a determinados archivos o servicios del sistema.

En Linux, todo tiene un propietario al que está unido. Es imposible para unsistema Linux existir sin usuarios. Al menos se necesita tener al usuario root; perosin embargo, muchas de las distribuciones Linux vienen con varios usuarios especialesde configuración. Estos usuarios trabajan bien como herramientas autodocumentadas,

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  32

Page 33: Linux (Curso)

CURSOS LINUX

puesto que cada uno es propietario de todos los archivos relacionados con su nombre(por ejemplo, el usuario www está configurado para ser el propietario de todos losarchivos relacionados con el servicio Web).   Estos usuarios tienen acceso a unospocos archivos, lo que permite una mayor seguridad dentro del sistema.

Cada persona que utilice el sistema debe tener su propia cuenta. Raramente esuna buena idea el que varias personas compartan la misma cuenta. No sólo es unproblema de seguridad, sino que también de identificación de las personas que estántrabajando en el sistema.

El directorio "home", también llamado directorio personal, es el lugar donde sesitúan los archivos de configuración  del usuario. Esto permite que cada usuariotrabaje en un entorno personalizado sin tener que compartir con otros usuarios.

En este directorio también se guardan los archivos de trabajo de cada usuario.No es obligatorio que todos los usuarios guarden su directorio home dentro de /

home, pero da una sensación de organización.Por ejemplo, www generalmente guarda su directorio home en /usr/local/apache.

El usuario administrador (root) tiene un completo control sobre el sistema, elpuede guardar, configurar, borrar, o hacer lo que quiera con lo que haya dentro delsistema. Un usuario común, en cambio, solo puede manejarse con limitados recursosdentro del mismo sistema, esto es porque hay información y cosas que dichos usuariosno deben tener a su alcance por medidas de seguridad. Imagínense que un usuario puedatener   acceso   al   directorio   /etc   que   es   donde   se   guarda   toda   la   información   deconfiguración del sistema, podría causar un desastre, podría cambiar la contraseñadel root y dejar a este sin acceso momentáneamente, y eso es solo un ejemplo, haycosas mucho peores que podría hacer.

Datos de los usuarios

nombre_identificador (login): Es único en todo el sistema. Se puede utilizar letras ydígitos.   También   (.)   y   (_).   Generalmente   se   limitan   a   8   caracteres,   pero   esconfigurable su cantidad (/etc/login.defs).

user ID(UID): Nro. que recibe el usuario y le permite identificarse unívocamentedentro del sistema. El UID 0 es reservado para el root, y generalmente el ­1 o 65535para el usuario nobody.

group ID(GID): Similar al UID, solo que identifica al grupo al que pertenece elusuario.

contraseña:   Se   puede   deshabilitar   al   usuario   usando   un   (*).   Generalmente   esrecomendable introducir a continuación las razones por que se ha deshabilitado adicho usuario.

nombre_completo: Nombre real del usuario.

directorio_home:  Es el directorio personal de los usuarios,   generalmente es eldirectorio donde aparece el usuario luego de ingresar al sistema(login).

shell de inicio: se especifica el interprete de comandos que usará el usuario cuandose loguee en el sistema.

BASES DE DATOS DEL USUARIO:   Linux, guarda toda la información del usuario en archivos de texto. Esto es

beneficioso por la sencilla razón de que le permite hacer cambios en la informacióndel usuario sin la necesidad de otras herramientas que no sea un editor de texto

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  33

Page 34: Linux (Curso)

CURSOS LINUX

(pico, vi, etc.) En muchos casos, los grandes sistemas se aprovecha de estos archivosde texto mediante el desarrollo de sus propias herramientas de administración.

Los usuarios y grupos trabajan con el estilo UNIX desde la primera vez.Hay dos maneras diferentes de crear un nuevo usuario: una es usando el programa

'useradd'   o   un   herramienta   de   administración   provista   por   una   distribución   enparticular (yast, linuxconf, config, etc.), y la otra el crearlo editando las basesde datos.

/etc/passwdAlmacena toda la información acerca de los usuarios. El archivo tiene un usuario porlínea, y cada campo del registro está limitado por (:).

Formato de las entradas:

login:password:UID:GID:nombre_completo:dir_home:shell_inicio

password:   es   la   contraseña   del   usuario   codificada   mediante   un   algoritmo   deencriptación,   para   que   nadie   puede   averiguarla.     Si   el   sistema   está   usandocontraseñas   shadow,   las   contraseñas   no   se   guardan   en   este   archivo   sino   en   /etc/shadow, el cual sólo el usuario root posee acceso de lectura.

Ejemplo:Crea un usuario llamado pepe, con UID 1001 y GID 100, el nombre completo es “JuanPérez” y su directorio personal se encuentra en /home/pepe

localhost:/# cat >> /etc/passwdpepe::1001:100:Juan Pérez:/home/usuario:/bin/bashCTRL­dlocalhost:/#

Crea un usuario llamado pepe, con UID 1001 y GID 100, el nombre completo es JuanPérez y su directorio personal se encuentra en /home/pepe.

pepe::1001:100:Juan Pérez:/home/pepe:/bin/bash

El primer argumento es el nombre con el que entrada al sistema el usuario. Elsegundo argumento lo deje en blanco (::) porque todavía no especifique el password yaque no se puede hacer directamente editando el archivo, sino que hay que utilizar elcomando 'passwd' seguido del nombre del usuario. 

Luego se debe asignar un password utilizando el comando passwd

localhost:/# passwd pepe

Nota:Las contraseñas se guardan utilizando un hash de un sólo sentido (el hashutilizado por defecto es crypt, las distribuciones más nuevas soportan MD5,que es significativamente más robusto). Las contraseñas no pueden obtenersea partir de la forma cifrada, sin embargo, se puede tratar de encontrar unacontraseña utilizando fuerza bruta para pasar por el hash cadenas de texto ycompararlas, una vez que encuentres una que coincide, sabe que ha conseguidola contraseña. Esto no suele ser un problema por sí mismo, el problema surgecuando   los   usuarios   escogen   claves   que   son   fáciles   de   adivinar.   Lasencuestas más recientes han demostrado que el 25% de las contraseñas sepueden romper en menos de una hora, y lo que es peor es que el 4% de losusuarios utilizan su propio nombre como contraseña. Los campos en blanco enel campo de la contraseña se quedan vacíos, así que se vería "::", lo cuales algo crítico para los cuatro primeros campos (nombre, contraseña, uid ygid).

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  34

Page 35: Linux (Curso)

CURSOS LINUX

/etc/shadowLa velocidad de las computadoras de los hogares comienza a facilitar los ataque

por diccionario a las listas de contraseñas.  Esto lleva a la separación de lascontraseñas encriptadas del archivo /etc/passwd.

El   archivo   /etc/passwd   permanece   de   lectura   para   todo   el   mundo,   pero   lascontraseñas permanecen en el archivo /etc/shadow que sólo puede ser leído por losprogramas con privilegios de root, tales como el programa login.

Además de la contraseña encriptada, el archivo tiene información como ser:­ Nombre de usuario.

­ Contraseña encriptada.

­ Días desde el 01/01/70 que ha cambiado la contraseña.

­ Días antes de que se tenga que cambiar la contraseña.

­ Días antes de que expire la contraseña y se avise al usuario.

­ Días después de que expire la contraseña y se deshabilite la cuenta.

­ Días desde el 01/01/70 que se deshabilite la contraseña.­ Campo reservado.

Como en el archivo passwd, se encuentran separados por (:).El valor ­1 significa infinito.  Por ejemplo, si los días después de que expire lacontraseña y se deshabilite la cuenta es –1, esta nunca dejará de funcionar.

/etc/groupsEl fichero de grupos contiene toda la información de pertenencia a grupos, y

opcionalmente elementos como la contraseña del grupo (generalmente almacenado engshadow en los sistemas actuales), este fichero debe ser legible por el mundo paraque el sistema funcione correctamente. El formato es:

nombre_grupo:contraseña_cifrada:GID:miembro1,miembro2,miembro3

Un grupo puede no contener miembros (por ejemplo, no está siendo usado), sólo unmiembro o múltiples miembros, y la contraseña es opcional (se suele ignorar).

/etc/gshadowSimilar al fichero shadow de contraseñas, este fichero contiene los grupos,

contraseñas y miembros. De nuevo, este fichero debería ser protegido a toda costa, ysólo el usuario root debería tener permiso de lectura al mismo.

/etc/login.defsEste fichero (/etc/login.defs) te permite definir algunos valores por defecto

para diferentes programas como useradd y expiración de contraseñas. Tiende a variarligeramente entre distribuciones e incluso entre versiones, pero suele

estar bien comentado y tiende a contener los valores por defecto.

/etc/shellsEl fichero de shells contiene una lista de shells válidos, si el shell por defecto deun usuario no aparece listado aquí, quizás no pueda hacer login interactivamente. 

/etc/securettyEste fichero contiene una lista de tty's desde los que el root puede hacer un

login. Los tty's de la consola suelen ir de /dev/tty1 a /dev/tty6. Los puertos serie(pongamos que quieres hacer login como root desde módem) son /dev/ttyS0 y superiorespor lo general. Si quieres permitirle al root hacer login vía red (una muy mala idea)entonces añade /dev/ttyp1 y superiores (si hay 30 usuarios conectados y el rootintenta conectar, el root aparecerá como procedente de /dev/ttyp31). Generalmente,sólo   se   debería   permitir   conectar   al   root   desde   /dev/tty1,   y   es   aconsejabledeshabilitar la cuenta de root.CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  35

Page 36: Linux (Curso)

CURSOS LINUX

useradd/adduserAgrega usuarios al sistema.  Se puede realizar por medio de la GUI.Mediante comandos existen dos formas de agregar usuarios: en forma interactiva o

en forma explícita.Pueden   existir   ciertas   diferencias   en   los   parámetros   dependiendo   de   las

distribuciones.También se pueden agregar usuarios directamente modificando los registros de

sistema (como ser passwd).

useradd [­c comment] [­d homedir] [­e expire_date] [­f interactive_time] [­ginitial_group] [­G group[,...]] [­m[­k skelton_dir]] [­M] [­s shell] [­u uid[­o]] [­n] login

Opciones:­c comment: Añade el nombre del usuario en el campo GRECOS.­d homedir: Establece el directorio home del usuario. Por defecto en la mayoríade los sistemas es /home/nombre_usuario.­e expire_date: Es posible que una cuenta expire después de una determinadafecha. Por defecto las cuentas no expiran. El formato del campo es MM/DD/AA.­f interactive_time: Especifica el número de días después de que expire unacontraseña. 0 la cuenta se deshabilita inmediatamente, “­1” nunca.­g initial_group: Especifica el grupo por defecto del usuario, se puede usartanto el GID como el nombre del grupo. Si se utiliza el nombre del grupo debeexistir en el archivo /etc/group.­G group [,...]: Le permite especificar grupos adicionales a los usuarios.­m [­k skell_dir]: Por defecto el sistema crea automáticamente el directoriohome del usuario. Esta opción es el comando explícito para crea un directoriohome. Parte de la creación del directorio es la copia de los archivos deconfiguración en él. Estos archivos suelen encontrarse directorio /etc/skel.Puede cambiar esto usando la opción secundaria ­k skel_dir.­M: Si usa ­m no puede usar ­M. Esta opción le dice al comando que no cree eldirectorio home del usuario.­s shell: especifica el shell del usuario.­u UID: Asigna el UID del usuario.

userdel/deluserBorra usuarios existentes.Elimina las entradas en el archivo /etc/passwd y en /etc/shadow.

userdel [­r] login

Opciones:­r: se borran todos archivos propiedad del usuario en su directorio home.

usermodModifica los datos de un usuario existente.

useradd [­c comment] [­d homedir] [­e expire_date] [­f interactive_time] [­ginitial_group] [­G group[,...]]  [­m[­k skelton_dir]] [­M] [­s shell] [­u uid[­o]] [­n] [­l login] login

Opciones:­l: Permite cambiar el nombre del usuario.

groupaddAgrega un grupo.La información de grupo no provoca cambios en la información del usuario.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  36

Page 37: Linux (Curso)

CURSOS LINUX

groupadd [­g gid] [­r] group

Opciones:­g: Especifica el GID para el grupo. Por defecto se asigna el primer valorlibre.­r: Indica que el grupo se agregará como grupo de sistema, por lo que tendráuna GID menor que 499.

En la mayoría de las distribuciones el rango de valores reservados para grupos yusuarios del sistema, se configuran en /etc/login.defs

groupdelBorra un grupo.

groupdel grupo

groupmodModifica un grupo existente.

groupmod ­g gid ­n nuevo_nombre group

Opciones:­g: permite cambiar el GID del grupo.­n: permite cambiar el nombre del grupo.

Nota:La creación de un nuevo usuario no solo implica crear un directoriohome   del   usuario   y   configurar   el   entorno,   también   deben   configurarotras opciones como ser el buzón de correo.Los   buzones   de   entrada   generalmente   se   guardan   el   directorio   /var/spool/mail. Cada usuario tiene un buzón de entrada basado en elnombre del usuario. Un buzón vació es un archivo de longitud cero.Todos los buzones deben ser de propiedad de sus respectivos usuarioscon los permisos configurados para que los otros usuarios no los puedanleer.

INFORMACIÓN DE LOS USUARIOS:   finger

Permite ver los datos de los usuarios conectados en ese momento.Si le pasamos como argumento el nombre del usuario, mostrará los datos que el

sistema tenga de ese usuario.

finger [usuario]

Plan: fichero .plan que se crea en el directorio home del usuario, dentro del cual seguarda toda la información que las personas desean dar a conocer mediante el comandofinger.

Cambio de contraseña

passwd [usuario]

El modificador usuario solo el root puede ocupar.

whoamiInforma sobre el nombre del usuario que lo ejecuta.

whoami

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  37

Page 38: Linux (Curso)

CURSOS LINUX

Cambio de usuarioSi ejecuta el root, no le pide la confirmación de contraseña.

su [usuario]

su –c ‘comando’   ejecuta “comando” como superusuario

chfnCambia el nombre del usuario y sus datos personales.Modo interactivo.

chfn [usuario]

chshCambia el shell del usuario.No en todos los sistemas está permitido (se puede configurar en /etc/login.defs)./etc/shell se tiene una lista de los intérpretes de comandos disponibles.

chsh [usuario]

wMuestra información de los usuarios (uso de CPU, nombre, consola donde se encuentrantrabajando, etc) que se encuentran en el sistema y lo que hacen en ese instante.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  38

Page 39: Linux (Curso)

CURSOS LINUX

SISTEMA DE ARCHIVOS

Para  la  mayoría  de  los usuarios,  el  sistema  de  archivos  es el  aspecto  másvisible de un sistema operativo.   Los archivos almacenan datos y programas, y elsistema   operativo   implanta   el   concepto   abstracto   de   archivos   administrandodispositivos de almacenamiento masivo, como cintas y discos.   Se debe hacer unacorrespondencia entre archivos y dispositivos.  Además, los archivos normalmente seorganizan en directorio para facilitar su uso.   Por último, cuando varios usuariotiene acces a los archivos puede ser deseable controla quién y cómo pueden teneracceso a ellos (protección de archivos).  De todos estos temas se encarga el sistemade archivos.

Los archivos son administrados por el SO.   Su estructura, nombre, forma deacceso,   protección e implantación son temas fundamentales en el diseño de un SO.Aquella parte del sistema operativo que trabaja con lo archivos se conoce como el“sistema de archivos”

La filosofía de los sistemas UNIX da una importancia fundamental al sistema dearchivos. Todos los datos que se emplean en el sistema se almacenan en archivos. Laidea va más allá de salvaguardar la información, UNIX considera que cualquier cosainstalada en el equipo no es al final más que un archivo, esto incluye el teclado,las terminales, impresoras, etc.

Cuando estaba siendo diseñada la primera versión de sistema Unix, antes de quetuviera incluso nombre, la discusión se centro en la estructura de un sistema dearchivos que fuera sencilla y fácil de usar.  El sistema de archivos es indispensablepara el éxito y utilidad del sistema UNIX.   Es uno de los mejores ejemplos de lafilosofía "hazlo simple" y muestra lo mucho que se logra con la realización cuidadosade algunas ideas bien seleccionadas.  Debido  a que el uso principal del sistema UNIXes   manejar   archivos,   existen   muchos   comandos   para   detección   y   manipulación   dearchivos.

Algunos sistemas operativos imponen a los archivos una estructura determinadabien definida.

Este no es el caso de UNIX (incluso Linux), donde un archivo no es más que unasecuencia de bytes, siendo los programas los encargados de interpretar esta secuenciay darle significado según sus necesidades. Es decir, la sintaxis (forma) del acceso alos datos de un archivo viene impuesta por el sistema, y es la misma para todos losprogramas, y la semántica (significado) de los datos es responsabilidad del programaque trabaja con el archivo.

i­nodos:El bloque fundamental de los sistemas de archivos UNIX es el i­nodo. Un i­nodo

es una estructura de control que contiene punteros a otros i­nodos o a bloques dedatos.

La   información   de   control   del   i­nodo   incluye   al   propietario   del   archivo,permisos, tamaño, fecha del último acceso, fecha de creación, GID, etc.

El nombre del archivo no se almacena en el i­nodo.Los directorio son instancias especiales de un archivo. Esto significa que cada

directorio tiene un i­nodo, y ese i­nodo apunta a bloques de datos que contieneinformación acerca de los archivos del directorio como ser nombre de lo archivos ypunteros.

Tipos de archivosArchivos   normales(­):  contiene   datos   o   son   ejecutables,   el   sistema   no   imponeestructura   alguna   a   los   archivos,   ni   asigna   significado   a   su   contenido;   elsignificado   de   lo   bytes   depende   únicamente   de   los   programas   que   interpretan   sucontenido.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  39

Page 40: Linux (Curso)

CURSOS LINUX

Directorios(d): son una instancia especial de los archivos normales. Los directorioslistan las localizaciones de otros archivos, algunos de los cuales puede ser otrosdirectorios.

Enlaces duros(l): Cada archivo del sistema tiene su propio i­nodo. Un i­nodo guardalos atributos del archivo y su posición en el disco. Si se necesita referirse a unarchivo usando dos nombre distintos o desde más de un directorio, se puede crear unenlace duro. El enlace tendrá el mismo i­nodo que el archivo original. Con cadaenlace creado, se incrementa la cuenta de referencia. Cuando se borra un enlace sedecrementa la cuenta. Cuando esta alcanza el valor 0 se borra el archivo del disco.No se puede crear enlaces duros que referencien a otras particiones que no sea lasdel archivo original.

Enlaces simbólicos(l):  A diferencia de los enlaces duros, los cuales apuntan a unarchivo por su i­nodo, un enlace simbólico apunta a otro archivo por su entrada en eldirectorio. Esto permite que los enlaces simbólicos apunten a archivos localizados enotras particiones, incluso en unidades de red.  (Luego se realiza una descripción másdetallada sobre los enlaces).

Dispositivos de bloques (b):  se usan como interfaz con dispositivos tales como HDdonde su unidad de acceso es un bloque. Estos archivos tiene 2 características: majornumber, minor number.El major number representa el controlador del dispositivo y cuando se accede a undispositivo se el pasa al controlador el minor number que indica a que dispositivoaccede. Por ejemplo si hay dos puertos serie, compartirán el mismo controlador, perocada puerto tendrá un minor number único.

Dispositivo de caracter(c):  Similar que los dispositivos de bloques, solo que enestos el la unidad de acceso es el caracter.

Pipes   nombradas(p):  Tiempo   especial   de   archivos   que   permite   la   comunicacióninterprocesos. Esto trabaja especialmente bien cuando un programa se rehúsa a tomarla entrada de un pipe de la línea de comandos, pero otro programa necesita adquirirdatos de él y no se tiene espacio de disco para un archivo temporal.

Jerarquía estándar del FS de LinuxEl punto inicial de la jerarquía es el fichero raíz o root (/).

Los archivos que se encuentran debajo del directorio raíz son:/bin: se hallan todos lo programas esenciales para el funcionamiento del sistema.También algunas utilidades fundamentales./boot: se almacena los archivos necesarios para carga el SO, como ser el LILO elkernel, etc./dev: device, en este directorio se encuentran todos los archivos de acceso a losdispositivos./etc: almacena todos los ficheros de configuración propios del ordenador.  Bajo estedirectorio no debe aparecer ningún archivo binario./lib:   se   encuentran   todas   los   archivos   de   librerías   de   funciones   fundamentales.Bajo /lib/modules se hallan los módulos para añadir al núcleo del sistema./mnt: se utiliza como punto de montaje de los diferentes FS./proc:   directorio   fundamental   y   peculiar.   No   corresponde   al   FS   normal,   es   unainterfaz con el kernel, donde se pueden consultar y/o fijar diferentes parámetros enle núcleo. No se pueden crear archivos en este directorio./root: directorio personal del usuario root./sbin: programas esenciales para la configuración y administración del sistema (Ej.:halt, reboot, shutdown, cp, etc).  Generalmente se permite el acceso sólo al usuarioroot/tmp: guarda archivos temporales.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  40

Page 41: Linux (Curso)

CURSOS LINUX

Todos estos archivos deben situarse en la misma partición que el directorio raíz. Larazón es porque contienen programas que son accedidos a la hora de iniciar el equipo,momento en el que todavía no se han montado los otros FS.

Los directorios que son susceptibles a se instalados en otras particiones son:/home: directorios personales de los usuarios./opt:   instalan   paquetes   de   "programas   optativos"   al   sistema   (grande   paquetescomerciales, generalmente)./usr: almacenan todos los datos y programas que se ocupan para el uso normal delsistema. Generalmente archivos estáticos y estables.

/usr/X11R6 Contiene los programas para ejecutar X Window./usr/bin Programas de uso general, lo que incluye el compilador de C/C++./usr/doc Documentación general del sistema (HOWTO, man, libros, etc)/usr/etc Ficheros de configuración generales./usr/include Ficheros de cabecera de C/C++ (.h)./usr/info Ficheros de información de GNU./usr/lib Librerías generales de los programas./usr/man , /usr/share/doc/man o /usr/share/man Manuales accesibles con el

comando man./usr/sbin Programas de administración del sistema./usr/src Código fuente de programas.

/var: contiene datos cambiantes y no específicos a una máquina concreta (registros delog, base de datos, pid de algunos servicios corriendo, etc.)

Nota:Reglas aplicadas sobre los nombres de archivos:∙ Un nombre de archivo puede tener entre 1 y 255 caracteres.∙ Se puede utilizar cualquier carácter excepto la barra (/) y no esrecomendable emplear los caracteres con significado especial en Linux,que son los siguientes: = \ ^ ~ ' " ` * ; ­ ? [ ] ( ) ! & ~ < >. Paraemplear ficheros con estos caracteres o espacios hay que introducir elnombre del fichero entre comillas.∙ Se pueden utilizar números exclusivamente si así se desea. Las letrasmayúsculas y minúsculas se consideran diferentes(case sensitive), y porlo tanto no es lo mismo carta.txt que Carta.txt ó carta.Txt

Estándares de Sistemas de ArchivosEn el pasado, uno de los problemas que aquejaban las distribuciones deLinux,   así   como  los   paquetes   separados,  era   que   no  había   un   únicosistema de archivos aceptado. Esto generaba incompatibilidades entrepaquetes diferentes, y enfrentaba a usuarios y administradores con latarea de localizar varios programas y archivos.Para   mejorar   esta   situación,   en   Agosto   de   1993,   varias   personasformaron el Grupo del Estándar de Sistema de Archivos de Linux, o GrupoFSSTND para abreviar, coordinado por Daniel Quinlan. Después de seismeses   de   discusión,   el   grupo   presentó   un   diseño   que   muestra   unaestructura de sistema de archivos coherente y define la localización delos programas más esenciales y archivos de configuración.Este estándar se supone que se ha implementado en la gran mayoría dedistribuciones y paquetes de Linux. El estándar FSSTND ha sido reemplazado en 1997 por el estándar FHS dejerarquía de archivos. El estándar FHS considera cuestiones propias de

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  41

Page 42: Linux (Curso)

CURSOS LINUX

arquitecturas heterogéneas que FSSTND no tiene en cuenta. El texto deeste   estándar   puede   obtenerse   en   el   directorio   de   documentación   deLinux. Su sitio principal es http://www.pathname.com/fhs/. Podemos encontrar más información sobre el estado de este proyecto ensu servidor principal, en http://www.linuxbase.org/.

Crear directoriosSe añaden automáticamente dos entradas (.) y (..), que referencian al directorioactual y al padre, respectivamente.

mkdir [­p] nom_dir

­p: indica al comando mkdir que en caso de no existir los directorios intermedios loscree.

Ej.:mkdir /dir1/dir2/dir2

Borrar directoriosBorrar únicamente si están vacíos.

rmdir [­p] nom_dir

­p: similar a mkdir.

touchCuando se aplica este comando a un archivo, si el archivo existe actualiza la fechade la última modificación, caso contrario lo crea con una longitud de 0 bytes (esdecir vacío).

touch nom_arch

Creación de enlacesLos   enlaces   se   utilizan   con   el   fin   de   poder   situar   un   mismo   archivo   en

diferentes directorios o de poder otorgarle diferentes nombres, sin que exista, enrealizada, mas que un único fichero.  Los enlaces son por lo tanto, entradas en undirectorio que apuntan a otros ficheros.

Cuando varios usuarios trabajan juntos en un proyecto, con frecuencia necesitancompartir los archivos.   Como resultado, con frecuencia conviene que un  archivocompartido aparezca en forma simultanea en varios directorios, los cuales pertenece adistintos usuarios. 

Por ejemplo, Juan y Pepe trabajan juntos en un proyecto, y cada uno de ellosnecesita el acceso frecuente a los archivos del otro.  Si Juan tiene /home/juan comosu directorio de trabajo, él pude hacer referencia al archivo x en el directorio dePepe como /home/pepe/x.  Otra alternativa es que Juan creara un enlace dentro de sudirectorio que hiciese referencia al archivo x de Pepe.

Los enlaces puede ser físicos o simbólicos.Los enlaces físicos es simplemente otra entrada en el directorio referida a un

espacio físico del sistema de archivos, es decir un enlace físico apunta a un i­nodoen   particular.     No   es   posible   diferencia   los   enlaces   físicos   de   los   ficherosnormales.  El número de enlaces duros que tiene un archivo se muestra en el segundocampo de la salida de ls –l.

En cambio los enlaces simbólicos, hacen que el sistema cree un archivo de tipoLINK.  Este nuevo archivo sólo contiene el nombre de la ruta de acceso (en caso delejemplo, /home/pepe/x) del archivo al cual se enlaza.

Los usuarios enlazados al archivo solo contienen nombres de rutas de acceso y noapuntadores   a   i­nodos.    Cuando   el  usuario   elimina   el  archivo   original,   este  se

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  42

Page 43: Linux (Curso)

CURSOS LINUX

destruye y los intentos posteriores para acceder a los archivos mediante los enlacesfracasarán.

Los enlaces simbólicos pueden apuntar a directorios.

ln [­s] fichero_origen fichero_enlace

Cuando se crea un enlace el campo de permisos no significa nada, ya que éstos enrealidad son siempre los permisos que tenga el fichero al que apunta el enlace.

Los enlaces se borran igual que un archivo normal, con el comando rm.

Opciones:­s: enlace simbólico.

Ejemplo de enlace simbólico:$ ln –s /etc/passwd /home/usuario/claves (Crea un enlace del archivo de

contraseñas con nombre “claves”en el directorio /home/usuario)

Si listamos los directorios podemos ver

$ ls –l claveslrwxrwxrwx    1    usuario   usuario   11 Apr   8  13:33 claves ­> /etc/passwd

El camino o PATHEn cualquier sistema operativo moderno la estructura de archivos es jerárquica y

depende de los directorios. En general la estructura del sistema de archivos seasemeja a una estructura de árbol, estando compuesto cada nudo por un directorio, quecontiene otros directorios o archivos. En Windows cada unidad de disco se identificacomo un directorio básico que sirve de raíz a otras, y cuyo nombre es especial a:,c:, d:  etc. En los sistemas  Unix, y por lo tanto en  Linux, existe una única raízllamada / de la que cuelgan todos los ficheros y directorios, y que es independientede qué dispositivos estén conectados al ordenador.

El camino o path de un fichero o directorio es la secuencia de directorios quese ha de recorrer para acceder a un determinado fichero separados por /. Supongamosla estructura de archivos de la Figura

Existen dos forma de path:

­ Camino absoluto, que muestra toda la ruta a un fichero, comenzando por eldirectorio raíz (/), /home/pepe/carta

­ Camino relativo, muestra la ruta a partir del directorio actual de trabajo(véase pwd),  por ejemplo si nos encotramos en home el camino a carta seríapepe/carta, o bien usando el punto (.) para referirnos al directorio actualsería, ./pepe/carta

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  43

Page 44: Linux (Curso)

CURSOS LINUX

chownCambia el propietario de un archivo. Solo el usuario root o el propietario del

archivo pueden hacer esto.

chown [­R] nombre_usuario nombre_archivo

­R: solo se ocupa cuando nombre_archivo es un directorio. Esta opción indica que elcomando descienda recursivamente a través del árbol y aplique los cambios a todos losarchivos y subdirectorios que contiene.

chgrpPermite cambiar el grupo de un archivo.

chgrp [­R] nombre_grupo nombre_archivo

duDetermina la utilización de discos en base a los directorios.

du [opciones] [file]

Opciones­c: Muestra el total gastado al final de la ejecución­h: Imprime en tamaños de formatos legibles para las personas.­k: Imprime el tamaño en Kb en lugar de bloques­s: Sumario. Imprime sólo una salida por cada argumento.

dfMuestra la cantidad de espacio libre de los diferentes sistemas de archivos.Los sistemas de archivos deben ser montadas para conseguir esta información.

Inclusive NFS.

df [opciones] [sistema­de­archivo]

Si no se le provee sistema­de­archivo, df infomará acerca de todos los sistemas dearchivos montado y en funcionamiento

Opciones:­h: Imprime los tamaños en forma más legible, es decir, en Kb, Mb, Gb en lugarde bytes­k: muestra los tamaños en bloques de kilo­bytes.­m: Idem, mega­bytes­l: Lista únicamente los sistemas de archivos montados localmente.No muestra información sobre los sistemas de archivos montados en red.­i: Informa sobre la utilización de los i­nodos.  Los i­nodos son estructurasinternas del sistema de archivos, cuando éste se queda sin i­nodos libres, pormás que haya espacio libre en disco, no se podrán crea nuevos archivos hastaque se liberen i­nodos, generalmente esto no pasa a menos que se generen unaenorme cantidad de archivos muy pequeños.

directorio:  Muestra   el   espacio   libre   para   el   sistema   de   archivos   donde   estalocalizado directorio.

ddHace una copia del contenido del archivo sin importar su formato.Se puede utilizar para generar imágenes de discos con formato extraño.

Opciones:if=arch_entrada: Especifica el archivo de entrada.of=arch_salida: Especifica el archivo de salida.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  44

Page 45: Linux (Curso)

CURSOS LINUX

count=bloques: Nro. de bloques con que debe operar dd.obs=tamaño: Configura el tamaño de bloques del dispositivo de salida.ibs=tamaño: Idem, del dispositivo de entrada.swab convierte una entrada big endian en little endian y viceversaseek=bloquesskip=cant

mknodCrea archivos especiales para el manejo de dispositivos.

mknod nombre tipo [major] [minor]Tipos:

b ­­> Dispositivo de bloquesc ­­> Dispositivo de carácterp ­­> Pipe nombrada

Crear un archivo swap  dd if=/dev/zero of=/usr2/swap_file bs=1024 count=8192  mkswap /usr2/swap_file 8192

Agregar en el archivo /etc/fstab la línea /usr2/swap_file /usr2 swap defaults 0 0. Se debe poner esta línea después del montaje de la partición /usr2.De ahora en adelante, para salir de Linux estará obligado a hacer:   swapoff ­a  rebootEn efecto, si no se desactiva el archivo de intercambio, Linux no podrá desmontar lapartición   y   por   consiguiente   hará   un  fsck  sobre   ella   cada   vez   que   arranque   lamáquina.

PermisosLos permisos de cada fichero son la protección más básica de estos objetos del

sistema operativo; definen quién puede acceder a cada uno de ellos, y de qué formapuede hacerlo. Cuando hacemos un listado largo de ciertos archivos podemos ver suspermisos junto al tipo de fichero correspondiente, en la primera columna de cadalínea:

anita:~# ls ­l /sbin/rc0­rwxr­­r­­   3 root     sys         2689 Dec  1  1998 /sbin/rc0anita:~#

En   este   caso   vemos   que   el   archivo   listado   es   un   fichero   plano   (el   primercarácter es un “­“) y sus permisos son “rwxr­r­“. ¿Cómo interpretar estos caracteres?Los permisos se dividen en tres ternas en función de a qué usuarios afectan; cada unade ellas indica la existencia o la ausencia de permiso para leer, escribir o ejecutarel fichero: una “r” indica un permiso de lectura, una “w” de escritura, una “x” deejecución y un “­“ indica que el permiso correspondiente no está activado. Así, si enuna de las ternas tenemos los caracteres rwx, el usuario o usuarios afectados por esaterna tiene o tienen permisos para realizar cualquier operación sobre el fichero. ¿Dequé usuarios se trata en cada caso? La primera terna afecta al propietario  delarchivo, la segunda al grupo del propietario cuando lo creó (recordemos un mismousuario puede pertenecer a varios grupos) y la tercera al resto de usuarios. 

Cuando un usuario intenta acceder en algún modo a un archivo, el sistema compruebaqué terna de permisos es la aplicable y se basa únicamente en ella para conceder odenegar   el   acceso;   así,   si   un   usuario   es   el   propietario   del   fichero   sólo   secomprueban permisos de la primera terna; si no, se pasa a la segunda y se aplica encaso de que los grupos coincidan, y de no ser así se aplican los permisos de laúltima terna. De esta forma es posible tener situaciones tan curiosas como la de unusuario que no tenga ningún permiso sobre uno de sus archivos, y en cambio que el

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  45

Page 46: Linux (Curso)

CURSOS LINUX

resto   de   usuarios   del   sistema   pueda   leerlo,   ejecutarlo   o   incluso   borrarlo;obviamente,   esto   no   es   lo   habitual,   y   de   suceder   el   propietario   siempre   podrárestaurar los permisos a un valor adecuado. 

El propietario y el grupo de un archivo se pueden modificar con las órdenes chown ychgrp respectivamente; ambas reciben como parámetros al menos el nombre de usuario ogrupo (los nombres válidos de usuario son los que poseen una entrada en /etc/passwdmientras que los grupos válidos se leen de  /etc/group) al que vamos a otorgar laposesión del fichero, así como el nombre de archivo a modificar:

anita:~# ls ­l /tmp/fichero ­rw­r­­r­­   1 root     other          799 Feb  8 19:47 /tmp/fichero

anita:~# chown toni /tmp/fichero

anita:~# ls ­l /tmp/fichero ­rw­r­­r­­   1 toni     other          799 Feb  8 19:47 /tmp/fichero

anita:~# chgrp staff /tmp/fichero

anita:~# ls ­l /tmp/fichero ­rw­r­­r­­   1 toni     staff          799 Feb  8 19:47 /tmp/ficheroanita:~#

En muchas variantes de Unix es posible cambiar a la vez el propietario y el grupo deun   fichero   mediante  chown,   separando   ambos   mediante   un   carácter   especial,generalmente “:” o “.”:

anita:~# ls ­l /tmp/fichero ­rw­r­­r­­   1 root     other          799 Feb  8 19:47 /tmp/ficheroanita:~# chown toni:staff /tmp/ficheroanita:~# ls ­l /tmp/fichero ­rw­r­­r­­   1 toni     staff          799 Feb  8 19:47 /tmp/ficheroanita:~#

Como vemos, ninguna de estas órdenes altera el campo de permisos; para modificarlos permisos de un archivo se utiliza la orden  chmod. Este comando generalmenterecibe como parámetro el permiso en octal que queremos asignar a cierto fichero, asícomo el nombre del mismo:

anita:~# ls ­l /tmp/fichero ­rw­r­­r­­   1 root     staff          799 Feb  8 19:47 /tmp/ficheroanita:~# chmod 755 /tmp/ficheroanita:~# ls ­l /tmp/fichero ­rwxr­xr­x   1 root     staff          799 Feb  8 19:47 /tmp/ficheroanita:~#

¿Cómo podemos obtener el número en octal a partir de una terna de permisosdeterminada, y viceversa? Imaginemos que tenemos un fichero con unos determinadospermisos de los que queremos calcular su equivalente octal, o que conocemos lospermisos a asignar pero no su equivalente numérico; por ejemplo, necesitamos asignara un fichero la terna rw­r­­wx, que en la práctica no tiene mucho sentido pero que anosotros nos sirve de ejemplo. Lo primero que debemos hacer a partir de estos bitsrwx  es calcular su equivalente binario, para lo que asignamos el valor “1”  si undeterminado permiso está activo (es decir, si aparece una r, w o x en él) y un “0” sino lo está (aparece un “­“); así, el equivalente binario de la terna propuesta es110100011. Ahora simplemente hemos de pasar el número del sistema binario al octal:lo dividimos en grupos de tres elementos (110 100 011) y de cada uno de elloscalculamos su equivalente octal: 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  46

Page 47: Linux (Curso)

CURSOS LINUX

Ya tenemos los tres números de nuestra terna de permisos, o lo que es lo mismo,la representación octal de los bits iniciales: 643. Por tanto, si necesitamos asignaresta   terna   a   un   cierto   fichero,   simplemente   hemos   de   ejecutar   la   orden  chmodindicándole este número y el nombre del archivo:

anita:~# chmod 643 /tmp/ficheroanita:~# ls ­l /tmp/fichero ­rw­r­­­wx   1 root     root          799 Feb  8 19:47 /tmp/fichero*anita:~#

La forma de trabajar de chmod comentada requiere que se indique explícitamenteel valor octal de los bits rwx que queremos otorgar a un fichero; sin importar elvalor de las ternas que poseía antes de ejecutar la orden, estamos asignando a lospermisos del archivo el nuevo valor indicado en la línea de comandos. Existe otraforma de trabajo de chmod denominada “simbólica” en la que no necesitamos indicar elvalor octal de todos los bits, sino que especificamos únicamente parámetros para losvalores de los permisos que el archivo posee y deseamos modificar. En lugar deutilizar el equivalente octal, utilizamos símbolos (de ahí el nombre de esta forma detrabajo) que representan la activación o desactivación de ciertos bits en cada una delas tres ternas; la sintaxis básica de chmod en este caso es la siguiente: 

chmod ugoa{+,­}{rwxst} fichero 

Podemos ver que el valor simbólico comienza por cero o más letras que indicansobre que terna de los permisos se van a realizar los cambios (u para propietario delfichero, g para grupo, o para resto de usuarios y a para las tres ternas; si no seespecifica ninguna letra, se asume  a). A ellas les sigue un signo “+”  o “­“  enfunción de si deseamos activar o resetar el bit sobre el que trabajamos, parámetroindicado por el último conjunto formado por una o más letras, “r” para el permiso delectura, “w” para escritura, “x” para ejecución, “s” para SetUID o SetGID y “t” parabit de permanencia (el significado de estos dos últimos se explicará en el puntosiguiente). Entre los tres campos del valor simbólico no se insertan espacios:

anita:~# ls ­l /tmp/fichero­r­­­­­­­­   1 root     other          902 Feb  9 05:05 /tmp/ficheroanita:~# chmod +x /tmp/ficheroanita:~# ls ­l /tmp/fichero­r­x­­x­­x   1 root     other          902 Feb  9 05:05 /tmp/ficheroanita:~# chmod og­x /tmp/ficheroanita:~# ls ­l /tmp/fichero­r­x­­­­­­   1 root     other          902 Feb  9 05:05 /tmp/ficheroanita:~# chmod ug+rwx /tmp/ficheroanita:~# ls ­l /tmp/fichero­rwxrwx­­­   1 root     other          902 Feb  9 05:05 /tmp/ficheroanita:~#

Esta forma de trabajo simbólica es menos utilizada en la práctica que la formaoctal, pero en ciertas situaciones es muy útil, por ejemplo si deseamos activar todoslos permisos de ejecución de un archivo o si queremos setuidarlo: un simple “chmod+x”  o “chmod u+s”  es suficiente en estos casos, y evitamos preocuparnos por simodificamos el resto de permisos.

Quizás después de ver el procedimiento de modificación de los permisos de unfichero, este puede parecer demasiado complicado y arcaico para un sistema operativomoderno; a fin de cuentas, mucha gente prefiere gestores gráficos de permisos ­ igualque prefiere gestores gráficos para otras tareas de administración ­, programas quedan   todo   hecho   y   no   obligan   al   administrador   a   “complicarse”,   llenos   de   menúsdesplegables y diálogos que una y otra vez preguntan si realmente deseamos modificarcierto permiso (¿Está usted seguro? ¿Realmente seguro? ¿Es mayor de edad? ¿Me lojura?). Incluso esas personas aseguran que el procedimiento gráfico es mucho másclaro y más potente que el que Unix ofrece en modo texto. Nada más lejos de la

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  47

Page 48: Linux (Curso)

CURSOS LINUX

realidad; por un lado, aunque todo el mundo reconoce que la explicación detallada decómo   funcionan   los   permisos   de   ficheros   es   algo   farragosa,   en   la   práctica   elconvertir una terna de bits rwx a octal o viceversa es una tarea trivial, algo queningún administrador con unas cuantas horas de práctica ni siquiera necesita pensar.Por   otro,   algo   más   importante   que   la   facilidad   o   dificultad   de   modificar   lospermisos: su robustez; hemos de pensar que este modelo de protección está vigentedesde hace casi treinta años y no ha cambiado “absolutamente nada”. Si en todo estetiempo no se ha modificado el mecanismo, obviamente es porque siempre ha funcionado ­y lo sigue haciendo ­ bien.

Los bits    SUID   ,   SGID    y sticky    Habitualmente,   los   permisos   de   los   archivos   en   Unix   se   corresponden   con   un

número   en   octal   que   varía   entre   000   y   777;   sin   embargo,   existen   unos   permisosespeciales que hacen variar ese número entre 0000 y 7777: se trata de los bits depermanencia (1000), SetGID (2000) y SetUID (4000).

El   bit   de  SUID  o  setuid  se   activa   sobre   un   fichero   añadiéndole   4000   a   larepresentación octal de los permisos del archivo y otorgándole además permiso deejecución al propietario del mismo; al hacer esto, en lugar de la x en la primeraterna de los permisos, aparecerá una s o una S si no hemos otorgado el permiso deejecución correspondiente (en este caso el bit no tiene efecto):

anita:~# chmod 4777 /tmp/file1anita:~# chmod 4444 /tmp/file2anita:~# ls ­l /tmp/file1 ­rwsrwxrwx   1 root     other            0 Feb  9 17:51 /tmp/file1*anita:~# ls ­l /tmp/file2­r­Sr­­r­­   1 root     other            0 Feb  9 17:51 /tmp/file2*anita:~#

El bit  SUID  activado sobre un fichero indica que todo aquél que ejecute elarchivo va a tener durante la ejecución los mismos privilegios que quién lo creó;dicho de otra forma, si el administrador crea un fichero y lo  setuida, todo aquelusuario que lo ejecute va a disponer, hasta que el programa finalice, de un nivel deprivilegio total en el sistema. Podemos verlo con el siguiente ejemplo:

luisa:/home/toni# cat testsuid.c

/* Programa en Lenguaje C que muestra el uso del bit SetUID */#include <stdio.h>#include <unistd.h>

main(){  printf("UID: %d, EUID: %d\n",getuid(),geteuid());}/*Fin programa*/

luisa:/home/toni# cc ­o testsuid testsuid.cluisa:/home/toni# chmod u+s testsuidluisa:/home/toni# ls ­l testsuid­rwsr­xr­x   1 root     root         4305 Feb 10 02:34 testsuid

luisa:/home/toni# su tonitoni:~$ iduid=1000(toni) gid=100(users) groups=100(users)

toni:~$ ./testsuidUID: 1000, EUID: 0

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  48

Page 49: Linux (Curso)

CURSOS LINUX

toni:~$

Podemos comprobar que el usuario  toni, sin ningún privilegio especial en elsistema, cuando ejecuta nuestro programa setuidado de prueba está trabajando con unEUID (Effective UID) 0, lo que le otorga todo el poder del administrador (fijémonosque éste último es el propietario del ejecutable); si en lugar de este código elejecutable fuera una copia de un shell, el usuario toni tendría todos los privilegiosdel root mientras no finalice la ejecución, es decir, hasta que no se teclee exit enla línea de órdenes. 

Todo lo que acabamos de comentar con respecto al bit setuid es aplicable al bitsetgid  pero a nivel de grupo del fichero en lugar de propietario: en lugar detrabajar con el EUID del propietario, todo usuario que ejecute un programa setgidadotendrá los privilegios del grupo al que pertenece el archivo. Para activar el bit desetgid  sumaremos 2000 a la representación octal del permiso del fichero y ademáshabremos de darle permiso de ejecución a la terna de grupo; si lo hacemos, la s o Saparecerá en lugar de la  x  en esta terna. Si el fichero es un directorio y no unarchivo plano, el bit setgid afecta a los ficheros y subdirectorios que se creen enél:   estos   tendrán   como   grupo   propietario   al   mismo   que   el   directorio  setgidado,siempre que el proceso que los cree pertenezca a dicho grupo.

Nota:Pero, ¿cómo afecta todo esto a la seguridad del sistema? Muy sencillo:los bits de setuid y setgid dan a Unix una gran flexibilidad, peroconstituyen al mismo tiempo  la mayor fuente de ataques internos alsistema (entendiendo por ataques internos aquellos realizados por unusuario ­ autorizado o no ­ desde la propia máquina, generalmente conel objetivo de aumentar su nivel de privilegio en la misma). Cualquiersistema   Unix   tiene   un   cierto   número   de   ejecutables   setuidados   y/osetgidados. Cada uno de ellos, como acabamos de comentar, se ejecutacon   los   privilegios  de   quien   lo  creó   (generalmente   el  root   u   otrousuario   con   ciertos   privilegios)   lo   que   directamente   implica   quecualquier usuario tiene la capacidad de lanzar tareas que escapen totalo parcialmente al control del sistema operativo: se ejecutan en modoprivilegiado si es el administrador quien creó los ejecutables.

  Evidentemente, estas tareas han de estar controladas de una formaexhaustiva, ya que si una de ellas se comporta de forma anormal (unsimple core dump) puede causar daños irreparables al sistema; tanto esasí que hay innumerables documentos que definen, o lo intentan, pautasde   programación   considerada   “segura”.   Si   por   cualquier   motivo   unprograma   setuidado   falla   se   asume   inmediatamente   que   presenta   unproblema de seguridad para la máquina, y se recomienda resetear el bitde setuid cuanto antes.

Está claro que asegurar completamente el comportamiento correcto de unprograma es muy difícil, por no decir imposible; cada cierto tiemposuelen aparecer fallos (bugs) en ficheros setuidados de los diferentesclones   de   Unix   que   ponen   en   peligro   la   integridad   del   sistema.Entonces, ¿por qué no se adopta una solución radical, como eliminareste tipo de archivos? Hay una sencilla razón: el riesgo que presentanno se corre inútilmente, para tentar al azar, sino que los archivos quese ejecutan con privilegios son estrictamente necesarios en Unix, almenos algunos de ellos. Veamos un ejemplo: un fichero setuidado clásicoen cualquier clon es /bin/passwd, la orden para que los usuarios puedancambiar su contraseña de entrada al sistema. No hace falta analizar conmucho detalle el funcionamiento de este programa para darse cuenta queuna   de   sus   funciones   consiste   en   modificar   el   fichero   de   claves(/etc/passwd o /etc/shadow). Está claro que un usuario per se no tieneel nivel de privilegio necesario para hacer esto (incluso es posibleque ni siquiera pueda leer el fichero de claves), por lo que frente a

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  49

Page 50: Linux (Curso)

CURSOS LINUX

este  problema  tan  simple  existen varias  soluciones:  podemos  asignarpermiso de escritura para todo el mundo al fichero de contraseñas,podemos denegar a los usuarios el cambio de clave o podemos obligarlesa pasar por la sala de operaciones cada vez que quieran cambiar sucontraseña. Parece obvio que  ninguna de ellas es apropiada para laseguridad del sistema (quizás la última lo sea, pero es impracticableen máquinas con un número de usuarios considerable). Por tanto, debemosasumir que el bit de setuid en  /bin/passwd  es imprescindible para uncorrecto   funcionamiento   del   sistema.   Sin   embargo,   esto   no   siempresucede así: en un sistema Unix instalado out of the box el número deficheros setuidados suele ser mayor de cincuenta; sin perjudicar alcorrecto funcionamiento de la máquina, este número se puede reducir amenos de cinco, lo que viene a indicar que una de las tareas de unadministrador sobre un sistema recién instalado es minimizar el númerode   ficheros   setuidados   o   setgidados.   No   obstante,   tampoco   esconveniente  eliminarlos,  sino  simplemente   resetear su  bit  de  setuidmediante chmod:

luisa:~# ls ­l /bin/ping ­r­sr­xr­x   1 root     bin         14064 May 10  1999 /bin/ping*luisa:~# chmod ­s /bin/pingluisa:~# ls ­l /bin/ping ­r­xr­xr­x   1 root     bin         14064 May 10  1999 /bin/ping*luisa:~#

También   hemos   de   estar   atentos   a   nuevos   ficheros   de   estascaracterísticas que se localicen en la máquina; demasiadas aplicacionesde   Unix   se   instalan   por   defecto   con   ejecutables   setuidados   cuandorealmente este bit no es necesario, por lo que a la hora de instalarnuevo   software   o   actualizar   el   existente   hemos   de   acordarnos   deresetear el bit de los ficheros que no lo necesiten. Especialmentegrave   es   la   aparición   de   archivos   setuidados   de   los   que   eladministrador no tenía constancia (ni son aplicaciones del sistema niun aplicaciones añadidas), ya que esto casi en el 100% de los casosindica que nuestra máquina ha sido comprometida por un atacante. Paralocalizar   los   ficheros   con   alguno   de   estos   bits   activos,   podemosejecutar la siguiente orden:

luisa:~# find / \( ­perm ­4000 ­o ­perm ­2000 \) ­type f ­print

El sticky bit o bit de permanencia se activa sumándole 1000 a la representaciónoctal de los permisos de un determinado archivo y otorgándole además permiso deejecución; si hacemos esto, veremos que en lugar de una x en la terna correspondienteal resto de usuarios aparece una  t  (si no le hemos dado permiso de ejecución alarchivo, aparecerá una T):

anita:~# chmod 1777 /tmp/file1anita:~# chmod 1774 /tmp/file2anita:~# ls ­l /tmp/file1 ­rwxrwxrwt   1 root     other            0 Feb  9 17:51 /tmp/file1*anita:~# ls ­l /tmp/file2­rwxrwxr­T   1 root     other            0 Feb  9 17:51 /tmp/file2*anita:~#

Si el bit de permanencia de un fichero está activado (recordemos que si apareceuna  T  no lo está) le estamos indicando al sistema operativo que se trata de unarchivo muy utilizado, por lo que es conveniente que permanezca en memoria principalel mayor tiempo posible; esta opción se utilizaba en sistemas antiguos que disponíande muy poca RAM, pero hoy en día prácticamente no se utiliza. Lo que si que siguevigente es el efecto del  sticky bit  activado sobre un directorio: en este caso seindica al sistema operativo que, aunque los permisos “normales” digan que cualquier

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  50

Page 51: Linux (Curso)

CURSOS LINUX

usuario   pueda   crear   y   eliminar   ficheros   (por   ejemplo,   un   777   octal),   sólo   elpropietario de cierto archivo y el administrador pueden borrar un archivo guardado enun directorio con estas características. Este bit, que sólo tiene efecto cuando esactivado por el administrador (aunque cualquier usuario puede hacer que aparezca unat o una T en sus ficheros y directorios), se utiliza principalmente en directoriosdel sistema de ficheros en los que interesa que todos puedan escribir pero que notodos puedan borrar los datos escritos, como  /tmp/  o  /var/tmp/: si el equivalenteoctal de los permisos de estos directorios fuera simplemente 777 en lugar de 1777,cualquier usuario podría borrar los ficheros del resto. Si pensamos que para evitarproblemas podemos simplemente denegar la escritura en directorios como los anteriorestambién   estamos   equivocados:   muchos   programas   ­   como   compiladores,   editores   ogestores de correo ­ asumen que van a poder crear ficheros en /tmp/ o /var/tmp/, deforma que si no se permite a los usuarios hacerlo no van a funcionar correctamente;por tanto, es muy recomendable para el buen funcionamiento del sistema que al menosel directorio /tmp/ tenga el bit de permanencia activado. 

Ya para finalizar, volvemos a lo que hemos comentado al principio de la sección: elequivalente octal de los permisos en Unix puede variar entre 0000 y 7777. Hemos vistoque   podíamos   sumar   4000,   2000   o   1000   a   los   permisos   “normales”   para   activarrespectivamente   los   bits  setuid,  setgid  o  sticky.   Por   supuesto,   podemos   activarvarios de  ellos a la vez simplemente  sumando sus valores: en la situación  pocoprobable de que necesitáramos todos los bits activos, sumaríamos 7000 a la ternaoctal 777:

luisa:~# chmod 0 /tmp/ficheroluisa:~# ls ­l /tmp/fichero ­­­­­­­­­­   1 root     root            0 Feb  9 05:05 /tmp/ficheroluisa:~# chmod 7777 /tmp/ficheroluisa:~# ls ­l /tmp/fichero ­rwsrwsrwt   1 root     root            0 Feb  9 05:05 /tmp/fichero*luisa:~#

Si en lugar de especificar el valor octal de los permisos queremos utilizar la formasimbólica de  chmod, utilizaremos  +t  para activar el bit de permanencia,  g+s  paraactivar   el   de  setgid  y  u+s  para   hacer   lo   mismo   con   el   de  setuid;   si   queremosresetearlos, utilizamos un signo `­' en lugar de un “+” en la línea de órdenes.

ResumenSignificados de los permisos otorgados a los archivos:

Escritura: permite que un archivo sea modificado o borrado.Lectura: permite leer el contenido del archivo.Ejecución: en caso de ser ejecutable, permite su ejecución.

Significados de los permisos otorgados a directorios:Escritura: Es posible crear ficheros y subdirectorios en su interior. Tambiénpermite borrarlo. No obstante, el propietario de un directorio siempre podráborrar los archivos contenidos en él, aunque sean de otros usuarios, a menosque se encuentre el sticky bit activo sobre el directorio.Lectura: da la posibilidad  de listar el contenido del directorio,  pero nopermite acceder al mismo.Ejecución: permite el acceso al directorio.

chmod (CHange MODe)Cambia los permisos de un archivo.

chmod [­R] máscara nombre_archivo

Máscara(Dueño­Grupo­Otros):Lectura     4

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  51

Page 52: Linux (Curso)

CURSOS LINUX

Escritura   2Ejecución   1

umaskDetermina que permisos se otorgan por defecto al crear un archivo.La máscara identifica que permisos no se otorgan.Por defecto es 022(todo para el dueño, lectura y ejecución para el grupo y los demás)Se debe declarar al iniciar cada sesión (por ejemplo, en .bashrc .profile o en /etc/login.defs).

umask [­p] [­s] código_octal

Sin parámetros, nos indica el valor actual (por defecto nos lo muestra en forma octaly   con   lógica   negativa).   Para   que   nos   muestre   los   permisos   en   representaciónsimbólica, deberemos añadir la opción [­S]. Hay que tener en cuenta que, al decirlógica   negativa,   nos   referimos   a   que   un   ‘1’   significa   desactivación   y   un   ‘0’activación   del   permiso.   Por   ejemplo,   rwx   r­x   ­­x   =   000   010   110   =   0   2   6.   Siquisiéramos aplicar estos permisos a todos los archivos o directorios que creemos,deberemos ejecutar previamente la orden umask 026.

whichLocaliza el path completo de un archivo.

which nom_archivo

whereisLocaliza la ruta absoluta del archivo binario, el código fuente y la página delmanual man (si es que están disponibles)

whereis [opciones] nom_archivo

Opciones:­b Busca solamente el archivo binario­m Busca solamente la página del manual­s Busca solamente el código fuente

mountLas particiones se montan de forma que parecen otro subdirectorio más.La partición boot se monta en tiempo de arranque.Cuando se monta un directorio nuevo, el proceso mount oculta todo el contenido previode ese directorio (no se borraran, solo no serán visible).Si usamos mount sin parámetros nos brinda una lista de los FS montados.El dispositivo en el que se monta /proc es none.

mount [opciones] [dispositivo] directorio

Opciones:­a: Monta todos los FS listados en /etc/fstab­t tipo_fs: Especifica el tipo de fs que se montara(ext2, FAT, VFAT, FAT32). Elcomando mount normalmente puede darse cuenta de esta información por si solo.­o opciones: Especifica opciones aplicables a mount.

Opciones ­o:ro: Solo lecturarw: Lectura/escritura (por defecto)exec: Permite la ejecución de binarios (por defecto)noatime: Deshabilita la actualización de la fecha de acceso a los i­ nodos.Mejora el rendimiento.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  52

Page 53: Linux (Curso)

CURSOS LINUX

noauto:   Deshabilita   el   montaje   automático   de   esta   partición   cuando   seespecifica la opción ­a.nosuid: Anula la aplicación.sb=n: Le dice a mount que use el bloque n como superbloque en el sistema dearchivo ext2.

Ej:mount /dev/hda1 /mnt ­t fatmount /dev/hdb /cdr ­t iso9660 ­o ro

En la mayoría de los casos Linux detecta solo el sistema de archivo y modo de montaje(ro, rw).

mount /dev/hdb /cdr

umountDesmonta un sistema de archivo.

umount [­f] directorioumount [­f] dispositivo

­f: fuerza el desmontaje

fuserIdentifica los procesos que están usando un sistema de archivo.Muestra los PIDs de los procesos que están usando un archivo o un sistema de archivo.

/etc/fstabEs un archivo de configuración que usa mount. Este archivo contiene una lista detodas las particiones conocidas del sistema. Durante el proceso de arranque se leeesta lista y sus elementos se montan de forma automática.

Formato de las entradas:

/dev/device  /dir/to/mount  fstype  parameters  fs_freq  fs_passno

/dev/device: Dispositivo a ser montado./dir/to/mount: El directorio donde va a ser montado el dispositivo.fstype: Tipo de sistema de archivo (ext2, ext3, fat, fat32, ntfs, minix, iso9660,umsdos nfs, etc).parameters Parámetros proporcionados por la opción ­o del comando mount.fs_freq Indica al comando dump con cuanta frecuencia se necesita hacer copia deseguridad.fs_passno Llama al programa fsck en tiempo de arranque para determinar el orden en elcual se comprueban los fs.

proc ­ pseudo­sistema de ficheros de información de procesos

/proc  es  un pseudo­sistema de ficheros que se usa como interfaz para las estructuras de datos del kernel en lugar de leer e interpretar /dev/kmem. La mayor partede  este  sistema  de  ficheros es de sólo lectura, pero algunos ficheros permitencambiar variables del kernel.

El siguiente resumen proporciona una rápida visita a la jerarquía /proc.

[number]Hay un subdirectorio numérico para cada proceso en ejecución; el nombre delsubdirectorio es el ID del proceso. Cada uno de ellos contiene los

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  53

Page 54: Linux (Curso)

CURSOS LINUX

siguientes pseudo ficheros y directorios.

cmdlineEste contiene la línea de comandos completa para el proceso, a menos que elproceso entero se haya intercambiado a disco o a menos que el proceso sea unproceso zombie. En cualquiera de estos dos últimos casos, no hay nada en elfichero, es decir, una lectura sobre este fichero regresará como si hubieraleído 0 caracteres.  Este fichero

termina en un carácter nulo, no en un carácter "nueva línea".

cwdEste es un enlace hacia el directorio de trabajo actual del proceso.Por ejemplo, para encontrar el directorio de trabajo actual del proceso 20,puede hacer esto:

cd /proc/20/cwd; /bin/pwd

Dese cuenta que la orden pwd es frecuentemente una orden interna del shell, ypodría no funcionar adecuadamente en este contexto.

environEste fichero contiene el entorno del proceso. Las entradas están serparadas porcaracteres nulos, y podría haber un carácter nulo al final. Por tanto, paramostrar el entorno del proceso 1, debería hacer: (cat /proc/1/environ; echo) | tr "\000" "\n"

exeun   puntero   al   fichero   binario   que   fue   ejecutado;   aparece   con   un   enlacesimbólico. La función readlink(2) aplicada al fichero especial "exe" devuelve,bajo Linux 2.0 y versiones anteriores, una cadena con el formato:

 [dispositivo]:nodo­i

Por ejemplo, [0301]:1502 sería el nodo­i 1502 sobre el dispositivo con númeromayor 03 (discos IDE, MFM, etc.) y número menor 01   (primera partición delprimer disco.  Bajo Linux 2.2 el enlace contiene el nombre de la ruta actual dela orden.También, el enlace simbólico se puede desreferenciar normalmente – un intentode abrir "exe" abrirá el fichero ejecutable. Incluso puede escribir /proc/[número]/exe para ejecutar otra copia del proceso [número].

find(1) con la opción ­inum se puede usar para buscar el fichero.

fdEste es un subdirectorio que contiene una entrada por cada fichero que tieneabierto el proceso, nombrado con el descriptor del fichero. Cada entrada es unenlace simbólico al fichero real (como lo es la entrada exe). Por tanto, 0 esla entrada estándar, 1 es la salida estándar, 2 es la salida estándar de error,etc.

Los programas que no leen de la entrada estándar, sino que leen de un fichero,y que no escriben en la salida estándar, sino que escriben en un fichero,pueden ser engañados de la siguiente manera, suponiendo que ­i es la opción quedesigna al fichero de entrada y ­o la opción que designa al fichero de salida:foobar   ­i   /proc/self/fd/0   ­o   /proc/self/fd/1   y   de   esta   manera   su   programafuncionará como filtro.  Note que esto no funcionará en programas que realizanaccesos aleatorios sobre sus ficheros, ya que los ficheros del directorio fd nopermiten este tipo de acceso.

/proc/self/fd/N es aproximadamente lo mismo que /dev/fd/N en algunos sistemasUNIX y sistemas al estilo UNIX. De hecho, la mayoría de los guiones shellMAKEDEV de Linux enlazan simbólicamente [..]/proc/self/fd con /dev/fd.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  54

Page 55: Linux (Curso)

CURSOS LINUX

maps   Fichero   que   contiene   las   regiones   de   memoria   actualmente   asociadas   y   suspermisos de acceso.

                     El formato es:                        Dirección         perms desplaz  disp  nodo­i                        00000000­0002f000 r­x­­ 00000400 03:03 1401                        0002f000­00032000 rwx­p 0002f400 03:03 1401                        00032000­0005b000 rwx­p 00000000 00:00 0                        60000000­60098000 rwx­p 00000400 03:03 215                        60098000­600c7000 rwx­p 00000000 00:00 0                        bfffa000­c0000000 rwx­p 00000000 00:00 0

donde dirección es el espacio de direcciones del proceso que ocupa, perms es unconjunto de permisos:                   r = leer                   w = escribir                   x = ejecutar                   s = compartido                   p = privado (copia en escritura)

desplaz es el desplazamiento dentro del fichero/cosa, disp es el dispositivo(mayor:menor) y nodo­i es el nodo­i en ese dispositivo. 0 indica que no hay unnodo­i asociado a la región de memoria, como ocurriría con la región bss delproceso.

Bajo Linux 2.2 existe un campo adicional que da un nombre de ruta cuando esaplicable.

mem    Este no es lo mismo que el dispositivo mem (1;1), a pesar de que tiene losmismos números de dispositivo. El dispositivo /dev/mem es la memoria físicaantes de que se haga cualquier traducción de direcciones, pero aquí el ficheromem es la memoria a la que accede el proceso. Actualmente, a ésta no se lepuede aplicar la función mmap(2), y no lo será mientras no se añada al kerneluna función.

root   Unix y Linux soportan la idea de una raíz del sistema de ficheros por proceso,asignada por la llamada al sistema chroot(2).   root apunta a la  raíz delsistema de ficheros y se comporta como lo hacen exe, fd/*, etc.

stat   Información de estado del proceso. Esta es usada por ps(1).

Los campos, en orden, junto con sus indicadores de formato apropiados parascanf(3), son:

pid %d Identificador del proceso.

comm %sNombre   de   fichero   del   ejecutable,   en   paréntesis.   Este   es   visibledependiendo de si el ejecutable ha sido o no intercambiado.

state %cUn   carácter   de   la   cadena   "RSDZT"   donde   R   significa   en   ejecución,   Sbloqueado de forma interrumpible, D bloqueado de forma ininterrupible ointercambiado, Z zombie y T proceso en ejecución paso a paso o parado (enuna señal).

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  55

Page 56: Linux (Curso)

CURSOS LINUX

ppid %dEl PID del padre.

pgrp %dEl identificador del grupo de procesos del proceso.

session %dEl identificador de sesión del proceso.

tty %d El terminal que usa el proceso.

tpgid %dEl   identificador   del   grupo   de   procesos   del   proceso   al   que   perteneceactualmente la terminal a la que está conectado el proceso.

flags %uLas banderas del proceso. Actualmente, cada bandera tiene activo el bit"math", ya que crt0.s comprueba la emulación "math", por lo que éste no seincluye en la salida. Esto es probablemente un error (bug), ya que no todoproceso es un programa en C compilado. El bit "math" debe ser un 4 decimaly el bit "paso a paso" un 10 decimal.

minflt %uEl número de fallos de página menores producidos por el proceso, es decir,aquellos que no han necesitado la carga de una página de memoria desdedisco.

cminflt %uEl número de fallos de página menores producidos por el proceso y sushijos.

majflt %uEl número de fallos de página mayores producidos por el proceso, es decir,aquellos que han necesitado la carga de una página de memoria desde disco.

cmajflt %uEl número de fallos de página mayores producidos por el proceso y sushijos.

utime %dEl número de jiffies que este proceso se ha planificado en modo usuario.

stime %dEl número de jiffies que este proceso se ha planificado en modo núcleo.

cutime %dEl número de jiffies que este proceso y sus hijos se hanplanificado en modo usuario.

cstime %dEl número de jiffies que este proceso y sus hijos se han planificado enmodo núcleo.

counter %dEl tamaño máximo actual, en jiffies, del siguiente quantum del proceso, olo que queda actualmente de su quantum actual, si él es ahora mismo elproceso en ejecución.

priority %d

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  56

Page 57: Linux (Curso)

CURSOS LINUX

El valor "nice" estándar, más 15. El valor nunca es negativo dentro delnúcleo.

timeout %uEl tiempo, en jiffies, del siguiente "timeout" del proceso.

itrealvalue %uEl tiempo (en jiffies) antes de que la siguiente señal SIGALRM sea enviadaal proceso.

starttime %dTiempo, en jiffies, desde el arranque del sistema hasta el inicio de laejecución del proceso.

vsize %uTamaño de la memoria virtual.

rss %u Tamaño del Conjunto Residente (RSS): número de páginas que el proceso tieneen memoria real, menos 3 (para propósitos administrativos). Dicho conjuntoestá formado por las páginas que componen actualmente el espacio de código,datos y pila. No incluye  aquellas páginas que no se han cargado bajodemanda o que se han intercambiado a disco.

rlim %uLímite actual, en bytes, del RSS del proceso (normalmente,2,147,483,647).

startcode %uDirección por encima de la cual se puede ejecutar el código del programa.

endcode %uDirección por debajo de la cual se puede ejecutar el código del programa.

startstack %uDirección de comienzo de la pila.

kstkesp %uEl valor actual del registro ESP (puntero de pila de 32 bits), tal como seencuentra en la página de pila del proceso.

kstkeip %uValor actual del EIP (puntero de instrucción de 32 bits).

signal %dMapa de bits de señales pendientes (normalmente 0).

blocked %dMapa de bits de señales bloqueadas (normalmente 0, 2 para los shells).

sigignore %dMapa de bits de señales ignoradas.

sigcatch %dMapa de bits de señales capturadas.

wchan %uEste   es   el   "canal"   en   el   que   está   esperando   el   proceso.   Este   es   ladirección de una llamada al sistema, y se puede mirar en una lista denombre si necesita un nombre textual. (Pruebe ps ­l para ver WCHAN en acción)

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  57

Page 58: Linux (Curso)

CURSOS LINUX

cpuinfoEste es una colección de elementos dependientes de la CPU y de la arquitecturadel sistema. Para cada arquitectura soportada, una lista diferente. Las únicasdos entradas comunes son cpu que es la CPU que se está usando actualmente yBogoMIPS, una constante del sistema que se calcula durante el arranque delnúcleo.

devicesLista de números mayores de dispositivo y grupos de dispositivos. Esta puedeser usada por los guiones MAKEDEV para consistencia con el núcleo.

dmaEsta es una lista de los canales DMA (acceso directo a memoria) ISAregistrados en uso.

filesystemsLista de los sistemas de ficheros que fueron compilados dentro del núcleo.Incidentalmente,   mount(1)   usa   esto   para   circular   a   través   de   diferentessistemas de ficheros cuando no se especifica ninguno.

interruptsEste es usado para registrar el número de interrupciones para cada IRQ sobre(al menos) la arquitectura i386. El formato es muy fácil de leer, realizado enASCII.

ioportsEste es una lista de las regiones de puertos de Entrada/Salida actualmenteregistrados que están en uso.

kcoreEste fichero representa la memoria física del sistema y su formato es el de unfichero core. Con este pseudofichero y un binario del núcleo "sin desnudar"(/usr/src/linux/tools/zSystem),   se   puede   usar   GDB   para   examinar   el   estadoactual de cualquier estrutura de datos del núcleo.La longitud total de este fichero es el tamaño de la memoria física (RAM)más 4KB.

kmsgEste fichero se puede usar en lugar de la llamada al sistema syslog(2) pararegistrar mensajes del núcleo. Un proceso debe tener permisos de superusuariopara leer este fichero, y sólo un proceso debe leer este fichero. Este ficherono se debe leer si se está ejecutando un proceso syslog que usa la llamada alsistema syslog(2) para registrar mensajes del núcleo.

A la información de este fichero se accede con el programa dmesg(8).

ksymsEste mantiene las difiniciones de símbolos exportados del núcleo usadas por lasherramientas de manejo de modulos(X) para enlazar dinámicamente módulos.

loadavgLos números de carga media dan el número promedio de trabajos en la cola deejecución en los últimos 1, 5 y 15 minutos. Estos números son idénticos a losnúmeros de carga media dados por uptime(1) y otros programas.malloc Este fichero sólo está presente si se definió CONFIGDEBUGMALLOC durantela compilación.

meminfo

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  58

Page 59: Linux (Curso)

CURSOS LINUX

Este es usado por free(1) para informar de la cantidad de memoria libre y usadaen   el   sistema   (tanto   física   como   de   intercambio)   así   como   de   la   memoriacompartida y los buffers usados por el núcleo.

El formato es el mismo que el de free(1), salvo que los datos se dan en bytes yno en KB.

modulesLista de módulos que han sido cargados por el sistema.

netDirectorio que contiene varios pseudoficheros, los cuales dan el estado dealgunas partes de la capa de red. Estos ficheros contienen estructuras ASCII y,por   tanto,   se   pueden   leer   con   cat.   Sin   embargo,   la   aplicación   netstat(8)proporciona un acceso mucho más claro a estos ficheros.

arpEste mantiene un vaciado ASCII legible de la tabla ARP del núcleo usada para laresolución   de   direcciones.   Mostrará   tanto   las   entradas   ARP   aprendidasdinámicamente como las preprogramadas. El formato es:

                   IP address       HW type     Flags       HW address                   10.11.100.129    0x1         0x6         00:20:8A:00:0C:5A                   10.11.100.5      0x1         0x2         00:C0:EA:00:00:4E                   44.131.10.6      0x3         0x2         GW4PTS

Donde 'IP address' es la dirección IPv4 de la máquina, 'HW type' es el tipo dehardware de la dirección según el RFC 826. 'Flags' son las banderas internas dela estructura ARP (tal y como se definen en /usr/include/linux/if_arp.h) y 'HWaddress'   es,   si   se   conoce,   la   dirección   de   la   capa   física   asociada   a   ladirección IP.

dev    El pseudofichero dev contiene información de estado del dispositivo de red.  Dael número de paquetes recividos y enviados, el número de errores y colisiones yotras estadísticas básicas. Estas son usadas por el programa ifconfig(8) parainformar del estado del dispositivo. El formato es:

        Inter­|   Receive                  |   Transmit         face |packets errs drop fifo frame|packets errs drop fifo colls carrier            lo:      0    0    0    0    0     2353    0    0    0     0    0          eth0: 644324    1    0    0    1   563770    0    0    0   581    0

rarp   Este fichero usa el mismo formato que el fichero arp y contiene la actual basede datos de asociaciones inversas usada para proporcionar los servicios debúsqueda de direcciones inversas de rarp(8) Si RARP no está configurado dentrodel núcleo, este fichero no estará presente.

raw    Contiene   un   vaciado   de   la   tabla   de   sockets   RAW.   La   mayor   parte   de   estainformación no es útil salvo para propósitos de depuración. El valor 'sl' es elnúmero de entrada hash del núcleo para el socket.'local address' es la pareja formada por la dirección local y el número depuerto. 'St' es el estado interno del socket. 'tx_queue' y 'rx_queue' son lascolas de datos de entrada y salida en términos de uso de memoria del núcleo.Los campos 'tr', 'tm­>when' y 'rexmits' no los usa RAW. El campo 'uid' contieneel idenficador de usuario efectivo del creador del socket.

snmp   Este fichero contiene los datos ASCII que necesitan las Bases de Informaciónpara Administración de IP, ICMP, TCP y UDP para un agente SNMP.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  59

Page 60: Linux (Curso)

CURSOS LINUX

tcp    Contiene   un   vaciado   de   la   tabla   de   sockets   TCP.   La   mayor   parte   de   estainformación no es útil salvo para propósitos de depuración. El valor 'sl' es elnúmero de la ranura hash del núcleo para el socket. 

'local address' es la pareja formada por la dirección local y el número depuerto. 'remote address' es la pareja formada por la dirección remota y el número depuerto (si hay conexión). ‘st' es el estado interno del socket. 'tx_queue' y 'rx_queue' son las colas de datos de entrada y salida en términosde uso de memoria del núcleo.Los campos 'tr', 'tm­>when' y 'rexmits' contienen información del núcleo delestado del socket y sólo son útiles para depuración. El campo

udp    Contiene   un   vaciado   de   la   tabla   de   sockets   UDP.   La   mayor   parte   de   estainformación no es útil salvo para propósitos de depuración. El valor 'sl' es elnúmero de la entrada hash del núcleo para el socket. 'local address' es lapareja formada por la dirección local y el número de puerto. 'remote address' esla   pareja   formada   por   la   dirección   remota   y   el   número   de   puerto   (si   hayconexión). St' es el estado interno del socket. 'tx_queue' y 'rx_queue' son lascolas de datos de entrada y salida en términos de uso de memoria del núcleo. Los campos 'tr', 'tm­>when' y 'rexmits' no son usados por UDP.  El campo 'uid'contiene el idenficador de usario efectivo del creador del socket. El formatoes:

sl  local_address rem_address   st tx_queue rx_queue tr rexmits  tm­>when uid 1: 01642C89:0201 0C642C89:03FF 01 00000000:00000001 01:000071BA 00000000 0 1: 00000000:0801 00000000:0000 0A 00000000:00000000 00:00000000 6F000100 0 1: 00000000:0201 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0

unix  Lista de sockets de dominio UNIX presentes dentro del sistema y el estado decada uno de ellos. El formato es:                     Num RefCount Protocol Flags    Type St Path                      0: 00000002 00000000 00000000 0001 03                      1: 00000001 00000000 00010000 0001 01 /dev/printer

Donde 'Num' es el número de entrada en la tabla del núcleo, 'RefCount' es elnúmero   de   usuarios   del   socket,   'Protocol'   es,   actualmente,   siempre   0,   delsocket. 'Type' es, actualmente, siempre 1 (los sockets de dominio UNÍS del tipodatagrama todavía no están soportados en el núcleo). 'st' es el estado internodel socket y 'Path' es, si existe, la ruta asociada del socket.

pci    Es una lista de todos los dispositivos PCI encontrados durante la inicializacióndel núcleo y sus configuraciones respectivas.

scsi   Directorio   con   pseudoficheros   SCSI   de   nivel   medio   y   varios   directorios   dedrivers   SCSI   de   bajo   nivel,   que   contienen   un   fichero   para   cada   host   SCSIpresente en el sistema, cada uno de los cuales da el estado de alguna parte delsubsystema de E/S SCSI. Estos ficheros contienen estructuras ASCII y, por tanto,son legibles con cat.También se puede escribir en algunos de estos ficheros para reconfigurar elsubsistema o para activar y desactivar ciertas características.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  60

Page 61: Linux (Curso)

CURSOS LINUX

self   Este directorio hace referencia al proceso que está accediendo al sistema deficheros /proc y es idéntico al directorio de /proc cuyo nombre es el PID delmismo proceso.

stat   Estadísticas del núcleo/sistema.

cpu  3357 0 4313 1362393El   número   de   jiffies   (centésimas   de   segundo)   que   el   sistema   gastó   en   modousuario, modo usuario con baja prioridad (nice), modo supervisor y en la tarea'idle', respectivamente. El último valor debe ser 100 veces la segunda entradadel pseudofichero uptime.

disk 0 0 0 0Las cuatro entradas de disco no están implantadas en este momento.

page 5741 1808El número de páginas que el sistema cargó y el número de páginas que fuerondescargadas (desde disco).

swap 1 0El número de páginas de intercambio que han sido introducidas y sacadas.

intr 1462898El número de interrupciones recibidas desde el arranque del sistema.

ctxt 115315El número de cambios de contexto que el sistema ha sufrido.

btime 769041601Instante de arranque, en segundos desde el 1 de Enero de 1970

sysEste directorio (presente desde la versión 1.3.57) contiene varios ficheros ysubdirectorios   correspondientes   a   variables   del   núcleo.   Estas   variables   sepueden leer y algunas veces  modificar usando el sistema de ficheros  proc yusando la llamada al sistema sysctl(2).  Actualmente, existen los subdirectorioskernel, net, vm que contienen a su vez más ficheros y subdirectorios.

KernelEste contiene los ficheros domainname, file­max, file­nr, hostname, inode­max,inode­nr, osrelease, ostype, panic, real­root­dev,  securelevel, version, cuyafunción se deduce cláramente a partir del nombre.

El fichero (de sólo lectura) file­nr da el número de ficheros abiertos eneste momento.

El fichero file­max da el número máximo de ficheros abiertos que el kernel escapaz de manejar.  Si 1024 no es suficiente para usted, intente echo 4096 > /proc/sys/kernel/file­max

De igual forma, los ficheros inode­nr y inode­max indican el número actual ymáximo de nodos­i, respectivamente.

Los ficheros ostype, osrelease, version dan subcadenas de /proc/version.

El   fichero   panic   da   los   accesos   de   lectura/escritura   sobre   la   variable   delnúcleo panic_timeout.  Si esto es 0, el kernel entrará en un bucle infinito ante

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  61

Page 62: Linux (Curso)

CURSOS LINUX

una   situación   de   pánico;   si   no   es   cero,   indica   que   el   kernel   debeautoreinicializarse después de ese número de segundos.

El fichero securelevel parece bastante inútil por ahora ­ el superusuario esdemasiado poderoso.

uptime Este fichero contiene dos números: los segundos que el sistema lleva funcionandoy los segundos gastados en el proceso 'idle'.

versionEsta   cadena   identifica   la   versión   del   kernel   que   se   está   ejecutandoactualmente. Por ejemplo:

Linux version 1.0.9 (quinlan@phaze) #1 Sat May 14 01:51:54 EDT 1994

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  62

Page 63: Linux (Curso)

CURSOS LINUX

EL SHELL

wc (Word Count)Cuenta líneas, palabras y caracteres.

Palabra:  cualquier   cadena  de   caracteres   que  no   contenga   blanco  o   alguno   de  loscaracteres de tabulación o nueva línea.Puede contar más de un archivo e imprimir los totales.

wc [opciones] [archivo1, archivo2, ...]

Opciones:­l: Cuenta líneas únicamente.­c: Contar bytes

grepBusca en un archivo las líneas que se ajusten a un patrón.Puede buscar en varios archivos, en tal caso antepondrá el nombre del archivo dondeencuentra la línea en cuestión.En ciertas ocasiones el patrón debe estar encerrado entre comillas (')

grep [opciones] patrón archivo [archivo ...]

Opciones­v: Busca líneas que no contengan dicho patrón­H: Imprime el hombre del archivo con cada coincidencia­r: Busca recursivamente dentro  de todos los subdirectorios  del directorio

actual.

El patrón de búsqueda normalmente es una palabra o parte de una palabra.  También sepueden utilizar expresiones regulares, para realizar búsquedas más flexibles, porejemplo, si se quiere buscar la ocurrencia de todas las palabras que comiencen con“a” minúscula, la ejecución del comando sería algo así_

grep a* mi_archivo

sortOrdena alfabéticamente la entrada, línea por línea.El criterio de orden por defecto es alfabético, es decir, primero los blancos,

luego   letras   mayúsculas   y   por   último   letras   minúsculas.     Este   orden   presentaproblemas, por ejemplo cuando queremos ordenar números (el número 10 se va a colocarantes que el número 2)

si no se provee al menos un archivo, este comando toma los datos de su entradaestándar 

sort [opciones] archivo

Opciones:­c: Chequea si el/los archivos están ordenas, para no ordenar­d: Considera únicamente los caracteres alfanuméricos­r: Invierte el orden normal.­­n: Clasifica en orden numérico.­­f: Considera iguales las mayúsculas y minúsculas.­+n: Clasifica comenzando en el campo n+1­t SEP: Utiliza SEP como separador en lugar de un espacio en blanco.

tailDespliega las últimas líneas (por defecto 10) de un archivo.CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  63

Page 64: Linux (Curso)

CURSOS LINUX

tail [opciones] archivo

Opciones:­n: Lista los n últimos renglones.+n: Comienza a imprimir el archivo desde la línea n.

cmpCompara archivos. Muestra las líneas en las que difieren los archivos, pero no

aclaran cual es la diferencia, ni identifica las diferencias subsecuentes.Normalmente se ocupa cuando se desea estar seguro de que dos archivos tienen el

mismo contenido. Generalmente archivos binarios. Es más rápido y sencillo que diff.

cmp archivo1 archivo2

diffSimilar a cmp, solo que identifica las líneas donde encuentra diferencias.Generalmente se ocupa cuando se desean saber cuales son las diferencias entre losarchivos.

diff archivo1 archivo2

catConcatena archivos.  Toma los datos de su entrada estándar (stdin) y lo saca por susalida estándar (stdout).

cat [archivo1 archivo2 ...]

dateInforma la hora y fecha.

date

moreSu función es paginar texto en pantalla.Toma un archivo de su stdin o de un parámetro de línea y lo muestra en su stdout.

more [archivo]

Teclas:(space)   avanza una pantalla.b   retrocede una pantalla.q   salir.

lessSimilar a more, con más funciones.Muchas veces ocurre cuando se ejecuta algún comando, la salida del mismo es

demasiada información como para que se pueda leer en pantalla, entonces se puederedireccionar   esta   salida   a   less   para   permitirnos   lees   sin   mayores   problemas,pudiendo avanzar o retroceder en el texto con las fechas del cursor.  También sirvepara visualizar archivos del disco.

less [archivo]

Comandos:ENTER: Avanza una líneaBARRA ESPACIADORA: Avanza una pantallaG: Ir al final del texto

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  64

Page 65: Linux (Curso)

CURSOS LINUX

g: Ir al inicio del texto/: Busca una palabra, desde la posición actual hasta el final del archivo?: Busca una palabra, desde la posición actual al inicio del archivoq: Salir

headEscribe en su salida estándar la “cabecera” de un archivo

head [opciones] [archivos]Si no se especifica un archivo, este comando tomará los datos de su entrada estándar.

Opciones:­c N ­­> Escribe los primeros N bytes­n N ­­> Escribe las primeras N líneas, si no se especifica esta opción, head

imprime las primeras 10 líneas.

atPermite indicar al sistema que empiece a ejecutar un proceso a una determinada hora.

at hora<comando>

crtl­d

SHELL – La interfaz con el kernelPrograma que interpreta las peticiones del usuario para ejecutar programas.Es el programa más importante para la mayoría de los usuarios de UNIX.El objetivo si se sabe usar el shell es que se pueda hacer muchas cosas con poco

trabajo, y sin tener que programar en un lenguaje como C.Después de un acceso con éxito, el programa “login” inicializa el intérprete de

líneas de comando(shell), determinando mediante la entrada correspondiente al usuarioen   el   archivos   de   contraseña   (/etc/passwd).     Aunque   algunos   usuarios   tienenintérpretes de línea de comandos de propósito especial, la mayoría de ellos utilizael bash.

El   shell   escribe   en   la   pantalla   un   carácter   (o   una   cadena   de   caracteres)indicador llamado “prompt” para solicitar comandos, que por lo general terminan conun signo “$” o “%” en caso de se un usuario no privilegiado, y un signo “#” en casode ser el usuario root.  Este prompt puede ser modificado, cambiando la variable deentorno “PROMPT”.

El comando más simple que puede ejecutar el shell es una palabra aislada(Ej.:who).  Un comando generalmente termina con una nueva_línea (que se produce mediantela tecla ENTER) o con un (;).Ej:

who; date

Cuando el usuario escribe una línea, el shell extrae la primera palabra de ésta,supone que el nombre de un programa por ejecutar, busca este programa y, si loencuentra,   lo   ejecuta.     Los   programas   puede   tener   argumentos,   los   cuales   setransfieren como cadenas de caracteres.  El shell se suspende a sí mismo hasta que elprograma termina, en cuyo momento intenta leer el siguiente comando.

Por ejemplo, si un usuario escribe “cp /etc/passwd /home/pepe”, el shell suponeque “cp” es un programa, entonces lo busca y lo ejecuta, en caso de no encontrarloimprime un mensaje de error.

El shell proporciona:­Manejo de multitarea (no multitarea).­Redireccionamiento de E/S estándar y error estándar.­Expansión   de   nombre   de   archivos   o   expresiones   regulares   (uso   demetacaracteres).­Manejo de pipes (tuberías).

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  65

Page 66: Linux (Curso)

CURSOS LINUX

­Manejo de procesos en segundo plano.

Características:Esta continuamente ejecutándose  desde que comienza la sesión hasta que esta

finaliza y actúa como interfaz entre el sistema operativo y el usuario. Su función espermitir que un usuario obtenga el máximo rendimiento del sistema y aproveche toda supotencia, pero de una forma fácil y sencilla.

Permite la interactividad del usuario con el sistema operativo, de forma que elusuario teclea órdenes que el shell ejecuta. La órdenes pueden ser internas al shello programas externos (cd ­ interno y ls ­ externo). La razón para incluir algunoscomandos dentro del shell tiene que ver con la arquitectura de UNIX.

Existen distintos tipos de intérpretes que difieren de sus comandos adicionales.El shell también es un sencillo lenguaje de programación. Los programas hechos

con él se denominan guiones (scripts) que pueden ser una simple colección de comandoshasta complejos programas con instrucciones de control de flujo. Son utilizados paracrear nuevos comando combinando los ya existentes.

El shell es una unión entre el usuario y el núcleo del sistema, ofrece laposibilidad de controlar la ejecución de los programas y la comunicación entre ellos.Los intérpretes de comandos en UNIX tiene dos formas de actuar cuando ejecutan uncomando:

1­ Esperar que se termina la ejecución (foreground).  En un proceso foregroundexiste cierta iteración con el usuario.

2­   Volver   a   pedir   otro   comando   durante   la   misma   (background).     No   existeiteración con el usuario.  Se ejecutan pero nos devuelven el manejo del shell paracontinuar ejecutando comandos.

Existe por lo tanto un primer plano de ejecución donde el programa tiene toda laatención, y un segundo plano donde el programa se ejecuta en el fondo sin detener lasesión, lo que permite ejecutar más comando simultáneamente (multitarea).

También gestiona el flujo de datos de entrada y de salida de los programas, yofrece la posibilidad de cambiarlos y dirigirlos.

Una de las características más importantes del shell son el manejo de pipes otuberías, que permiten dirigir la salida de un programa a la entrada de otro mientrasse ejecutan.

Los pipes están implementados en el núcleo de Linux, el shell sólo brinda unaforma de utilizarlos.

Los shells de UNIX se pueden agrupar en dos familias:­Bourne Shell­C Shell

Bourne Shell:Orígenes en el primer shell de UNIX llamado sh escrito por Steven Bourne. Todos

los intérpretes basados en él tiene el sufijo sh para sugerir compatibilidad con eloriginal.

Los guiones poseen un lenguaje sencillo.  Cumple con el estándar POSIX.

C Shell:Escrito originalmente por Bill Joy en Berkeley. Su uso se centró en facilitar el

manejo del ordenador al usuario. Para ello se mejoró su interfaz y se amplió suinteractividad.

Las construcción de los scripts se basó en el lenguaje C, cuya sintaxis es máscompleja que los shell de la familia Bourne.Ej.: Tcsh

Korn ShellPertenece a la familia Bourne.Escrito por David Korn en Bell Labs (AT&T).

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  66

Page 67: Linux (Curso)

CURSOS LINUX

Incorpora dos cualidades importantes:­ Facilidad de interactuar con el usuario.­ Sencillo lenguaje de programación.

Además contiene expresiones aritméticas, nuevas variables, etc.Es tan potente que, muchas características estándar que debe cumplir un shell sebasaron en las suyas.Ej: pdksh o ksh

Modalidades de un shell:­ Interactiva­ No interactiva

En la primera el shell establece un diálogo con el usuario, mientras que en la últimase limita a seguir el hilo de ejecución de una lista de comandos interpretando cadauno de ellos.

Archivos de configuración:Sirven   para   crear  un   entorno   de  trabajo   y   personalizar  la   sesión   (variables  deentorno, alias, etc).

Se categorizan en:­no login(o de no presentación): Cada vez que se ejecuta el bash (incluso desde

el mismo interprete de comando), se leen estos archivos.  El caso más común es cuandode abre konsole, xterm, gnome­terminal o equivalente desde un manejador de ventanas

­login (o de presentación):  Se ejecuta sólo cuando el usuario comienza unsesión.

/etc/profile: Configurado por el superusuario y es ejecutado por todos los usuariosde Bash en el login del sistema.   El archivo /etc/csh.login es equivalente en losshell csh y tsch.

~/.bashrc: es un archivo de tipo no­login, es decir, se lee si BASH es ejecutadodesde otro intérprete, por ejemplo.Primero   se   carga   el   archivo   global   al   sistema   /etc/bashrc   el   cual   guarda   laconfiguración común para todos los usuarios, y luego se pasa al archivo .bashrc en eldirectorio personal del usuario.Es un archivo que probablemente llame a otros como ser .profile, y establezca lasvariables de entorno.

~/.bash_profile: Es un archivo del tipo login, por lo que se ejecuta una sola vez enuna sesión.   Permite personalizar el bash y/u obligan a los usuarios a ejecutarciertas tareas administrativas en cuanto ingresen al sistema.  Generalmente es leídoinmediatamente después de /etc/profile.

~/.bash_logout: Se lee al terminar la sesión (copias de seguridad, etc)

Entorno de trabajoConjunto de datos que especifican entre otras cosas, el tipo de terminal, path,directorio de correo, etc.Personalaliza la forma de trabajar y la comunicación con los programas.

Variables de entornoZonas de memoria a la que se le asigna un nombre y donde se guarda información.Similar a las variables en programación.Tienen   la   funcionalidad   de   configurar   ciertos   aspectos   del   entorno   del

intérprete de comandos y otros programas.  Estas variables se establece generalmente

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  67

Page 68: Linux (Curso)

CURSOS LINUX

cuando se abre una sesión y son configuradas por los scripts de inicio del intérpretede comando.

Cuando   decimos   que   se   establecen   cuando   se   abre   una   sesión,   no   estamosrestringiendo   a   estos   casos   únicamente,   ya   que   podemos   definir   una   variable   deentorno en cualquier momento en el que nos encontremos trabajando, ya sea medianteuna instrucción en la línea de comandos, dentro de un script, e inclusive dentro decualquier programa mediante una llamada al sistema.  Pero tenemos que tener en cuentaque   esta   variable   se   perderá   cuando   cerremos   la   sesión,   por   lo   que   convieneincorporarla en un script de inicio del shell, de tal manera que cada vez que se abrauna sesión se reestablezca la variable junto a su valor inicial.

HOMEIFS(caracteres que se pueden utilizar para separar las palabras dentro de la línea decomandos)MAILPATH(ruta   de   búsqueda,   especifica   los   directorios   donde   se   van   a   encontrar   losprogramas   ejecutables,   PATH=:/usr/bin:/bin   ­   PATH=   $PATH:/usr/games   ­   PATH=$HOME/bin:/usr/games)PS1(Prompt, prompt habitual es PS1=”\W#”)PS2(Prompt auxiliar, se utiliza cuando se ha pulsado <intro> sin termina la línea decomandos)TERM: Identifica el tipo de terminal.

Asignar valores:VARIABLE="valor"

Leer:Debemos anteponer el caracter ($) al nombre de la variable.

echo $TERMcp * $HOME

Para eliminar una variable se ocupa en comando unset, pasándole como parámetro elnombre de la variable.Ej.:

unset MI_VARIABLE (Elimina la variable con nombre MI_VARIABLE)

Tipos de entornos:­Entorno del shell.­Entorno de trabajo.

Cuando se declara una variable se realizan en el entorno del shell, el cual no esaccesible por el resto de los programas que se ejecutan.Si se desea que todos lo programas  tenga acceso a esas variables, es necesarioexportarlas.

exportExporta variables al entorno de trabajo.

export VARIABLE="valor"

printenvImprime las variables de entorno.

setImprime las variables del shell (intérprete de comandos).

AliasSon sobrenombres que se le dan a ciertos comandos, archivos, etc.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  68

Page 69: Linux (Curso)

CURSOS LINUX

Cuando el shell encuentra en la línea de comandos un alias, lo sustituye por suvalor, es decir, lo expande.

Es   muy   utilizado   para   ejecutar   comandos   siempre   con   las   misma   opciones,renombrar cosas o ignorar errores.Ej.:

alias rm="rm ­i"alias ls="ls ­­color"alias dir="ls"alias prog="juan jose tito"mail prog

Corrección automática mediante alias:alias sl="ls"alias unmount='echo "No existe el comando"'

ENTRADA / SALIDA   En Linux tanto el teclado, la pantalla como el resto de los dispositivos son

tratados como archivos, así los programas no tienen que preocuparse de distinguirentre un dispositivo u otro, y todos pueden ser tratados de la misma forma. Estoproporciona gran flexibilidad al sistema, ya que permite cambiar la salida del losprogramas y dirigirla de la pantalla a un archivo sin que haya diferencias.

Todos los programas tienen una estrada estándar (stdin), una salida estándar(stdout).  En algunos programas se distingue la salida de error (stderr).

RedireccionamientoEl shell ofrece las herramientas necesarias para poder redireccionar la entrada,

salida y error estándar de un programa.No todos los programas distinguen entre la salida estándar y el error estándar o

salida de error.Para   redireccionar   se   ocupa   ">"   seguido   del   nombre   del   archivo   al   queremos

enviar la salida. Lo primero que hace el shell es verificar si existe el archivo, sies así lo reemplaza por el contenido de la salida del programa, caso contrario locrea.

Redirección no destructiva ">>"

Salida de error:Es una segunda salida que se ocupa para notificar errores o avisos durante la

ejecución.   Con   esto   se   evita   mezclar   los   mensajes   de   control   con   los   queverdaderamente debe dar el programa.Ej.:

make >& errores

Pipes, la fontanería de UNIXEl shell permite crear tubos de datos que enlazan las salida y las entradas de

los programas.El shell ejecuta a la vez todos los programas y enlaza sus salidas y entradas.Los programas en una interconexión corren al mismo tiempo. Esto significa que

esos programas pueden ser interactivos; el núcleo se encarga de cualquier arreglo y/osincronización que sean necesarios.

Los programas individuales no se preocupan del redireccionamiento, es más nisiquiera se enteran. Por supuesto, los programas tienen que operar debidamente paraser combinados.

Existen comandos como date y who que no leen ninguna entradas y otros como cmp ydiff que poseen un número determinado de archivos de entrada.

La precedencia de | es mayor que (;).

MetacaracteresLos caracteres de acoplamiento no consideran los archivos ocultos, a menos que

se los designe explícitamente.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  69

Page 70: Linux (Curso)

CURSOS LINUX

Ej.:echo .*

Encerrando los metacaracteres entre comillas (') pierde su significado especial obien anteponiendo una barra invertida (\) antes de cada caracter.

ScriptsEl shell ofrece la posibilidad de trabajar en forma no interactiva, agrupando

secuencias de comandos en archivos denominados scripts o guiones.El propio shell se encarga de interpretarlos y ejecutarlos.Los guiones además de comandos poseen variables, instrucciones de control de

flujos, etc.Permiten automatizar trabajos o construir herramientas complejas a partir de

comandos simples.Muy utilizados para la configuración de programas, inclusive la inicialización

de Linux.

Estructura básica:#!Shell que debe ejecutarlo (permite ejecutar el script independiente del shellque se esté usando)#Descripción[VARIABLES][CODIGO]

Argumentos:Se manejan igual que las variables de entorno.$1 hace referencia a primer argumento$n hace referencia al n­ésimo argumento$* o $@ todos los argumentos$# a la cantidad de argumentos$0 al nombre del comando

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  70

Page 71: Linux (Curso)

CURSOS LINUX

PROGRAMACIÓN EN BOURNE SHELL

1. Concepto de script:

Es   un   fichero   de   texto   contiene   una   serie   de   instrucciones   que   se   puedenejecutar en la línea de órdenes, y que se ejecutarán secuencialmente. En ese sentidoson iguales que los ficheros en lotes(BATCH) de MS­DOS

 El único requisito es que ese fichero de texto tenga permiso de ejecución parala persona que intenta ejecutarlo. Alternativamente, puedes llamar al intérprete ydarle como parámetro el nombre del guión, pero es más cómodo dar permiso de ejecuciónal guión para ahorrarnos escribir el nombre del intérprete. 

Esas instrucciones se procesarán por orden, como si alguien las escribiera en elmismo orden en la línea de órdenes. Por ello, van una por línea , o separadas porcaracteres ``punto y coma'' (;) si están en la misma línea. Cuando se ejecuta unguión para el intérprete de órdenes, se intenta ejecutar como un binario normal, peroal darse cuenta el sistema operativo de que no es un binario válido, pero que es unarchivo de texto, ejecuta un intérprete hijo y empieza a interpretar el fichero detexto. Si fuera un archivo con un texto cualquiera, tarde o temprano (probablementeen la primera línea) habría un error de sintaxis y se abortaría la ejecución delprograma. 

Por lo general, en los guiones de los sistemas UNIX se suele incluir una líneaespecial, que empieza por  #!  (deben ser los dos primeros caracteres del fichero).Sirve para ejecutar un fichero con un intérprete determinado (no sólo intérpretes deórdenes como bash o el intérprete C, sino también como Perl, Tcl o Python). 

Todos los guiones deben empezar con una línea como: 

        #!/bin/bash

En general, debe empezar con los caracteres  #!, seguidos de la ruta completa alintérprete   que   desee   utilizar   para   ese   guión.   Si   no   utiliza   característicasespecíficas de bash, deberías poner #!/bin/sh. 

2. Variables

Como en los lenguajes de programación corrientes, en la programación en shellexisten las variables, que son nombres simbólicos para zonas de memoria que almacenandatos que nos interesan. Pero al contrario que los lenguajes de alto nivel normales,las variables de los guiones son  no tipadas (no tienen tipo), o quizás sería másapropiado decir que tienen un tipo único y permanente: a todos los efectos se tratancomo cadenas de caracteres. 

Para poder hacer sumas y restas hay una orden especial, la orden  expr. Estaorden tiene que recibir cada número u operando como un parámetro independiente, asíque devolverá un error si se intenta hacer algo como expr 5+7. 

2.1 Referenciar variables 

Las variables de los guiones no se declaran, y siempre están inicializadas conuna cadena vacía o nula. Note que esto no es lo mismo que contener un espacio. Unacadena vacía o nula es una cadena que no contiene ningún caracter. 

Hay que tener cuidado al asignar valores a las variables, ya que no se debedejar ningún espacio entre el signo de asignación (el `=') y la variable o el valorasignado (algo que, por otra parte, es una muy buena costumbre cuando da igual). 

Para referirse a las variables, hay que utilizar el signo ($) antes del nombrede ésta, siempre que nos refiramos a ellas para consultar su valor (si asignamos unvalor a la variable, o utilizamos la orden read, que escribe en ella, NO hay queponer el signo peso). Si nos olvidamos del signo dólar, y hacemos algo parecido a: CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  71

Page 72: Linux (Curso)

CURSOS LINUX

        y=hola

        x=y

Nos  encontraremos   con  la  desagradable  sorpresa  de  que  el  valor  de x  es  elcarácter  y, y no los caracteres  hola, como quizás pretendiéramos. Para hacer laasignación correctamente, tendríamos que haber escrito: 

        y=hola

        x=$y

Como en todas o al menos la mayoría de las cosas en UNIX, los nombres son casesensitive, es decir, que no es lo mismo “y” que “Y”.

2.2 ¿Cómo funciona el analizador del intérprete? 

Es   útil   saber   el   funcionamiento   del   analizador   sintáctico   (parser)   delintérprete de órdenes a la hora de programar. Al fin y al cabo, significa saber cómova a interpretar nuestras órdenes. 

Como la mayoría de los analizadores  de los lenguajes interpretados, primerorealiza algunas sustituciones, al leer la orden, y luego ejecuta la orden que lequeda después de las sustituciones. 

Las sustituciones hechas por el intérprete de órdenes de UNIX son sustitucionesde comillas y sustituciones de variables (lo que vea con un signo peso que no esté enuna   secuencia   de   escape).   Según   el   intérprete   en   particular,   hará   algunassustituciones más, como sustituciones del caracter ~ (que indica el directorio homedel usuario), los caracteres {}, los caracteres [], etc. 

Las sustituciones de variables son lo que más nos interesa. Cuando el analizadorse encuentra un signo $, que no tenga antes una barra invertida (\), lo interpretacomo una variable. Lo que hace, entonces, es avanzar hasta que tiene el nombrecompleto de la variable, y cuando lo tiene, sustituye el signo “$” y el nombre por elvalor de la variable. Si no existe ninguna variable que tenga ese nombre, no es unerror. Simplemente lo sustituye por nada. Este comportamiento puede acarrear algunosfallos difíciles de descubrir. Por ejemplo, al procesar la línea 

        mensaje="$foo y alguna otra cosa"

El analizador detecta el signo  $, que indica variable, avanza hasta que tienecompleto el nombre de la variable (el nombre es, por supuesto foo), y sustituye lacadena $foo por el contenido de la variable en cuestión. Es importante tener esto encuenta, porque si quisiésemos poner bar después del contenido de la variable $foo, nopodríamos escribir $foobar, porque el analizador creería que estaríamos consultandola variable foobar. Lo que tenemos que hacer es “delimitar” el nombre de la variablecon llaves, quedando ${foo}bar. 

2.3 Comandos echo y read 

Dos órdenes bastante útiles para probar algunas cuestiones con variables sonecho y read. La primera sirve para mostrar texto por pantalla, y la segunda, como sunombre   indica,   es   para   leer   del   teclado   y   poner   el   resultado   en   una   o   variasvariables. El funcionamiento de read es el siguiente: lee del teclado una cadena, yva asignando las palabras en orden a cada una de las variables que se le pasen comoparámetros, asignando el resto de la cadena a la última variable. Es decir, que si sele pasan tres variables como parámetro, se asigna la primera palabra a la primeravariable, la segunda a la segunda variable, y el resto de la cadena ingresada a latercera variable. Por ejemplo: 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  72

Page 73: Linux (Curso)

CURSOS LINUX

        $ read foo bar

        Escribo demasiadas palabras

        $ echo $foo

        Escribo

        $ echo $bar

        demasiadas palabras

2.4 Parámetros 

Los parámetros son variables normales, que tienen los nombres  $1,  $2  ...  $9.Aunque puede tener nueve parámetros un script, sólo se puede acceder de forma directaa los nueve primeros. La orden shift permite desplazar los parámetros de sitio, detal forma que sean accesibles los que estén más allá del noveno, con el inconvenientede no poder acceder a los primeros. En realidad, en el Korn shell (y en  bash) sepuede acceder al resto de los parámetros directamente con la construcción ${número}.El funcionamiento de shift es el siguiente: 

Supongamos que tenemos como parámetros  $1=­o,  $2=foo  y  bar, supongamos que elnombre del guión es compilar,: 

        

compilar ­o foo bar

Lo que queremos es quitar las opciones, después de haberlas procesado, de talforma que el tercer parámetro (bar) encabece la lista. Para ellos debemos llamar dosveces a shift, o llamar a shift con el parámetro 2 y el resultado por pantalla seríabar. 

         shift 2

        echo $1

Las   variables  $#,  $*,  $0  nos   permiten   saber   el   número   de   parámetrospasados al script, la cadena entera de todos los parámetros pasados, y elnombre del programa que se ha llamado. Esto último puede parecer poco util,pero en UNIX pueden hacerse enlaces a ficheros. Si se utiliza Linux, cuando sellama   al   editor  vi  en   realidad   se   está   ejecutando   el   fichero  vim.     Esosignifica que el fichero vi no es un ejecutable, sino un enlace que apunta alfichero vim del mismo directorio. Así, por ejemplo, hay un caso parecido conawk, que apunta a gawk. Cuando se llama a cualquiera de los dos programas sinparámetros, nos da la ayuda, diciéndote cada uno de ellos que se llama con elnombre con el que se les haya  invocado (con esto no se quiere decir queawk/gawk sea un guión, por supuesto, pero los lenguajes de alto nivel tienenuna opción similar). 

2.5 Retorno de valores 

Los valores devueltos por los programas, por convenio, son 0 si el programa seha ejecutado sin errores (cero porque es el código de error), y un número distinto decero, normalmente 1 o ­1 para indicar algún tipo de error. Es de notar que cuando seejecuta un  pipe, el valor devuelto será el del programa que se ejecutó en últimolugar. 

Esto   sirve   para   dos   cosas:   primero,   para   saber   por   qué   preguntar   cuandoverifiquemos el valor devuelto por un programa. Y segundo, para devolver los valoresestablecidos   por   convenio   cuando   se   terminen   los   programas   (ya   sea   hechos   conlenguajes de alto nivel o scrits). 

La forma de devolver valores al salir del programa es mediante la orden exit. Sise ejecuta sin parámetros, devolverá un cero. 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  73

Page 74: Linux (Curso)

CURSOS LINUX

2.6 Asignación de caracteres especiales 

Por último, un apunte sobre asignar caracteres especiales para el intérprete avariables: cuando asignamos algo a una variable, se asigna tal cual lo vemos en lapantalla (cuando son caracteres  especiales),  y la sustitución se hace cuando seutilice en alguna expresión. 

Ejemplo:

         cd /

       asterisco=*.txt

       cd /home/zoso/cambio

       ls $asterisco

Si ejecutamos el siguiente código, la salida de éste será la lista de ficherosque concuerdan con la expresión regular almacenada en la variable asterisco, pero losque se encuentren en el directorio /home/zoso/cambio, no los que se encuentren en eldirectorio raíz. 

3. Comillas

En los lenguajes de alto nivel normalmente las comillas sólo se utilizan paralas cadenas de caracteres, y no necesitan un aprendizaje especial para usarlas:simplemente   saber   (en  el   lenguaje   C,  por   ejemplo)   que  las   comillas   simples  soncaracteres y que las comillas dobles requieren reservar memoria, porque son cadenas,o sea, punteros a caracteres. 

3.1 Tres tipos de comillas 

En  la  programación  en  shell en  UNIX  hay  tres  tipos  de comillas  útiles:  Lacomilla simple ('), la comilla doble (") y la comilla invertida (`). Cada una tieneun propósito diferente.

La comilla simple (') sirve para los literales. Es importante darse cuenta deque algo encerrado entre comillas simples siempre es un solo parámetro, aunque seauna cadena vacía (''). 

La comilla doble sirve para sustituir lo que hay dentro (valores de variables,caracteres especiales), pero después de sustituir queremos tratarlo como si estuvieraencerrado entre comillas simples. Esto es útil cuando, por ejemplo, se tiene que darun parámetro a un programa, pero ese parámetro es leído del teclado y no sabemos sila cadena es vacía. Si existe la necesidad de  asegurarnos de que se trata como unparámetro, se debe encerrarlo entre comillas simples (recuerde que '' sigue siendo unparámetro,   aunque   vacío),   pero   si   lo   se   encierra   entre   comillas   simples   no   sesustituirá la variable. La forma de hacerlo es encerrando la variable entre comillasdobles. 

Veamos esto en el siguiente ejemplo: 

        x=100

        y='500$x'

        echo $y         # Esto enseñará `500$x' en pantalla

        y="500$x"

        echo $y         # Esto enseñará `500100' en pantalla

Las que quedan son las comillas invertidas (`). Estas se utilizan con órdenes, yse sustituyen por la salida del programa que está entre las comillas invertidas. Porejemplo,   si   queremos   almacenar   en   una   variable   el   número   de   usuarios   que   hayactualmente en el sistema, podemos hacer 

        usuarios=`who | wc ­l`

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  74

Page 75: Linux (Curso)

CURSOS LINUX

Por si queda alguna duda, who dice los usuario que hay en el sistema, poniendouno en cada línea, y wc ­l cuenta las líneas que tiene el texto que le entre por laentrada estándar, sacando el número resultante a la salida. 

3.2 Separadores de parámetros 

Hay otras razones para desear poner parámetros encerrados entre comillas simpleso dobles: si queremos el literal exacto del contenido de una variable. 

Si una variable (por ejemplo, porque se le ha asignado la salida estándar de unprograma) contiene saltos de línea, y no se colocan comillas, entonces el intérpretelo entenderá como que esos saltos de línea son separadores de parámetros, por ejemploel comando “echo” los separará con un espacio. Se tiene un problema parecido si secolocan más de un espacio para separar los parámetros: 

        x='10     y 5 espacios'

        echo $x         # Saldrá en pantalla '10 y 5 espacios'

        echo `$x'       # Saldrá en pantalla `$x'

        echo "$x"       # Saldrá en pantalla '10     y 5 espacios'

¿Queda claro? Pues eso. 

4. Condiciones

Manejar condiciones es importante en todos los lenguajes de programación: sirvenpara controlar el flujo del programa, y eso lo es prácticamente todo. 

En UNIX, al contrario de lo que podría parecer, el valor entero que representaal valor verdadero booleano es el 0, y el valor entero que representa al falso es el1.   Esto   es   así   por   el   convenio   antes   citado   de   los   valores   devueltos   por   losprogramas en UNIX. 

4.1 La orden    test      

Para ello, en UNIX existe la orden test. Tiene una sintaxis alternativa, que escon mucho la más usada (es más clara), que es con corchetes ([]). Es importante darsecuenta de que la segunda sintaxis es también un programa (que se llama  [, aunquesuene raro, y que exige, supongo, que al final de la condición se ponga un ], más porestética que por otra cosa), así que necesita que lo que se coloque entre loscorchetes esté separado por al menos un espacio (incluido el último corchete). 

La   orden  test  (con   cualquiera   de   las   dos   sintaxis)   acepta   dos   tipos   deoperadores: los unarios (que sólo tienen un parámetro) y los binarios (que necesitandos   parámetros).   Si  al   principio   de  una   condición   ponemos  un   “!”,   separado  porespacios de lo demás, como siempre, negaremos la condición que estemos colocando enel test. 

4.2 Operadores para el manejo de ficheros

Todos los operadores para el manejo de ficheros en la programación en shell sonunarios.  Cuando se utilizan los operadores unarios con la orden test, la sintaxis esla siguiente: test operador fichero. Los operadores de ficheros que acepta la ordentest son los siguientes: 

OPERADOR SIGNIFICADO­f Si fichero es un fichero ordinario

­d Si fichero es un directorio

­r Si el proceso tiene permiso de lectura sobre fichero

­w Si el proceso tiene permiso de escritura sobre fichero

­x Si el proceso tiene permiso de ejecución sobre fichero

­s Si fichero tiene una longitud mayor que cero

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  75

Page 76: Linux (Curso)

CURSOS LINUX

    4.3 Operadores para el manejo de cadenas de caracteres

Los operadores para el manejo de cadenas en la programación en shell son dosbinarios, y la dos unarios (en realidad dan las condiciones contrarias). La sintaxisde  test  con operadores binarios, como era de esperar, es  test  operando1 operadoroperando2. La tabla de operadores de manejo de cadenas es la siguiente: 

OPERADOR SIGNIFICADO= (binario) Si operando1 es igual a operando2

!= (binario) Si operando1 es distinto de operando2

­z (unario) Si operando es una cadena nula

­n (unario) Si operando es una cadena no nula

         

4.4 Operadores para el manejo de números

Se ha dicho que no existen los tipos en las variables del intérprete, pero aúnasí es posible que una cadena “1” o “20” sea tratada como un número, así que todavíason necesarios los operadores para el manejo de números. Los operadores de manejo denúmeros son siempre binarios, y son los siguientes:

 

OPERADOR SIGNIFICADO­eq operando1 y operando2 son iguales

­ne operando1 y operando2 son distintos

­gt operando1 es mayor que operando2

­ge operando1 es mayor o igual que operando2

­lt operando1 es menor que operando2

­le operando1 es menor o igual que operando2

4.5 Expresiones complejas

Algunas veces se ha de necesitar evaluar expresiones complejas en un script,como condiciones dobles (con AND u OR), e incluso condiciones triples. 

Este es un tema delicado en la programación de shell: la forma de hacerlo es conlos operadores  ­a  y  ­o  (and  y  or  respectivamente), con lo que una expresión doblepuede quedar como: 

        [ ­w /home/zoso/.profile ­a ­n $MAIL ]

Esto   comprueba   si   el   proceso   tiene   permiso   de   escritura   sobre   el   fichero  /home/zoso/.profile y si la variable $MAIL tiene algún contenido. 

Pues todavía no ha llegado lo peor: Si quisiésemos realizar condiciones dobles, yponer paréntesis, hay un problema añadido, y es que los paréntesis son caracteresespeciales para el intérprete. Entonces, para que no los reconozca como paréntesis,como texto, hay que escribirlos como \( y \) (sí, utilizando el símbolo \ como en C yen otros lenguajes de programación relacionados con el UNIX). Así, una condicióndoble quedaría en el lenguaje del intérprete así que ilegible: 

        [ ­d ~/Mail ­o \( ­f ~/mail ­a $cont ­ne 0 \) ]

Este ejemplo comprueba si existe el directorio  ~/Mail  o si existe el fichero  ­f~/mail y además la variable $cont, interpretada como un número, es distinta de 0. Esimportante acordarse de escribir espacios entre los paréntesis, todos los operadoresy los corchetes, porque al fin y al cabo van a ser interpretados por un programa queespera que se presenten todos como parámetros diferentes. CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  76

Page 77: Linux (Curso)

CURSOS LINUX

5. Control del flujo del programa

Las   estructuras   de   control   de   flujo   del   programa   que   se   tienen   disponiblescuando se programa en shell son el if, case, while, for y until. Además de algunasórdenes especiales y algunas construcciones un poco más raras, que sirven tambiénpara controlar el curso de los acontecimientos. 

5.1 Estructura    if     

La estructura  if  tiene una sintaxis algo inusual, porque necesita la palabrathen, pero en la línea siguiente a donde está if y la condición. Es un if bastanteversátil, ya que permite cláusulas elif (else if) y else. La palabra para indicar elfin de la estructura if es la palabra fi (if al revés). 

La cláusula elif, por si no lo sabes, es parecida al else, aunque necesita unacondición   después.   Para   comprender   mejor   el   funcionamiento,   veamos   la   siguienteequivalencia: 

        if [ condicion ]                        if [ condicion ]

        then                                    then

                ...                                     ...

        else                                    elif [ condicion2 ]

                if [ condicion2 ]               then

                then                                    ...

                        ...                     fi

                fi

        fi

Algunas personas, para hacer la sintaxis más clara, o al menos más parecida a otroslenguajes, como Pascal, escriben el if de la siguiente forma: 

        if [ condicion ]; then

        fi

Para decidir qué ejecutar, la estructura if permite, además de una condición, elnombre de un programa. Lo que se hará entonces es ejecutar el programa con losparámetros dados, y dar como verdadero (y ejecutar lo que haya entre el if y el fi,elif o else) que el programa devuelva un cero. 

En estos casos es muy útil la instrucción nula (:), ya que si lo que queremos esejecutar un código si el programa va mal, entonces la única forma de hacerlo es lasiguiente: 

        if orden

        then

                :

                # No hacemos nada

        else

                codigo

                ...

        fi

Como ejemplo tomaremos unas líneas que están en mi fichero ~/.bashrc: 

if set | grep DISPLAY &>/dev/null; then

        alias vi="vi ­g"

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  77

Page 78: Linux (Curso)

CURSOS LINUX

fi

Esto ejecuta la orden  set, que da las variables de entorno. Las filtra paraquedarnos sólo con la que contenga la variable  $DISPLAY  (si es que está), y mandatoda la salida a un agujero negro (/dev/null). Esto se hace para comprobar el códigode salida del grep, que devolverá verdadero si deja “salir” alguna línea. Es decir:si está definida la variable $DISPLAY, se ejecuta “alias” (en realidad, se ejecuta siexiste la variable  $DISPLAY  o si alguna variable tiene como contenido algo con lacadena  DISPLAY,   lo  cual   es   bastante  improbable).   Si  grep  devuelve   falso,   no  seejecuta nada. 

5.2 Condiciones particulares 

Hay dos condiciones que son relativamente comunes, que son ejecutar un código sialgo inmediatamente anterior ha ido bien, o justo lo contrario, ejecutarlo sólo si loanterior ha ido mal. 

Por ello, hay dos “estructuras” que nos permiten manejar estas situaciones deuna forma más cómoda.  Estas estructuras son && y ||.   Para las personas que hayanprogramado en C, les resultarán familiares.   El  &&  es el equivalente a la palabrareservada de Pascal AND y || es el equivalente del OR en Pascal. 

La forma de entender qué produce cada estructura, es pensar que el intérpretesólo va a ejecutar lo estrictamente necesario para saber cómo termina la condición.Sabemos   que  false   &&  cualquiercosa  da   falso,   y   que  true   ||  cualquiercosa  daverdadero,   así   que   eso   es   lo   que   va   a   hacer   el   intérprete:   si   utilizamos   laestructura &&, ejecutará la primera instrucción, y sólo si va bien (si devuelve uncero)   ejecutará   la   segunda,   y   análogamente   con   la   estructura  ||,   el   intérpreteejecutará la primera instrucción, y sólo ejecutará la segunda si la primera ha idomal, es decir, si el valor de la condición total depende de lo que pase al ejecutarla segunda instrucción. 

La forma de acordarse es pensarlo como en lenguaje natural: “Hazlo y te odiarépara   siempre”.   O   sea,   que   si   la   primera   instrucción   se   ejecuta(...satisfactoriamente; esto es, devolviendo un 0), pasará la segunda. Análogamente,“Hazlo  o  te   odiaré   para   siempre”.   O   sea,   si   la   primera  no  se   ejecuta(satisfactoriamente), se ejecutará la segunda. Pero dejémosnos de amenazas ;­). 

La estructura && puede utilizarse cuando ejecutemos una instrucción cuyo trabajodepende de que la primera haya ido bien, y la || puede ejecutarse para dar mensajesde error: 

        cd foo || echo "¡No puedo entrar en 'foo'!"

5.3 Estructura    case      

La estructura case del Bourne Shell y compatibles es una estructura parecida ala   de   Pascal:   cuando   entra   en   la   estructura,   sale   cuando   empiece   la   siguienteetiqueta (no así en C, en el que las etiquetas del case actúan como etiquetas de unJMP en ensamblador: una vez que entran en una etiqueta, no salen del case hasta queéste acaba completamente). 

Las etiquetas pueden ser cualquier “expresión regular” (expresión con comodinestípica de los intérpretes de órdenes; no las expresiones regulares del vi, grep, perly otros) válida, con lo que se puede poner un * como última etiqueta case para actuarcomo else. Para indicar que termina el código de una etiqueta determinada, hay queponer al final de la última orden dos signos de punto y coma seguidos. 

La estructura general es: 

        case valor

        in

                expreg1)

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  78

Page 79: Linux (Curso)

CURSOS LINUX

                        ...

                        ultimaorden1;;

                expreg2)

                        ...

                        ultimaorden2;;

                ...

                expregn)

                        ...

                        ultimaordenn;;

        esac

Por ejemplo, si queremos comprobar una respuesta es sí o no, podemos hacer: 

        case $resp; in

                s*)

                        echo "Has contestado sí (o algo parecido)"

                n*)

                        echo "Has contestado no (o algo parecido)"

                *)

                        echo "Has contestado alguna otra cosa"

        esac

5.4 Estructura    while      

La estructura básica para construir bucles. 

La sintaxis es: 

        while orden

        do

                ...

        done

En orden puede colocarse un comando cualquiera (el bucle se ejecutaría mientrasla orden devolviera un cero), o bien una condición, usando el comando test (o mejor,con la sintaxis alternativa []).

Si se quiere estar seguros de que la contestación a la pregunta del ejemploanterior era s o n, podríamos haber hecho lo siguiente: 

        while [ $resp != "s" ­a $resp != "n" ]; do

                read resp

        done

Y justo debajo colocaríamos la estructura case anterior, para comprobar cuál fuefinalmente la respuesta. 

5.5 Estructura    for      

Es otra de las estructuras importantes en los lenguajes de programación. Es másversátil que el equivalente de Pascal, pero menos que el equivalente de C (como eralógico, por otra parte). 

Es una estructura que permite dos sintaxis: La primera, la del for más o menostradicional (en los lenguajes interpretados), es decir, dar el nombre de una variabley los valores por los que tiene que “tomar”, es la siguiente:

        for var in expreg1 expreg2 ...  expregn

        do

                ...

        done

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  79

Page 80: Linux (Curso)

CURSOS LINUX

Hay una pequeña diferencia respecto a los bucles normales for, y ésta es que losvalores   por   los   que  pasa  la   variable  var  tenemos   que   especificarlos   uno   a   uno(mediante   expresiones   regulares).   Las   expresiones   regulares   se   intentarán   hacercoincidir con los nombres de los ficheros del directorio actual. 

Por ejemplo, si quisiéramos tomar todos los ficheros normales y hacerles unasustitución con el  sed, por ejemplo, una opción sería utilizar un bucle  for. Porejemplo: 

        for fichero in *.txt; do

                sed 's/^M//' $fichero >TEMPORAL

                mv TEMPORAL $fichero

        done

En este bucle, sed sustituye los caracteres de retorno de carro por nada, o sea,los borra. Esto convierte los ficheros de texto de MS­DOS a UNIX. Pero sed envía elresultado a la salida estándar, así que hay que dirigirlo a otro fichero. Una vez quese   tiene   el   resultado   en   el   fichero  TEMPORAL,   simplemente   se   mueve   al   ficherooriginal, sobreescribiendo el fichero antiguo y poniendo la versión nueva, sin loscaracteres de retorno de carro. 

La segunda sintaxis que permite el bucle for es una sintaxis sin lista. Si seutiliza esta sintaxis, el intérprete lo entenderá como que la lista que se quiere esla de todos los parámetros dados al guión desde la línea de órdenes (u otro guión oprograma).

La sintaxis es: 

        for variable

        do

                ...

        done

5.6 Estructura    until      

Esta estructura es parecida a la  while, aunque en esta el bucle se ejecutamientras la condición a comprobar sea falsa, y termina cuando es verdadera. Tiene unautilidad diferente que en los lenguajes de programación. Normalmente se utiliza enlos lenguajes de alto nivel para forzar la ejecución del bucle al menos una vez,aunque la condición sea desde el principio verdadera. No se puede utilizar de esamanera   en   la   programación   en   shell,   porque   la   sintaxis   tiene   la   condición   alprincipio. 

Su uso es sólo para mejorar la legibilidad, porque se puede negar incluso lasalida   de   los  programas   que   llamemos,  anteponiendo   a   la  llamada   al   programa  elcaracter de negación !. 

La sintaxis es como sigue: 

        until orden

        do

                ...

        done

5.7 Ruptura del flujo de ejecución de los bucles 

Algunas veces se necesita romper la ejecución normal de los bucles. Quizás parasaltearse lo que queda de iteración, o quizás se necesite en un momento dado salirdel bucle. 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  80

Page 81: Linux (Curso)

CURSOS LINUX

Las dos órdenes utilizadas en la programación en shell para hacer estas cosasson las dos mismas que se utilizan en lenguaje C, y se utilizan de la misma manera:break y continue. 

La primera sirve para salir del bucle y seguir la ejecución del programa, y lasegunda sirve para saltearse lo que queda de iteración y empezar la siguiente. 

6. Miscelánea6.1 Variables útiles de entorno 

En los programas muchas veces es útil consultar las variables de entorno. Porejemplo, el usuario puede tener definido su editor preferido en la variable $EDITOR.Así, si necesita editar un texto, puede llamar al editor que ponga la  variable$EDITOR

Algunas variables útiles de entorno son: 

OPERADOR SIGNIFICADOPS1 Aspecto del prompt principal

PS2 Aspecto del prompt secundario

PWD Directorio actual

HOME Directorio home del usuario que ejecuta el proceso

USER Login del usuario que ejecuta el proceso

$ PID del proceso

PAHT Ruta de búsqueda del usuario actual

El prompt secundario aparece cuando se escriben comillas (de cualquier tipo) enla línea de órdenes, y se pulsa ENTER antes de terminar de escribir el texto (esdecir, si se abre una comillas pero no la cierra), el intérprete enseñará un promptsecundario   en   la   siguiente   línea,   y   seguirá   colocándolo   hasta   que   cierren   lascomillas. 

Algo a tener en cuenta cuando se esté programando con variables de entorno, esque estas variables no se pueden modificar. Se pueden asignar valores y cambiarlas,pero sólo en nuestro programa. Hay que tener en cuenta que $PWD, que es la variableque controla el directorio actual, no tiene nada que ver con el núcleo del sistemaoperativo, es un problema exclusivo del intérprete, que es al fin y al cabo lainterfaz para que el usuario se comunique con el sistema operativo. Así, si seescribe un script que cambie el directorio actual, aunque sea mediante la orden cd,al salir del script, intérprete ni se habrá enterado. 

6.2 Ejecución en el mismo intérprete (shell) 

La razón por la que no se pueden modifica las variables globales (variables deentorno) del usuario es que los  scripts se ejecutan en otro intérprete diferente alactual, y entonces las variables de entorno simplemente se copian. Para actualizarlasestas se deben  exportar. Todas las variables normales ya están exportadas en elfichero de configuración (ya sea en el general o en el de cada usuario), pero quizásalgunas   variables   que   haya   creado   necesiten   también   ser   exportadas,   para   quecualquier otro programa pueda acceder a ellas.

La   manera   de   forzar   esto   es   con   el   comando   “export”.   La   sintaxis   es,simplemente, “export variable”. Por ejemplo, “export EDITOR”. 

Para ejecutar programas en el intérprete actual se debe colocar un punto (.)antes del nombre del programa. Esto nos permite entre otras cosas modificar variablesde entorno. Por ejemplo, “.inicialización”. 

6.3 Referenciar variables 

Cuando se trató la forma de referirse a los parámetros, salió el delicado temade que sólo nos podemos referir a los parámetros que estén en las primeras nueve

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  81

Page 82: Linux (Curso)

CURSOS LINUX

posiciones. Esto es así en el Bourne Shell, y se debe actuar así si se quiere hacerun guión estándar que se ejecute en cualquier sitio. Pero en el Korn Shell se puedenescribir los nombres de variables con esta sintaxis:  ${variable}. El Bourne Shellacepta esta construcción cuando son variables normales, pero no cuando lo utilizamospara indicar parámetros. 

Así, el Korn Shell y compatibles, podríamos referirnos al parámetro 15 con laexpresión  ${15}.   En   cualquier   intérprete   compatible   con   el   Bourne,   si   se   deseaescribir caracteres justo después del contenido de una variable, se debería escribir:

        ${foo}bar

Porque si colocásemos

        $foobar

El intérprete creería que nos referimos a una variable no declarada llamadafoobar, con lo que esa expresión sería una cadena vacía. 

6.4 La orden    eval      

Este comando no tiene una función muy destacada, es más, hace nada, simplemente,al ser un comando (como parámetros tenemos que poner otra orden), fuerza que elintérprete   que   pase  dos  veces   por   el   mismo   sitio,   y   que   evalúe   dos   veces   laexpresión. Así, si quisiéramos que el usuario introdujera por teclado el nombre deuna variable a modificar, podríamos resolver el problema así: 

        read nombre

        eval $nombre=10

La primera vez que el intérprete lo mirara, la expresión de eval quedaría como `[contenido de la variable $variable]=10'. La segunda vez, ejecutaría la orden, comoquedara, con lo que conseguiríamos asignar 10 a una variable cuyo nombre ha sidoelegido por el usuario. 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  82

Page 83: Linux (Curso)

CURSOS LINUX

ADMINISTRACIÓN

ksysvEditor gráfico de inicio.

lastMuestra una lista de los últimos logeos de los usuarios.

last busca información en el archivo /etc/log/wtmp y muestra la información de losusuarios logueado desde que este archivo a sido creado.last también muestra información sobre el pseudo­usuario reboot.

El archivo wtmp puede ser creado con touch.

timeEl comando time, precediendo a cualquier otro comando, suministra información

acerca del tiempo total empleado en la ejecución, del tiempo de CPU utilizado por elprograma del usuario, y del tiempo de CPU consumido en utilizar recursos del sistema.

time <programa>

Por ejemplo para saber el tiempo utilizado en la compilación y montaje del programaprueba.c utilizaríamos el comando, 

time gcc prueba.c

unameImprime información del sistema.

uname [opciones]

Opciones:­a: Imprime toda la información disponible.­m: Imprime el tipo de Hw.­n: Imprime el nombre de la máquina.­r: Imprime la versión del kernel.­p: Imprime el tipo de procesador.­v: Imprime la fecha de compilación del kernel.­s: Imprime el nombre del sistema operativo.

Teclado EspañolNormalmente, las distribuciones lo configuran automáticamente, pero existen ocasionesen que lo omiten.

Para configurarlo se debe escribir  /usr/bin/loadkeys /usr/lib/kdb/keytables/es.map

Ahora   el   teclado   es   español.   Tenga   cuidado   que   esto   es   temporal,   es   decir   alreiniciar el equipo desaparecen los cambios. 

LILO(   LInux LOader)   :Permite arrancar varios SO proporcionando a cada sistema su propia partición.

Bajo PC, la partición de arranque debe existir debajo de los 1024 cilindros. Tambiénpermite elegir varias configuraciones de kernel.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  83

Page 84: Linux (Curso)

CURSOS LINUX

Archivo   de   configuración:   /etc/lilo.conf.   Cuando   se   ejecuta   el   programa   /sbin/lilo, toma esta información de partición y rescribe el MBR.

lilo.confboot=/dev/hdaprompttimeout=50

image=/boot/vmlinuz­2.2.5.15label= linuxroot=/dev/hda2read­only

other=/dev/hada1label=dostable=/dev/hda

Opciones globales:boot: Lugar donde se encuentra el sector de arranque (MBR)prompt: Fuerza a LILO a visualizar el símbolo del sistema y esperar la respuesta delos usuarios.timeout: Especifica el Nro. de décimas de segundo LILO antes de arrancar por defecto.default=nombre: Especifica el SO que se arranca por defecto

Opciones de bloques:Se aplican sólo a los boques específicos que se designan SO arrancarles.

image=nombre_imagen: Kernel que se desea arrancar.other=nombre_imagen: Otros SO para arrancar.label=nombre: Nombre identificador del bloque.password=contraseñaread­only: Monta el sistema  de archivos raíz con permisos de sólo lecturacuando arranca el kernel.  Es necesario para comprobar el FS raíz durante elarranque.

table=disp_table: identifica donde se encuentra la tabla de información del SO.restricted

Opciones del comando:­t: Prueba la configuración sin cargarla, generalmente se usa con ­v.­C   archivo_config:   Por   defecto   LILO   busca   el   archivo   de   configuración   /etc/lilo.conf.  Puede especificar un archivo alternativo con esta opción.­r   directorio_raíz:   Informa   a   LILO   que   ejecute   un   chroot,   cambiando   eldirectorio raíz a directorio_raíz.Generalmente se ocupar esta opción cuando se arranca desde un disquete parareparar un sistema averiado.­v visualiza los mensajes que emite LILO.

El gestor de arranque GRUB:

1.1 Que es GRUB El  gestor  de  arranque  es el  primer  programa  que  se  ejecuta al  arrancar  un

ordenador. El tiene la tarea de cargar y de transferir el control al  núcleo  delsistema operativo (como por ejemplo el núcleo de Linux o de GNU Hurd). 

GNU GRUB es un gestor de arranque muy potente, capaz de arrancar un amplioabanico de sistemas operativos libres, así como sistemas operativos propietarios através del arranque en cadena. 

Una   de   las   facetas   importantes   de   GRUB   es   su   flexibilidad;   GRUB   entiendesistemas de ficheros y formatos ejecutables del núcleo, así que te permite arrancarun sistema operativo cualquiera, de la manera que quieras, sin necesidad de saber laposición física del núcleo en el disco.  Así, por ejemplo, puedes arrancar el núcleosimplemente especificando el nombre del archivo y el disco (junto con la partición)donde se encuentra. Para que GRUB conozca estos datos, los puedes teclear a mano

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  84

Page 85: Linux (Curso)

CURSOS LINUX

usando la interfaz de la línea de comandos, o usando la interfaz del menú a través dela cual se puede seleccionar gráficamente que SO arrancar. 

GRUB obtiene el menú de un fichero de configuración. Hacemos notar que no sólose puede entrar a la línea de comandos cuando quieras, sino que también puedes editarentradas específicas del menú antes de usarlas. 

1.2 Historia de GRUB GRUB empezó en 1995, cuando Erich Boleyn intentaba arrancar GNU Hurd con el

micronúcleo Mach 4 (ahora llamado GNU Mach) de la universidad de Utah.  Eric y BrianFord diseñaron la Especificación Multiarranque, con el propósito de no incrementar elgran número de métodos de arranque de PC incompatibles entre sí ya existentes. 

Más adelante, Erich comenzó a modificar el gestor de arranque de FreeBSD paraque   pudiera   entender   el   Multiarranque.   Pronto   se   dio   cuenta   de   que   resultaríabastante más sencillo escribir su propio gestor desde cero que continuar trabajandosobre el gestor de arranque de FreeBSD. Así nació GRUB. 

Erich añadió muchas características a GRUB, pero otras prioridades evitaban quepudiera satisfacer las peticiones de la creciente base de usuarios de GRUB. En 1999,Gordon Matzigkeit y Yoshinori K. Okuji adoptaron GRUB como proyecto GNU oficial,abriendo el desarrollo mediante la creación de un CVS anónimo con el código fuentemás reciente. 

1.3 Características de GRUB La   condición   más   importante   que   cumple   GRUB   es   que   obedece   la  EspecificaciónMultiarranque.  El resto de los objetivos, en orden aproximado de importancia, son: 

• Las funciones básicas han de ser claras y sencillas para el usuario final. 

• Rica funcionalidad que cubra las necesidades de programadores y expertos delnúcleo. 

• Compatibilidad "hacia atrás" para poder arrancar FreeBSD, NetBSD, OpenBSD yLinux.   Núcleos   propietarios   (como   los   de   DOS,Windows   NT   y   OS/2)   estánsoportados a través de la función de arranque en cadena. 

Todos   los   núcleos   se   arrancan   en   más   o   menos   el   mismo   estado   que   describe   laespecificación multiarranque, a excepción de los modos específicos de compatibilidad(como arranque en cadena o el formato  piggyback  de Linux). En la actualidad, sóloestán soportados los núcleos que se cargan a la altura o por encima de 1 megabyte, esdecir que el tamaño del núcleo debe ser menor o igual a 1MB. Cualquier intento decarga por debajo de ese límite simplemente fallará de inmediato con un mensaje deerror notificando el problema. Además   de   los   requerimientos   ya   mencionados,   GRUB   posee   las   siguientescaracterísticas (Nótese que la especificación de multiarranque no exige todas lascaracterísticas soportadas por GRUB): 

Reconoce varios formatos ejecutables Soporte para muchas de las variantes de a.out además de ELF. Tambiéncarga las tablas de símbolos. 

Soporte para núcleos que no son Multiarranque Soporte para varios de los núcleos libres de 32­bit que no se ajustana la especificación Multiarranque (principalmente FeeBSD, NetBSD,OpenBSD y Linux). Admite asimismo el arranque en cadena de otrosgestores. 

Carga de múltiples módulos Admite totalmente la carga de múltiples módulos, una característicadel Multiarranque. 

Carga de un archivo de configuración 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  85

Page 86: Linux (Curso)

CURSOS LINUX

Admite la configuración mediante un archivo simple de texto conórdenes predeterminados. También es posible cargar otro archivo deconfiguración de forma dinámica e insertar un archivo de configuraciónpredeterminado en un archivo de imagen de GRUB. La lista de órdenes esun conjunto que incluye a las admitidas desde la línea de comandos. 

Presenta una interfaz de menú Dispone de una interfaz de menú que presenta las opciones de arranquepreseleccionadas, con un tiempo de espera programable. No existe unlímite establecido para el número de entradas en el menú, y la actualimplementación tiene espacio para varios cientos. 

Tiene una interfaz de línea de comandos flexible Dispone de una línea de comandos bastante flexible, a la que se puedeacceder desde el menú, y que permite editar cualquiera de las órdenespreseleccionadas o escribir instrucciones de arranque desde cero. Sino existe un fichero de configuración, GRUB presenta la línea decomandos. 

La lista de órdenes es un subconjunto de los admitidos en los archivosde configuración. La edición de órdenes guarda similitud con la líneade comandos de Bash. 

Soporte para varios sistemas de archivos Admite de manera transparente varios sistemas de archivos, además deuna útil notación explícita de lista de bloques. Actualmente estánsoportados los sistemas de archivos BSD FFS, DOS FAT16 y FAT32, Minixfs, Linux ext2fs, ReiserFS, JFS, XFS, yd VSTafs. 

Soporte para descompresión automática Puede descomprimir archivos comprimidos con gzip. Esta función es a lavez automática y transparente de cara al usuario (es decir, todas lasfunciones   operan   sobre   el   contenido   descomprimido   de   los   archivosespecificados).   Esto   reduce   considerablemente   el   tamaño   de   losarchivos y el tiempo de carga, una ventaja notable especialmente endisquetes. Es   posible   imaginar   la   necesidad   de   cargar   módulos   del   núcleo   enestado comprimido, por lo que existe una orden diferente de carga demódulos para evitar que sean descomprimidos. 

Acceso a los datos en cualquiera de los dispositivos instalados Admite la lectura de datos de cualquier disco duro o disquetedetectado por la BIOS, independientemente de cual sea el dispositivoraíz. 

Independencia de las traducciones de geometría del disco Al contrario que otros gestores de arranque, GRUB hace irrelevante latraducción particular del disco. Se puede convertir un disco que estéinstalado y funcionando con una traducción a otra sin efectoscontraproducentes o cambios en la configuración de GRUB. 

Detecta toda la RAM instalada GRUB puede por lo general encontrar toda la RAM instalada en unordenador compatible PC, usando una técnica avanzada de consulta a laBIOS para encontrar todas las regiones de memoria. Como se describe enla especificación multiarranque, no todos los núcleos hacen uso deesta información, pero GRUB la provee para aquellos que sí lo hacen. 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  86

Page 87: Linux (Curso)

CURSOS LINUX

Admite el modo LBA (Dirección de Bloque Lógico) En las llamadas al disco tradicionales (modo CHS) existe un problemade traducción de geometría, esto es, la BIOS no puede leer por encimade   1024   cilindros,   lo   que   supone   que   el   espacio   accesible   estálimitado a 508 Mb en el peor de los casos, o a 8 Gb en el mejor. GRUBno puede resolver este problema de forma universal, ya que no existeuna   interfaz   genérica   que   sea   usada   en   todas   las   máquinas.   Sinembargo, numerosos equipos recientes usan la nueva interfaz de Accesode Bloque Lógico, modo (LBA). GRUB detecta automáticamente si el modoLBA está disponible, y hace uso de él en caso de que lo esté. En modoLBA, GRUB puede acceder a todo el disco. 

Soporte para arranque a través de la red GRUB es básicamente un gestor de arranque basado en el disco, perosoporta también el arranque a través de red. Se pueden cargar imágenesde sistemas operativos a través de la red usando el protocolo TFTP. 

Soporte para terminales remotas GRUB puede ser usado en ordenadores que no posean consola ya queadmite terminales remotas, con lo que puede ser controlado desde otroequipo. Por el momento solo está implementado el soporte paraterminales a través del puerto de serie. 

2. Nomenclatura La   sintaxis   de   dispositivos   usada   en   GRUB   es   algo   diferente   de   la   que

probablemente haya visto antes.

Ejemplos:

(fd0)

Para empezar, GRUB requiere que se encierre el nombre del dispositivo entreparéntesis “(“ y “)”. Lo que “fd” significa es que se trata de un disquete (floppydisk). El numero “0” es el número de la unidad, empezando a contar desde cero. Laexpresión significa que GRUB usará todo el disquete. 

(hd0,1)

Aquí, “hd” indica un disco duro (hard disk). El primer entero, “0” indica elnúmero de la unidad, es decir, que se trata del primer disco duro, mientras que elsegundo entero, “1”, indica el número de la partición o el número de rodaja (slice)en la terminología de BSD.   De nuevo, se observa que los números de partición secuentan desde cero y no desde uno. La expresión representa la segunda partición de laprimera unidad de disco duro. En este caso, GRUB usa una partición del disco y no eldisco entero. 

(hd0,4)

Esto indica la primera partición lógica de la primera unidad de disco. Observeque el número de partición para las particiones lógicas se empieza a contar desde“4”, sin que importe el número de particiones primarias en el disco duro. 

(hd1,a)

Esto  indica  la  partición  “a”  de  BSD  en  el  segundo  disco duro.  Si  necesitaespecificar el número de rodaja (slice) que se debería usar, puedes hacerlo como:“(hd1,0,a)”. Si se omite el número de "rodaja", GRUB busca la primera "rodaja" de laPC que contiene una partición “a” de BSD. 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  87

Page 88: Linux (Curso)

CURSOS LINUX

Por supuesto, para poder acceder a discos o particiones con GRUB, necesitasespecificar el dispositivo mediante una instrucción, como “root (fd0)” o “unhide(hd0,2)”. 

Advierta   que   GRUB   no   distingue   entre   IDE   y   SCSI   ­   simplemente   cuenta   lasunidades desde cero sin que importe su tipo. 

¿Cómo se especifica un archivo?

(hd0,0)/vmlinuz

Esto especifica un archivo llamado “vmlinuz” en la primera partición del primerdisco duro. 

3. Instalación Existen tres formas de conseguirlo ­ usando la aplicación GRUB­install (sección

Invocar GRUB­install) en un SO tipo UNIX,   mediante una Etapa 2 nativa. Ambas sonbastante similares, sin embargo, es posible que la aplicación escoja una unidadequivocada de la BIOS así que conviene ser precavido.  La última opción es medianteun asistente o instalador de una distribución (por ejemplo, yast en SuSE).

GRUB   viene   con   imágenes   de   arranque,   que   se   instalan   normalmente   en   eldirectorio  “/src/share/GRUB/i386­pc”.   Se   necesita   copiar   los   archivos  “stage1”,“stage2”  y  “*stage1_5”  al   directorio  “/boot/GRUB”.   Llamamos   aquí  directorio   deimágenes y directorio de arranque respectivamente al directorio donde se instalan lasimágenes de GRUB y al directorio que GRUB usa para encontrarlas.

3.1 Crear un disquete de arranque de GRUB Para crear un disco de arranque de GRUB, se necesita tomar los archivos “stage1”

y “stage2” del directorio de imágenes, y escribirlos respectivamente en el primer ysegundo bloque de un disquete. 

Precaución:  Este   método   destruye   cualquier   dato   que   esté   guardado   en   eldisquete. 

En sistemas operativos UNIX, esto se puede hacer con las órdenes siguientes: # cd /usr/share/GRUB/i386­pc# dd if=stage1 of=/dev/fd0 bs=512 count=11+0 records in1+0 records out# dd if=stage2 of=/dev/fd0 bs=512 seek=1153+1 records in153+1 records out#

El nombre del dispositivo puede ser diferente. 

3.2 Instalar GRUB en forma nativa Precaución:  Instalar la Etapa 1 de GRUB de esta manera borrará el sector de

arranque normal de un SO. Actualmente, GRUB puede arrancar directamente GNU Mach, Linux, FreeBSD, NetBSD y

OpenBSD, por lo que usarlo en un sector de arranque no debería dar problemas. Sinembargo, es buena idea en general, hacer una copia de seguridad del primer sector dela partición en la que se vaya a instalar la etapa 1 de GRUB. Si se instala GRUB enel primer sector del disco duro no es tan importante tomar precauciones, ya que esfácil restaurarlo (por ejemplo, usando “FDISK /MBR” desde DOS). 

Instalar   GRUB   de   manera   nativa   en   el   sistema   es   sin   duda   recomendable.   Sidecides hacerlo así, necesitarás hacer un disquete de arranque de GRUB y arrancar elordenador con él. Para ver otro método ver la sección 3.3 Instalar GRUB usando GRUB­install. 

Una vez que se comienza lo primero que hay que hacer es fijar el directorio dearranque como dispositivo raíz de GRUB

GRUB> root (hd0,0)

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  88

Page 89: Linux (Curso)

CURSOS LINUX

Si no estás seguro de cual es la partición que contiene los archivos, puedesusar la orden find de la manera siguiente: 

GRUB> find /boot/GRUB/stage1

Esto   busca   el   archivo  “/boot/GRUB/stage1”  y   lista   los   dispositivos   que   locontienen. 

Una vez que has fijado correctamente el directorio raíz, utiliza la orden setup(sección 12.8.34 setup): 

GRUB> setup (hd0)

Esta orden instala GRUB en el MBR de la primera unidad. Si lo que quieres esinstalar   GRUB   en   el  sector   de   arranque  de   una   partición   en   vez   de   en   el   MBR,especifica la partición en la que quieres instalar GRUB: 

GRUB> setup (hd0,0)

Si instalas GRUB en una partición o en una unidad que no sea la primera, tendrásque arrancar en cadena a GRUB desde otro gestor de arranque. Hay que mirar en elmanual del gestor de arranque en particular la manera de arrancar GRUB en cadena. 

3.3 Instalar GRUB usando GRUB­install Precaución: No se aconseja utilizar este procedimiento ya que hay posibilidades

de que deje el ordenador sin poder arrancar.  Por ejemplo, la mayoría de los sistemasoperativos no comunican a GRUB la manera de corresponder correctamente unidades de laBIOS   a   dispositivos   del   SO,   GRUB   simplemente   “adivina”  la   correspondencia.   Estofunciona en la mayoría de los casos, pero no siempre, por lo que GRUB pone a sudisposición un fichero de correspondencias definido por el usuario  device map  quedebes reparar si fuera incorrecto. (Sección 14.3 La correspondencia entre unidades dela BIOS y dispositivos del SO, para más información) 

A pesar de esto, si quieres instalar GRUB bajo un SO tipo UNIX (como Linux),ejecuta el programa  GRUB­install  (Sección Invocar GRUB­install) como superusuario(root). 

Su uso es muy sencillo. Solo necesitas pasarle un argumento al programa: dondequieres   instalar   GRUB.   El   argumento   puede   ser   un   fichero   de   dispositivo   o   unaunidad/partición de GRUB. Por ejemplo, para instalar GRUB en el MBR del primer discoIDE desde Linux puedes usar: 

# GRUB­install /dev/hda

Bajo GNU/Hurd, la siguiente orden tiene el mismo efecto: 

# GRUB­install /dev/hd0

Si se trata de la primera unidad en la BIOS, ésta orden es equivalente: 

# GRUB­install “(hd0)”

Los   ejemplos   anteriores   asumen   que   usas   imágenes   de   GRUB   situadas   en   eldirectorio raíz. Si quieres que GRUB utilice imágenes en otro directorio, necesitaespecificar la opción “­­root­directory”. Un caso típico es cuando quieres crear undisquete de arranque de GRUB.

Ejemplo:# mke2fs /dev/fd0# mount ­t ext2 /dev/fd0 /mnt# GRUB­install ­­root­directory=/mnt “(fd0)”

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  89

Page 90: Linux (Curso)

CURSOS LINUX

# umount /mnt

Otro ejemplo es el caso en que tienes una partición de arranque distinta montadasobre “/boot”. GRUB es un gestor de arranque, y no sabe nada de puntos de montaje.Por lo tanto, la manera de invocar GRUB­install sería: 

# GRUB­install ­­root­directory=/boot /dev/hda

Por cierto, como se observa anteriormente, es bastante difícil averiguar lasunidades de la BIOS desde un SO tipo UNIX. Por este motivo, GRUB­install le pediráque compruebe que ciertamente acertó con las correspondencias una vez terminada lainstalación. El formato está definido en  la sección “correspondencia entre unidadesde la BIOS y dispositivos del SO”. 

Adviértase que GRUB­install es en realidad un archivo de órdenes (shell script),y el verdadero trabajo lo realiza el intérprete de órdenes GRUB  (sección  Invocar elintérprete GRUB). Se podría por lo tanto ejecutar directamente GRUB para instalarGRUB, sin utilizar GRUB­install. Sin embargo, esto no es recomendable a no ser que seconozca bien el funcionamiento de GRUB. 

4. Arranque GRUB puede arrancar de manera similar núcleos que se acojan al Multiarranque, peropara algunos sistemas operativos libres es necesario utilizar algo de magia adecuadaal SO. 

4.1 Como arrancar sistemas operativos GRUB tiene dos maneras distintas de arrancar sistemas. Una es cargar el sistemaoperativo directamente, y la otra es cargar en cadena otro gestor de arranque que seencargará de arrancar el sistema operativo. En general, el primer método es el másdeseable, porque no requiere que se instale o mantengas otros gestores de arranque, yGRUB es lo bastante flexible para cargar un sistema operativo en cualquier disco opartición. Sin embargo, resulta necesario algunas veces utilizar el segundo método yaque GRUB no admite forma nativa todos los sistemas operativos existentes. 

4.1.1 Como arrancar directamente un SO con GRUB El Multiarranque es el formato nativo soportado por GRUB. Por conveniencia, existetambién soporte para Linux, FreeBSD, NetBSD y OpenBSD. Para el resto de los sistemasoperativos que quieras arrancar debes utilizar el arranque en cadena. En general, GRUB arranca cualquier SO que se acoja al Multiarranque con los pasossiguientes: 

1. Fija el dispositivo raíz de GRUB en la unidad que contiene las imágenes del SOmediante la orden root. 

2. Carga la imagen del núcleo con la orden kernel. 

3. Si necesitas módulos, cárgalos con la orden module o modulenounzip.

4. Ejecuta la orden boot. 

Linux, FreeBSD, NetBSD y OpenBSD se pueden arrancar de manera similar. Puedes cargarla imagen del núcleo mediante la orden kernel y después usar la orden boot. Si elnúcleo requiere algún parámetro, simplemente se debe añadirlos a los parámetros akernel, detrás del nombre del archivo del núcleo. 

4.1.2 Carga otro gestor de arranque para arrancar SOs no soportados Si se quiere arrancar un sistema operativo que no esté soportado (por ejemplo Windows95),   se   debe   arrancar   en   cadena   un   gestor   de   arranque   propio   de   ese   sistemaoperativo. Normalmente, el gestor de arranque está insertado en el sector de arranquede la partición en la que está instalado el sistema operativo. 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  90

Page 91: Linux (Curso)

CURSOS LINUX

1. Fijar   el   dispositivo   raíz   de   GRUB   en   la   partición   mediante   la   ordenrootnoverify:

GRUB> rootnoverify (hd0,0)

2. Marcar la partición como activa mediante la orden makeactive:

GRUB> makeactive

3. Cargar el gestor de arranque usando la orden chainloader 

GRUB> chainloader +1

4. “+1” indica que GRUB debe leer un sector desde el principio de la partición. 5. Ejecutar la orden boot 

4.2 Particularidades de algunos sistemas operativos 

GNU/Linux Resulta relativamente sencillo arrancar GNU/Linux desde GRUB, ya que se asemeja dealguna manera a un SO Multiarranque. 

1. Fijar el dispositivo raíz de GRUB en el mismo dispositivo que GNU/Linux. 2. Carga el núcleo: 

GRUB> kernel /vmlinuz root=/dev/hda1

3. Si necesitas especificar algún otro parámetro del núcleo añádelos sin más a laorden. Por ejemplo, para poner la “vga” en “ext” usa: 

GRUB> kernel /vmlinuz root=/dev/hda1 vga=ext

4. Si usa un initrd, ejecutar la orden initrd después de la orden kernel: 

GRUB> initrd /initrd

5. Para terminar, ejecuta la orden boot

Precaución: Si usas un initrd y especificas la opción “ mem=“ al núcleo, para lograrque use una cantidad de memoria menor que la existente necesitas especificar a GRUBel   mismo   tamaño   de   memoria.   Para   comunicar   el   tamaño   a   GRUB,   ejecuta   la   ordenuppermem antes de cargar el núcleo.

DOS/Windows GRUB no puede cargar DOS o Windows directamente, por lo que se debe usar el arranqueen cadena. Sin embargo, los gestores de arranque de estos sistemas poseen algunasdeficiencias críticas, por lo que es posible que no valga con cargarlos en cadena sinmás. Para superar estas dificultades, GRUB pone a su disposición dos funciones deayuda. Si se ha instalado DOS (o Windows) en un disco duro distinto del primero, se debeusar la técnica de intercambio de discos, ya que ese sistema operativo no puedearrancar desde un disco que no sea el primero. La solución empleada en GRUB es laorden map: 

GRUB> map (hd0) (hd1)GRUB> map (hd1) (hd0)

Esto efectúa un intercambio  virtual  entre la primera y la segunda unidad de discoduro. 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  91

Page 92: Linux (Curso)

CURSOS LINUX

Precaución: Esto sólo es efectivo si DOS (o Windows) usan la BIOS para acceder a losdiscos intercambiados. Si el SO utiliza una controladora especial para los discos,esto probablemente no funcionará. Otro problema surge si se ha instalado más de una copia de DOS/Windows en un disco,porque estos SOs se pueden equivocar cuando hay más de una partición primaria paraDOS/Windows. Ciertamente, deberías evitar hacer esto, pero existe una solución. Sepuedes usar la técnica de ocultar/desvelar una partición. Esto no ocurre siempre, por lo que primero se aconseja utilizar el método de arranqueen cadena para cargar el SO, en caso de que el anterior no funcionase optar por estemétodo.Si GRUB oculta una partición de DOS (o Windows) (comando unhide), DOS (o Windows) laignorarán, y si GRUB la desvela, DOS (o Windows) la detectarán. Así por ejemplo, sihas instalado DOS (o Windows) en la primera y segunda partición del primer discoduro, y quieres arrancar la copia en la primera partición, se debe hacer: 

GRUB> unhide (hd0,0)GRUB> hide (hd0,1)GRUB> rootnoverify (hd0,0)GRUB> chainloader +1GRUB> makeactive

  GRUB> boot

5. Configuración Como se habrá notado, es necesario escribir unas cuantas órdenes para arrancar un SO.Hay una manera más rápida de hacerlo: GRUB posee una interfaz de menú  desde la quepuedes seleccionar una entrada (usando las flechas del teclado) que hará todo lonecesario para arrancar un SO. Para   habilitar   el   menú   necesitas   un   archivo   de   configuración,   “menu.lst”  en   eldirectorio de arranque. Vamos a analizar un archivo de ejemplo. El fichero contiene al principio varias opciones generales relativas a la interfaz demenú. antes de las entradas (que empiezan con la orden title). 

# Arrancar la primera entrada por defectodefault 0

La primera entrada (contando a partir del número cero, no uno) será la elección pordefecto. 

# Arrancar automáticamente después de 30 segundostimeout 30

Como indica el comentario, GRUB arrancará automáticamente en 30 segundos, a no serque sea interrumpido por la presión de una tecla. 

# Descolgarse a la segunda entradafallback 1

Verá que todas las entradas empiezan con el comando title, y que las instrucciones seencuentran a continuación. Observa que no hay un comando boot de cada entrada. Estose debe a que GRUB ejecuta automáticamente boot si ha cargado con éxito el resto deórdenes. El argumento de la orden  title  se utiliza a modo de título o descripción de laentrada del menú. La orden title presenta el argumento tal cual, por lo que puedesescribir básicamente lo que quieras. 

# Para arrancar GNU/Hurdtitle  GNU/Hurdroot   (hd0,0)kernel /boot/gnumach.gz root=hd0s1module /boot/serverboot.gz

Esto arranca GNU/Hurd en el primer disco duro. 

# Para arrancar GNU/Linuxtitle  GNU/Linux

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  92

Page 93: Linux (Curso)

CURSOS LINUX

kernel (hd1,0)/vmlinuz root=/dev/hdb1Esto arranca GNU/Linux, pero en el segundo disco duro. 

# Para arrancar Mach (obteniendo el núcleo de un disquete)title  Utah Mach4 multibootroot   (hd0,2)pause  Insert the diskette now^G!!kernel (fd0)/boot/kernel root=hd0s3module (fd0)/boot/bootstrap

Esto arranca Mach con el núcleo en un disquete, pero con el sistema de ficheros enhd0s3. También contiene una línea con la orden pause, que obliga a GRUB a presentarun mensaje y esperar antes de ejecutar el resto de órdenes. 

# Para arrancar FreeBSDtitle  FreeBSDroot   (hd0,2,a)kernel /boot/loader

Esta entrada arranca el núcleo de FreeBSD, cargándolo de la partición “a”  de latercera "rodaja" de PC (slice) del primer disco duro. 

# Para arrancar OS/2title OS/2root  (hd0,1)makeactive# Carga en cadena el gestor de OS/2 del primer sectorchainloader +1# Esto es similar a "chainload", pero cargando un archivo#chainloader /boorsect.os2

# Para arrancar WindowsNT o Windows95title Windows NT / Windows 95 boot menuroot        (hd0,0)makeactivechainloader +1# Para cargar DOS si WindowsNT está instalado# chainload /bootsect.dos

Lo mismo que el anterior, pero para Windows. 

# Para instalar GRUB en el disco durotitle Install GRUB into the hard diskroot    (hd0,0)setup   (hd0)

Esto simplemente (re)instala GRUB en el disco duro 

# cambia los colorestitle Change the colorscolor light­green/brown blink­red/blue

En la última entrada, se usa la orden color para cambiar los colores del menú. Estaorden es algo especial, ya que se puede usar en el menú o en la línea de comandos. 

6. Descargar las imágenes del SO de la red A pesar de que GRUB es un gestor de arranque centrado en el disco, también poseesoporte de redes. Para poder utilizarlo en red, necesitas habilitar por lo menos unode   los   controladores   de   red   al   compilar   GRUB.   Para   más   información   mira   en“netboot/README.netboot” en la distribución del código fuente. 

6.1 Como preparar la red GRUB necesita un servidor de ficheros y, de manera opcional, un servidor que asigneuna dirección IP a la máquina en la que se ejecuta GRUB. Para lo primero sólo existe

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  93

Page 94: Linux (Curso)

CURSOS LINUX

por el momento soporte para TFTP. Lo segundo es un servidor BOOTP, DHCP o RARP. No esnecesario tener los dos servidores en un mismo ordenador. Si ha decidido usar un servidor para asignar una dirección IP, hay que poner enmarcha el servidor y ejecutar la orden bootp, dhcp  o rarp  para usar BOOTP, DHCP oRARP   respectivamente.   Al   ejecutarlas,   presentarán   en   pantalla   la   dirección   IPasignada, la máscara de red, la dirección IP del servidor TFTP y la puerta de enlace.Si alguna de las direcciones es incorrecta o si causa algún error, lo más probable esque no se tenga los servidores configurados correctamente. En caso contrario, usa la orden ifconfig como a continuación: 

GRUB> ifconfig ­­address=192.168.110.23 ­­server=192.168.110.14

También puedes usar la orden  ifconfig  en conjunción con  bootp,  dhcp  o  rarp  (porejemplo, para reasignar la dirección del servidor manualmente). Para terminar, descarga las imágenes del SO a través de la red. Se accede a la redmediante la unidad de red “(nd)”. Lo demás es similar a las instrucciones normales

He aquí un ejemplo: GRUB> bootpProbing... [NE*000]NE2000 base ...Address: 192.168.110.23    Netmask: 255.255.255.0Server: 192.168.110.14     Gateway: 192.168.110.1

GRUB> root (nd)GRUB> kernel /tftproot/gnumach.gz root=sd0s1GRUB> module /tftproot/serverboot.gzGRUB> boot

6.2 Arranque desde la red A veces resulta muy útil poder arrancar a través de la red, especialmente cuando seusan máquinas que no tienen disco duro local. En estos casos, necesitas obtener algúntipo de BIOS para arranque por red (Net Boot), como las BIOS PXE o el programa libreEtherboot. Una BIOS de arranque de este tipo primero arranca el ordenador, prepara latarjeta de red instalada en el ordenador, y descarga la imagen para la segunda etapadel arranque de la red. Esta segunda imagen es la que en realidad se encarga despuésde arrancar el sistema operativo a través de la red. 

GRUB   posee   dos   imágenes   para   la   segunda   etapa:   “nbgrub”  y   “pxegrub”  (secciónArchivos de imagen de GRUB). Estas imágenes son iguales a una Etapa 2 normal, exceptoen que preparan la red de manera  automática e intentan descargar un archivo  deconfiguración de la red si se ha especificado uno. 

El modo de empleo es muy sencillo: Si la máquina tiene una BIOS PXE, usa “pxegrub”.Si la máquina tiene un cargador NBI, como por ejemplo Etherboot, usa “nbgrub”. Laúnica diferencia entre ellas es el formato. La manera de descargar la imagen de lasegunda etapa estará detallada en el manual de su BIOS de arranque de red (Net Boot).Hay sin embargo un asunto específico de GRUB: cómo especificar un archivo deconfiguración en un servidor BOOTP/DHCP? Por ahora, GRUB utiliza la marca “150” paraobtener el nombre del archivo de configuración. Lo que sigue es un ejemplo de unaconfiguración BOOTP: 

.allhost:hd=/tmp:bf=null:\        :ds=145.71.35.1 145.71.32.1:\        :sm=255.255.254.0:\        :gw=145.71.35.1:\        :sa=145.71.35.5:

foo:ht=1:ha=63655d0334a7:ip=145.71.35.127:\        :bf=/nbgrub:\        :tc=.allhost:\

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  94

Page 95: Linux (Curso)

CURSOS LINUX

        :T150="(nd)/tftpboot/menu.lst.foo":

Debe mirar en el manual del servidor BOOTP/DHCP para más información. La sintaxisexacta será algo diferente de la del ejemplo. 

7. Usar GRUB a través de la línea de serie GRUB  también puede inicializarse a través de una línea serie, pero esto es pocofrecuente y excede el alacance de este curso.

8. Embedding a configuration file into GRUB GRUB   admite   un  menú   predeterminado  que   se   carga   siempre   antes   de   empezar.   Laposibilidad de un menú predeterminado es útil cuando por ejemplo, su ordenador notiene otra consola que el cable de serie. En este caso, resulta crítico poner enmarcha la terminal de serie tan pronto como sea posible, puesto que no puedes verningún mensaje hasta que la terminal de serie empieza a funcionar. Así que resultaútil   ejecutar   las   órdenes  serial  (sección   12.7.12   serial)   y  terminal  (12.7.14terminal) antes que cualquier nada más comenzar. 

El funcionamiento del menú predeterminado es un poco complicado: 1. GRUB comprueba si se está usando la opción de menú predeterminado, y carga el

menú predeterminado si está disponible. Esto incluye ejecutar órdenes y leerentradas de arranque como en un archivo de configuración ordinario. 

2. GRUB comprueba si el archivo de configuración está disponible. Observa que estacomprobación se hace  sin importar la existencia del menú predeterminado. Secarga el archivo de configuración, incluso después de que se haya cargado elmenú predeterminado. 

3. Si el menú predeterminado incluye alguna entrada de arranque, estás se borrancuando   se   carga  el   archivo   de  configuración.   No   importa  si   el   archivo  deconfiguración tiene o no alguna entrada. Las entradas de arranque del menúpredeterminado   solo   se   usan   cuando   GRUB   no   consigue   cargar   el   archivo   deconfiguración. 

Para habilitar la opción de menú predeterminado, se debe especificar el archivo alrealizar la configuración mediante la opción “­­enable­preset­menu”. Este archivotiene el mismo contenido que los archivos de configuración. 

Otro detalle que se debería tener en cuenta es que el soporte para máquinas sin discoduplica   el   menú   predeterminado.   Las   imágenes   sin   disco   incluyen   un   menúpredeterminado para ejecutar la orden bootp automáticamente, a no ser que especifiquesu propio menú al configurar. Esto también implica que se debe incluir las órdenespara iniciar la red en tú menú, ya que las imágenes sin disco no la inician de maneraautomática cuando has especificado el menú explícitamente. 

Por lo tanto, un menú típico para ser usado con soporte sin disco sería algo así: # Lo primero de todo, iniciar la terminal de serieserial ­­unit=0 ­­speed=19200terminal ­­timeout=0 serial

# Iniciar la reddhcp 

9. Protege el ordenador de accesos no autorizados Si comparte el ordenador con otras personas, quizás le interese evitar que cualquierapueda usarlo a su antojo. Una de las cosas que podría constituir un agujero de seguridad es que el usuariopuede hacer demasiadas cosas desde GRUB, ya que GRUB permite que se modifique laconfiguración y que se ejecuten órdenes arbitrarias en el arranque. Por ejemplo, elusuario puede incluso leer el archivo “/etc/passwd” desde la interfaz de la línea decomandos usando la orden  cat. Así que es necesario suprimir todas las operacionesinteractivas. 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  95

Page 96: Linux (Curso)

CURSOS LINUX

GRUB admite una contraseña, de manera que solo los administradores puedan iniciar lasoperaciones interactivas (es decir, editar entradas de menú y entrar en la interfazde la línea de comandos). Para utilizar esta opción, se necesita ejecutar la ordenpassword en su archivo de configuración  de esta manera: 

password ­­md5 PASSWORD

Si se especifica esta línea, GRUB deshabilita cualquier control interactivo hasta quese pulse la tecla p y se introduzca la contraseña correcta. La opción “­­md5” le dicea GRUB que “PASSWORD” tiene formato MD5. Si se omite, GRUB asume que la contraseña“PASSWORD” está en texto simple. Se puede encriptar su contraseña con la orden md5crypt. Por ejemplo, se debe ejecutarel intérprete (shell) de GRUB e introducir su contraseña: 

GRUB> md5cryptPassword: **********Encrypted: $1$U$JK7xFegdxWH6VuppCUSIb.

Después   se   debe   cortar   y   pegar   la   contraseña   encriptada   en   su   archivo   deconfiguración. También se puede especificar un argumento opcional a la orden  password  como en elsiguiente ejemplo: 

password PASSWORD /boot/GRUB/menu­admin.lst

En este caso, GRUB cargará el archivo “/boot/GRUB/menu­admin.lst”  como archivo deconfiguración cuando se introduzca la contraseña correcta. Otra de las cosas que puede ser peligrosa es la posibilidad de escoger cualquierentrada del menú. Por lo general esto no tiene que resultar un problema, pero quizásquiera que solo los administradores puedan usar algunas entradas en particular, comopor ejemplo una entrada que arranque un SO sin seguridad como DOS. GRUB facilita la orden  lock. Esta orden falla siempre hasta que se introduzca unacontraseña válida, por lo que se puede usar de la siguiente manera: 

title Boot DOSlockrootnoverify (hd0,1)makeactivechainload +1

Se debería insertar  lock  justo detrás de la orden  title  porque cualquier usuariopuede ejecutar las órdenes en una entrada hasta que GRUB encuentra la orden lock. También se puede usar la orden password en lugar de lock. En ese caso el proceso dearranque pediría la contraseña, y se detendría si se introdujera incorrectamente.Como la orden password toma su propio argumento PASSWORD, esto puede resultar útil siquieres contraseñas diferentes para cada entrada. 

10. Archivos de imagen de GRUB GRUB está compuesto por varias imágenes: dos imágenes esenciales, etapas opcionalesllamadas Etapa 1.5, y dos imágenes de arranque de red. Aquí presentamos una pequeñadescripción de todas ellas.

“stage1” Esta es en esencia la imagen utilizada para cargar GRUB. Normalmente la imagense inserta en el sector maestro de arranque (MBR) o en el sector de arranque deuna partición. Como el sector de arranque de un PC tiene 512 bytes, el tamañode esta imagen es exactamente 512 bytes. Todo lo que “stage1” tiene que hacer es cargar la Etapa 2 o la Etapa 1.5 de undisco   local.   Debido   a   las   limitaciones   de   espacio,   “stage1”  codifica   elemplazamiento de la Etapa 2 (o de la Etapa 1.5) en formato de lista de bloques,por lo que no llega a entender ninguna estructura de sistemas de ficheros. 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  96

Page 97: Linux (Curso)

CURSOS LINUX

“stage2” Esta es la imagen central de GRUB. Lo hace todo excepto arrancarse a si misma.Se   sitúa   por   lo   general   dentro   de   un   sistema   de   ficheros,   aunque   no   esimprescindible. 

“e2fs_stage1_5”“fat_stage1_5”“ffs_stage1_5”“jfs_stage1_5”“minix_stage1_5”“reiserfs_stage1_5”“vstafs_stage1_5”“xfs_stage1_5”

Se les llama Etapa 1.5 porque su misión es la de un puente entre “stage1” y“stage2”, es decir, la Etapa 1 carga la Etapa 1.5, y ésta carga la Etapa 2. Ladiferencia entre “stage1”  y “*_stage1_5”  es que la primera no entiende desistemas de ficheros y la segunda entiende uno (Ej.  “e2fs_stage1_5”  entiendeext2fs). Por esto puedes mover la Etapa 2 a otro lugar sin problemas, inclusodespués de haber instalado GRUB. Mientras la Etapa 2 no se puede, en general, insertar en una zona fija debido asu gran tamaño, la Etapa 1.5 se puede instalar en la zona justo detrás del MBR,o en la zona del gestor de arranque de un ResiserFS o FFS.

“nbgrub” Esta es una imagen para el arranque por red usada por la Propuesta de Imagen deRed (Network Image Proposal) que utilizan algunos gestores de arranque de redcomo Etherboot. Es prácticamente igual a la Etapa 2, pero además prepara la redy carga el fichero de configuración a través de ella. 

“pxegrub” Esta   es   otra   imagen   de   arranque   por   red   para   el   Sistema   de   Ejecución   dePrearranque (Preboot Execution Environment) usado por varios ROMs Netboot. Esidéntica a “nbgrub” excepto por el formato. 

11. Sintaxis y semántica del sistema de ficheros GRUB utiliza una sintaxis especial para referirse a las unidades de disco accesiblesdesde la BIOS. Debido a las limitaciones de la BIOS, GRUB no puede distinguir entreIDE, ESDI, SCSI u otros. Usted será el que tenga que saber la correspondencia entredispositivos del SO y las unidades de la BIOS. Normalmente estará bastante claro unavez que se vea los archivos de un dispositivo, o que uses la orden find. 11.1 Como especificar los dispositivosLa sintaxis de dispositivos es como sigue: 

(dispositivo[,nro­part][,letra­subpart­bsd])

“[“  indica que el argumento es opcional. El  dispositivo  debe ser o  “fd”  o  “hd”seguido de un dígito, como en “fd0”. También puedes representar  dispositivo con unnúmero hexadecimal  o decimal (el  número de unidad de la BIOS), por lo que lossiguientes son equivalentes: 

(hd0)(0x80)(128)

 nro­part  representa el número de partición en el  dispositivo, empezando desde ceropara las particiones primarias y desde cuatro para las lógicas.  letra­subpart­bsdrepresenta la etiqueta de la subpartición de BSD, como por ejemplo “a” o “e”. Una abreviatura para especificar subparticiones BSD es  (dispositivo,letra­subpart­bsd), con esto GRUB busca la primera partición del PC con una etiqueta BSD, y despuésselecciona la partición letra­subpart­bsd. Este es un ejemplo: 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  97

Page 98: Linux (Curso)

CURSOS LINUX

(hd0,a)

Una sintaxis como “(hd0)” indica que se utilice el disco entero (o el MBR en caso deestar instalando GRUB), mientras que una sintaxis como “(hd0,0)” indica que se use lapartición del disco (o el sector de arranque de la partición en caso de quererinstalar GRUB). Si ha habilitado el soporte de red, también dispones de la unidad especial “(nd)”.Antes de poder usar la unidad de red debe iniciar la red. 

11.2 Como especificar archivos Hay dos maneras de especificar archivos: mediante el nombre absoluto del fichero ymediante lista de bloques. El nombre absoluto del fichero se asemeja al nombre absoluto de fichero en Unix,usando “/” como separador de directorios. Un ejemplo es “(hd0,0)/boot/GRUB/menu.lst”,que indica el archivo “/boot/GRUB/menu.lst” en la primera partición del primer discoduro. Si omites el nombre del dispositivo en el nombre absoluto del fichero, GRUB usaimplícitamente el dispositivo raíz. Así que, si por ejemplo, ha fijado el dispositivoraíz   en  “(hd1,0)”  con   la   orden  root,  /boot/kernel  sería   equivalente   a  (hd1,0)/boot/kernel. 

11.3 Como especificar listas de bloques La lista de bloques se utiliza para especificar un archivo que no aparece en elsistema de ficheros, como un gestor de arranque. La sintaxis es [inicio]+longitud[,[inicio]+longitud].... Un ejemplo: 

0+100,200+1,300+300

Esto indica que GRUB debe leer los bloques del 0 al 99, el bloque 200, y los bloquesdel 300 al 599. Si omites un inicio GRUB asume que debe empezar desde 0. Igual que en la sintaxis de ficheros, si una lista de bloques no contiene un nombrede dispositivo, GRUB usa el dispositivo raíz. Así (hd0,1)+1 equivale a +1 cuando eldispositivo raíz es “(hd0,1)”. 

12. Interfaz de usuario de GRUB GRUB posee tanto una simple interfaz de menú donde escoger entradas ya preparadas enun   archivo   de   configuración   como   una   línea   de   comandos   flexible   para   ejecutarcualquier combinación de órdenes de arranque que se desee. Tan pronto como se carga GRUB, éste busca el archivo de configuración. Si encuentrauno, activa la interfaz de menú utilizando las entradas que se encuentren en elarchivo. Si utilizas la opción del menú de línea de comandos o si GRUB no encuentraun archivo de configuración, se activa la línea de comandos. 

12.1 La interfaz de línea de comandos La interfaz de la línea de comandos consiste, como en Unix o DOS, de un cursor(prompt) con espacio a continuación para introducir texto. GRUB ejecuta las órdenesinmediatamente   cuando   son   introducidas.   Las   órdenes   son   un   subconjunto   de   lasdisponibles   en   el  fichero   de   configuración,  y   se   usan  exactamente   con   la  mismasintaxis. La   edición   de   texto   y   el   movimiento   del   cursor   se   puede   hacer   a   través   de   unsubconjunto de las funciones disponibles en el intérprete de órdenes Bash: 

C­f Flecha derecha

Moverse hacia delante un caracter.

C­b Flecha izquierda 

Moverse hacia atrás un caracter

C­a INICIO

Moverse al inicio de la línea

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  98

Page 99: Linux (Curso)

CURSOS LINUX

C­e END

Moverse al final de la línea.

C­d DEL

Borrar el caracter bajo el cursor.

C­h BS

Borrar   el   caracter   a   la   izquierda   delcursor.

C­k Suprimir   el   texto   desde   la   posiciónactual del cursor al final de la línea.

C­u Suprimir   hacia   atrás,   desde   el   cursorhasta el principio de la línea.

C­y Recuperar   el   texto   suprimido   en   laposición del cursor.

C­p Flecha arriba

Moverse hacia arriba en la historia deórdenes.

C­n Flecha abajo

Moverse   hacia   abajo   en   la   historia   deórdenes

Cuando escribe órdenes interactivamente, si el cursor está en medio o antes de laprimera palabra en la línea de comandos, presionar el tabulador (o C­i) le mostraráuna lista de las órdenes disponibles, y si el cursor está detrás de la primerapalabra,   el  tabulador  mostrará   una   lista   de   discos,   particiones   o   nombres   dearchivos, dependiendo del contexto. Nota que no puedes utilizar la función de auto completar en el sistema de ficheros deTFTP. Esto se debe a que TFTP no implementa el listado de ficheros por motivos deseguridad. 

12.2 La interfaz de menú Básicamente, la interfaz de menú presenta una lista de opciones de arranque entre lasque el usuario puede escoger. Se pueden introducir órdenes pulsando la tecla  c, lo que presenta una línea decomandos (que opera exactamente igual que en la versión de GRUB sin fichero deconfiguración, con la excepción de que te permite volver al menú pulsando  ESC).También se pueden editar las entradas de arranque pulsando la tecla e. Si ha protegido la interfaz de menú mediante una contraseña, todo lo que podrá hacerserá escoger una entrada pulsando RETORNO, o pulsar p para introducir la contraseña. 

12.3 Editar una entrada del menú El editor de entradas del menú se parece bastante a la interfaz de menú principal,pero en las líneas del editor verá las órdenes de la entrada seleccionada en lugar delos nombres de las distintas entradas. Si se pulsa ESCAPE en el editor, se descartan todos los cambios hechos en la entradaseleccionada, volviendo a la pantalla del menú principal. Cuando se selecciona una línea en particular, el editor coloca al usuario en unaversión especial de la línea de comandos de GRUB para que edite la línea. Cuando elusuario pulsa RETURN, GRUB reemplaza la línea en cuestión en la opción de arranquecon los nuevos cambios (a no ser que se aborte a través de la tecla ESCAPE, en cuyocaso se descartan los cambios). Si quieres añadir una línea nueva a la entrada del menú, pulse “o”  para añadirladebajo de la línea sobre la que se encuentre o “O” para añadirla sobre ella. Para   borrar   una   línea   pulse   la   tecla   “d”.   Aunque   desafortunadamente   GRUB   noimplementa   la   opción   de  deshacer,   se   obtiene   prácticamente   el   mismo   resultadoretornando al menú principal. 

12.4 La interfaz de menú oculta En el caso de utilizar una terminal tipo "dumb" o de haber solicitado explícitamentea GRUB que esconda el menú mediante  la orden  hiddenmenu, GRUB no presentará lainterfaz de menú, y arrancará automáticamente la opción por defecto, a no ser que seinterrumpa pulsando ESCAPE. Cuando se interrumpe la cuenta atrás del tiempo de espera y la terminal es del tipo"dumb", GRUB retorna a la interfaz de la línea de comandos. 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  99

Page 100: Linux (Curso)

CURSOS LINUX

12.5 Lista de las órdenes disponibles En este capítulo detallamos todas las órdenes disponibles en GRUB. Las órdenes están divididas en diferentes grupos. Unas pocas sólo pueden usarse en lasección global del archivo de configuración (o "menú"); La mayoría de ellas se puedeusar en la línea de comandos y tanto en el menú como en las opciones del menú. 

12.6 La lista de órdenes sólo para el menú Las reglas para componer un archivo de configuración son las siguientes: 

• Deben ir primero las órdenes específicas del menú. • Los archivos deben estar en formato de texto simple. 

• Los comentarios en un archivo de configuración se indican con una  “#”  en elprincipio de la línea. 

• Las opciones van separadas por espacios. 

• Todos los números pueden especificarse en sistema decimal o hexadecimal. Losnúmeros hexadecimales deben ir precedidos por  “0x”, sin importar que se usenmayúsculas o minúsculas. 

• Se ignoran las opciones extra o el texto al final de la línea, a no ser que seespecifique lo contrario. 

• Las órdenes que no se reconocen se añaden a la opción actual, excepto si estánantes de que empiecen las opciones, donde son ignoradas. 

Las órdenes siguientes solo pueden usarse en el menú: default Fija la entrada por defectofallback Fija la entrada de repuestohiddenmenu Esconde la interfaz de menútimeout Pone un tiempo de esperatitle Encabeza una entrada del menú

default Sintaxis   :   default num 

Establece como opción de arranque por defecto la número  num. La numeraciónempieza en 0, y la número 0 es la opción por defecto si no se usa esta orden. También puedes utilizar “saved” en vez de un número. En este caso, la opciónpor defecto es la guardada con la orden savedefault. 

fallback Sintaxis: fallback num 

Entrar en el arranque sin supervisión: si la opción de arranque por defectotiene algún error, en vez de esperar a que el usuario haga algo, empezar denuevo pero con la opción num (la numeración funciona igual que en la orden).Obviamente, esto no surtirá efecto si el núcleo que GRUB arrancó reinicia lamáquina. 

hiddenmenu Sintaxis   :   hiddenmenu 

No mostrar el menú. Si se usa esta orden, no se mostrará ningún menú en laterminal de control, y se arrancará la opción por defecto cuando concluya eltiempo de espera. El usuario puede sin embargo obtener el menú pulsando latecla ESCAPE antes de que acabe el tiempo de espera. 

timeout Sintaxis: timeout sec 

Fijar el tiempo de espera en sec segundos, antes de arrancar automáticamente laopción por defecto. 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  100

Page 101: Linux (Curso)

CURSOS LINUX

title Sintaxis: title nombre ... 

Comienza una nueva opción de arranque. El nombre de la opción viene dado por elresto de la línea a partir del primer caracter que no sea un espacio. 

12.7 Lista de las órdenes generales Ordenes que se pueden usar tanto en el menú como en la línea de comandos. 

bootp Inicia un dispositivo de red mediante BOOTPcolor Colorea la interfaz de menúdevice Especifica un archivo como dispositivodhcp Inicia un dispositivo de red mediante DHCPunhide Esconde una particiónifconfig Configura una unidad de red manualmentepager Cambia el estado del mensáfono internopartnew Crea una partición primariaparttype Cambia el tipo de una particiónpassword Pone una contraseña para la interfaz de menúrarp Inicia un dispositivo de red mediante RARPserial Prepara un dispositivo de seriesetkey Configura el mapa de teclasterminal Elige una terminaltftpserver Especifica un servidor TFTPunhide Desvela una partición

bootp Sintaxis: bootp [“­­with­configfile”] 

Inicia el dispositivo de red mediante el protocolo BOOTP. Está orden solo estádisponible si se compila GRUB con soporte para arranque por red. Si   especificas   la   opción  “­­with­configfile”  en   la   orden,   GRUB   obtendrá   ycargará el archivo de configuración especificado por tu servidor BOOTP, con lamarca de vendedor “150”. 

color Sintaxis: color normal [resaltado] 

Cambia los colores del menú. El color normal se usa para las líneas del menú, yel color  resaltado  se usa para resaltar la línea que señala el cursor. Siomites resaltado, se usa el color inverso a normal para la línea resaltada. Elformato de un color es primer plano/ fondo. primer plano y fondo son nombressimbólicos de colores. El nombre tiene que ser uno de estos: 

• black • blue • green 

• cyan • red 

• magenta • brown • light­gray 

Los siguientes solo se pueden usar para el primer plano:• dark­gray • light­blue • light­green 

• light­cyan 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  101

Page 102: Linux (Curso)

CURSOS LINUX

• light­red • light­magenta 

• yellow • white 

Sólo los primeros ocho nombres son válidos para fondo. Puede usar el prefijoblink­  para   el   color  primer   plano  si   quiere   un   color   de   primer   planoparpadeante. Esta orden se puede utilizar en el archivo de configuración y en la línea decomandos, por lo que podría escribir en su archivo de configuración algo comoesto: 

# Poner los colores por defectocolor light­gray/blue black/light­gray

# Cambia los colores.title OS­BS likecolor magenta/blue black/magenta

device Sintaxis: device unidad fichero 

En el intérprete de GRUB, especifica el archivo fichero como la correspondenciade la unidad de BIOS  unidad. Puede usar esta orden para crear una imagen dedisco y/o para arreglar las unidades “adivinadas” por GRUB cuando las determineincorrectamente. Por ejemplo: 

GRUB> device (fd0) /floppy­imageGRUB> device (hd0) /dev/sd0

Esta orden sólo se puede usar en el intérprete GRUB. 

dhcp Sintaxis: dhcp [­­with­configfile] 

Inicia un dispositivo de red a través del protocolo  DHCP. En la actualidad,esta orden es solamente un alias para la orden bootp, ya que los dos protocolosson muy parecidos. Esta orden sólo está disponible si se compila GRUB consoporte de red. Si con esta orden se utiliza  “­­with­configfile”, GRUB obtendrá y cargará elarchivo   de   configuración   especificado   por   su   servidor   DHCP,   con   marca   devendedor “150”. 

unhide Sintaxis: hide partición 

Esconde la partición añadiendo la señal hidden al código de partición. Esto esútil   para   arrancar   DOS   o   Windows   cuando   existe   más   de   una   partición   fatprimaria en un mismo disco.

ifconfig Sintaxis   :    ifconfig  [“­­server=servidor”]   [“­­gateway=p_enlace”]   [“­­mask=máscara”][“­­address=dirección”] 

Configura la dirección de IP, la máscara de red, la puerta de enlace y ladirección del servidor de un dispositivo de red manualmente. Los valores debenestar en formato decimal, como “192.168.11.178”. El orden de las opciones noimporta.   Esta   orden   muestra   la   configuración   de   red   actual   cuando   no   seespecifica ninguna opción. 

pager Sintaxis: pager [estado] 

Activa o desactiva el "mensáfono" interno. Si estado es on se activa, y si esoff se desactiva. Si no se especifica ningún argumento el mensáfono cambia deestado. 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  102

Page 103: Linux (Curso)

CURSOS LINUX

partnew Sintaxis: partnew part tipo desde a 

Crea una nueva partición primaria; part especifica una partición en el lenguajede GRUB; tipo es el tipo de partición, y debe ser un número en el rango 0­0xff;desde  y  a  son los sectores inicial y final, expresados en valores de sectorabsolutos. 

parttype Sintaxis: parttype part tipo 

Cambia el tipo de una partición existente. part es el nombre de la partición enlenguaje de GRUB; tipo es el nuevo tipo de partición, y debe ser un número enel rango 0­0xff. 

password Sintaxis: password [“­­md5”] passwd [nuevo­archivo­config] 

Si se usa en la primera sección de un fichero de menú, deshabilita el controlde edición interactiva (editor de opciones de menú y línea de comandos) y lasopciones   protegidas   mediante   la   orden  lock.   Si   se   ha   especificado  nuevo­archivo­config, al introducir la contraseña  passwd  éste es cargado como elnuevo archivo de configuración, y se reinicia la Etapa 2 de GRUB. En casocontrario, GRUB simplemente habilita las instrucciones privilegiadas. Puedesusar esta orden en una sección de arranque automático, en cuyo caso GRUB pedirála contraseña antes de continuar. La opción  “­­md5”  le dice a GRUB que lacontraseña está encriptada con md5crypt. 

rarp Sintaxis: rarp 

Inicia un dispositivo de red a través del protocolo RARP. Esta orden solo estádisponible si se ha compilado GRUB con soporte de red. 

serial Sintaxis:  serial  [“­­unit=unidad”]   [“­­port=puerto”]   [“­­speed=velocidad”]   [“­­word=palabra”] [“­­parity=paridad”] [“­­stop=stop”] [“­­device=disp”] 

Inicia el dispositivo de serie. unidad es un número entre 0 y 3, que especificael puerto de serie a utilizar; por defecto se usa 0, que corresponde al puertonormalmente conocido como COM1. puerto es el puerto de E/S donde se encuentrael UART; si se especifica, toma preferencia sobre  unidad.  velocidad  es lavelocidad de transmisión; 9600 por defecto. palabra y stop es el número de bitsde datos y de bits de parada. Los bits de datos deben estar en el rango 5­8, ylos bits de parada son 1 o 2. Por defecto se usan 5 bits de datos y 1 bit deparada. paridad es uno de los siguientes: “no”, “odd” o “even”. Por defecto es“no”. La opción “­­device” sólo se puede utilizar en el intérprete de GRUB, eindica el dispositivo tty en el SO anfitrión que se debe usar. El puerto de serie no se utiliza como canal de comunicación a no ser que se usela orden terminal. Esta orden solo está disponible cuando se ha compilado GRUB con soporte paraterminal de serie. 

setkey Sintaxis: setkey [de_tecla a_tecla] 

Cambia el mapa del teclado. Hace corresponder la tecla  de_tecla  a la teclaa_tecla. Si no se especifica ningún argumento se reinicia el mapa del teclado.Nota   que   esta   orden  no  intercambia   las   teclas.   Si   lo   que   quieres   esintercambiar   las   teclas   debes   usar   la   orden   de   nuevo   con   los   argumentosintercambiados. Por ejemplo: 

GRUB> setkey capslock controlGRUB> setkey control capslock

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  103

Page 104: Linux (Curso)

CURSOS LINUX

La tecla debe ser una letra del alfabeto, un dígito o uno de estos símbolos:“escape”,  “exclam”,  “at”,  “numbersign”,  “dollar”,  “percent”,  “caret”,“ampersand”,  “asterisk”,  “parenleft”,  “parenright”,  “minus”,  “underscore”,“equal”,  “plus”,  “backspace”,  “tab”,  “bracketleft”,  “braceleft”,“bracketright”,  “braceright”,  “enter”,  “control”,  “semicolon”,  “colon”,“quote”,  “doublequote”,  “backquote”,  “tilde”,  “shift”,  “backslash”,  “bar”,“comma”,  “less”,  “period”,  “greater”,  “slash”,  “question”,  “alt”,  “space”,“capslock”, “FX” (“X” es un dígito), and “delete”. 

La tabla siguiente describe el caracter al que corresponde cada símbolo: exclam !at @

numbersign #dollar $percent %caret ^

ampersand &asterisk *parenleft (parenright )

minus ­underscore _

plus +bracketleft [bracerleft {bracketright ]braceright }semicolon ;colon :quote “

doublequote "tilde ~

backslash \bar |comma ,less <period .greater >slash /

question ?space “ “

terminal Sintaxis   :    terminal  [“­­dumb”]   [“­­timeout=segs”]   [“­­lines=líneas”]   [“­­silent”][“console”] [“serial”] [“hercules”] 

Selecciona una terminal para interacción con el usuario. Asume que la terminales compatible VT100 a no ser que se especifique la opción  “­­dumb”. Si seespecifica tanto  “console”  como  “serial”  GRUB usará la primera en la que sepulse una tecla, o la primera especificada si acaba el tiempo de espera. Si nose   indica   ninguna,   GRUB   informa   del   estado   actual.   La   orden   sólo   estádisponible si se ha compilado GRUB con soporte para terminal de serie. 

Aunque   para   la   mayoría   de   usuarios   no   tendrá   mucho   sentido,   GRUB   soportatambién   consola   Hércules.   La   consola   Hércules   se   usa   como   una   consolaordinaria, y su uso se asemeja al de las terminales de serie: indica “hercules”como argumento. La opción  “­­lines”  define el número de líneas en tu terminal, y se utilizapara la función de mensáfono interno. Si no especificas esta opción, se asumeun número de 24 líneas. La opción  “­­silent”  suprime el mensaje que te pide una pulsación de tecla.Esto puede resultar útil cuando tu sistema no posee un dispositivo de terminal.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  104

Page 105: Linux (Curso)

CURSOS LINUX

tftpserver Sintaxis   :   tftpserver dirección_ip 

Precaución:  Esta   orden   solo   existe   para   la   compatibilidad   "hacia   atrás".Utiliza ifconfig  en su lugar. Prevalece sobre la dirección IP de un servidor TFTP indicado por el servidorBOOTP/DHCP/RARP. El argumento dirección_ip debe ir en formato decimal, como en“192.168.0.15”. Esta orden sólo está disponible si se compila GRUB con soportede arranque por red. 

unhide Sintaxis   :   unhide part 

Hace visible la partición part, quitando la señal de oculta en el código de lapartición.   Esto   resulta   útil   cuando   se   arranca   DOS   o   Windows   y   existenmúltiples particiones primarias en un disco. 

12.8 La lista de órdenes para el menú y la línea de comandos Las órdenes siguientes se pueden utilizar tanto en la línea de comandos como en lasopciones del menú. Si no recuerda alguna de ellas, puede utilizar la orden help. 

blocklist Notación en lista de bloques de un archivoboot Arranca el sistema operativocat Muestra el contenido de un archivochainload Carga en cadena otro gestor de arranquecmp Compara dos archivosconfigfile Carga un archivo de configuracióndebug Pone la señal de debugdisplayapm Muestra información de APMdisplaymem Muestra configuración de la memoriaembed Inserta la Etapa 1.5find Busca un ficherofstest Comprueba un sistema de ficherosgeometry Manipula la geometría de una unidadhalt Apaga el ordenadorhelp Muestra mensajes de ayudaimpsprobe Prueba SMPinitrde Carga un initrdinstall Instala GRUBioprobe Comprueba los puertos de E/S de una unidadkernel Carga un núcleolock Bloquea una entrada de menúmakeactive Marca una partición como activamap Apunta una unidad a otramd5crypt Encripta una contraseña en formato MD5Module Carga un módulomodulenounzip Carga un módulo sin descomprimirpause Espera a que se pulse una teclaquit Sale del intérprete GRUBreboot Reinicia el ordenadorread Lee datos de la memoriaroot Fija el dispositivo raíz de GRUBrootnoverify Fija el dispositivo raíz sin montarlosavedefault Salva la entrada actual como por defectosetup Instala GRUB automáticamentetestload Comprueba el sistema de archivos cargando un ficherotestvbe Comprueba la VESA BIOS EXTENSIONuppermem Fija el tamaño de la memoria superior

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  105

Page 106: Linux (Curso)

CURSOS LINUX

vbeprobe Prueba la VESA BIOS EXTENSION

blocklist Sintaxis: blocklist arch 

Imprime la notación en lista de bloques del archivo arch. 

boot Sintaxis   :   boot 

Arranca el SO/gestor de arranque que ha sido cargado. Sólo es necesario cuandose arranca interactivamente desde la línea de comandos (ya que está implícitaen el final de una entrada del menú). 

cat Sintaxis: cat arch 

Presenta en pantalla el contenido del archivo arch. Esta orden puede ser útilpara recordar la partición raíz del SO: 

GRUB> cat /etc/fstab

chainloader Sintaxis: chainloader [“­­force”] file 

Carga en cadena file como gestor de arranque. Como con cualquier otro archivoque se carga mediante el código del sistema de ficheros, se puede utilizar lanotación   de   lista   de   bloques  “+1”  para   carpturar   el   primer   sector   de   lapartición actual. Si se especifica la opción  “­­force”, el archivo  file  escargado a la fuerza, sin importar que no posea una firma correcta. Esto esnecesario cuando se quiere cargar un gestor de arranque defectuoso, como el deSCO UnixWare 7.1 

cmp Sintaxis   :   cmp archivo1 archivo2 

Compara el archivo archivo1 con archivo2. Si difieren en tamaño, imprime algocomo esto: 

Differ in size: 0x1234 [archivo1], 0x4321 [archivo2]

Si el tamaño es el mismo pero los bytes en un desplazamiento (offset) sondiferentes, imprime los bytes como sigue: 

Differ at the offset 777: 0xbe [archivo1], 0xef [archivo2]

Si son completamente idénticos no se imprimirá nada. configfile Sintaxis: configfile archivo 

Carga archivo como fichero de configuración. 

debug Sintaxis: debug 

Activa el modo "debug" (desactivado por defecto). Cuando el modo debug estáactivo, se imprimen algunos mensajes extra sobre la actividad del disco. Laopción de debug es útil principalmente para programadores de GRUB que pruebencódigo nuevo. 

displayapm Sintaxis: displayapm 

Presenta información sobre el APM de la BIOS 

displaymem Sintaxis   :   displaymem 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  106

Page 107: Linux (Curso)

CURSOS LINUX

Muestra el mapa de direcciones de memoria del sistema, incluyendo las regionesde memoria RAM instalada, tal como las ve GRUB. El sistema para la  memoriasuperior/inferior de GRUB utiliza la interfaz estándar de BIOS para la memoriadisponible en el primer megabyte (memoria inferior) y un número sintetizado devarias interfaces de BIOS para la memoria que empieza en 1MB y sube hasta elprimer agujero del chipset para la memoria superior (la interfaz de PC estándarpara la memoria superior comunica como máximo 64MB). 

embed Sintaxis: embed stage1_5 dispositivo 

Inserta la Etapa 1.5 stage1_5 en los sectores detrás del MBR si dispositivo esuna unidad de disco, o en el área del gestor de arranque si el dispositivo esuna partición FFS o ReiserFS. Si la operación tiene éxito, imprime el número desectores que ocupa stage1_5. Generalmente no es necesario que ejecute esta orden directamente. 

find Sintaxis: find archivo 

Busca el fichero con nombre  archivo  en todas las particiones, e imprime lalista de dispositivos que lo contienen. El nombre de archivo debe tener unnombre de archivo absoluto como en /boot/GRUB/stage1. 

fstest Sintaxis   :   fstest 

Activa la comprobación del sistema de ficheros. La comprobación del sistema deficheros,   cuando   está   activa,   imprime   información   correspondiente   a   laslecturas del dispositivo y los valores que se envían a las rutinas de bajonivel.   El   formato   es  “<partición­sector­inicio,byte­inicio,  longitud­byte”>para las lecturas de alto nivel dentro de una partición y  “[sector­inicio­disco]”  para   las   peticiones   del   disco   de   sectores   de   bajo   nivel.   Lacomprobación   del   sistema   de   ficheros   se   desactiva   cuando   se   usa   la   ordeninstall o testload 

geometry Sintaxis: geometry unidad [cilindros cabezal sector [sector_total]] 

Imprime la información de la unidad. En el intérprete de GRUB, se puede ajustarla geometría de la unidad arbitrariamente. El número de cilindros, cabezales,sectores y sectores totales se igualan respectivamente a CILINDRO, CABEZAL,SECTOR   y   SECTOR_TOTAL.   Si   omites   SECTOR_TOTAL,   este   valor   se   calculaautomáticamente utilizando los valores C/C/S. 

halt Sintaxis: halt “­­no­apm” 

Esta orden detiene el ordenador. Si se especifica la opción “ ­­no­apm” no sehace ninguna llamada APM de BIOS. En caso contrario se apaga el ordenadorusando APM. 

help Sintaxis: help “­­all” [patrón ...] 

Muestra información de ayuda sobre las órdenes disponibles. Si no especifica unpatrón, la orden muestra pequeñas descripciones de la mayoría de las órdenesdisponibles. Si se especifica la opción “­­all”, se muestran también pequeñasdescripciones de órdenes rara vez usadas (como testload). Si se especifica un patrón, muestra información algo más larga sobre cada unode las órdenes que contenga el patrón. 

impsprobe Sintaxis: impsprobe 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  107

Page 108: Linux (Curso)

CURSOS LINUX

Comprueba la tabla de configuración Intel Multiprocessor Specification 1.1 o1.4, y arranca en un bucle las varias CPUs que encuentre. Esta orden sólo sepuede usar en la Etapa 2. 

initrd Sintaxis: initrd archivo ... 

Carga un ramdisk inicial para una imagen de arranque en formato Linux y escribelos parámetros apropiados en el área de memoria de Linux. 

install Sintaxis:  install  [“­­force­lba”]   [“­­stage2=archivo_etapa2_so”]   stage1_file   [“d”]dest_dev stage2_file [addr] [“p”] [config_file] [real_config_file] 

Esta orden es bastante compleja, y no debería usarla a no ser que esté muyfamiliarizado con GRUB. Utilice setup en su lugar. Brevemente, realiza una instalación completa asumiendo que la Etapa 2 o laEtapa 1.5 se encuentra en su lugar de instalación final. Algo más detalladamente, lo que hace es cargar  stage1_file, validar que setrata de una Etapa 1 de GRUB con el número de versión correcto, instalar unalista de bloques para cargar stage2_file como una Etapa 2.  Si está presente laopción  “d”, la Etapa 1 buscará siempre el disco en el que en realidad estáinstalado stage2_file en vez de utilizar el disco desde el que se arranca. LaEtapa 2 se carga en la dirección de memoria addr, que debe ser “0x8000” parauna verdadera Etapa 2 y 0x2000 para una Etapa 1.5. Si no se especifica addr,GRUB   determinará   la   dirección   automáticamente.   Después   escribe   la   Etapa   1completa   en   el   primer   bloque   de   la   unidad  dest_dev.   Si   la   opción  “p”  oconfig_file está presente, lee el primer bloque de stage2, lo modifica con losvalores de la partición en la que se encuentra stage2_file (con la opción “p”)o pone la cadena config_file en el área, indicando a la stage2 donde buscar elarchivo de configuración en el arranque. De la misma forma, si está presentereal_config_file y stage1_file es una Etapa 1.5, el config_file de la Etapa 2será parcheado con el nombre de archivo de configuración real_config_file. Estaorden preserva el BPB de DOS (y para los discos duros la tabla de particiones)del sector en el que se instala la Etapa 1. 

Precaución:  Algunas BIOS con errores no comunican correctamente la unidad dearranque   cuando   se   arranca   desde   el   disco   duro.   Por   lo   tanto,   sidesafortunadamente tienes una BIOS de estas, tendrás que especificar la opción“d”, resida o no la Etapa 2 en la unidad de arranque. Se conoce que lassiguientes BIOS fallan en este sentido: Fujitsu LifeBook 400 BIOS versión 31J0103A HP Vectra XU 6/200 BIOS versión GG.06.11 

Precaución2: Algunas BIOS no devuelven un mapa de bits de soporte LBA correctoincluso cuando lo soportan. Así que GRUB posibilita como solución ignorar elmapa de bits incorrecto, mediante la opción “­­force­lba”. No use esta opciónsi sabe que tu BIOS no tiene soporte para LBA. 

Precaución3: Debe especificar la opción “­­stage2” en el intérprete de GRUB sino puede desmontar el sistema de ficheros donde reside tu archivo stage2. Elargumento debería ser el nombre del fichero en su sistema operativo.

ioprobe Sintaxis   :   ioprobe unidad 

Comprueba los puertos de E/S utilizados para la unidad unidad. Esta orden listalos puertos de E/S en la pantalla. Para información técnica @xref{Interiores}. 

kernel Sintaxis: kernel [“­­type=tipo”] [“­­no­mem­option”] archivo ... 

Intenta cargar la imagen de arranque principal (Multiarranque a.out o ELF,Linux zImage o bzImage, FreeBSD a.out, NetBSD a.out, etc.) del fichero archivo.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  108

Page 109: Linux (Curso)

CURSOS LINUX

El resto de la línea se pasa íntegra como órdenes para el núcleo. Si hay algúnmódulo, se debe volver a cargar después de usar esta orden. Esta orden también acepta la opción  “­­type”, con la que puedes especificarexplícitamente que tipo de kernel es archivo. El argumento tipo ha de ser unode   los   siguientes:  “netbsd”,  “freebsd”,  “openbsd”,  “linux”,  “biglinux”  o“multiboot”. De todas formas, solo necesita especificarlo si quiere cargar unnúcleo ELF NetBSD, porque GRUB es capaz de determinar sin problemas el tipo denúcleo en los otros casos. La opción “­­no­mem­option” sólo es efectiva para Linux. Si se especifica, GRUBno le pasa la opción “mem=“ al núcleo. 

lock Sintaxis   :   lock 

Evita que usuarios corrientes ejecuten a su antojo opciones del menú. Debe usarla orden password si quieresque esta orden sea realmente efectiva.Esta orden se usa en un menú, tal y como muestra este ejemplo: 

title   Esta   opción   es   demasiado   peligrosa   para   que   la   ejecutecualquieralockroot (hd0,a)kernel /os­sin­seguridad

makeactive Sintaxis: makeactive 

Pone el dispositivo raíz de GRUB como la partición activa en el disco raíz.Esta orden solo funciona sobre particiones primarias de un disco duro. 

map Sintaxis: map disco1 disco2 

Asigna el disco disco1 al disco disco2. Necesario cuando se arranca en cadenaalgunos sistemas operativos, DOS por ejemplo, si ese SO reside en un disco queno es el primero. Un ejemplo: 

GRUB> map (hd0) (hd1)GRUB> map (hd1) (hd0)

En el ejemplo se intercambia el orden entre el primer y el segundo disco duro. 

md5crypt Sintaxis: md5crypt 

Encripta en formato MD5. La contraseña encriptada se puede utilizar con laorden password. 

module Sintaxis: module archivo ... 

Carga el módulo de arranque  archivo  para una imagen de arranque en formatoMultiarranque (no se asume nada sobre el contenido del fichero, por lo quequien usa esta orden debe saber lo que el núcleo en cuestión espera). El restode la línea se pasa íntegra como línea de comandos del módulo, como en el casode la orden  kernel. Debe cargar una imagen de núcleo multiarranque antes decargar cualquier módulo. 

modulenounzip Sintaxis: modulenounzip archivo ... 

Igual   que   la   orden  module,   solo   que   con   la   descompresión   automáticadeshabilitada. 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  109

Page 110: Linux (Curso)

CURSOS LINUX

pause Sintaxis: pause mensaje ... 

Imprime mensaje y espera a que se pulse alguna tecla. 

quit Sintaxis   :   quit 

Sale del intérprete de GRUB. Esta orden solo se puede usar en el intérprete. 

reboot Sintaxis   :   reboot 

Reinicia el ordenador 

read Sintaxis: read dir 

Lee un valor de 32 bits de la dirección dir de memoria, y la muestra en formatohexadecimal. 

root Sintaxis: root dispositivo [hdbias] Fija el dispositivo raíz en dispositivo, después intenta montarlo para obtener eltamaño de la partición (para pasar la descripción de la partición en el formatoES:ESI usado por algunos gestores de arranque que se cargan en cadena), el tipo deunidad BSD (para arrancar núcleos BSD utilizando su formato de arranque nativo), ypara determinar correctamente la "rodaja" (slice) de PC donde se encuentra unasubpartición BSD. Si por ejemplo existe un disco IDE y uno SCSI, y tu partición raízde FreeBSD está en el disco SCSI, utiliza “1” para hdbias.

rootnoverify Sintaxis: rootnoverify dispositivo [hdbias] 

Similar a la orden root, pero no intenta montar la partición. Útil cuando un SOse encuentra fuera del área de disco que GRUB es capaz de leer, pero aún así sequiere asignar el dispositivo raíz correcto. Observe que los puntos mencionadosanteriormente   para  root  derivados   del   intento   de   montar   la   partición  nofuncionarán correctamente. 

savedefault Sintaxis: savedefault 

Guarda la opción de menú actual como la opción por defecto. Un ejemplo: default savedtimeout 10

title GNU/Linuxroot (hd0,0)kernel /boot/vmlinuz root=/dev/sda1 vga=extinitrd /boot/initrdsavedefault

title FreeBSDroot (hd0,a)kernel /boot/loadersavedefault

Con esta configuración GRUB seleccionará la última opción arrancada como laopción por defecto. 

setup Sintaxis:  setup  [“­­force­lba”]   [“­­stage2=arch_stage2_so”]   [“­­prefix=dir”]install_device [image_device] 

Realiza la instalación de GRUB automáticamente. Esta orden utiliza la ordeninstall para hacer el trabajo, e instala GRUB en el dispositivo install_device.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  110

Page 111: Linux (Curso)

CURSOS LINUX

Si se especifica image_device, buscará las imágenes de GRUB en el dispositivoimage_device, en caso contrario utiliza el  dispositivo  raíz  actual,  fijadomediante la orden root. Si install_device es un disco duro, intentará insertarsi fuera posible una Etapa 1.5. La opción “­­prefix” especifica el directorio en el que están las imágenes deGRUB. Si no se indica, GRUB las busca automáticamente en “/boot/GRUB” y “GRUB”.Las   opciones  “­­force­lba”  y  “­­stage2”  sólo   se   pasan   a  install  si   seespecifica explícitamente. 

testload Sintaxis: testload archivo 

Lee todo el contenido de  archivo  de varias maneras diferentes y las comparapara comprobar el código del sistema de ficheros. El resultado devuelto es algocríptico   pero   si   no   informa   de   ningún   error,   y   el   dato   final   leído,“i=X,filepos=Y”  tiene   los   valores  X  y  Y  iguales,   entonces   es   sin   dudacoherente, y lo más probable es que funcione correctamente con un margen deerror de desplazamiento consistente. Si la prueba tiene éxito, el siguientepaso que se debería tomar es intentar cargar un núcleo. 

testvbe Sintaxis: testvbe mode 

Prueba el modo mode de la EXTENSION VESA de la BIOS (VBE). Esta orden pone tutarjeta de vídeo en modo gráfico y muestra una animación sin parar. Pulsacualquier tecla para salir. 

uppermem Sintaxis: uppermem kbytes 

Fuerza a GRUB a asumir que sólo hay instalados  kbytes  kilobytes de memoriasuperior. Los mapas de rango de direcciones del sistema son descartados. Precaución:  Se debe usar esta orden con mucho cuidado, y sólo debería sernecesario con equipos viejos. La comprobación de BIOS de GRUB es capaz dedetectar toda la RAM en todos los equipos. Se puede usar también con propósitode pulir errores mintiendo al SO. 

vbeprobe Sintaxis: vbeprobe [mode] Comprueba la información de la Extension Vesa de la Bios (VBE). Si se especifica elmodo mode, solo muestra información sobre este. En caso contrario la orden lista enpantalla todos los modos VBE disponibles.

13. Mensajes de error que produce GRUB Este   capítulo   describe   los   mensajes   de   error   mostrados   por   GRUB   cuando   surgenproblemas. 

13.1 Errores que imprime la Etapa 1 Por lo general, la Etapa 1 responde a los errores imprimiendo un mensaje de error ydeteniéndose. Presionar CTRL­ALT­DEL hará que se reinicie. Lo que sigue es una lista comprensiva de los mensajes de error de la Etapa 1: 

Hard Disk Error Se   está   leyendo   stage2   o   stage1.5   del   disco,   y   ha   fallado   el   intento   dedeterminar el tamaño y la geometría del mismo. 

Floppy Error Se está leyendo stage2 o stage1.5 de un disquete, y ha fallado el intento dedeterminar el tamaño y la geometría del disquete. Se menciona como un errordiferente al de disco ya que la secuencia de comprobación es diferente de la deeste. 

Read Error CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  111

Page 112: Linux (Curso)

CURSOS LINUX

Sucedió un error de lectura de disco cuando se intentaba leer la stage2 ostage1.5. 

Geom Error El lugar donde se encuentra la stage2 o stage1.5 no está en la porción de discoaccesible directamente por las llamadas de lectura de la BIOS. Esto puedesuceder porque el usuario haya cambiado la geometría traducida por la BIOS, oporque se haya movido el disco a otro equipo o controladora después de lainstalación, o porque GRUB no fue instalado desde él mismo (si lo hubiera sido,se habría visto la versión del error de la Etapa 2, y no se habría podidocompletar la instalación). 

13.2 Errores que imprime la Etapa 1.5 Por lo general, la Etapa 1.5 responde a los errores imprimiendo un mensaje de errorcon formato Error num y parándose. Presionar CTRL­ALT­DEL hará que se reinicie. Los números de error corresponden a los errores devueltos por la Etapa 2. 

13.3 Errores que imprime la Etapa 2 La Etapa 2 responde a los errores de manera general abortando la operación que seesté realizando, imprimiendo un mensaje de error y (si es posible) o bien continuarbasándose en el hecho de que ha ocurrido un error o esperar a que el usuario resuelvael error. Lo que sigue es una lista comprensiva de los mensajes de error de la Etapa 2 (losnúmeros de error de la Etapa 1.5 se recogen en cada descripción delante de los dospuntos): 1 : Filename must be either an absolute filename or blocklist 

Se devuelve este error cuando el nombre de un archivo pedido no se ajusta a lasintaxis/reglas explicadas en “Sintaxis y semántica del sistema de ficheros”. 

2 : Bad file or directory type Se devuelve este error cuando el archivo pedido no es un fichero ordinario sinoalgo como un enlace simbólico, un directorio o FIFO. 

3 : Bad or corrupt data while decompressing file Se devuelve este error cuando el código de descompresión encuentra un errorinterno. Normalmente debido a un fichero corrupto. 

4 : Bad or incompatible header in compressed file Se produce este error si la cabecera de un archivo supuestamente comprimido eserronea. 

5 : Partition table invalid or corrupt Se produce este error si fallan las comprobaciones básicas de integridad de latabla de particiones. Esto es signo de algo malo. 

6 : Mismatched or corrupt version of stage1/stage2 Este error se produce si se utiliza la orden install con versiones de stage1 ostage2 incompatibles o corruptas. En general no detecta corrupción, pero síefectúa una comprobación básica  de los números de versión, que no  deberíafallar. 

7 : Loading below 1MB is not supported Este error se debe a que la dirección más baja de un núcleo está por debajo dellímite de 1 MB. El formato zImage de Linux es un caso especial y se puedeutilizar ya que tiene una dirección de carga fija y un tamaño máximo. 

8 : Kernel must be loaded before booting Este error es debido a que se ha pedido a GRUB que ejecute una secuencia dearranque sin tener un núcleo que iniciar. 

9 : Unknown boot failure Este error indica que el intento de arranque falló por razones desconocidas. 

10 : Unsupported Multiboot features requested Este   error   se   produce   cuando   la   palabra   de   opciones   Multiarranque   en   lacabecera Multiarranque requiere una opción que no se reconoce. El motivo deesto es que el núcleo requiere un manejo especial que GRUB probablemente esincapaz de darle. 

11 : Unrecognized device string 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  112

Page 113: Linux (Curso)

CURSOS LINUX

Se devuelve este error si se esperaba una cadena de dispositivo, y se haencontrado   una   cadena   que   no   se   ajusta   a   la   sintaxis/reglas   listadas   en“Sintaxis y semántica del sistema de ficheros”. 

12 : Invalid device requested Se devuelve este error cuando es posible reconocer una cadena de dispositivopero no pertenece al resto de errores de dispositivo. 

13 : Invalid or unsupported executable format Este error se produce si la imagen del núcleo que se intenta cargar no sereconoce   como   Multiarranque   o   uno   de   los   formatos   soportados   nativamente(zImage o bzImage de Linux, FreeBSD o NetBSD). 

14 : Filesystem compatibility error, cannot read whole file Parte del código de lectura de sistemas de ficheros en GRUB tiene límites en lalongitud   de   los  archivos   que   puede  leer.   Este   error  se   produce   cuando  elusuario encuentra uno de esos límites. 

15 : File not found Este   error   es   devuelto   si   no   se   puede   encontrar   el   nombre   de   ficheroespecificado, aunque el resto de información (como el disco/la partición) escorrecta. 

16 : Inconsistent filesystem structure Este error lo devuelve el código del sistema de ficheros para indicar un falloen las comprobaciones básicas de la estructura del sistema de ficheros en eldisco, que no han producido el resultado esperado. 

17 : Cannot mount selected partition Este error se produce cuando la partición solicitada existe pero GRUB no puedereconocer el tipo de sistema de ficheros. 

18 : Selected cylinder exceeds maximum supported by BIOS Este error es debido a que se ha intentado leer en una dirección LBA más alládel final del area traducida por la BIOS. Esto sucede en general si tu disco esmayor de lo que puede manejar la BIOS (512 MB para discos (E)IDE en máquinasantiguas, o mayor que 8GB en general). 

19 : Linux kernel must be loaded before initrd Se devuelve este error si se ha usado la orden initrd antes de haber cargado unnúcleo de Linux. Similar al error siguiente, sólo tiene sentido en este caso detodas maneras. 

20 : Multiboot kernel must be loaded before modules Este error se devuelve si se usa la orden de carga de módulos antes de cargarun núcleo multiarranque. Sólo tiene sentido en este caso de todas formas, yaque GRUB no tiene idea de como comunicar la presencia o ubicación de este tipode módulos a un núcleo que no conoce el Multiarranque. 

21 : Selected disk does not exist Se produce este error si la parte que corresponde al disco en una opcióndevice­ o en un nombre de archivo se refiere a un disco o dispositivo de laBIOS que no está presente o que no es reconocido por la BIOS del sistema. 

22 : No such partition Este   error   se   produce   si   se   pide   una   partición   que   no   está   en   el   discoseleccionado al especificar una unidad o un nombre de archivo. 

23 : Error while parsing number Este error se devuelve cuando GRUB espera leer un número y encuentra otro tipode datos. 

24 : Attempt to access block outside partition Este error se produce cuando una dirección de bloque lineal (lba) está fuera dela partición del disco. Esto ocurre por lo general debido a un sistema deficheros corrupto en el disco o a un fallo en el código que lo maneja en GRUB(es una gran herramienta para detectar errores). 

25 : Disk read error Se devuelve este error si se produce un error de disco cuando se intentabacomprobar o leer datos de un disco en particular. 

26 : Too many symbolic links Este error se produce si el número de enlaces es mayor que el máximo (5 en laactualidad). Lo más probable es que los enlaces estén haciendo un bucle. 

27 : Unrecognized command 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  113

Page 114: Linux (Curso)

CURSOS LINUX

Este error se produce si se ha introducido una orden que GRUB no reconoce en lalínea de comandos o en una secuencia de arranque en una opción seleccionada deun archivo de configuración. 

28 : Selected item cannot fit into memory Este error es producido por una orden de carga de un núcleo, módulo o archivosin formato que intenta cargar los datos de manera que no caben en memoria, oque simplemente es demasiado grande. 

29 : Disk write error Este error se produce si hay un error de escritura de disco cuando se intentabaescribir en él. Esto sólo ocurriría en general durante una orden de instalacióno activación de una partición. 

30 : Invalid argument Este error es debido a que el argumento especificado en una orden no es válido.

31 : File is not sector aligned Este error sólo puede ocurrir cuando accedes a una partición ReiserFS mediantelistas de bloques (por ej. con la orden install). En este caso deberías montarla partición con la opción “­o notail”. 

32 : Must be authenticated Este error se produce cuando intentas acceder a una opción bloqueada. Tienesque introducir la contraseña correcta antes de poder usar esa opción. 

33 : Serial device not configured Este error se produce si estás intentando cambiar la terminal a una serialantes de haber preparado un dispositivo de serie. 

34 : No spare sectors on the disk Este error es devuelto si un disco no parece tener suficiente espacio libre.Esto sucede cuando intentas insertar la Etapa 1.5 en los sectores sin usardetrás del MBR, pero la primera partición comienza justo a continuación del MBRo los sectores son usados por EZ­BIOS. 

14. Invocar el intérprete GRUB Este capítulo documenta el intérprete de órdenes de GRUB. Observa que el intérpretede GRUB es un emulador; no funciona bajo el sistema nativo, por lo que a veces puedeequivocarse. Por lo tanto no debería fiarse de él demasiado. Si hubiera cualquierproblema con él, no dude en usar un sistema GRUB nativo, especialmente si no aciertacon la correspondencia entre unidades de la BIOS y dispositivos del SO. 

14.1 Introducción al intérprete de GRUB Puedes usar la orden GRUB para instalar GRUB y como campo de pruebas cuando añada unanueva característica en GRUB o cuando corrija un fallo. La orden GRUB es casi igual auna Etapa 2, y de hecho, comparte el código fuente con la Etapa 2 y en ambas puedesutilizar las mismas órdenes. La emulación se realiza reemplazando las llamadas de laBIOS con llamadas de sistema de UNIX y funciones de libc. La orden GRUB acepta las opciones siguientes: “­­help” 

Imprime un sumario de las opciones de la línea de comandos. 

“­­version” Imprime el número de versión. 

“­­verbose” Imprime mensajes más detallados para quien desee eliminar posibles fallos. 

“­­device­map=archivo” Usar el fichero archivo como mapa de dispositivos. El formato se describe en14.3 La correspondencia entre unidades de la BIOS y dispositivos del SO. 

“­­no­floppy” No hacer comprobación de las unidades de disquete. Esta opción no tiene efectosi se ha especificado la opción “­­device­map”. 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  114

Page 115: Linux (Curso)

CURSOS LINUX

“­­probe­second­floppy” Comprueba la segunda unidad de disquete. Si no se especifica esta opción elintérprete de GRUB no la comprueba, ya que a veces lleva bastante tiempo. Siespecificas un archivo de mapa de dispositivos el intérprete GRUB ignora estaopción. 

“­­config­file=archivo” Lee el archivo de configuración archivo en lugar de “ /boot/GRUB/menu.lst”. Elformato es el mismo que el de un archivo normal. 

“­­boot­drive=unidad” Fija el dispositivo de arranque de la stage2 en unidad. Este argumento deberíaser un entero (decimal, octal o hexadecimal). 

“­­install­partition=par” Fija la  partición de instalación  de stage2 en  par. El argumento debe ser unentero (decimal, octal o hexadecimal). 

“­­no­config­file” No usar el archivo de configuración aunque se pueda leer. 

“­­no­curses” No usar la interfaz de "curses" incluso aunque esté disponible. 

“­­batch” Esta opción equivale a “­­no­config­file ­­no­curses”. 

“­­read­only” Deshabilita la escritura a cualquier disco. 

“­­hold” Esperar a que se adjunte un debugger. Esta opción es útil cuando se deseaeliminar errores del código de inicio. 

14.2 Como instalar GRUB mediante    GRUB      El procedimiento de instalación es el mismo que bajo una Etapa 2  nativa. Aquí sedescribe la información específica de la orden GRUB. Con lo que debe tener cuidado es con el buffer cache.  GRUB utiliza los dispositivosdirectamente (raw) en vez de los sistemas de ficheros, por lo que existe el problemapotencial de que inconsistencias del caché puedan corromper los sistema de ficheros.Lo que nosotros recomendamos es: 

• Si es posible, desmonta antes de ejecutar  GRUB  las unidades en las que GRUBpueda escribir datos. 

• Si una unidad no se puede desmontar pero se puede montar con la etiqueta sólode escritura, hacerlo así. Eso debería ser seguro. 

• Si una unidad debe ser montada con la etiqueta de escritura­lectura, asegúresede que no se está llevando a cabo ninguna actividad sobre ella mientras seejecuta la orden GRUB. 

• Reinicie su sistema operativo tan pronto como sea posible. Es probable que estono sea necesario si sigues las reglas anteriores, pero reiniciar es el métodomás seguro. 

Además de esto, introduzca la orden quit cuando acabe la instalación.  Esto es muyimportante porque quit hace consistente el buffer caché. No pulse CRTL­c. Si quiere instalar GRUB de manera no interactiva, especifique la opción “­­batch” enla línea de comandos. Aquí tiene un ejemplo sencillo: 

#!/bin/sh

# Usa /usr/sbin/GRUB si estás en un sistema antiguo./sbin/GRUB ­­batch <<EOT 1>/dev/null 2>/dev/null

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  115

Page 116: Linux (Curso)

CURSOS LINUX

root (hd0,0)setup (hd0)quitEOT

14.3 La correspondencia entre unidades de la BIOS y dispositivos del SO Cuando   se   especifica   la   opción  “­­device­map,   el   intérprete   de   GRUB   creaautomáticamente el fichero del mapa de dispositivos a no ser que ya exista. El nombrede archivo preferido es “/boot/GRUB/device.map”. Si el fichero del mapa de dispositivos ya existe, el intérprete de GRUB lo lee paracorresponder unidades de la BIOS a dispositivos del SO. El archivo consiste en líneascomo esta: 

dispositivo archivo

dispositivo es una unidad, con la sintaxis propia de, y archivo es un fichero del SO,normalmente un fichero de dispositivo. La razón por la que el intérprete de GRUB le da un fichero de dispositivos es que enalgunos contextos no es capaz de “adivinar” la correspondencia de unidades de la BIOSa dispositivos del SO correctamente. Por ejemplo, si se intercambia la secuencia dearranque entre IDE y SCSI en la BIOS, el intérprete se equivoca el orden. Así, se puede editar el archivo si el intérprete de GRUB comete algún error. 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  116

Page 117: Linux (Curso)

CURSOS LINUX

MANIPULACIÓN DE PROCESOS   Bajo UNIX cada programa en ejecución se compone de, al menos, un procesos.  Desde elpunto de vista del SO, cada procesoes independiente del resto.

psLista todos los procesos del sistema, su estado, tamaño, nombre, propietario. tiempode CPU, tiempo de reloj, etc.

ps [opciones]

Opciones:­a: Muestra todos los procesos con la terminal controlando, excepto el procesode usuario actual.­r: Muestra los procesos en ejecución.­x: Muestra los procesos sin terminal controlando.­u: Muestra los propietarios de los procesos­f: Visualiza la relación padre­hijo de los procesos­l: Listado en formato largo­A: Todos los procesos­N: Contrario a la selección.­ww: muestra los parámetros de la línea de comandos.

Cabeceras:PPID: PID del padreUSER: Propietario de cada procesoPID: Identificador de proceso%CPU: Porcentaje de CPU ocupado por el proceso.   Para un sistema de variosprocesadores, el porcentaje puede ser superior al 100%.%MEM: Porcentaje de memoria ocupada por el proceso.VSZ: Cantidad de memoria virtual ocupada por el proceso.RSS: Cantidad de memoria residente ocupada por el proceso.TYY: Terminal controlado por el procesos.START o S: Fecha en que el proceso arrancó.TIME: Cantidad de tiempo gastado en CPU.COMMAND Nombre del comando y parámetrosSTAT: Estado del procesos.

Estado de un proceso:S Proceso dormido.R Actualmente en CPUD Dormido sin interrupción posible (generalmente relacionado con E/S).T Proceso haciendo trazas por un depurador o parado.Z Zombie (Proceso padre no tiene conocimiento de la muerte de su hijo, el padrefue muerto inapropiadamente)

Modificadores de la entrada STATW No residen páginas en memoria.< Proceso de prioridad alta.N Proceso de prioridad baja.L   Páginas   en   memoria   bloqueadas   (normalmente   significa   la   necesidad   defuncionalidad en tiempo real)

topMuestra los procesos de forma interactiva.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  117

Page 118: Linux (Curso)

CURSOS LINUX

killEnvía señales a los procesos en ejecución.  El SO, por defecto, proporciona a cadaproceso un conjunto estándar de manejadores de señales.

kill [­señal] PID

señal: Representa el número de señal.  Por defecto es 15 (terminar)­9 (KILL) falla únicamente cuando el procesos está en la mitad de una llamada alsistema.­1   (SIGUP)   Sirve   para   que   los   procesos   servidores   relean   sus   archivos   deconfiguración.  kill no significa necesariamente eliminar un proceso.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  118

Page 119: Linux (Curso)

CURSOS LINUX

killproc/killallEnvía señales a los procesos por medio de su PATH.

killproc [­señal] path

freeInformación sobre la memoria principal del sistema.

uptimeMuestra   al   usuario  el   tiempo   que  lleva   ejecutándose   el  sistema   desde   el  últimoarranque, cantidad de usuarios conectados y la carga del mismo.

niceCambia la prioridad de un proceso.La prioridades en Linux van desde –20 (máxima prioridad) hasta 19 (mínima prioridad).Los procesos de usuario utilizan valores de 0 a 19 (0 por defecto).

nice –n 10 nombre_procesonice –n 10 top

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  119

Page 120: Linux (Curso)

CURSOS LINUX

Obtener la salida de un procesoCon el comando “echo $?” podemos obtener el código de salida del último proceso quese terminó de ejecutar.  Si dicho proceso se a ejecutado sin inconveniente la salidaes 0, caso contrario un número distinto de 0 que indica el código de error.

PROCESOS DE ARRANQUE:   

Arranque de una computadora:Cuando se inicia el sistema, el hardware (en realidad, un programa en ROM) lee

el primer sector del disco de arranque y ejecuta el código que entra ahí.   En undisco  sin particiones, el primer sector es un bloque de arranque que se carga elprograma de arranque (en el caso de Linux, es LILO o GRUB).   Los disco duros quetiene particiones,  y el programa  que está en el primer sector lee la  tabla departiciones, que también está en el primer sector, carga y ejecuta el primer sectorde la partición activa.   Una partición tiene la misma estructura que un disco sinparticiones, con un bloque de arranque que carga el programa de arranque.   En unasituación real, una partición puede tener subparticiones...

Carga del kernel:Una   vez   iniciado   LILO   y   seleccionado   Linux   como   sistema   operativo   en   el

arranque, la primera cosa que se carga es el kernel.Ningún SO está en memoria en este momento, las PC no tienen una forma fácil de

acceso a toda su memoria.  Si, el kernel se debe cargar entero en el primer megabytede RAM disponible.   Para ello el kernel se comprime.   La cabecera del  archivocontiene el código necesario para llevar a la CPU a modo protegido (eliminando deesta forma esta restricción de memoria) y descomprimir el resto de kernel.

Ejecución del kernelºCon el kernel en memoria, se puede empezar la ejecución. Algunas partes del

kernel se encuentran compiladas en módulos que no son accesibles.Como mínimo, el kernel debe tener bastante código para configurar su subsistema

de memoria virtual, FS, multiprogramación, etc.Una vez iniciado el kernel, una prueba de Hw determina qué controladores de

dispositivo se deberían iniciar.A partir de aquí el kernel puede montar el sistema de archivo raíz, e iniciar el

proceso init.

Proceso init:Es el primer proceso no kernel que se inicia, siempre posee PID 1.Lee   su   archivo   de   configuración   /etc/inittab   y   determina   el   runlevel   de

ejecución.  Esencialmente un nivel de ejecución dicta el  comportamiento del sistema.Cada   nivel   (0­6)   sirve   para   un   propósito   específico.     Un   nivel   de   ejecucióninitdefault   se   selecciona   si   existe;   de   otra   forma   se   pide   por   pantalla   paraproporcionar un valor de nivel de ejecución.

Por defecto los runlevel son:0 ­ Para el sistema1 ­ Monousuario(sin red)2 ­ Multiusuario(sin nfs)3 ­ Multiusuario5 ­ Multiusuario con xdm6 – Reinicio del sistema

Con   el   comando   “init   q”   se   puede   volver   a   leer   el   archivo   de   configuración   /etc/inittab.

Scripts rc:

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  120

Page 121: Linux (Curso)

CURSOS LINUX

Son los responsables de arrancar o para los servicios particulares a ese nivelde ejecución.

Debido al número de servicios que se necesitan gestionar, se usan los scriptsrc.

El principal, /etc/rc.d/rc, es el responsable de llamar a los scripts apropiadosen el orden adecuado para cada nivel de ejecución.

Para cada nivel de ejecución, existe en el subdirectorio en el directorio /etc/rc.d.   Este subdirectorio de nivel de ejecución sigue el esquema de nombre dercx.d, donde x representa el nivel de ejecución.

En los directorio de niveles de ejecución, hay hechos enlaces simbólicos a losscripts del directorio /etc/rc.d/init.d.

En lugar de usar los nombres de los scripts que existen en el directorio /etc/rd.d/init.d, los enlaces simbólicos tienen el prefijo. S si sirven para arrancarlos servicios y K si sirven para parar los servicios.

En muchos casos el orden en que se ejecutan los scripts es importante, por loque se utilizan un número de dos dígitos como sufijo de la S o K.

Primero se ejecutan los script que comienzan con K y luego los que comienzan conS.   Para los scripts que empiezan con K se le pasa el parámetro “stop” y los quecomienzan con S se les pasa el parámetro “start”.

Más sobre el proceso init:El proceso init es el patrón de todos los procesos.   Siempre es el primer

proceso que se inicia en los sistemas UNIX.  Si init falla, el resto del sistema lopasaría mal.

El proceso init sirve para dos cosas, la primera es para ser el último procesopadre.  Debido a que init nunca muere, el sistema se asegura de su presencia y, si esnecesario, hace referencia a él.   La necesidad de referirse a init, normalmente,ocurre cuando un proceso muere antes de que se completen todos sus procesos hijos.Esto provoca que los hijos hereden de init como proceso padre.

(ps ­af)La segunda cosa que hace init es manejar los niveles de ejecución.

/etc/inittab

Formato de la líneas:

id:nivel_ejecución:acción:proceso

id:   Secuencia   de   1   a   4   caracteres   que   identifica   la   entrada   en   el   archivo   /etc/inittab

nivel_ejecución: Niveles de ejecución en los cuales se invoca al proceso.  Alguno deestos eventos son especiales que se llaman en todos los niveles de ejecución (Ej:CTRL­ALT­DEL).  Para indicar que un evento se ejecuta en todos los niveles, se debedeja nivel_ejecución en blanco.

acción: describe la acción a tomarproceso: Nombre del proceso (programa a ejecutar).

Tabla de acciones:raspawn: El proceso se reinicia si termina. (Ej.: login)wait: El proceso se inicia una vez cuando el nivel de ejecución se introduce, e initespera a su terminación.once: Idem, solo que no espera a su terminación antes de ejecutar otros programas.boot: Se ejecuta en el arranque del sistema (nivel_ejecución se ignora)bootwait: Idem, init espera que termineinitdefaul: Nivel por defecto cuando arranca el sistema.sysinit:   Se   ejecuta   cuando   arranca   el   sistema,   antes   que   las   entradas   boot   obootwait.powerwait: Se ejecuta si init recibe una señal de otro proceso que tiene problemascon la alimentación, init espera que el proceso termine.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  121

Page 122: Linux (Curso)

CURSOS LINUX

powerfail: Idem, solo que init no espera que el proceso termine.ctrlaltdel: El proceso se ejecuta cuando init recibe una señal indicando que elusuario ha pulsado CTRL­ALT­DEL.

runlevelMuestra el nivel de ejecución actual.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  122

Page 123: Linux (Curso)

CURSOS LINUX

INSTALACIÓN DE PROGRAMAS   

RPM (RedHat Packet Manager)RPM fue una de las primeras herramientas de administración de paquetes para

sistemas Linux.  Es una herramienta de administración relativamente madura y se puedecomparar   favorablemente   con   la   mayoría   de   las   herramienta   comerciales   deadministración   de   paquetes.     De   hecho,   es   un   producto   tan   sólido   que   inclusofabricantes   comerciales   de   Unix   están   comenzado   a   incluir   instalaciones   suyas   amedida.   El único rival que se equipara o incluso supera a RPM es el sistema deempaquetado de Debian (.deb).

Esta   utilidad   permite   instalar   y   desinstalar   software   del   sistema.     Ademásproporciona   una   semántica   de   evaluación   de   dependencias   y   actualización.Adicionalmente RPM tiene soporte para archivos RPM fuentes, que son paquetes quecontienen únicamente el código fuente del programa.

Se puede  pensar en RPM en cierto sentido como una especie de base de datos parainformación sobre software, ya que permite a los administradores preguntar por lospaquetes instalados, añadir y eliminar aplicaciones, etc.

Por convención, los nombre de los paquetes RPM tiene el formato

paquete­versión­construcción.arq.rpm

Donde “paquete” es el nombre del software, “versión” es la versión del softwarehecho público, “construcción” es la versión de un paquete RPM en particular y “arq”es la arquitectura para la que se compiló el software.

Notación de la arquitectura en los paquetes RPM:Arquitectura Nombre en RPM ComentarioFamilia Intel 386 i386Familia   IntelPentium

i586 Utiliza   optimizaciones   de   rendimiento   paraPentium

Intel Pentium Pro i686 Idem, para Pentium Pro, Pentium III y PentiumIV

Alpha alpha Optimización  para procesadores RISC de altorendimiento

PowerPC ppc Arquitectura de Apple MacintoshSPARC sparc Procesadores de Sun MicrosystemGenérica noarch El   RPM   no   contiene   ningún   archivo   binario

específico para un procesador dado.Ej.: paquete con guiones (scripts) del shellúnicamente

Código fuente src Sólo contiene el código fuente.

Formato del archivo RPM:RPM se basa en el formato del comando cpio, esto quiere decir, que  RPM es

simplemente un archivo cpio con algunos bytes adicionales de cabecera.  Existe unaherramienta (rpm2cpio) que puede convertir un archivo RPM en un archivo cpio.   Elcomando cpio es similar a tar, pero tiene un uso ligeramente diferente.

Los archivos RPM tiene información adicional sobre dependencias, lo cual durantela   instalación   del   paquete   forzará   al   administrador   a   satisfacerlas   antes   deinstalarlo ( a menos que se anule explícitamente).

Modos de operación:­ Consulta­ Instalación­ Actualización­ Verificación­ Eliminación

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  123

Page 124: Linux (Curso)

CURSOS LINUX

­ Reconstrucción­

La base de datos de RPM generalmente se instala con permiso de sólo lectura paratodos los usuarios y de lectura/escritura para el usuario root lo cual permite acualquier usuario consultar la base de datos para conocer si un programa se encuentrainstalado en el sistema y sólo al usuario root instalar y desinstalar paquetes.

Sintaxis:

rpm <opciones> <objetivo>

Donde objetivo puede ser el nombre del un paquete instalado o un archivo RPM.

Información de archivos RPM(­qp):

rpm –qp<opciones> <nombre del archivo>

rpm –qpi Información   general   del   paquete,   como   ser   tamaño   enbytes, descripción textual del paquete, etc.

rpm –qpl Una lista de todos los archivos que el paquete instalarpm –qpR Una lista de todas los requisitos  de software (como ser

bibliotecas compartidas) que le paquete necesitarpm –qp Lista de todos archivos a instalar

Información sobre paquetes Instalados(­q):Se diferencia del anterior que en vez de ejecutar el comando “rpm –qp”, se ocupa

el comando “rpm –q” y se sustituye el “nombre del archivo rpm” por el “nombre delpaquete instalado”

rpm –q<opciones> <nombre del paquete>

Las opciones de la tabla anterior también son válidas para solicitar informaciónde un paquete instalado.

La opción   “–qa<opción>” permite realizar preguntas sobre todos los paquetesinstalados en el sistema.  Normalmente se utiliza para conseguir una lista de todoslos paquetes instalados pero también se pueden utilizar opciones de la tabla anteriorEj.:

rpm –qai

Nos brinda información de cada paquete instalado.

Instalación de paquetes:

rpm –i <nombre de archivo>

Opciones útiles:­­force   Obliga a instalar el paquete incluso si entra en conflicto con otros

archivos.­­nodeps   Ignora las comprobaciones de dependencia

Rutina que sigue RPM para la instalación:1­ Extrae una lista de archivos a partir del paquete y compara con la base de

datos de paquetes instalador en busca de conflictos.2­ Comprueba las dependencias, si se satisfacen todas continúa.3­ Extrae los archivos y los coloca en los sitios apropiados4­ Ejecuta los script de instalación que se encuentran en el paquete5­ Guarda la información del paquete instalado en la base de datos de RPM

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  124

Page 125: Linux (Curso)

CURSOS LINUX

Actualización de paquetes:

rpm –u <nombre de archivo>

El proceso de actualización es parecido al se instalación, sólo que se compuebaprimero que el software ya se encuentre instalado.

La mayoría de las opciones utilizadas para la instalación también son válidasdurante el proceso de actualización.

Esto ahorra al usuario tener que borrar manualmente la instalación previa parainstalar el paquete nuevo.

Verificación de los paquetes instalados:A lo largo del uso normal de un sistema, los archivos cambian.Para ayudar en la detección de estos cambios, RPM permite a los usuarios

verificar la integridad de un paquete instalado.RPM realiza el cálculo de la suma de comprobación MD5 de todos loa archivos de

disco y los compara con las sumas MD5 almacenadas, procedente de los paquetesoriginales.

Esta verificación es útil para detecta los archivos accidentalmente dañados ypara mantener una lista de archivos que se han modificados manualmente (como serarchivo de configuración).

Sintaxis:rpm –V <paquete>

si se ocuparpm –Va

se comprobarán todos los paquetes instalados.

Desinstalación de paquetes:Se desinstala un paquete siempre que otro software no necesite dicho paquete.

rpm –e <paquete>

La mayoría de las opciones para instalar y actualizar también se pueden ocupar  paradesinstalar paquetes(como ser ­­force y –nodeps).

Comando comunes con el que se puede utilizar RPM:

rpm –af ‘which <comando>’ Muestra el paquete que instaló <comando>rpm –ql <paquete> | grep /bin Entra los binarios del programa (por

ejemplo archivos en /usr/bin) instaladospor <paquete>

rpm –qfi ‘which <comando>’ Muestra una descripción del paquete queinstaló <comando>

rpm –qfl ‘locate <archivo>’ Muestra todos los archivos provenientesdel mismo paquete que <archivo>

rpm –qa | grep <paquete> Muestra el nombre exacto del paquete para<paquete>, es útil cuando sabe que unpaquete está instalado pero desconoce sunombre completo

rpm –qi ‘rpm –qa | grep <paquete>’ Muestra la descripción de un paquete cuyonombre no se conoce completamente

rpm –e ‘rpm –qa | grep <paquete>’ Es útil para eliminar un paquete cuyonombre no se conoce completamente

gzip (GNU Zip)Comprime archivos

gzip [opciones] [archivo]

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  125

Page 126: Linux (Curso)

CURSOS LINUX

Opciones:­c escribe el archivo comprimido en la salida estándar (permite que se redirijala salida a otro programa).­d descomprimir.­r comprime recursivamente todos los archivos.­9 Best compression.­1 Fast compression.

tar (Tape ARchive)Combina archivos

tar [opciones] [archivo]

Opciones:­c crea un archivo.­t muestra el contenido de un archivo.­x extrae el contenido de un archivo.­f especifica el nombre del archivo o dispositivo que se colocara    el archivo combinado.­v muestra mensajes durante la operación.­z Asume que el archivo está comprimido con gzip.

Crear y comprimir un archivo:

tar ­cvzf apache.tar.gz /usr/src/apache

Extraer un archivo y descomprimir:

tar ­xvzf apache.tar.gz

IMPRESIONES:   Dispositivo de impresora: /dev/lp*Comprobar si el núcleo acepta puerto paralelo: cat /proc/devicesCargar el módulo de impresión: insmod lpPrimera prueba: cat ls ­l > /dev/lp?

Spool

/var/spool/lpd/nombre_impresoraArchivos de lp­seq: Almacena la secuencia de trabajos en espera de ser impresos­lock: Bloquea la impresora­status: Contiene el estado de la impresora.­errs: Guarda el registro de errores generados por la impresora.

El demonio lpd (Line Printer Deamon)Se encuentra /usr/sbin

Pasos del proceso lpd:1­ Busca información de configuración de impresora en /etc/printcap.2­ Si la impresora requiere que el trabajo vaya a través de un filtro deimpresión, envía el archivo al filtro.3­ Si la impresora está físicamente unida al servidor, envía la petición deimpresión filtrada directamente al dispositivo de impresión.4­ Si la impresora es remota, conecta con el servidor lpd correspondiente yenvía el trabajo filtrado al servidor.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  126

Page 127: Linux (Curso)

CURSOS LINUX

/etc/printcapSe puede actualizar mediante printtool (Red Hat)

Formato:nombre_imp1|nombre_imp2|...:\:comando=valor:\:comando:\:comando=valor:\

nombre_imp1 es el nombre de la impresora propiamente dicha (por defecto es lp)nombre_impn son alias

La variable PRINTER:Todos los comandos trabajan por defecto con la impresora lp.   Para indicar otraimpresora lo podemos hacer por parámetros o en la variable de entorno PRINTER.

lprEnvía trabajos a la cola de impresión.  Si no se le especifica un archivo comienza alee la entrada estándar.

lpr [opciones] [archivo]

Opciones:­P nom_impresora: Envía un trabajo a la nom_impresora y no a la impresora pordefecto.­m : envía un correo después que se complete el trabajo.­r : elimina el archivo una vez que se saca del spool.­s : no hace una copia al spool, sino que realiza un enlace simbólico (no sepuede combinar el archivo mientras se imprime, útil para archivos muy grandes)­#n: especifica el número de copias.­i cols: Indenta la salida de impresión con cols números de columnas.

prFormatea un archivo para que se pueda imprimir.Convierte un archivo de texto a un archivo con formato, versión encolumnada concabeceras.pr [opciones] [archivo]

Opciones:+num_pag:   discara   los   primeros   num_pag­1   números   de   páginas,   y   comienza

imprimiendo en la página num_pag

­a: imprime en columnas horizontales­num_cols: Imprime en num_cols columnas­h header: Usa header como cabecera en lugar del nombre del archivo.­l lines: Define la cantidad de líneas de una páginas (por defecto 66).  Si laslíneas son menores que 10, omite la cabecera y el pie de página.­w page_whidth: Establece el ancho de la página a page_whidth columnas.  Pordefecto es 72.

Consulta de trabajos

lpq [­P impresora] [usuario]

Información:Rank: Orden en la lista de impresión.Owner: Usuario dueño del trabajo

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  127

Page 128: Linux (Curso)

CURSOS LINUX

Job: Número de trabajoFile: Nombre del fichero a imprimirTotal size: tamaño del trabajo

Eliminar trabajos

lprm [­P impresora] [­] [trabajo] [usuario]

[­] elimina todos los trabajos de la cola de impresión

 

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  128

Page 129: Linux (Curso)

CURSOS LINUX

COMPILACIÓN DEL KERNEL   

El proceso make xconfig:Entes de compilar el kernel se debe configurar las características que contienen.Normalmente, la lista de características deseadas se basa en le hardware que necesitasoportar. Con el comando

cat /proc/pci

se obtiene una lista de todos los dispositivos PCI conectados al sistema.Se puede usar también make config o make menuconfig.

Opciones de xconfig:

Code maturity level optionsOpciones con nivel de madurez del código.Este menú tiene una sola opción: Quiere acceso a los últimos desarrollos del kernel(posiblemente experimentales)?La respuesta determina los elementos que estarán disponibles en el resto de losmenús.Por ejemplo, en un servidor de producción no debería ejecutarse código experimental.

Loadable module supportSoporte para módulos cargablesDetermina si quiere soporte para módulos.

Processor type and featuresTipo y características del procesador.La pregunta típicas son:

Familia de procesadorSi se necesita emulación matemáticaSoporte para chips SMP (para multiprocesadores), etc.

General SetupConfiguración generalEste   menú   es   crítico   en   el   gran   esquema   de   la   configuración   del   kernel.     Lasdecisiones de configuración aquí activarán o desactivarán otros menús.Todas las opciones son autoexplicativas, excepto el elemento de soporte a archivos detipo binario.  No hace demasiado tiempo, los programas compilados se almacenaban enun formato de archivos conocidos como a.out.   Desafortunadamente, es esquema teníalimitaciones graves cuando llamaba a bibliotecas compartidas, las cuales crecieroncuando evolucionó UNIX.   El formato ELF se creó para superar estas limitaciones.Actualmente Linux usa el formato binario ELF para todos uss porgramas.

Plug and play supportSoporte para Plug and play o bien "Soporte para pinchar y rezar"

Block devicesDispositivos de bloquesLista las opciones de soporte de Linux para dispositivos tales como discos duros, CD­ROMS, incluyendo muchas opciones específicas para los chipsets.

Networking optionsOpciones de red.Como mínimo se debe habilitar la opciones:

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  129

Page 130: Linux (Curso)

CURSOS LINUX

UNIX Domain SocketsTCP/IP Networking

QoS and fair queureingEncolamiento y QoS (Quality of Service)Es una característica avanzada de red del kernel de Linux.  Le permite especificarcómo quiere que vaya priorizado cada paquete antes de enviarlo dejándole designarvarios niveles de servicio.

SCSI SupportSoporte SCSISi se requiere soporte SCSI, hay que habilitar Verbose Error Reporting (Informe deerrores extendidos) el cual sirve para detectar errores en dispositivos SCSI.

SCSI Low­level driversControladores SCSI a bajo nivel.Configuración a bajo nivel de las tarjetas SCSI

Network Device supportSoporte de dispositivos de red

Amateru radio supportSoporte a radio aficionado

IrDA supportSoporte IrDASoporte para dispositivos infrarrojos.

Infrared port device driversControladores de dispositivos de puerto de infrarrojoEs necesario que el soporte IrDA este activado

File systemsSistemas de archivosLinux soporte una gran cantidad de sistemas de archivos aparte del sistema de archivonativo ext2.  Esto es especialmente útil en instalaciones que no sean PC, como ser enSun SPARC o Apple Macintosh.No se puede compilar el sistema de archivo que se va a usar para leer los módulo comoun   módulo   del   kernel   (por   ejemplo,   si   nuestra   partición   root   tiene   sistema   dearchivos ext2, debemos compilar en forma nativa y no como módulo el sistema dearchivos ext2, ya que Linux necesita leer el módulo antes de cargarlo).

Network File SistemSistema de archivos de red.

Kernel hackingInvestigación del kernel.

Compilación del kernel:Tiene tres fases.  La primera crea el árbol de dependencias, el cual es la forma

de decir que el sistema determine qué archivos necesita para compilar y cuáles puedeignorar.  La segunda fase el al limpieza.  Se ordena cualquier compilación previa delárbol en particular, y se borran los archivos antiguos.   Incluso si el árbol esnuevo, incluye este paso de limpieza.  El último paso es la propia compilación.  Unavez iniciada, este último paso no necesita atención.

Fases:

make dep; make clean; make zImage; make modules; make modules_install

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  130

Page 131: Linux (Curso)

CURSOS LINUX

El inicio de la última fase incluye el parámetro zImage para decirle al sistemaque comprima el kernel final para que requiera menos espacio en tiempo de arranque.

Si el kernel queda demasiado grande se puede, y es recomendable siempre, usar makebzImage en lugar de make zImage.

Tiene un esquema de compresión más agresivo, lo cual hace que el sistema tarde mástiempo en descomprimir el kernel al arrancar, pero la diferencia que existe con elesquema anterior es despreciable.

El kernel compilado se llama /usr/src/linux/arch/i386/boot/zImage o en su defectobzImage.

Para   instalar   el   kernel   recién   compilado,   se   copia   el   archivo   a   /bootrenombrándolo como vmlinuz­x.x.xx, donde x.x.xx es el número de versión del kernel.

Por convención se ocupa dicho nombre, pero no existe ningún impedimento paracambiarlo.   Luego   se   debe   copiar   el   archivo   /usr/src/linux/System.map   a   /boot/System.map­x.x.xx, usando la misma convención de nombre que con la imagen delkernel.

Con los archivos en su lugar se debe modificar el cargador del sistema (LILO oGRUB) para que aparezca la opción de arrancar el kernel recién compilado.

Como acelerar el compilado del Kernel:

Un truco útil que puede acelerar el compilado del kernel de Linux es iniciar variosprocesos compiladores en forma simultaneaCuando se da la orden de compilar en vez de escribir “make zImage” hay que escribir:“make ­j5 zImage”, la cual inicia hasta 5 procesos que realizan la compilación.Idem con “make ­j5 modules”

Recopilación y compaginación:CARLOS MANUEL TOLEDO

c m t o l e d o @ d a c h a r y . e d u . a r

Revisiones:CARLOS OEGG

o e g g c c @ h o t m a i l . c o m

LUIS OJEDA

l f o j e d a @ d a c h a r y . e d u . a r

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  131

Page 132: Linux (Curso)

CURSOS LINUX

Bibliografía:

Sistemas Operativos ModernosAndrew S. TanenbaumEditorial Prentice Hall

Sistemas Operativos, Diseño e implementaciónAndrew S. Tanenbaum ­ Albert S. WoodhullEditorial Prentice Hall

Sistemas Operativos Conceptos básicosAbraham Silberschatz ­ James L. Peterson ­ Peter B. GalvinEditorial Addison Wesley Longman

Sistemas OperativosAbraham Silberschatz ­ Peter B. GalvinEditorial Addison Wesley Longman

Manual de Administración de LINUXSteve ShahEditorial McGraw­Hill

Configuración de sistemas LinuxDaniel L. MorrilEditorial Anaya Multimedia

Aprenda Linux como si estuviese en primeroGarcía de Jalón, Aguinaga, MoraDe la serie aprenda como si estuviese en primero

LinuxCésar Martín Pérez, Ismael Pérez CrespoEditorial Anaya

Seguridad en UNIXPaper of UNIX security

Man PageDocumentación GNU/Linux

LINUX in a nutshell – A desktop quick referenceSellen SieverEditorial O’Reilly & Associates, Inc.

Proyecto INSFLUGwww.influg.org

El entono de programación UNIXBrian W. Kernighan ­ Rob PikeEditorial Prentice Hall

Administración de Sistemas Linux – Guía avanzadaM. Carling  ­ Stephen Degler – James DennisEditorial Prentice Hall

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  132

Page 133: Linux (Curso)

CURSOS LINUX

APÉNDICE ATeclas y comandos especiales:

CTRL­C (^C) Aborta el programa en ejecución.CTRL­S (^S) Realiza una pausa en la salida de datos de la

terminalCTRL­Q (^Q) Anula la pausaCTRL­D (^D) Fin de texto, se suele ocupar para cerrar una

sesión de shell (logout o exit)CTRL­R (^R) Busca un comando en el historial que comience con

un fragmento del texto que se tecleo.ALT + (.) Es similar a la flecha superior de los cursores,

busca   los   últimos   comandos   ejecutados   en   elshell.

!! Ejecuta el último comando.! <texto> Ejecuta el último comando que comenzó con <texto>

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  133

Page 134: Linux (Curso)

CURSOS LINUX

APÉNDICE BGlosario:

Palabra Acrónimo/significado

cat Concatenate

cd Change Directory

chgrp Change Group

chmod Change Mode

chown Change Owner

chsh Change Shell

cmp Compare

cp Copy

dev Device

EOF End Of File

EOT End Of Text

GID Group ID

GNOMEGNU Entorno de trabajo en red orientado a

objetosGUI Graphics User Interface

gzip GNU zip

ined Internet Daemon

KDE K Desktop Environment

LANG LANGuage (Lenguaje)

lib Library

LiLo Linux Loader

lpd Line Printer Daemon

lpq Line Printer Queue

lprm Line Printer Remove

ls List

man Manual

mkdir Make Directory

mknod Make Node

mnt Mount

motd Message Of To Day

mv Move

printenv Print Environment

pwd Print Working Directory

rm Remove

rmdir Remove Directory

RPM Red Hat Packet Manager

sbin System bin

tar Tape Archive

UID User ID

usr Users

wc Word Count

X11R6 X­Window versión 11 release 6APÉNDICE CDISEÑO DEL SISTEMA OPERATIVO LINUX

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  134

Page 135: Linux (Curso)

CURSOS LINUX

1­ PRINCIPIOS DE DISEÑO DE LINUX (SILBERSCHATZ)   :

En su diseño global, Linux se asemeja a cualquier otra implementación tradicionalde UNIX que no se en micro núcleo.  El sistema de archivos de Linux se ajusta a lasemántica tradicional de UNIX, y el modelo estándar de trabajo con redes de UNIX seimplementa en forma completa.  Los detalles internos del diseño de Linux acusan unafuerte influencia de su historia.

Aunque Linux se ejecuta en una amplia variedad de plataformas, fue concebido enuna arquitectura de PC.  Una buena parte de ese desarrollo temprano fue realizado porentusiastas individuos y no por instalaciones de desarrollo o investigación bienfinanciadas,   por   lo   que   desde   un   principio   Linux   procuró   sacar   máximo   defuncionalidad de recursos limitados.

La velocidad y eficiencia siguen siendo metas importantes en el diseño, pero granparte   de   los   trabajos   reciente   y   actuales   con   Linux   se   han   concentrado   en   laestandarización.   Linux se diseñó de modo que cumpliera con los documentos POSIXpertinentes; al menos dos distribuciones de Linux han logrado la certificación POSIXoficial.

Hay muchas otras normas en el mundo UNIX, pero la plena certificación de Linuxfrente a ellas a veces se frena porque a menudo sólo pueden obtenerse si se paga unacuota, y la certificación del cumplimiento de un sistema operativo con la mayor partede las normas implica un gasto sustancial.  No obstante, soportar una amplia base deaplicaciones   es   importante   para   cualquier   sistema   operativo,   así   que   laimplementación de estándares es un objetivo importante del desarrollo de Linux aun sila implementación no   se certifica formalmente.   Además de la norma POSIX básica,Linux soporta actualmente las extensiones de hilos de POSIX y un subconjunto de lasextensiones POSIX para el control de procesos en tiempo real.

1.1 Componentes de un sistema Linux:

Se   divide   en   3   partes,   igual   que   la   mayor   parte   de   las   implementacionestradicionales de UNIX:

­  El núcleo, que se encarga  de todas las abstracciones importantes delsistema operativo, tales como el manejo de la memoria virtual y los procesos.

­ Las biblioteca del sistema, que define un conjunto estándar de funciones através de las cuales las aplicaciones pueden interactuar con el núcleo.

­  Los utilitarios del sistema, que son programas que realizan tareas deadministración   especializadas.     Incluyen   los   demonios   y   otros   programas   deconfiguración.

La distinción más importante es la del el núcleo y todo los demás.  El código delnúcleo se ejecuta en modo privilegiado o modo núcleo el cual equivale al modo demonitor.  No se incorpora código en modo usuario en el núcleo.  Cualquier código desoporte que no necesite ejecutarse en modo núcleo se coloca en las bibliotecas delsistema.

El núcleo se crea como un solo binario monolítico.  La razón principal es mejorarel desempeño, dado que todo el código y las estructuras de datos se mantiene en unsolo espacio de direcciones, no se requieren conmutaciones de contexto cuando unproceso invoca una función del sistema operativo o cuando se produce un interrupciónde Hw.  No sólo el código de planificación y memoria virtual ocupa el mismo espaciode direcciones, todo el código del núcleo, incluido el de los drivers, el sistema dearchivos, etc.

De la misma forma en que la s aplicaciones de usuario pueden carga bibliotecascompartidas en el momento de la ejecución para traer un fragmento de código   quenecesitan,  así el núcleo de Linux puede cargar módulos dinámicamente durante laejecución.  No se necesita saber con anticipación cuáles módulos podrían cargarse.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  135

Page 136: Linux (Curso)

CURSOS LINUX

El núcleo implementa todas las funciones que se requieren para calificar como SO.No obstante, por sí solo, no se parece en absoluto a un sistema UNIX.  Faltan muchascaracterísticas extras.  El núcleo no mantiene directamente la interfaz del SO queven las aplicaciones, sino que la realiza por medio de las "bibliotecas del sistema".Las aplicaciones llaman a las bibliotecas y estas son las encargadas de solicitar losservicios al núcleo.

La   emisión   de   una   llamada   al   sistema   implica   transferir   el   control   a   modoprivilegiado y los detalles de esta trasferencia varían de una arquitectura a otra.Las bibliotecas se encargan de reunir los argumentos para la llamada al sistema yorganizarlos de forma necesaria para efectuar la llamada.  También ofrecen versionesmás avanzadas de llamadas al sistema básicas (ejemplo, diferentes formas que semanejan la E/S de un archivos esta soportada por un sola llamada al sistema, pero conmúltiples formas a nivel de bibliotecas); inclusive proveen funciones que no secorresponden   a   ninguna   llamada   al   sistema,   como   ser   algoritmos   de   ordenación,funciones matemáticas, etc.

Por último, el sistema Linux incluye una amplia variedad de programas de usuario,tanto utilitarios del sistema como utilitarios de usuarios.   Los primeros incluyenprogramas   necesarios   para   inicializar   el   sistema   como   la   configuración   de   losdispositivos de red, la carga de módulos, etc.

En   los   utilitarios   de   usuarios   se   pueden   encontrar   programas   para   listardirectorios, procesamiento de texto, etc.   Justos, esto utilitarios constituyen lacaja de herramienta estándar (UNIX toolbox) que los usuarios esperan encontrar encualquier sistema UNIX.

2­ MÓDULOS DEL NÚCLEO   :

El núcleo de Linux tiene la facultad de cargar y descargar secciones arbitrariasdel código del núcleo cuando se le pide hacerlos.  Estos módulos de núcleo cargablesse   ejecutan   en   modo   privilegiado,   y   por   ello   tienen   pleno   acceso   a   todas   lacapacidades del hardware.  Típicamente un módulo implementa un driver de dispositivo,un sistema de archivos o un protocolo de red.

Hay varias razones para ocupar módulos.  Si se usan módulos, no es necesario creaun nuevo núcleo para probar un driver, este podría compilarse de forma independientey cargarse en tiempo de ejecución.

Otra implicación, puesto que el núcleo de Linux se distribuye bajo la licenciaGPL, no puede liberarse con componentes de propiedad privada añadidos, a menos queesos nuevos componentes también se liberen bajo la GPL y el código fuente para ellosse proporcione a quien lo solicite.   La interfaz de módulos del núcleo permite aterceros escribir y distribuir, bajo sus propios términos, driver de dispositivo osistemas de archivos que no podrían distribuirse bajo la GPL.

Por último, los módulos del núcleo permite configurar un sistema Linux con unnúcleo mínimo estándar, sin drivers adicionales incorporados.  Cualquier driver queel usuario necesite los podrá cargar el sistema.  Por ejemplo, se podría cargar uncontrolador de CD­ROM cuando se manta un CD, y descargarse automáticamente si el CDse desmonta del sistema de archivos.

2.1 Gestión de módulos: 

La carga de un módulo requiere algo más que la mera carga de su contenido binarioen la memoria del núcleo.  El sistema también debe asegurarse de que las referenciasque el módulo haga a símbolos o puntos de ingreso del núcleo se actualicen de modoque apunten a las posiciones correctas dentro del espacio de direcciones del núcleo.Linux maneja esta actualización de referencias dividendo la tarea de cargar módulosen dos secciones distintas: el manejo de secciones de código de módulos en memoriadel núcleo y el mejo de símbolos a los que se le permiten a los módulo hacerreferencias.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  136

Page 137: Linux (Curso)

CURSOS LINUX

Linux mantiene una tabla de símbolos interna en el núcleo.  Esta tabla no contieneel conjunto completo de símbolos definidos en el núcleo durante su compilación, masbien, el núcleo debe exportar explícitamente cada símbolo.  El conjunto de símbolosexportados constituye una interfaz bien definida a través de la cual un módulo puedeinteractuar con el núcleo.   El escritor de un módulo simplemente usa el enlaceexterno del lenguaje C, cualquier símbolo externo a los que el módulo hace referenciapero que no ha declarado se marcan como no resultados en el binario final del móduloque   el   compilador   produce.     Cuando   un   módulo   se   va   a   carga   en   el   núcleo,   unutilitario del sistema examina primero el módulo en busca de tales referencias noresueltas.   Todos los símbolos que faltan por resolver se buscan en la tabla desímbolos del núcleo, y se sustituyen en el código del módulo por las direccionescorrectas.

La carga del módulo se efectúa en dos etapas.  Primero, el utilitario cargador demódulos pide al núcleo reservar un área continua de memoria virtual del núcleo parael módulo.   El núcleo devuelve la dirección de la memoria asignada.   Una segundallamada al sistema pasa entonces el módulo, junto con cualquier tabla de símbolos queel nuevo módulo desee exportar, al núcleo.   Ahora se copia el módulo al espaciopreviamente asignado y la tabla de símbolos del núcleo se actualiza con los nuevossímbolos que podrán usar otros módulo que todavía no se cargaron.

El último componente de gestión de módulos es el solicitador de módulos.   Elnúcleo define una interfaz de comunicación con la que puede conectarse un programa degestión de módulos.   Una vez establecida dicha conexión, el núcleo informará alproceso de gestión cada vez que un proceso solicite un driver de dispositivo, sistemade archivos, etc. que no esté cargado actualmente, y dará al gestor la oportunidad decargar ese servicio.  La solicitud de servicio original terminará de atenderse unavez que se carga el módulo.   El proceso gestor consulta con regularidad al núcleopara ver si todavía se está usando un módulo que se cargó dinámicamente, y descargaese módulo si ya no se le necesita.

2.2 Registro de controladores:

Una vez que se ha cargado un módulo, no será más que una región asilada de lamemoria si no se informa al resto del núcleo qué funcionalidad nueva ofrece.   Elnúcleo mantiene tablas dinámicas de todos los controladores conocidos, y proporcionaun conjunto de rutinas que permiten añadir o quitar controladores de estas tablas encualquier momento.  El núcleo se asegura de invocar la rutina de inicio de un módulocuando éste se carga, y la rutina de limpieza del módulo antes de descargarlo.  Sonestas rutinas las que se encargan de registrar la funcionalidad del módulo.

Hay muchos tipos de controladores que un módulo puede registrar.  Un sólo módulopuede registrar drivers de cualquier tipo, y pueden registrar más de un driver si lodesean.  Las tablas de registro incluyen los siguientes elementos:

­   Drivers   de   dispositivos:   éstos   incluyen   a   los   dispositivos   de   caracter,dispositivos de bloques y dispositivos de interfaz de red.

­ Formato binario: Este formato especifica una forma de reconocer y cargar unnuevo tipo de archivo ejecutable.

­ Sistemas de archivos

­ Protocolo de red

3­ GESTIÓN DE PROCESOS   :

Usa un modelo de procesos similar a los otros UNIX, sin embargo, hay unos cualeslugares claves en los que Linux hace las cosas de forma un tanto diferente.

3.1­ El modelo de procesos fork/exec:

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  137

Page 138: Linux (Curso)

CURSOS LINUX

El principio básico de la gestión de procesos de UNIX es la separación de dosoperaciones distintas: la creación de proceso y la ejecución de programas nuevos.  Secrea un proceso nuevo con la llamada al sistema fork, y un programa nuevo se ejecutadespués de una llamada a execve.  Se trata de dos funciones claramente separadas.  Sepuede crea un proceso nuevo con fork sin que se ejecute un programa nuevo; elsubproceso recién creado se limita a seguir ejecutando exactamente el mismo programaque el proceso padre.  Así mismo, para ejecutar un programa nuevo no es preciso crearprimero   un   proceso   nuevo,   cualquier   proceso   puede   invocar   execve   en   cualquiermomento.  El código del programa que se estaba ejecutando se reemplaza por el códigodel nuevo programa.

Este   modelo   tiene   la   ventaja   de   ser   muy   sencillo.     En   lugar   de   tener   queespecificar todos los detalles del entorno de un programa nuevo en la llamada alsistema que ejecuta ese programa, los programas nuevo simplemente se ejecutan en elentrono existente. 

Bajo UNIX, un proceso abarca toda la información que el sistema operativo debemantener para seguir la pista al contexto de una sola ejecución de un solo programa.Baja Linux, podemos desglosar este contexto en varias secciones específicas.    Agrandes rasgos, las propiedades de los procesos se clasifican en tres grupos: laidentidad del proceso, su entorno y su contexto.

Identidad del proceso:

Consiste principalmente en los siguiente elementos:

­ Identificador de proceso (PID):   Cada proceso tiene un identificador único.Los PID sirven para especificar procesos al sistema operativos cuando una aplicaciónemite una llamada al sistema para enviar una señal a, modificar o esperar  otroproceso.  Identificadores adicionales asocian el proceso con un grupo de proceso (porlo general, un árbol de procesos bifurcados con una sola orden del usuario) y sesiónde login.

­ Credenciales: Cada proceso debe tener asociado un identificador de usuario yuno o más identificadores de grupo que determinan los derechos de acceso a losrecursos del sistema.

­ Personalidad: Los sistemas UNIX no manejan tradicionalmente personalidades deproceso, pero bajo Linux cada proceso tiene asociado un identificador de personalidadque puede modificar un poco la semántica de ciertas llamadas al sistema.

Entorno del proceso:

Un proceso hereda su entorno de su padre.   El entorno consiste en dos vectoresterminados con un carácter nulo: el vector de argumentos y el vector entorno.   Elvector de argumentos simplemente lista los argumentos de línea de comandos que seusan para invocar el programa y por convención comienza con su nombre.  El vector deentorno es una lista de pares "NOMBRE=VALOR" que asocian variables de entorno convalores arbitrarios.   El entorno no se guarda en la memoria del núcleo, sino comoprimer dato en la cima de la pila del proceso.

Las variables de entorno permiten personalizar el sistema operativo a nivel deprocesos individuales, en lugar de configurarse para el sistema en su totalidad.  Losusuarios pueden escoger su propio idioma o sus editores preferidos, con independenciade otros usuarios.

Contexto de un proceso:

La   identidad   de  un   proceso   y  su   entorno   generalmente  son   propiedades   que  seestablecen cuando se crea un proceso y que no se modifica hasta que el procesotermina.  Un proceso podría optar por modificar alguno aspectos de su identidad si en

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  138

Page 139: Linux (Curso)

CURSOS LINUX

necesarios, o alterar su entorno.  El contexto de un proceso, en cambio, es su estadoen cualquier instante dado y cambia constantemente.

­Contexto de planificación:  Es la parte más importante del contexto de unproceso.     Guarda   la   información   que   le   planificador   necesita   para   suspender   yreiniciar   el   proceso.     Esta   información   incluye   copias   de   todos   los   registrosocupados por el proceso.  Los registros de punto flotante se almacenan parte, y sólose restaura si se necesitan, con objeto de que los proceso que no usan aritmética depunto flotante no incurran el gasto extra de guardar ese estado.   También incluyeinformación acerca de la prioridad de planificación y de cualquier señale pendienteque estén esperando se entregadas al proceso.  Una parte clave es la pila de núcleodel proceso, un área parte de la memoria del núcleo reservada para uso exclusivo delcódigo en modo de núcleo.  Tanto las llamadas al sistema como las interrupciones queocurran mientras se está ejecutando el procesos usarán esta pila.

­Contabilidad:  El núcleo mantiene información acerca de los recursos que cadaproceso está consumiendo, y el total de recursos que el proceso ha consumido durantetoda su existencia.

­Tabla de archivos: Es un arreglo de punteros a estructuras de archivos delnúcleo.   Al efectuar llamadas al sistema para E/S con archivos, lso procesos serefieren a los archivos empleando su índice en esta tabla.

­Contexto del sistema de archivos: Mientras que la tabla de archivos lista losarchivos   abiertos   existentes,   el   contexto   del   sistema   de   archivos   aplica   a   lassolicitudes de abrir nuevos archivos.  Aquí se guardan los nombre de los directoriosraíz y por emisión que se usarán para buscar archivos.

­Tabla de manejadores de señales:   Los sistemas UNIX pueden enviar señalesasincrónicas a un proceso como respuesta a diversos sucesos externos.  La tabla demanejadores de señales define la rutina (en el espacio de direcciones del proceso)que se invocará cuando lleguen señales específicas.

­Contexto   de   memoria   virtual:     Describe   todo   el   contenido   del   espacio   dedirecciones privado de dicho proceso.

3.2­ Procesos e hilos:

Las diferencias entre ambos términos suele variar de una implementación a otra.

Los procesos representan la ejecución de programas individuales, mientras que loshilos representan contextos de ejecución individuales pero concurrentes dentro de unsolo proceso que ejecuta un solo programa.

Los procesos tienen su propio espacio de direcciones independientes, aun si estánusando memoria compartida para compartir parte del contenido (pero no todo) de sumemoria virtual.  Los hilos dentro del mismo proceso comparten el mismo espacio dedirecciones.

Linux tiene una implementación sencilla, un hilo no es mas que un proceso que porcasualidad comparte el mismo espacio de direcciones que su padre.   La distinciónentre un proceso y un hilo se hace sólo cuando se crea u hilo nuevo con la llamada alsistema "clone".  clone crea un proceso nuevo que tiene su propio contexto pero quepuede compartir las estructuras de datos de su padre.

Esto se puede realizar porque Linux no guarda todo el contexto de un procesodentro de la estructura de datos del proceso principal, sino que, guarda el contextodentro de subcontextos independientes.   El contexto del sistema de archivos de latabla de descriptores de archivo, la tabla de manejadores de señales y el contexto dememoria   virtual   de   un   proceso   se   guardan   en   estructuras   independientes.     Laestructura   de   datos   del   proceso   simplemente   contiene   punteros   a   esas   otrasestructuras.

La llamada al sistema clone acepta un argumento que le dice cuáles subcontextosdebe copiar y cuáles debe compartir al crea el proceso nuevo.  Este siempre recibe

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  139

Page 140: Linux (Curso)

CURSOS LINUX

una   identidad   nueva   y   un   nuevo   contexto   de   planificación,   pero   puede   compartirsubcontextos con su padre.   fork no es más que un caso especial de clone que nocomparte subcontextos.

Una aplicación puede optar por ocupar un paquete de hilos basado en el modo deusuario o bien el basado en el núcleo.  la biblioteca de hilos en modo de usuarioevita el gasto extra de planificación del núcleo y llamadas al sistema cuando loshilos interactúan, pero está limitado por el hecho de que todos los hilos se ejecutanen un solo proceso.   La biblioteca basada en el núcleo utiliza clone, tiene laventaja de que permite a una aplicación ejecutar hilos en múltiples procesadores yque varios hilos estén ejecutando llamadas al sistema al mismo tiempo.

 

4­ PLANIFICACIÓN   :

4.1 Sincronización del núcleo:

Hay dos formas en que puede presentarse una solicitud de ejecución en modo núcleo.Un programa puede solicitar un servicio al sistema operativo explícitamente (llamadaal   sistema)   o   implícitamente   (Ej.:   fallo   de   página).     O   bien,   un   driver   dedispositivo podría generar una interrupción de Hw que hace a la CPU comenzar aejecutar un manejador definido por el núcleo para esa interrupción.

El problema es que se puede estar tratando de acceder a las mismas estructuras dedatos internas.  Si una tarea del núcleo está accediendo a alguna estructura de datoscuando se ejecuta una rutina de servicio de interrupción, ésta no podrá acceder a losmismo   datos   ni   modificarlos   sin   el   riesgo   de   corromper   los   datos   (seccionescríticas).

Una parte de la solución es hace no expropiable el código de núcleo.   Por loregular   cuando   el   núcleo   recibe   una   interrupción   de   temporizador,   invoca   elplanificador,   para   que   pueda   suspender   la   ejecución   del   proceso   que   se   estáejecutando y reanudar la ejecución de otro.   Cuando se recibe una interrupción detemporizado mientras un proceso está ejecutando una rutina de servicio del núcleo, lareplanificación   no   se   efectúa   de   inmediato,   en   vez   de   ello,   se   iza   la   banderaneed_resched del núcleo para indicarle a éste que debe ejecutar el planificar despuésde finalizar la llamada al sistema, cuando el control está a punto de devolverse almodo de usuario.

Una   vez   que   un   fragmento   de   código   del   núcleo   comienza   a   ejecutarse,   puedegarantiza que será el único código del núcleo que se ejecute hasta que ocurra unainterrupción, un fallo de pagina o una llamada al planificador desde el código delnúcleo.

Las interrupciones de temporizador nunca causan directamente la replanificación deun proceso, simplemente solicitan que se realice posteriormente, por lo que ningunainterrupción puede afectar el orden de ejecución de código de núcleo que no sea deservicio de interrupción.

Si una rutina del núcleo trata de leer o escribir en la memoria de usuario, podríaocurrir un fallo de página que requiera E/S de disco, y el proceso en ejecución sesuspenderá hasta que se lleve a cabo la E/S.   De forma similar, si una rutina deservicio   de   llamada  al   sistema   invoca  el   planificador   mientras  está   en   modo  denúcleo, sea explícitamente haciendo una llamada directa al código o implícitamenteinvocando una función que espere la finalización de la E/S, el proceso se suspenderáy habrá una replanificación.  Cuando el proceso vuelva a esta listo para ejecutarse,seguirá ejecutándose en modo núcleo en la instrucción que sigue a la llamada alplanificador.

Así el código del núcleo puede suponer que nunca será desalojado por otro proceso,y que no necesita tomar medidas especiales para proteger las secciones críticas.  Elúnico requisito es que las secciones críticas no contengan referencial a memoria deusuario ni esperas para que termine una E/S.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  140

Page 141: Linux (Curso)

CURSOS LINUX

La segunda técnica que Linux usa para progre las secciones críticas se aplicacuando ocurren en rutinas de servicio de interrupción.  La herramienta que se utilizapara ofrecer esta funcionalidad  es el hardware de control de interrupciones  delprocesador.  Al inhabilitar las interrupciones durante una sección crítica el núcleogarantiza que podrá continua sin que haya peligro de acceso concurrente a estructurasde datos compartidas.

Esto tiene un precio.  En la mayor parte de las arquitecturas las instruccionespara habilitar/deshabilitar  las interrupciones  son costosas.   Aparte mientras seencuentre deshabilitadas se interrumpen todas las operaciones de E/S.

Linux tiene una arquitectura de sincronización que permite ejecutar seccionescríticas largas sin tener que deshabilitar las interrupciones durante la ejecución dela SC.  

Se implementa separando la rutinas de servicio de interrupción en dos secciones:la mitad superior y la inferior.

La mitad superior es una rutina de servicio de interrupción normal, y se ejecutacon las interrupciones recursivas inhabilitadas (las interrupciones con prioridad másalta sí pueden interrumpir la rutina, pero las que tiene la misma o menor prioridadquedan   inhabilitadas).     Un   planificador   miniatura,   que   asegura   que   las   mitadesinferiores nunca se interrumpan a sí misma, ejecuta la mitad superior de una rutinade servicio con todas las interrupciones inhabilitadas.  El planificador de mitadesinferiores   se   invoca   automáticamente   cada   vez   que   una   rutina   de   servicio   deinterrupción termina.

Esta separación implica que el núcleo puede llevar a cabo cualquier procesamientocomplejo que sea necesario realizar como respuesta a una interrupción sin tener quepreocuparse por se interrumpido.  Si ocurre otra interrupción puede solicitar que seejecute la misma mitad inferior, pero la ejecución se diferirá hasta que termine laque se está ejecutando.  Toda ejecución de una mitad inferior puede ser interrumpidapor una mitad superior, pero nunca pro una mitad inferior similar.

La arquitectura de mitad inferior­mitad superior se completa con un mecanismo parainhabilitar   mitades   inferiores   selectas   mientras   se   ejecuta   código   de   núcleo   enprimer plano normal.   El núcleo puede codificar las secciones críticas fácilmenteempleando   este   sistema:   los   manejadores   de   interrupciones   pueden   codificar   sussecciones críticas como mitades inferiores, y cuando el núcleo en primer plano quieraingresa en unas sección crítica podrá inhabilitar cualesquier mitades inferiorespertinentes para evitar que alguna otra sección crítica lo interrumpan.  Al final dela sección crítica, el núcleo puede volver a habilitar las mitades inferiores yejecutar   cualesquier   tareas   de   mitad   inferior   que   las   rutinas   de   servicio   deinterrupciones de mitad superior haya encolado durante al sección crítica.

Cada nivel pude ser interrumpido por código que se ejecuta en un nivel más alta,pero nunca por código que se ejecute en el mismo nivel o uno inferior (con excepción

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  141

Page 142: Linux (Curso)

CURSOS LINUX

del código en modo usuario, los procesos de usuario siempre pueden ser desalojadospor otro proceso cuando ocurre una interrupción de planificación).

4.2­ Planificación de procesos:

Linux tiene 2 algoritmos.   Un algoritmo de tiempo compartido con planificaciónexpropiativa justa entre múltiples procesos, el otro diseñado para tareas en tiemporeal en las que las prioridades absolutas son más importantes que la equidad.

Parte de la identidad de cada proceso es una clase de planificación, que definecuál de estos algoritmos se aplicará al proceso.   La planificación empleada es ladefinida en las extensiones POXI para computación en tiempo real (POSIX.4, ahoraconocida como POSIX.1b).

En   el   caso   de   procesos   de   tiempo   compartido,   Linux   usa   un   algoritmo   conprioridades basado en créditos.   Cada proceso posee cierto número de créditos deplanificación;   cuando   es   preciso   escoger   una   nueva   tarea   para   ejecutarla,   seselecciona el proceso que tiene más créditos.  Cada vez que ocurre una interrupcióndel temporizador, el proceso que se está ejecutando en ese momento pierde un crédito;cuando sus créditos llegan a cero, se suspende y se escoge otro proceso.

Si   ningún   proceso   tiene   créditos,   se   realiza   una   operación   de   renovación   decréditos en la que se añaden créditos a todos los procesos del sistema (no sólo a losque se pueden ejecutar) según la siguiente regla:

Créditos = (créditos/2) + prioridad

Combinando 2 factores: el historial del proceso y su prioridad.

Después de aplicarse el algoritmo, un proceso retendrá la mitad de los créditosque le habían quedado después de la última operación de renovación de créditos, conlo que se conserva un antecedente del comportamiento reciente del proceso.   Losprocesos que se ejecutan todo el tiempo tienden a agotar sus créditos rápidamente,pero los que pasan una buena parte de su tiempo suspendidos pueden acumular créditosa   lo   largo   de   varias   renovaciones   y   por   consiguiente   terminarán   con   una   mayorcantidad de créditos después de una renovación.  Este sistema de crédito da prioridadautomáticamente a los procesos limitado por E/S para los cuales es importante unarespuesta rápida.

Se puede asignar una prioridad baja a los trabajos por lotes de segundo plano, yautomáticamente recibirán menos créditos que los trabajos de usuario interactivos yun porcentaje menor del tiempo de CPU que trabajos similares con mayor prioridad.Linux utiliza este sistema de prioridades para implementar el mecanismo de prioridadde procesos estándar de UNIX, nice.

Linux implementa 2 clases de planificación en tiempo real que POSIX.1b requiere:FIFO y turno circular.  En ambos casos, cada proceso tiene una prioridad además de suclase de planificación. 

En la planificación de tiempo compartido los procesos con diferentes prioridadespueden competir entre sí hasta cierto punto; en la planificación de tiempo real elplanificador siempre ejecuta el proceso que tiene la prioridad más alta.  Si hay doso más procesos que tienen la misma prioridad, el planificador ejecuta el proceso queha estado esperando más tiempo.  La única diferencia entre planificación FIFO y porturno circular es que los procesos FIFO siguen ejecutándose hasta que termina o sebloquean, mientras que un proceso de turno circular será desalojado después de ciertotiempo y pasará al final de la cola de planificación; así, los procesos de turnocircular con la misma prioridad compartirán automáticamente el tiempo.

Cabe señalar que la planificación de tiempo real de Linux es tiempo real blando,no   duro.     El   planificador   ofrece   garantía   estrictas   acerca   de   las   prioridades

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  142

Page 143: Linux (Curso)

CURSOS LINUX

relativas de los procesos de tiempo real, pero el núcleo no garantiza la rapidez conque un proceso de tiempo real se planificará una vez que esté listo para ejecutarse.El código de Linux nunca puede ser desalojado por el código del usuario.  Si llegauna interrupción que despierta un proceso de tiempo real mientras el núcleo estáejecutando una llamada al sistema a nombre de otro proceso, el proceso de tiempo realtendrá que esperar hasta que dicha llamada finalice o se bloquee.

4.3­ Multiprocesamiento simétrico:

Los procesos o hilos se pueden ejecutar en paralelo en procesadores distintos.  Elnúcleo impone la restricción de que sólo un procesador a la vez puede estar ejecutadocódigo en modo privilegiado.  Dicha restricción no representa un problema para lastareas limitadas por cómputo, pero si para las que implican una gran cantidad deactividad del núcleo.

5­ GESTIÓN DE MEMORIA   :

Tiene dos componentes:

­ Gestor de memoria física, que se encarga de asignar y liberar páginas,grupos de páginas y bloque de memoria.

­ Componente de manejo de memoria virtual.

5.1­ Gestión de memoria física:

El asignador de páginas, se encarga de asignar y liberar todas las páginas física,además de que puede asignar intervalos de páginas contiguas físicamente si se lesolicitan.  El asignador usa el algoritmo de montículo de compañeras o algoritmo delos asociados.   Cada región de memoria asignable tiene un compañera adyacente ysiempre que do regiones compañeras asignadas quedan libres, se combinan para formauna región más grande.  Esa región mayor también tiene una compañera con la que puedecombinarse para forma una región todavía mayor.  Como alternativa, si una solicitudde   memoria   pequeña   no   puede   satisfacerse   asignando   una   región   libre   pequeñaexistente, una región libre mayor se subdividirá en dos compañeras para satisfacer lasolicitud.   Se usan listas enlazadas individuales para registrar las regiones dememoria libre de cada tamaño permitida, bajo Linux, el tamaño más pequeño que sepuede asigna con este mecanismo es una sola página física.

En la figura se puede observar como las regiones se dividen recursivamente hastaque se obtiene un fragmento del tamaño deseado o aproximado.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  143

Page 144: Linux (Curso)

CURSOS LINUX

En   última   instancia  todas   las   asignaciones   de   memoria   en  el   núcleo   de  Linuxocurren estáticamente, mediante controladores que reservan un área contigua de lamemoria   durante   el   arranque   del   sistema,   o   bien   dinámicamente,   por   medio   delasignador de páginas.  No obstante, las funciones del núcleo no tienen que usar elasignador básico para reservar memoria; existen varios subsistemas de gestión dememoria especializados que usan el asignador de páginas subyacente para administrarsu propia reserva de memoria.   Los subsistemas más importante son el de memoriavirtual   y   el   asignado   de   longitud   variable   kmalloc   y   los   do   caches   de   datospersistentes del núcleo (el cache de buffers y el caché de paginas).

El núcleo cuenta con un asignador adicional para solicitudes de tamaño arbitrarioque no necesariamente se conoce con antelación y podría ser de sólo unos cuantosbytes, en lugar de una página entera.  Este servicio kmalloc, análogo a la funciónmalloc en C, asigna páginas enteras bajo pedido, pero luego las divide en trozos máspequeños.  El núcleo mantiene un conjunto de listas de páginas que el servicio mallocestá usando, todas las páginas de una lista dada se han dividido en trozo de ciertotamaño.   La asignación de memoria implica determinar cuál es la lista apropiada yluego tomar el primer trozo libre de la lista o bien asigna una nueva página ydividirla.

Tanto el asignador de páginas como kmalloc están protegidos contra interrupciones.Una función que desea asigna memoria pasa una prioridad de solicitud a la función deasignación.  las rutinas de interrupción emplean una prioridad atómica que garantizaque las solicitud se satisfará o, si ya no hay memoria, fallará de inmediato.  Encontraste los procesos de usuario normales que requieren una asignación de memoriacomenzarán a intentar encontrar memoria existente que pueda liberarse, y no podránavanzar hasta que haya memoria disponible.  La prioridad de asignación también puedeservir para especificar que la memoria se necesita para DMA, en arquitectura como lade PC en la que ciertas solicitudes de DMA no se reconocen en todas las páginas de lamemoria física.

Las regiones de memoria tomadas por el sistema kmalloc se asignan permanentementehasta que se liberan de forma explícita.   El sistema kmalloc no puede reubicar nirecuperar estas regiones como respuesta a una escasez de memoria.   Los otros tressubsistemas   principales   que   realizan   su   propia   gestión   de   páginas   físicas   estáníntimamente relacionados: son el buffer cache, el page cache y el sistema de memoriavirtual.     El   buffers   cache   es   el   cache   principal   del   núcleo   para   dispositivosorientados a bloques como las unidades de disco, y es el mecanismo principal paraefectuar E/S con estos dispositivos.   El page cache almacena páginas enteras delcontenido de archivos y no está limitado a los dispositivos por bloques; tambiénpuede almacenar datos de res y lo usan tanto los sistemas de archivos nativos deLinux basados en disco como el sistema de archivos de red NFS.  El sistema de memoriavirtual administra el contenido del espacio de direcciones virtuales de cada proceso.

Esto tres sistemas interactúan íntimamente.   Para colocar una página de datosleída en el page cache hay que pasa temporalmente por le buffers cache,  las páginasdel page cache también pueden hacerse corresponder con el sistema de memoria virtualsi   un   proceso   estableció   una   correspondencia   entre   un   archivo   y   su   espacio   dedirecciones.   El núcleo mantiene una cuenta de referencias a cada página de lamemoria física, así que las páginas compartidas por dos o más de estos subsistemas sepueden liberar cuando ya nadie las está usando.

5.2­ Memoria virtual

El   sistema   de   MV   de   Linux   se   encarga   de   mantener   el   espacio   de   direccionesvisibles   para   cada   proceso.     Este   sistema   crea   páginas   de   memoria   virtual   porsolicitud y gestiona la carga de dichas páginas de disco o su intercambio a disco sies necesario.  Bajo Linux, el administrador de memoria virtual mantiene dos vistasdistintas del espacio de direcciones de un proceso: como un conjunto de regionesindividuales y como un conjunto de páginas.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  144

Page 145: Linux (Curso)

CURSOS LINUX

La   primera   vista   de   un   espacio   de   direcciones   es   lógicas,   que   describe   lasinstrucciones que el sistema de memoria virtual ha recibido acerca de la organizacióndel espacio de direcciones.  En esta vista, el espacio de direcciones consiste en unconjunto de regiones que no se traslapan, cada una de las cuales representa unsubconjunto continuo, alineado por páginas, del espacio de direcciones.  Cada regiónse   describe   internamente   con   una   sola   estructura   vm_area_struct,   que   define   laspropiedades de la región, incluidos los permisos de lectura, escritura y ejecucióndel proceso en la región, e información acerca de cualquier archivo asociado a laregión.  Las regiones de cada espacio de direcciones se enlazan en un árbol binariobalanceado   para   poder   realizar   búsquedas   rápidas   en   la   región   correspondiente   acualquier dirección virtual.

El   núcleo   también   mantiene   una   segunda   vista   (física)   de   cada   espacio   dedirecciones.   Esta vista se almacena en las tablas de páginas en hardware para elproceso.  Las entradas de la tabla de páginas determinan la ubicación actual exactade cada página de memoria virtual, esté en disco o en la memoria física.  La vistafísica se maneja con un conjunto de rutinas que se invocan desde los manejadores deinterrupciones de software del núcleo cada vez que un proceso trata de acceder a unapágina   que   no   está   actualmente   presenta   en   las   tablas   de   páginas.     Cadavm_area_struct de la descripción de direcciones contiene un campo que apunta a unatabal   de   funciones  que   implementan   las  tareas   de   gestión  de   páginas   clave  paracualquier región de memoria virtual dada.  Todas las solicitudes para leer o escribiruna página no disponible tarde o temprano se despachan al manejador apropiado de latabla de vm_area_struct, para que las rutinas de gestión de memoria centrales notenga que conocer los detalles de cómo administrar cada posible tipo de región dememoria.

Regiones de memoria virtuales:

Linux implementa varios tipos distintos de regiones de memoria virtual.  A primerapropiedad que caracteriza aun tipo de memoria virtual es el almacenamiento auxiliarpara la región: este almacenamiento describe el origen de las páginas de una región.A mayor parte de las regiones de memoria están respaldadas por un archivo, o bien pornada.     Una   región   sin   respaldo   es   el   tipo   más   sencillo   de   memoria   virtual,   yrepresenta memoria con demanda cero: cuando un proceso trata de leer una página deuna región así, simplemente recibe una página de memoria llena de ceros.

Una región respaldada por un archivo actúa como ventana hacia una sección de esearchivo: cada vez que le proceso trata de acceder a una página dentro de esa región,la tabla de páginas se llena con la dirección de una página dentro del page cache quecorresponde al desplazamiento apropiado dentro del archivo.  Tanto el page cache comolas tablas de páginas del proceso usan la misma página de memoria física, de modo quecualquier modificación que el sistema de archivos haga al archivo será visible deinmediato a cualquier proceso que haya establecido una correspondencia entre esearchivo y su espacio de direcciones.  Cualquier cantidad de procesos distintos puedeestablecer   una   correspondencia   con   la   misma   región   del   mismo   archivo,   y   todosterminará usando la misma página de memoria física para este fin.

Una región de memoria virtual también se define por su reacción a las escrituras.A correspondencia entre una región y el espacio de direcciones del proceso puede serprivada   o   compartida.     Si   un  proceso   escribe   en  una   región   con  correspondenciaprivada, el paginador detecta que se requiere un copiado al escribir para que loscambios sigan siendo locales respecto al proceso.  Por otro lado, las escritura enuna región compartida hacen que se actualice el objeto que se hizo corresponder conesa región, para que cualquier otro proceso que haya establecido una correspondenciacon ese objeto pueda ver de inmediato la modificación.

Tiempo de vida de un espacio de direcciones virtual:

Hay   exactamente   dos   situaciones   en   las   que   le   núcleo   crea   un   espacio   dedirecciones virtual nuevo: cuando un proceso ejecuta un programa nuevo con la llamada

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  145

Page 146: Linux (Curso)

CURSOS LINUX

al sistema “exec” y cuando se crea un proceso nuevo con la llamada al sistema “fork”.El primer caso es fácil:  Cuando se ejecuta un programa nuevo, el proceso recibe unespacio de direcciones virtual nuevo, totalmente vacío.   Toca a las rutinas quecargan el programa poblar el espacio con regiones de memoria virtual.

En el caso de la creación de un proceso implica crea un copia completa del espaciode direcciones  virtual del proceso existente.   El núcleo copia los descriptoresvm_area_struct del proceso padre y luego crea un conjunto de tablas de páginas parael hijo.  Las tablas de página del padre se copian directamente en las del hijo y seincrementa   la   cuenta  de   referencia   de  cada   página   cubierta;  así,   después   de  labifurcación, el padre y el hijo comparten las misma páginas de memoria física en susespacio s de direcciones.

Ocurre un caso especial cuando la operación de copiado alcanza una región dememoria privada.  Cualquier página en las que el proceso padre haya escrito dentro detal región son privadas, y las modificaciones subsecuentes ellas que hagan tanto elpadre como el hijo no deberán actualiza la página en el espacio de direcciones delotro proceso.  Si se copian las entradas de tabla de página para tales regiones, semarca como sólo lectura y para copiarse al escribirse.   En tanto ninguno de losprocesos modifique estas painas, los dos compartirán la misma pagina de memoriafísica.  Pero si cualquiera de los procesos trata de modificar una página de copia alescribir, se examinará la cuenta de referencias de la página.   Si la página siguesiendo compartida, el proceso copiará su conteniendo en una nueva página física. 

Intercambio y paginación:

Se transfieren páginas individuales a disco. 

El sistema de paginación se pude dividir en dos secciones.   Primero está elalgoritmo de paginación (política), que decide cuáles paginas deben pasarse a disco ycuando deben escribirse.  En segundo lugar está el mecanismo de paginación, que llevaa cabo las transferencias.

La política de paginación emplea una versión modificada del algoritmo del reloj(segunda oportunidad).  Se emplea un reloj de múltiples pasadas, y cada página tieneuna edad que se ajusta en cada pasada del reloj.  A edad es más bien una medida de lajuventud de la página, o de qué tanta actividad ha tenido recientemente la página.As páginas con accesos frecuentes alcanzan un valor de edad mayor, pero la edad delas páginas a las que pocas veces se accede disminuye hacia cero con cada pasada.Esta valuación de edad permite al paginador seleccionar las páginas que sacará adisco siguiendo una políticas de menos recientemente utilizada (LFU).

El mecanismo de paginación apoya la paginación tanto a dispositivos y particionesde intercambio dedicadas como a archivos normales, auque el intercambio a un archivoes significativamente más tanto a causa del gasto extra que el sistema de archivosincurre.  Los bloques de los dispositivos de intercambio se asignan según un mapa debits de bloques usados que se mantiene en memoria física en todo momento.   Elasignador usa un algoritmo de siguiente ajuste para tratar de escribir las painas enseries continuas de bloques de disco y así mejorar el desempeño.   El asignadorregistra el hecho de que se ha paginado a disco empleando una característica quetiene las tablas de paina en los procesadores modernos: se enciende el bit de página­no­presente de la entrada de la tabla de páginas, y esto permite llenar el resto dela entrada con un índice que identifica el lugar donde se escribió la pagina.

Memoria virtual del núcleo:

Linux   reserva   para   su   propio   uso   una   región   constante,   dependiente   de   laarquitectura, del espacio de direcciones virtuales de cada proceso.  Las entradas dela tabla de páginas que corresponden a estas páginas del núcleo se marcan  comoprotegidas, de modo que no puedan verse ni modificarse cuando el procesador estéoperando en modo usuario.   Esta área de memoria virtual del núcleo contiene dosregiones.   La primera es un área  estática que contiene referencias de tabla depáginas a cada paina de memoria física disponible en el sistema, de modo que haya una

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  146

Page 147: Linux (Curso)

CURSOS LINUX

traducción sencilla de direcciones físicas a virtuales cuando se ejecute el códigodel núcleo.  El corazón del núcleo, más todas las painas asignadas por el asignadornormal, residen en esta región.

El resto de la sección del espacio de direcciones reservado por el núcleo no sereserva para algún propósito específico.  El núcleo puede modificar las entradas detabla   de   páginas   dentro   de   este   intervalo   de   direcciones   de   modo   que   apunte   acualquier otra área de memoria  que se desee.   El núcleo proporciona un par derecursos que permiten a los procesos usar esta memoria virtual.  La función vmallocasigna un número arbitrario de páginas de memoria física, y las hace corresponder conuna sola región de memoria virtual del núcleo, lo que permite la asignación de trozosde memoria contigua grandes aun si no hay suficientes páginas físicas adyacenteslibres para satisfacer la solicitud.  A función vremap transforma una secuencia dedirecciones virtuales de modo que apunten a un área de memoria utilizada por undriver de dispositivo para E/S con correspondencia en la memoria.

Ejecución y carga de programas de usuario:

La ejecución de programas se dispara con la llamada exec.  Esta llamada ordena alnúcleo   ejecutar   un   programa   nuevo   dentro   del   proceso   actual,   sobrescribiendo   elcontexto de ejecución actual con el contexto inicial del nuevo programa.  A primeratarea   de   este   servicio   es   verificar   que   el   proceso   invocador   tenga   permiso   deejecutar el archivo.  Una vez comprobado, el núcleo invoca una rutina de carga parainiciar la ejecución del programa.  El cargador no necesariamente carga el contenidodel   archivo   de   programa   en   la   memoria   física,   pero   al   menos   establece   lacorrespondencia entre el programa y la memoria virtual.

No existe una rutina única en Linux para carga un programa.  Más bien, se mantieneuna tabla de posibles funciones cargadoras y da a cada una de ellas la oportunidad detratar de carga el archivo en cuestión cuando se hace una llamada exec.  La razóninicial para incluir esta tabla de cargadores fue que, entre la liberación de losnúcleos 1.0 y 1.2, se modificó el formato estándar de los archivos binarios de Linux.Los núcleos de Linux anteriores entendían el formato a.out para archivos binarios: unformato relativamente sencillo común en los sistemas UNIX más viejos.  Los sistemasLinux recientes emplean el formato ELF, que ahora reconoce la mayor parte de lasimplementaciones UNIX actuales.   ELF tiene varias ventajas respecto a a.out, comoflexibilidad y extensibilidad: es posible añadir secciones nuevas a un binario ELF(por ejemplo, para agregar información de depuración adicional) sin que las rutinasde carga se confundan.  Al permitir el registro de múltiples rutinas de carga, Linuxpuede apoyar fácilmente los formatos binarios ELF y a.out en un solo sistema enejecución.

Correspondencia entre los programas y la memoria:

Bajo Linux, el cargador de binarios no carga un archivo binario en la memoriafísica, sino que establece una correspondencia entre las paginas del archivo binarioy regiones de memoria virtual.  Sólo cuando el programa trata de acceder a una páginadada se genera un fallo de página.

Un archivo binario con formato ELF consiste en una cabecera seguida de variassecciones   alineadas   con   páginas.     El   cargador   ELF   opera   leyendo   la   cabecera   yestableciendo   una   correspondencia   entre   las   secciones   del   archivo   y   regionesindividuales de la memoria virtual.

FIGURA

En   la   figura   se   muestra   la   organización   típica   de   las   regiones   de   memoriaestablecidas por el cargador ELF.  El núcleo residen en una región reservada en unextremo del espacio de direcciones,  en su propia región privilegiada de memoria

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  147

Page 148: Linux (Curso)

CURSOS LINUX

virtual inaccesible para los programas normales.   El resto de la memoria virtualesta’disponible   para   las   aplicaciones,   que   pueden   usar   las   funciones   decorrespondencia de memoria del núcleo para crear regiones que correspondan en unaporción de un archivo o que estén disponibles para los datos de la aplicación.

La tarea del cargador es establecer la correspondencia con la memoria inicial paraque pueda iniciarse la ejecución del programa.  Las regiones que necesitan recibirvalores iniciales incluyen la pila y las regiones de texto y datos del programa.

La pila se crea en la parte superior de la memoria virtual, crece hacia abajo,hacia direcciones con número s más bajos, e incluye copias de los argumentos  yvariables de entorno que se dan al programa con la llamada exec.  As demás regionesse crean cerca del extremo inferior de la memoria virtual.  Las secciones del archivobinario que contiene texto del programa o datos sólo de lectura se hacen correspondercon una región de la memoria protegida contra escritura.  Los datos escribibles queya tienen valores iniciales se colocan a continuación,  y luego cualquier dato sinvalor inicial, que se hace corresponder con una región privada de demanda cero.

Inmediatamente después de estas regiones de tamaño fijo hay una región de tamañovariable que los programas pueden expandir según sus necesidades para contener losdatos que se asignan durante la ejecución.  Cada proceso tiene un puntero “brk” queapunta al alcance actual de esta región de datos, y los procesos pueden extender ocontraer “brk” con una llamada al sistema.

Una vez que se han establecido estas correspondencias, el cargador asigna elregistro contador de programa al punto de partida asentado en la cabecera ELF, y elproceso ya puede planificarse.

Enlazado estático y dinámico:

Una vez que se ha cargado el programa y ha iniciado su ejecución, ya se hancargado     en  el   espacio   de  direcciones   virtual   del  proceso   todos   los  contenidosnecesarios del archivo binario.  Sin embargo, la mayor parte de los programas tambiénnecesitan   ejecutar   funciones   de   las   bibliotecas   del   sistema,   y   dichas   funcionestambién deben cargarse.  En el caso más sencillo, cuando un programador construye unaaplicación,   las   funciones   de   biblioteca   necesarias   se   incrustan   directamente   elarchivo binario ejecutable del programa.  Un programa así esta enlazado estáticamentecon sus bibliotecas, y puede comenzar a ejecutarse tan pronto como se carga.

A desventaja principal es que todo programa generado debe contener una copia delas funciones de biblioteca.  Es mucho más eficiente, en términos de utilización máseficiente cargar las bibliotecas en la memoria una sola vez (enlazado dinámico).

Cada   programa   enlazado   dinámicamente   contiene   un   pequeña   función,   enlazadaestáticamente, que se invoca cuando el programa se inicia.  Esta función se limita aestablecer   una   correspondencia   entre   la   biblioteca   de   enlace   y   la   memoria   y   aejecutar el código que contiene.   A biblioteca de enlace leer una lista de lasbibliotecas   dinámicas   que  le   programa   necesita  y   los   nombre  de   las   variables  yfunciones que se requieren de esas bibliotecas leyendo la información contenida ensecciones del binario ELF.   A continuación, la biblioteca de enlace establece unacorrespondencia entre las bibliotecas y la parte media de la memoria virtual, yresuelve las referencia a los símbolos contenidos en esas bibliotecas.  No importacon qué lugar exactamente de la memoria se hagan corresponder estas bibliotecascompartidas:   se   compilan   en   código   independiente   de   la   posición   (PIC,   PositionIndependent Code) que se puede ejecutar en cualquier dirección de la memoria.

El sistema de archivos:

Modelo igual que UNIX.  Un archivo es cualquier cosa capaz de manejar la entrada ola salida de un flujo de datos.   Los drivers de dispositivos pueden aparecer comoarchivos, y el usuario también ve como archivos los canales de comunicación entreprocesos.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  148

Page 149: Linux (Curso)

CURSOS LINUX

Se manejan todos estos diferentes tipos de archivos ocultando los detalles deimplementación individual detrás de una capa de software, el Sistema de ArchivosVirtual (VFS, Virtual File System).

El sistemas de archivo virtual:

Se   diseñó   según   los   principio   de   la   orientación   a   objetos,   y   tiene   doscomponentes: un conjunto de definiciones que define el aspecto que puede tener unobjeto archivo y una capa de software para manipular dichos objetos.  Os tres tiposprincipales de objetos definidos por el VFS son las estructuras de objetos i­nodo,objeto   archivo,   que   representan   archivos   individuales,   y   el   objeto   sistema   dearchivos, que representa todo un sistema de archivos.

Para cada uno de estos tres tipos de objetos, el VFS define un conjunto deoperaciones que esa estructura debe implementar.  Cada objeto de uno de estos tiposcontiene un puntero a una tabla de funciones, la cual lista las direcciones de lasfunciones reales que implementan esas operaciones para ese objeto específico.  Así,la capa de software del VFS puede efectuar una operación con uno de estos objetosinvocando la función apropiada de la tabla de funciones de ese objeto, sin tener queconocer con antelación exactamente de qué clase de objeto se trata.  El VFS no sabe,ni le importa, si un i­nodo representa un archivo de red, un archivo de disco, unsocket de red o un archivo de directorio; la función apropiada para la operación leerdatos de ese archivo siempre estará en el mismo lugar en su tabla de funciones, y lacapa de software del VFS invocará esa función sin preocuparse cómo se leen realmentelos datos.

El objeto sistema de archivo representa un conjunto conectado de archivos queforman   una   jerarquía   de   directorios   autónoma.     El   núcleo   del   sistema   operativomantiene un solo objeto sistema de archivos para cada disco montado como sistema dearchivos y para cada sistema de archivos de red conectado actualmente.  La principalobligación del objeto sistema de archivos es proporcionar acceso a los í­nodos.

El VFS identifica cada i­nodo por un par (sistema de archivo­número de i­nodo)único,   y   encuentra   el   i­nodo   que   corresponde   a   un   número   de   i­nodo   específicopidiendo al objeto sistema de archivos que devuelva el í­nodo que tiene ese número.

Los objetos i–nodo y archivo son los mecanismos empleados para acceder a archivos.Un objeto i­nodo representa el archivo como un todo, y un objeto archivo representaun punto de acceso a los datos del archivo.

El sistema de archivos ext2fs:Linux se programó originalmente con un sistema de archivos compatible con Minix,luego este sistema de archivos fue reemplazado por uno nuevo, que se bautizó como“Sistema de archivos extendido” (extfs, extended file system).  Un rediseño posteriorde este sistema de archivos para mejorar el desempeño y la escalabilidad y añadirunas cuantas funciones que faltaban dio pie al “segundo sistema de archivosextendidos” (ext2fs).Es similar al Sistema de Archivos Rápido (ffs) del BSD, utiliza un mecanismo similarpara localizar los bloques de datos que pertenecen a un archivo específico, almacenarpunteros a los bloques de datos en bloques indirectos dispersos por todo el sistemade archivos con hasta tres niveles de indirección.  Al igual que el ffs, los archivosde directorios se almacenan en disco lo mismo que los archivos normales, aunque sucontenido se interpreta de diferente manera.  Cada bloque de un archivo de directorioconsiste en una lista enlazada de entradas, donde cada entrada contiene la longitudde la entrada, el nombre de un archivo y el número de i­nodo al que se refiere laentrada.En la política de asignación de disco, ext2fs realiza todas sus asignaciones enunidades pequeñas.  El tamaño de bloque por omisión es de 1kb, aunque también semaneja con bloques de 2kb y 4kb.Para mantener un alto desempeño, el sistema operativo debe tratar de realizar la E/Sen trozos grandes siempre que sea posible, agrupando solicitudes de E//S adyacentes

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  149

Page 150: Linux (Curso)

CURSOS LINUX

físicamente.  El agrupamiento reduce el gasto extra por solicitud que los drivers dedispositivo, disco y controladores de disco en Hw incurren.  Un tamaño de solicitudde E/S de 1kb es demasiado pequeño para mantener un buen desempeño, por lo que ext2fsusa política de asignación diseñadas para colocar bloques lógicamente adyacentes deun archivo en bloques de disco físicamente adyacentes, a fin de poder emitir unasolicitud de E/S por varios bloques de disco en una sola operación.La política de asignación tiene dos partes.  Ext2fs está dividido en varios grupos debloque.  Al asignar un archivo, se debe seleccionar primero el grupo de bloques paraese archivo.  En el caso de los bloques de datos, se intenta escoger el mismo grupode bloques en el que se asignó el i­nodo del archivo.  En el caso de asignaciones deí­nodos, se selecciona el mismo grupo de bloques en el que está el directorio padredel archivo, si no se trata de un archivo de directorio.  Los archivos de directoriono se guardan juntos, sino que se dispersan entre todos los grupos de bloquesdisponibles.  Estas políticas están diseñadas para mantener información relacionadadentro del mismo grupo de bloques, pero también para distribuir la carga de discoentre los grupos de bloques del disco a fin de reducir la fragmentación en cualquierárea del disco.Dentro de un grupo de bloques, se trata de mantener las asignaciones físicamentecontiguas si es posible, reduciéndose la fragmentación.  Ext2fs mantiene un mapa debits de todos los bloques libres de un grupo de bloques.  Al asignar los primerosbloques de un archivo nuevo, ext2fs comienza a buscar un bloque libre desde elprincipio de grupo de boques; al extender un archivo, continua la búsqueda a partirdel bloque que se asignó más recientemente el archivo.  La búsqueda se efectúa en dosetapas.  Primero, se busca un byte libre completo en el mapa de bits; si no seencuentra se busca cualquier bit libre.  La búsqueda de bytes libres pretende asignarespacios de disco en trozos de por lo menos ocho bloques, de ser posible.Una vez que se ha identificado un bloque libre, la búsqueda se extiende hacia atráshasta entrarse un bloque asignado.  Cuando se encuentra un byte libre en el mapa debits, esta extensión hacia atrás evita que ext2fs deje un hueco entre el bloque másrecientemente asignado del byte anterior (distinto de cero( y el byte cero que seencontró.  Una vez que se ha localizado el siguiente bloque por asignar, se porbúsqueda de bits o de bytes, ext2fs extiende la asignación hacia delante un máximo deocho bloques y preasigna esos bloques extra al archivo.  Esta preasignación ayuda areducir la fragmentación durante las escrituras intercaladas en archivos distintos, ytambién reduce el costo de CPU de la asignación de disco asignando varios bloquessimultáneamente.  Los bloques preasignados se devuelven al mapa de bits de espaciolibre cuando el archivo se cierra.

FIGURA

La figura ilustra las políticas de asignación.  Cada fila representa una secuencia debits encendidos y apagados de un mapa de bits de asignación, que representa losbloques ocupados y libres de disco.  En el primer caso, si podemos encontrarCualquier bloque libre suficientemente cerca del inicio de la búsqueda, lo asignamossin importar qué tan fragmentado pueda estar.  La fragmentación se compensaparcialmente por el hecho de que los bloques están cercanos entre sí y probablementese pueden leer todos sin que tenga que moverse la cabeza del disco; asignar todosesos bloques a un archivo es mejor a la larga que asignar bloques aislados a archivosdistintos una vez que las áreas libre grande comienzan a escasear en el disco.  En elsegundo caso, no hemos encontrado un bloque libre cerca, así que buscamos haciaadelante un byte libre entro en el mapa de bits.  Si asignamos ese byte en sutotalidad terminaremos creando un área fragmentada de espacio libre antes de él, asíque antes de asignar nada retrocedemos para que la asignación quede pegada a laprecedente, y luego asignamos hacia delante hasta satisfacer la asignación poromisión de ocho bloques.

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  150

Page 151: Linux (Curso)

CURSOS LINUX

ARRANQUE DE LINUX

1­ IntroducciónEl arranque está dividido en cuatro partes: 

• Cargador de la BIOS • Cargador LILO/GRUB• Núcleo del sistema operativo 

• Primer programa de usuario /sbin/init 

2­ Arranque de un PCEl proceso de arranque de una máquina basada en la arquitectura i386 conlleva lossiguientes pasos: 

­ Chequeo interno de los procesadores existentes en la placa. ­ Ejecución de la instrucción que se encuentra en la dirección 0xFFFFFFF0. Si existemás de un procesador, estos competirán por determinar cuál de ellos es el que realizael arranque y el resto esperarán a ser activados posteriormente. En esa dirección, la BIOS (Basic Input/Output System) coloca una instrucción de saltoal código de arranque de la propia BIOS. Dicho código selecciona el dispositivo de arranque. Se encuentra configurado en lamemoria CMOS, y se puede cambiar al arrancar la máquina. El código de arranque carga en la dirección 0x07C00 (31K) el primer sector o MBR(Master Boot Sector) del dispositivo seleccionado y salta a ejecutar el código queallí se encuentre. 

3­ Master Boot Record

4­ LILO: LInux LOader

Si en el MBR está LILO (Lilo.tech, Lilo.docu ) el arranque continúa como sigue: 

El propio código del MBR se mueve a la dirección 0x9A000 (616K), cerca del final delos primeros 640Kb y carga una segunda parte del cargador LILO en la dirección0x9B000 (620K). Al arrancar, el procesador está en modo real. Sólo puede acceder alprimer Megabyte de memoria. Esta segunda parte pregunta qué sistema operativo desea cargar y en caso de serLinux... Carga arch/i386/boot/bootsect.S en la dirección 0x90000, arch/i386/boot/setup.S en ladirección 0x90200 y el kernel en la dirección 0x10000 (64K). Finalmente, salta a la primera instrucción de setup.S. El protocolo de arranque deLinux simula el arranque desde disquete.  LILO maneja el arranque desde disco duro,

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  151

Page 152: Linux (Curso)

CURSOS LINUX

carga el núcleo de Linux y deja el sistema en las mismas condiciones que si sehubiera arrancado de disquete.

Concretamente,   si   se   hubiera   arrancado   de   disquete,   se   habría   cargadoarch/i386/boot/bootsect.S en la dirección 0x7C00 y saltado ahí.

El   código   de   bootsect.S   se   habría   movido   a   sí   mismo   a   0x90000,   habría   cargadoarch/i386/boot/setup.S en la dirección 0x90200 y el kernel en la dirección 0x10000(64K).

5­ Entrando en setup.SLa inicialización del núcleo antes de pasar a modo rotegido corre a cargo del códigoque se encuentra setup.S [arch/i386/boot/setup.S]. Este código todavía se ejecutaráen modo real.La distribución de memoria es la siguiente:

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  152

Page 153: Linux (Curso)

CURSOS LINUX

APÉNDICE DSitios de interés:

www.isolinux.orgwww.3dwm.orgwww.hispalinux.orgwww.vivalinux.com.arwww.li.orgwww.linux.orgwww.linux.org.arhttp://bulmalug.netwww.kernel.org http://lucas.hispalinux.es/www.gnu.orghttp://sal.kachinatech.com/index.htmlwww.ltdp.org/LDP/tlkwww.unixsup.com/unixlinux/libros.htmlwww.rpmfind.orgwww.ibm.com/linuxwww.lineo.orgwww.paketstormsecurity.orgwww.unixsup.com/unixlinux/libros.htmlhttp://polaris.lcc.uma.es/~rusman/docencia/so/so.htmhttp://lsi.ugr.es/~jagomez/disisop.htmlhttp://sopa.dis.ulpgc.es/ii­aso/portal_aso/leclinux/introduccion/syscall/syscall_archivos/frame.htmhttp://sopa.dis.ulpgc.es/ii­aso/portal_aso/leclinux/index.htmwww.infodrom.north.de/linux/manpages­es/http://lxr.linux.no  (Página de referencias cruzadas de Linux)www.linuxhq.comhttp://sunsite.unc.edu/linux  (Proyecto de Documentación de Linux)www.redhat.com:8080/HiperNews/get/khg.html (Kernel Hackers Guide)

CARLOS MANUEL TOLEDO – CARLOS CÉSAR OEGG  153