0% encontró este documento útil (0 votos)
372 vistas122 páginas

Historia y Estructura de UNIX y Linux

El documento describe la historia y estructura del sistema operativo UNIX. Se originó en 1969 como una alternativa más pequeña al proyecto MULTICS en los laboratorios Bell. Fue reescrito en C en 1973 y se distribuyó ampliamente a universidades en la década de 1970, lo que llevó a su adopción generalizada. Actualmente existen muchas variantes de UNIX como Linux, pero todas comparten la misma estructura básica, incluido un núcleo central que controla el hardware y proporciona servicios a las capas superiores del sistema operativo.

Cargado por

puan
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
372 vistas122 páginas

Historia y Estructura de UNIX y Linux

El documento describe la historia y estructura del sistema operativo UNIX. Se originó en 1969 como una alternativa más pequeña al proyecto MULTICS en los laboratorios Bell. Fue reescrito en C en 1973 y se distribuyó ampliamente a universidades en la década de 1970, lo que llevó a su adopción generalizada. Actualmente existen muchas variantes de UNIX como Linux, pero todas comparten la misma estructura básica, incluido un núcleo central que controla el hardware y proporciona servicios a las capas superiores del sistema operativo.

Cargado por

puan
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

1.

Introduccin

1.1. Historia

En 1965, los laboratorios de la Bell, en colaboracin con otras empresas, estaban inmersos en el proyecto
MULTICS, que trataba de hacer un sistema operativo universal que ofreciera todos los servicios a todo el
mundo. Pero en 1969 se vio que este sistema estaba resultando demasiado grande y costoso, por lo cual
la Bell abandon el proyecto y varios de sus investigadores, principalmente Ken Thompson, que
participaron en el proyecto anterior y tambin en el sistema operativo CTSS, empezaron uno nuevo que
era una versin reducida del MULTICS y al que Brian Kernighan, haciendo un juego de palabras llam
UNIX (Uniplexed Information Computer System).

La primera versin de UNIX estaba hecha en ensamblador y era poco portable, por lo que cuando en 1973
se intent cambiar de mquina de trabajo de un PDP-7 a un PDP-11, se reescribi gran parte del UNIX en
C por parte del creador del mismo Dennis Ritchie. Un ao despus apareca el primer artculo sobre el
sistema.

Otra causa del gran xito del sistema operativo UNIX (a parte de sus caractersticas internas) es el hecho
de que en principio la AT&T (Bell) no poda licenciar el sistema operativo ya que el mercado informtico no
estaba liberalizado, por lo que lo ofreci, incluido el cdigo fuente en C, a las universidades y otros
organismos oficiales a un precio simblico, era la versin 6 liberada en 1976. Esto provoc que muchos
estudiantes hicieran aplicaciones para el mismo, por lo que se convirti en uno de los sistemas operativos
ms completos y que cuando salieron a la industria recomendaran su uso, por lo que con el paso de los
aos se convirti en el ms popular en los ambientes cientficos y empresariales.

Debido a esto, numerosas empresas han hecho sus versiones de UNIX para sus propias mquinas,
normalmente a partir de la versin sptima del 78, as Microsoft lanz en 1980 Xenix, que es un UNIX para
procesadores de 16 bits, aadindole otras caractersticas como recuperacin de errores por hardware,
deteccin de fallos de energa y recuperacin de ficheros en cadas y mejor comunicacin de procesos.
DEC lanz como alternativa para sus mquinas, que tenan el sistema operativo VMS, el Ultrix, HP el
HPux, IBM el AIX (CPIX), el SunOS (padre del SOLARIS) para estaciones de SUN (fue el sistema que
introdujo el NFS) en 1.985, Silicon el IRIX, etc.
A la vez varias Universidades y la propia AT&T siguieron mejorando el propio UNIX, con lo que salieron al
mercado diversas versiones del mismo, concretamente la Universidad de Berkley, que llevaba
desarrolando su versin a partir de la sexta de AT&T sac en el 77 la BSD (Berkley Software Distribution)
hasta llegar en el 93 a la 4.4. AT&T comenz a licenciar el sistema a partir de la edicin sexta (1.977) en
las universidades y de la sptima comercialmente (1.979). A partir de sta en 1982 sali el UNIX System III
y despus de sta, en 1983, la UNIX System V que es la ms conocida actualmente y de la cual hay
muchas versiones que se identifican con el estndar SVID o SVrx, donde x es la release, es decir la
versin.

Actualmente el system V versin 4 es el ms usado, ya que supuso la unificacin de las versiones previas
de AT&T, la 4.3 de BSD, el SunOS y el XENIX, teniendo adems opciones de tiempo real.

Las aplicaciones UNIX suelen ser muy portables, ya que una misma aplicacin UNIX puede ejecutarse en
muchas mquinas con muy pocos cambios. Actualmente se est definiendo un estndar al nivel de
lenguaje: el POSIX, para que la portabilidad sea absoluta, especificando que entradas y salidas (llamadas)
tiene que tener un sistema operativo para que sea considerado POSIX (este estndar puede adoptarlo
cualquier sistema operativo, pero est especialmente indicado para la familia del UNIX). Este estndar
est soportado por IEEE e ISO.

Tambin existe la fundacin de software abierto (OSF) a la que estn adheridos IBM, DEC y HP entre
otros. Su objetivo es desarrollar un sistema operativo basado en el AIX que sirva de alternativa al de AT&T
que es la que soporta UI (UNIX International). Ambas han convenido en utilizar y promover POSIX.

Por ltimo se est produciendo una verdadera revolucin en el mundo del


UNIX en parte gracias a la popularidad de Internet y es el sistema
operativo personal LINUX. ste, que es un sistema operativo UNIX
completo, nace de un proyecto fin de carrera de Linus Torvalds (finlands
de 23 aos[ver fotografa]) que intentaba mejorar el MINIX para el
procesador 80386 de 32 bits. Una vez realizado el primer objetivo, el autor
puso a disposicin de los internautas su trabajo que poco a poco fue
modificndose hasta convertirse en un verdadero sistema operativo. En
octubre de 1.991 sali la primera versin 0.02 al pblico y el 14 de marzo
de 1.994 se lleg a la 1.0, que culmin tres aos de trabajo para ampliar el
ncleo e incluir soporte de redes y sockets tipo BSD, adems de
dispositivos con protocolos PPP (lneas serie) y SLIP (Modems), mejoras
del sistema de archivos y gestin de memoria virtual con paginacin, soporte para todo tipo de hardware
(ratones, tarjetas de sonido, CD-ROMS, etc.), emulacin de punto flotante para los 80386 sin los 80387 y
comunicacin IPC de System V. Dos aos despus, en marzo de 1995, se lleg a la versin 1.2,
soportando ms hardware (bus PCI), adems de incluir funcionalidades para emular DOS.

Una caracterstica muy importante del LINUX (http://www.linux.org),


inherente a su origen, es que el producto es gratis (Licencia Pblica General GPL del proyecto GNU de la
Free Software Foundation), que se est continuamente actualizado y que no hay ninguna versin oficial del
mismo, salvo el ncleo, simplemente hay empresas que se dedican a recopilar los parches y
actualizaciones y hacen distribuciones del mismo (lo nico oficial es el kernel del sistema, que es revisado
por el propio Linus y un grupo reducido de desarrolladores), comprobando que funcionan conjuntamente y
proporcionando un programa de instalacin.

Actualmente las distribuciones ms conocidas (ver en este captulo) son Slackware 3.0, Debian LINUX,
Caldera, Red Hat, etc. Posiblemente la distribucin ms extendida es la ltima. Existe un proyecto espaol,
tambin residente en la red (se muestra el logotipo), el proyecto LuCas (http://lucas.hispalinux.es/), que
trata de traducir los manuales del sistema al castellano, de ah su nombre.

1.2. Estructura

U n sistema operativo UNIX (como hemos visto hay toda una familia) es un sistema muy grande y
complejo, tiene cientos de comandos y miles de opciones sobre estos comandos, pero solamente unos
pocos son utilizados normalmente, siendo los dems para tareas especializadas. Otra caracterstica del
UNIX es que puede ejecutarse sobre cualquier tipo de sistema, desde sistemas personales hasta grandes
computadores.

Desde el punto de vista de la estructura interna del sistema operativo, ste consta de:

 Un ncleo o Kernel, que controla el hardware del equipo y realiza las operaciones de bajo nivel y
que es llamado por las otras partes del sistema para realizar distintos servicios.
 Una interfase de llamadas que independiza el uso del kernel para un determinado hardware del
usuario del mismo.
 Un intrprete de comandos o shell, que hace que el usuario pueda utilizar los comandos del
sistema operativo o cargar sus programas en memoria y ejecutarlos.
 Varios cientos de comandos y programas de aplicacin para que el usuario pueda trabajar con
ficheros, realizar ediciones, clculos, etc.
 Y por ltimo los programas propios que desarrolle el usuario (que son tambin como aplicaciones) y
que tienen la misma posicin jerrquica dentro del sistema que los comandos.
Como hemos dicho, el ncleo del sistema operativo es el que se encarga de crear un ambiente UNIX que
utilicen las otras partes del sistema, aislndolas de la mquina (hardware) especfica donde se ejecutan,
por lo tanto, su principal funcin (ver siguiente figura) es dar una imagen lgica de este hardware,
bsicamente del disco, la CPU, la memoria y los perifricos.

Sobre el disco, y otras unidades de almacenamiento masivo, se crear una estructura de ficheros que
garantice su proteccin (y en general la de los recursos del sistema) frente a accesos no permitidos. De
esta manera, cada fichero tiene determinados permisos de uso en lo que se refiere a la utilizacin del
mismo: lectura, escritura y ejecucin, y a los distintos tipos de usuarios: propietario, amigos del propietario
y otros usuarios. El sistema de ficheros nativo (como veremos) del Linux se llama ext2 (Second Extend File
System) pero puede soportar otro tipo de sistemas como: FAT16,VFAT,FAT32, ISO9600, HPFS(OS/2),
NTFS(NT) y Varios UNIX.

Deber dividir el uso de la CPU del sistema entre los distintos procesos (planificacin o scheduling) que se
puedan ejecutar en un momento dado, ya sean del sistema operativo o del usuario, de tal manera que para
el usuario sea transparente su utilizacin (el usuario tiene la impresin de que es el nico que utiliza el
ordenador). La planificacin exigir, con el uso de las interrupciones y el manejo de errores, el lanzamiento
(despatching) de los procesos, es decir, que un proceso pueda tomar el control de la CPU. Adems el
ncleo se ejecutar en el modo privilegiado del procesador y los procesos en le modo usuario.

Estos dos ltimos puntos implican que el UNIX es un sistema multiproceso y multiusuario y por tanto, al ser
un sistema multiusuario, tambin llevar la cuenta (accounting) de las entradas al sistema de cada uno y
de su gasto de CPU.

Tambin tiene que repartir el uso de la memoria entre los distintos procesos del sistema, lo que implica la
proteccin y comparticin (si as se hace) de los segmentos de memoria asignados a estos procesos. Por
supuesto la memoria asignada a procesos del sistema operativo no puede ser accedida por ningn
proceso de usuario, con lo cual se protege al sistema de errores que se puedan producir al programar una
aplicacin. Adems deber manejar los distintos tipos de memoria existentes: cache, memoria fsica y
sobre todo memoria secundaria. Esta ltima implica la reserva y utilizacin de diferente manera (no habr
un sistema de ficheros) de parte del disco.
Por ltimo se debern gestionar los distintos dispositivos de entrada/salida como impresoras, terminales
(teclado y pantalla), discos, etc. Estos dispositivos se manejan a travs de programas o rutinas construidas
para tal fin que se llaman drivers, de tal manera que transportar un sistema UNIX de una mquina a otra es
prcticamente construir los drivers apropiados a la misma. El kernel debe controlar los posibles errores que
se pueden producir en el sistema de manera adecuada, adems de manejar las interrupciones que
provocan estos dispositivos.

La interfase de llamadas al sistema (system call) es la que utilizarn las otras partes del UNIX para usar
los servicios que ofrece el ncleo del sistema operativo. As, cuando un programa quiere leer una
determinada lnea de caracteres de un terminal o un fichero, lo que hace es una llamada al kernel, que le
proporciona los caracteres ledos directamente del dispositivo indicado.

Una caracterstica primordial de la interfase es que es la misma en cada UNIX, independientemente del
hardware o del ncleo que haya debajo de ella, con lo cual las aplicaciones se independizan del
computador y se realizan exclusivamente para UNIX (POSIX).

Las llamadas, en general, siempre se hacen desde ensamblador, ya que piden un servicio al ncleo del
sistema operativo que se procesa en modo supervisor (la mayora de los procesadores siempre tienen al
menos dos modos de funcionamiento, el supervisor y el usuario) por lo cual hay que realizar una TRAP del
procesador. Pero por supuesto pueden ser utilizadas desde lenguajes de alto nivel (fundamentalmente
desde C) a travs de libreras.
En los manuales del sistema operativo, la parte encargada de las llamadas al sistema es la misma en
todos los UNIX y en ella se detallan fundamentalmente las libreras que hay que utilizar, los parmetros
que hay que pasar a la rutina que pedir el servicio requerido y los posibles cdigos de error que nos
puede devolver.

La otra parte fundamental del sistema operativo es la shell (se ver con detenimiento en el captulo
tercero). Shell es caparazn, dando idea de algo que envuelve al sistema operativo para su uso y ser la
encargada de comprobar y ejecutar las rdenes del usuario, para lo cual, si la orden es correcta, mandar
cargar en memoria el programa correspondiente, el cual har posiblemente uso del kernel a travs de la
interfase de llamadas.

La shell es en s misma, otro programa que se ejecuta en el sistema y que por lo tanto no se diferencia del
resto de programas, por lo que se pueden realizar shell a medida del usuario (aunque esto no es trivial).
De hecho un UNIX puede tener varias shell, las ms populares son la bourne (sh), la c (csh) y la korn (ksh)
(de stas hay toda una serie de derivadas en Linux como la bash o la tcsh).

La Bourne shell fue la primera desarrollada por AT&T, es bsica, y por tanto existe en todos los UNIX. La c
shell tiene una sintaxis parecida al lenguaje de programacin C y fue desarrollada por la universidad de
Berkeley para su UNIX, aunque actualmente est extendida, al igual que las otras dos, a todos los UNIX.
La Korn shell es la ltima y contiene a la Bourne y a parte de la c, incluyendo otras caractersticas que la
hacen la ms atractiva, como es el editor de comandos.

El funcionamiento de la shell es sencillo, primero nos presenta en pantalla un smbolo (prompt)


indicndonos que podemos utilizar un comando incluido en el UNIX, un programa de aplicacin, o un
programa propio. Este smbolo en la bourne y en la Korn es el "$" y en la C el "%" (fcilmente
modificables). Despus analizar esta lnea de comando que hemos introducido y comprobar su
legalidad, si la orden es vlida, crear dos procesos, uno donde se colocar la propia shell y otro donde
cargar el fichero que contiene el programa a ejecutar, la shell esperar a que el proceso hijo (el
programa) termine y una vez ocurrido esto devolver el prompt a la pantalla esperando una nueva orden
(existe un curso especfico en el aula virtual dedicado a la shell).

Espero que no os pase esta ancdota verdica en una Facultad de Empresariales:


Alumno: "No me entra la password en mi cuenta, me salen asteroides"
[me llev un par de tensos segundos darme cuenta de que quera decir "asteriscos"]

Actualmente en muchos sistemas, sobre todo en estaciones de trabajo, se utilizan shell de tipo grfico que
siguen el estndar de facto X Windows (MIT). ste se basa en la filosofa cliente/servidor y tiene todo un
protocolo (x protocolo) entre los clientes y los servidores. Para utilizarlo desde un programa se utiliza la
librera Xlib, es una librera de bajo nivel y difcil de usar, por eso normalmente se utilizan toolkit basados
en ella como Motif (OSF) u Open Look (AT&T y Sun).
Las utilidades del sistema (tambin incluidos los comandos) son una coleccin de programas
suministrados con el sistema operativo para realizar funciones particulares. Entre estas funciones estn:
las operaciones sobre el sistema, el manejo de ficheros, el procesado de texto, el soporte de oficina, el
desarrollo de software, comunicaciones, grficos, etc.

1.3. Ficheros

Una de las caractersticas ms potentes y atractivas del UNIX es su sistema de ficheros, que maneja los
datos guardados en los dispositivos de almacenamiento masivo del sistema. Sus facilidades hacen sencilla
la forma de organizar la informacin de los ficheros, y su recuperacin o modificacin. Muchas de estas
facilidades eran nicas cuando se cre el primer UNIX y han sido tan populares que se han copiado en
otros sistemas operativos comerciales.

El sistema de archivos del UNIX tiene las siguientes caractersticas:

 Es jerrquico, de tal manera que los usuarios pueden agrupar la informacin relacionada en una
unidad y manejarla eficientemente.
 Aumento dinmico del tamao del fichero, de tal manera que un fichero slo contiene el tamao
necesario para almacenar su informacin, sin necesidad de que intervenga el usuario.
 Ficheros no estructurados, el UNIX no impone una estructura interna al fichero, por lo que el usuario
es libre de interpretar el contenido de los mismos.
Seguridad, los ficheros pueden ser protegidos de accesos no autorizados.
 Tratamiento idntico de ficheros y dispositivos de entrada / salida, de tal manera que los mismos
programas pueden utilizar indistintamente tanto ficheros como dispositivos.

Como se ver posteriormente, para identificar a los ficheros del sistema, el UNIX utiliza un nmero nico
en todo l, que se llama inodo, pero ste slo se utiliza internamente, ya que el usuario puede identificar a
los mismos a travs de un nombre que puede tener hasta catorce caracteres. Para agrupar a los ficheros
relacionados por temas o por la pertenencia a un usuario se utilizan los directorios, que son tratados por el
UNIX de la misma manera que los ficheros (como un fichero especial), pudiendo tener tambin un nombre

Como hemos dicho, los ficheros son identificados por el sistema con un nmero, y por el usuario con un
nombre, pero nada impide que un mismo fichero fsico tenga varios nombres, esto es lo que se conoce con
link, de tal manera que puede trabajar sobre un mismo fichero que parece que est en varios directorios (o
en el mismo).

La estructura de ficheros del UNIX es completamente jerrquica, de tal manera que lo mismo que puedo
agrupar a ficheros dentro de un mismo directorio, puedo agrupar otros directorios y ficheros dentro de otros
directorios. Est estructura jerrquica continua hasta llegar a lo que se conoce como nodo o directorio raz,
que se representa por "/" (no confundir con el del MSDOS que es "\") por encima del cual no se pueden
crear ficheros ni directorios.

De esta manera se forman estructuras en forma de rboles de directorios como el ejemplo que se muestra
en la Figura.
Al igual que en otros sistemas operativos, a los ficheros globalmente se los conoce, o se puede acceder a
ellos a travs de un camino formado por los nombres de los directorios que los contienen, es lo que se
llama un pathname. Para especificar en este nombre la divisin de los directorios se utiliza el smbolo "/",
por lo que cualquier nombre completo de un fichero siempre empieza por "/" que es el directorio raz. De
esta manera el fichero forecast del directorio boston contenido en east y en sales tiene un nombre
completo de:

/sales/east/boston/forecast

Esta sera una forma absoluta de acceder al fichero, tambin existe una forma relativa y es utilizando los
directorios actual y padre que se simbolizan por "." y "..", a parte de utilizar el directorio actual de trabajo.
De esta manera si estamos en /sales/east podemos llamar al fichero anterior como:

boston/forecast

y si estamos en /sales/west como:

../east/boston/forecast

Al igual que un usuario puede organizar su sistema de ficheros, el sistema operativo tiene sus ficheros (se
ver con mucho ms detalle en el captulo de gestin de ficheros, apartado rbol de directorios) dispuestos
de una manera estndar (ver Figura). Del directorio raz cuelgan una serie de ficheros y de directorios
tpicos:

/bin : En l se guardan las utilidades del sistema UNIX.


/dev : Ficheros de entrada/salida (dispositivos).
/etc : Utilidades para la administracin del sistema.
/lib : Libreras del sistema UNIX.
/tmp : Ficheros temporales.
/usr : Ficheros generales a todos los usuarios y sobre los que cuelgan los directorios de los
distintos usuarios. En muchos casos estos directorios personales cuelgan de otros
directorios como /users o /home.
/lost+found: Aqu se encuentran ficheros recuperados de cualquier fallo.
A diferencia de otros sistemas operativos como el MSDOS, en UNIX no se puede acceder directamente a
unidades de almacenamiento, sino que deben ser montadas y desmontadas sobre la arquitectura
jerrquica principal. Normalmente el montaje -como se ver posteriormente- se hace al arrancar el sistema
(proceso de booting) y el desmontaje al apagarlo (proceso de shutdown).

Las unidades removibles tienen tambin una estructura jerrquica que comienza con un directorio raz (ver
figura). As, el proceso de montaje consiste en solapar este directorio raz de la unidad secundaria con
algn directorio de la unidad principal (debe estar vaco, ya que si no se ocultarn sus ficheros), de tal
manera que cuando accedamos a este directorio realmente accedemos al directorio raz de la secundaria
de forma transparente.

Por ltimo hemos dicho que en cualquier lugar donde se pueda utilizar un fichero tambin se puede utilizar
un dispositivo. Todos los dispositivos del sistema estarn en el directorio /dev y dentro de este figurarn
ficheros que representarn a estos dispositivos como /dev/lp a la impresora o /dev/tty0 a un terminal
o una lnea de comunicaciones. Existe un fichero/dispositivo especial que es el /dev/null, pensado para
volcar sobre l cualquier informacin que no nos interese o que queramos eliminar sin almacenar nada.

1.4. Distribuciones 2006

A la hora de plantear un curso de administracin UNIX se puede pensar en realizar ste en una gran
mquina UNIX y desarrollar ah las tareas de administracin. Hay que tener en cuenta que estas tareas
deberan realizarse en modo supervisor (root) con acceso a toda la mquina y que nadie est exento de
fallos, de hecho una buena forma de aprender con seguridad, es cometer algunos, por lo que las prcticas
de unos interferiran con las de otros. Por eso es preferible que cada uno se haga responsable de su
propia mquina y esto slo se puede conseguir con un hardware personal (PC) y con un UNIX asequible a
todo el mundo (cuasi gratis). Por lo tanto la nica solucin es que cada alumno tenga en su PC un sistema
LINUX.

Cuando un usuario quiere escoger una distribucin para su ordenador, no slo debe tener en cuenta la
calidad implcita de la misma si no a que va a dedicarse y cuales son sus objetivos, no es lo mismo dedicar
el computador a tareas domsticas que a un servidor de web. Adems debe considerar en que plataforma
va a instalar el sistema operativo, si alguien no tiene suficiente mquina, siempre podr escoger una
versin anterior, ya que el LINUX se empez a desarrollar desde el procesador 80386.

Dnde puedo conseguir GNU/Linux?

Pues la puedes comprar directamente del distribuidor con la ventaja de que te dar, adems de los CDs,
en muchos casos soporte y manuales. Puedes cogerla de algunas de las cientos de revistas que existen
en los kioscos, muchas de ellas dedicadas exclusivamente a Linux y que te ofrecen gratis alguna de las
distribuciones, aunque no suelen ser las ltimas pero igualmente vlidas. Y tambin te las puedes bajar de
Internet, abajo se referencias las direcciones de cada distribucin que puedes encontrar reunidas en Red
Iris: http://sunsite.rediris.es/replicas/ o tambin en http://www.linuxiso.org/.

Debes tener en cuenta que en este ltimo caso que necesitars una conexin veloz, tipo ADSL o MODEM
cable o sino la experiencia de descargado resultar de los ms frustrante y debers conseguir las
imgenes ISO para despus grabarlas en un CD. En cualquier caso tendrs que reconfigurar tu sistema
para que pueda arrancar entre varios sistemas operativos (ver captulo de instalacin).

Debido a la rpida evolucin que est sufriendo el LINUX (el 5 de octubre de 2005 ha cumplido 14 aos),
hemos pasado prcticamente de tener una nica distribucin que era la Slackware a cientos, 411
segn http://www.linux.org/dist/index.html (en este momento hay 26 distribuciones de propsito general
compatibles con el espaol y para la plataforma Intel). Debemos tener en cuenta que el ncleo del sistema
es el mismo (la ltima versin estable del ncleo es la 2.6.13.3 -la direccin oficial donde la puedes
obtener es: http://www.kernel.org-), por lo tanto las diferencias estn fundamentalmente en el entorno grfico
que presentan, las libreras que ofrecen, su modo de instalacin, el sistema de obtencin de paquetes y los
requerimientos hardware de cada una (plataforma para la que est hecha).

Abajo te destaco las ms populares:

RedHat Linux - Fedora Core


Desarrollador: RedHat Software.
Website: http://www.redhat.com/ http://fedora.redhat.com/
Pros: Ampliamente usada, excelente soporte de la comunidad, muchas innovaciones
Contras: Limitada vida til de la edicin gratuita, soporte multimedia pobre.
Gratuita: Si (Fedora).
Sistema de paquetes: RPM.

Historia (wikipedia): Red Hat Software Inc. fue fundada en 1994 por Bob Young y Marc Ewing. En agosto de
1999, Red Hat sali a bolsa y sus acciones obtuvieron la octava ganancia de primer da ms grande en
toda la historia de Wall Street. Cuatro aos ms tarde, el valor de las
acciones de Red Hat es en torno a una centsima parte del mximo valor
que llegara a alcanzar antes de la crisis de las puntocom. Aun as, sus
comienzos exitosos en el mercado de valores sirvieron para que Red Hat
fuera portada en peridicos y revistas no directamente relacionadas con
temas informticos. En cualquier caso, parece ser que Red Hat ha
sabido superar los problemas de otras compaas del mundo de los
negocios en torno al software libre y anunci nmeros negros por
primera vez en su historia en el ltimo cuarto del ao 2002. En
septiembre de 2003, Red Hat decidi concentrar sus esfuerzos de
desarrollo en la versin corporativa de su distribucin y deleg la versin
comn a Fedora Core, un proyecto abierto independiente de Red Hat.

Fedora Core (tambin conocida como Fedora Linux) es una distribucin


Linux desarrollada por la comunidad Fedora y promovida por la
compaa estadounidense Red Hat. El objetivo del proyecto Fedora es conseguir un sistema operativo de
propsito general y basado exclusivamente en software libre con el apoyo de la comunidad Linux. Los
ingenieros de Red Hat continan participando en la construccin y desarrollo de este proyecto e invitan y
fomentan la participacin de miembros de la comunidad Linux. Originalmente, Red Hat Linux fue
desarrollado exclusivamente dentro de Red Hat, con la sola realimentacin de informes de usuarios que
recuperaban fallos y contribuciones a los paquetes de software incluidos; y no contribuciones a la
distribucin como tal. Esto cambi el 22 de septiembre de 2003, cuando Red Hat Linux se deriv dando
origen al Proyecto Fedora que est orientado a la comunidad de usuarios y as mismo, sirve de base para
que Red Hat Enterprise Linux se desarrolle con ms efectividad y adopte las nuevas caractersticas que se
aaden en el Proyecto Fedora. Este modelo es similar a la relacin entre Netscape Communicator y
Mozilla, o entre StarOffice y OpenOffice.org, aunque en este caso, el producto comercial resultante es
software libre.

Descripcin: Qu hace a Red Hat Linux tan especial? Su curiosa mezcla de conservadurismo y
paquetes punteros mezclados sobre muchas aplicaciones desarrolladas en casa. Los paquetes no son los
ms actuales, una vez se anuncia una nueva versin beta, las versiones de los paquetes se mantienen,
excepto para actualizaciones de seguridad. Como resultado se obtiene una distribucin bien probada y
estable. El programa de betas y las facilidades para enviar fallos estn abiertas al pblico y hay un gran
espritu en las listas de correo pblicas. Red Hat Linux se ha convertido en la distribucin linux dominante
en servidores en todo el mundo. Otra de las razones del xito de Red Hat es la gran variedad de servicios
populares que ofrece la compaa. Los paquetes de software son fcilmente actualizables usando la Red
Hat Network, un repositorio oficial de software e informacin. Una larga lista de servicios de soporte son
accesibles en la compaa y, aunque no siempre baratos, tienes virtualmente asegurado un excelente
soporte de personal altamente cualificado. La compaa ha desarrollado incluso un programa de
certificacin para popularizar su distribucin, el RHCE (Certificado de Ingeniera de Red Hat), academias y
centros examinadores estn disponibles en el casi todas partes del mundo.

GNU/Debian

Website: http://www.debian.org/ http://www.es.debian.org/


Pros: 100% libre, web y recursos de la comunidad excelentes, bien probada, instalacin de software
sencillisima usando apt-get.
Cons: Instalador arcaico.
Sistema de paquetes: DEB
Descarga gratuita: Si
Historia (wikipedia): Debian o ms concretamente Debian GNU/Linux es una distribucin Linux, basa sus
principios y fin en el software libre. Nace como una apuesta por separar en sus versiones el software libre
del software no libre. El modelo de desarrollo es independiente a empresas, creado por los propios
usuarios, sin depender de ninguna manera de necesidades comerciales. Debian no vende directamente su
software, lo pone a disposicin de cualquiera en Internet, aunque s permite a personas o empresas
distribuir comercialmente este software mientras se respete su licencia. Creado por el Debian Project el
ao 1993, la organizacin responsable de la creacin y mantenimiento de la misma distribucin, centrado
en GNU/Linux y utilidades GNU. Este tambin mantiene y desarrolla sistemas GNU basados en otros
ncleos. El origen de la palabra Debian viene determinado por el nombre del creador, Ian Murdock, y
Deborah, su esposa. Sus primeras versiones 0.9x fueron lanzadas en 1994 y 1995. Las primeras
portabilidades a otras arquitecturas fueron a comienzos de 1995, siendo la primera versin 1.x de Debian
lanzada en 1996.

Descripcin: Debian es un proyecto totalmente no-comercial; posiblemente el ms puro de los ideales


que iniciaron el movimiento del software libre. Cientos de desarrolladores voluntarios de alrededor del
mundo contribuyen al proyecto, que es bien dirigido y estricto, asegurando la calidad de una distribucin
conocida como Debian.En cualquier momento del proceso de desarrollo existen tres ramas en el directorio
principal: "estable", "en pruebas" e "inestable" (tambin conocida como "sid"). Cuando aparece una nueva
versin de un paquete, se sita en la rama inestable para las primeras pruebas, si las pasa, el paquete se
mueve a la rama de pruebas, donde se realiza un riguroso proceso de pruebas que dura muchos meses.
Esta rama solo es declarada estable tras una muy intensa fase de pruebas. Como resultado de esto, la
distribucin es posiblemente la ms estable y confiable, aunque no la ms actualizada. Mientras que la
rama estable es perfecta para servidores con funciones crticas, muchos usuarios prefieren usar las ramas
de pruebas o inestable, ms actualizadas, en sus ordenadores personales. Debian es tambin famosa por
su reputacin de ser dificil de instalar, a menos que el usuario tenga un profundo conocimiento del
hardware de la computadora. Compensando este fallo est "apt-get" un instalador de paquetes Debian.
Muchos usuarios de Debian hacen bromas sobre que su instalador es tan malo por que solo lo han de usar
una vez, tan pronto como Debian est en funcionamiento, todas las actualizaciones, de cualquier tipo
pueden realizarse mediante la herramienta apt-get.Debian GNU/Linux ofrece ms que un SO puro; viene
con unos 15490 paquetes, programas precompilados distribuidos en un formato que hace ms fcil la
instalacin. La ltima versin estable de Debian es la 3.1. La ltima actualizacin de esta versin se
public el 6 de junio de 2005, woody (la antigua versin estable) pas a ser sustituida por sarge.

MandrivaLinux

Desarrollador: Mandriva Linux (antes Mandrake)

Website: http://www1.mandrivalinux.com/es/
Pros: Amigable para el usario, herramientas de configuracin grfica, enorme soporte de la
comunidad, posibilidad de cambiar el tamao de particiones NTFS.
Cons: Algunas versiones contienen fallos, la compaa est pasando por problemas
financieros.
Sistema de paquetes: RPM.
Descarga gratuita: Si

Historia (wikipedia): Mandriva Linux (antes Mandrakelinux y Mandrake Linux) es una distribucin Linux
creada por Gal Duvalaparecida en julio de 1998 propiedad de Mandriva, enfocada a principiantes o
usuarios medios. Apoya tambin totalmente la licencia GNU GPL, ofrece pblicamente su distribucin en
formato ISO, sus asistentes o sus repositorios. La primera edicin se bas en Red Hat Linux (version 5.1) y
escogi el entorno grfico de KDE (versin 1.0). Desde entonces ha seguido su propio camino, separado
de Red Hat y ha incluido numerosas herramientas propias o modificadas, fundamentalmente dirigidas a
facilitar la configuracin del sistema. Mandrake tambin es conocida por compilar sus paquetes con
optimizaciones para procesadores Pentium y superiores, incompatibles con versiones ms antiguos tales
como 386 e 486.

Descripcin: Las herramientas de deteccin de hardware de Mandrake y sus programas para el


particionamiento de discos son consideradas por muchos como las mejores de la industria, y muchos
usuarios se encotraron usando Mandrake all dode otras distribuciones no haban conseguido entregar la
usabilidad necesaria. Desde entonces Mandrake Linux ha madurado y se ha convertido en una distribucin
popular entre los nuevos usuarios de linux y aquellos hogares que buscan un sistema operativo alternativo.
El desarrollo de Mandrake es completamente abierto y transparente, con paquetes nuevos que se aaden
al direcotrio llamado "cooker" a diario. Cuando una nueva versin entra en fase beta, la primera beta se
crea a partir de los paquetes que se encuentran en "cooker" en ese momento. El proceso de pruebas de la
beta sola ser corto e intensivo, pero desde la versin 9.0 ha pasado ha ser ms largo y exigente. Las listas
de correo sobre la versin beta suelen estar saturadas, pero sigue siendo posible recibir una respuesta
rpida sobre cualquier fallo o duda que enves.Como resultado de este tipo de desarrollo se obtiene una
distribucin puntera y altamente actualizada. Como contrapartida, los usuarios pueden encontrarse con
ms fallos que en otras distribuciones. Mucha gente encuentra este 'pero' razonable para sus equipos,
ellos obtienen las ltimas versions de software y los cuelgues ocasionales de las aplicaciones es algo con
lo que pueden vivir. Tan pronto como el desarrollo se completa el software se pone a la libre disposicin de
la gente desde rplicas en todo e mundo. La ltima versin es la 10.1.

Novell - SuSE Linux

Website: http://www.novell.com/es-es/linux/suse/
http://www.opensuse.org/Welcome_to_openSUSE.org
Pros: Atencin profesional en cada detalle,herramienta de configuracin de fcil uso (YaST).
Sistema de paquetes: RPM.
Descarga gratuita: Si.OpenSuse.

Historia (wikipedia): Su nombre "SuSE" es el acrnimo del alemn "Software- und Systementwicklung",
el cual formaba parte del nombre original de la compaa y que se podra traducir como "desarrollo de
software y sistemas". El nombre actual de la compaa es SuSE LINUX, habiendo perdido el primer
trmino su significado (al menos oficialmente). El 4 de noviembre de 2003, la compaa multinacional
estadounidense Novell anunci que iba a comprar SuSE LINUX. La adquisicin se llev a cabo en enero
de 2004. En el ao 2005, en la LinuxWorld, Novell, siguiendo los pasos de RedHat Inc., ha anunciado la
liberacin de la distribucin SuSE Linux para que sea la comunidad la encargada del desarrollo de esta
distribucin, que ahora se denomina openSUSE.

Descripcin: SUSE Linux es una de las ms conocidas distribuciones Linux existentes a nivel
mundial. Entre las principales virtudes de esta distribucin se encuentra el que sea una de las ms
sencillas de instalar y administrar, ya que cuenta con varios asistentes grficos para completar diversas
tareas. es una distribucin alemana que presume de ser la ms completa, teniendo la gestin de paquetes
de tipo RPM. Utiliza los gestores de ventanas KDE y GNOME, tiene instalacin grfica y est disponible en
espaol. Tiene la herramienta de configuracin Yast (yast2) y muchos paquetes (de hecho es la primera
que distribuy el software en DVD). La distribucin incorpora las herramientas necesarias para redistribuir
el espacio de tu disco duro permitiendo as la coexistencia con otros sistemas operativos existentes en el
mismo. A pesar de ello la configuracin e instalacin es algo confusa y complicada, aunque el instalador
puede tomar opciones por s mismo, por lo que est orientado al profesional y a servidores de red. La
ltima versin es la 10.

Ubuntu

Website: http://www.ubuntulinux.org/ http://www.ubuntu-es.org/

Sistema de paquetes: DEB


Descarga gratuita: Si.
Historia (wikipedia): El 8 de julio del 2004, Mark Shuttleworth y la empresa Canonical Ltda. anunciaron la
creacin de la distribucin Ubuntu. sta tuvo una financiacin inicial de US$10 millones. El proyecto naci
por iniciativa de algunos programadores de los proyectos Debian, Gnome y Arch que se encontraban
decepcionados con la manera de operar del proyecto Debian, la distribucin Linux sin fines de lucro ms
popular en el mundo. De acuerdo con sus fundadores, Debian era un proyecto demasiado burocrtico
donde no existan responsabilidades definidas y donde cualquier propuesta interesante se ahogaba en un
mar de discusiones. Asimismo, Debian no pona nfasis en estabilizar el desarrollo de sus versiones de
prueba y slo proporcionaba auditoras de seguridad a su versin estable, la cual era utilizada slo por una
minora debido a la poca o nula vigencia que posea en trminos de la tecnologa Linux actual. Tras formar
un grupo multidisciplinario, los programadores decidieron buscar el apoyo econmico de Mark
Shuttleworth, un emprendedor sudafricano que tras fundar la compaa Thawte en la cochera de su
domicilio logr venderla cuatro aos despus a la empresa VeriSign por 575 millones de dlares
estadounidenses. Shuttleworth vio con simpata el proyecto y decidi convertirlo en una iniciativa
autosustentable, combinando su experiencia en la creacin de nuevas empresas con el talento y la
experiencia de los programadores en la plataforma Linux. De esta forma naci la empresa Canonical, la
cual se encarga de sostener econmicamente el proyecto mediante la comercializacin de servicios y
soporte tcnico a otras empresas. Mientras los programadores armaban el sistema, Shuttleworth
aprovech la ocasin para aplicar una pequea campaa de mercadotecnia para despertar inters en "la
distribucin-sin-nombre" (en ingls: the no-name-distro). Tras varios meses de trabajo y un breve perodo
de pruebas, la primera versin de Ubuntu (Warty Warthog) fue lanzada el 20 de octubre de 2004.

Descripcin (wikipedia): Ubuntu es un sistema de cdigo abierto gratuito que nace a partir de Debian. Su
filosofa es que sea claro y fcil de usar y adems seguro. Usa Gnome y cientos de paquetes que
distribuye gratuitamente en un solo CD. Las caractersticas son:

Disponible en 3 arquitecturas: Intel x86, AMD64, PowerPC.


Las versiones estables se liberan cada 6 meses y se mantienen actualizadas en materia de
seguridad hasta 18 meses despus de su lanzamiento.
Para centrarse en solucionar raudamente los bugs, conflictos de paquetes, etc. se decidi
eliminar ciertos paquetes del componente main, ya que no son populares o simplemente se
escogieron de forma arbitraria por gusto o sus bases de apoyo al software libre, por tales
motivos inicialmente KDE no se encontraba con soporte, ms de lo que entregaba los
mantenedores de Debian en sus repositorios. Por tales motivos se sum la comunidad de
KDE, distribuyendo una distribucin llamada Kubuntu.
El navegador web oficial es Mozilla Firefox.
El sistema incluye funciones avanzadas de seguridad y entre sus polticas se encuentra el no
activar procesos latentes por omisin al momento de instalarse. Por lo mismo no hay un
firewall predeterminado, ya que no existen servicios que puedan atentar a la seguridad del
sistema.
Para labores/tareas administrativas incluye una herramienta llamada sudo (similar al Mac OS
X). Con ello se evita el uso del usuario root.
Mejorar la accesibilidad y la internacionalizacin, de modo que el software est disponible
para tanta gente como sea posible. En la versin 5.04, el UTF-8 es la codificacin de
caracteres por defecto.
No slo tiene como lazo a Debian el uso del mismo formato de paquetes DEB, Ubuntu tiene
uniones muy fuertes con esa comunidad, contribuyendo cualquier cambio directamente e
inmediatamente, ms que anuncindolos. Esto sucede en los tiempos de lanzamiento.
Muchos de los desarrolladores de Ubuntu son tambin responsables de los paquetes
importantes dentro de la distribucin de Debian.
Todos los lanzamientos de Ubuntu sern proporcionados sin ningn costo. Los CDs de
Ubuntu se envan en forma gratuita a cualquier persona que los solicite; o las imgenes iso
tambin estn disponibles para la transferencia directa o bajo la tecnologa bittorrent.
Ubuntu no cobrar honorarios por la suscripcin de las mejoras de la "Edicin Enterprise".

Ubuntu divide todo el software en cuatro secciones, llamadas los "componentes", para reflejar diferencias
en licencias y la prioridad en que se atenderan los problemas que informen los usuarios. Por defecto, una
seleccin de los paquetes ser instalada, stas cubren las necesidades bsicas de la mayora de los
usuarios de computadoras, junto con cualquier paquete que no posea una licencia del tipo libre que sea
absolutamente necesario para poseer el sistema completamente usable.
main
El componente main contiene solamente esos paquetes que cumplen los requisitos de la licencia de
Ubuntu, y para los que hay ayuda disponible por parte del equipo de Ubuntu . ste est pensado para que
incluya todo lo necesario para la mayora de los sistemas Linux de uso general. Los paquetes de este
componente poseen ayuda tcnica garantizada y mejoras de seguridad oportunas.
restricted
El componente restricted contiene el software que es apoyado por los desarrolladores de Ubuntu debido a
su importancia, pero no est disponible bajo algn tipo de licencia libre para incluir en main. En este lugar
se incluyen los paquetes tales como solo binarios de las tarjetas de grficas, por ejemplo, los drivers
grficos de NVIDIA. El nivel de la ayuda es ms limitado que para main, puesto que los desarrolladores
pueden no tener acceso al cdigo de fuente.
universe
El componente universe contiene una amplia gama del software, que puede o no tener una licencia
restrictiva, pero que est sin apoyo por el equipo de Ubuntu. Esto permite que los usuarios instalen todas
las clases de programas dentro del sistema, pero los guarda en un lugar a parte de los paquetes
apoyados: main y restricted.
multiverse
Finalmente, hay el componente del multiverse, que contiene los paquetes sin apoyo debido a que no se
conforman con los requisitos del Software Libre.

Slackware Linux

Website: www.slackware.com
Pros: Alta estabilidad y ausencia de fallos, sigue fielmente los principios de UNIX.
Cons: Toda la configuracin se realiza mediante la edicin de ficheros de texto, autodeteccin de
hardware limitada.
Sistema de paquetes: TGZ.
Descarga gratuita: Si.

Historia: Creada por Patrick Volkerding en 1992, Slackware Linux es la distribucin ms antigua que
sobrevive hoy en da, en Espaa se empez a utilizar en el 94. No ofrece extras vistosos, y se mantiene
con un instalador basado en texto, y sin herramientas de configuracin grfica. Mientras otras
distribuciones intentan desarrollar intarfaces fciles de usar para muchas utilidades comunes, Slackware
no ofrece nada amistoso, y toda la configuracin se realiza mediante los archivos de configuracin. A
pesar de todo, Slackware tiene una especie de aura mgica para muchos usuarios.

Descripcin: Es extremadamente estable y segura, muy recomendada para servidores. Los


administradores con experiencia en Linux encuentran que es una distribucin con pocos fallos, ya que usa
la mayora de paquetes en su forma original, sin demasiadas modificaciones propias de la distribucin, que
son un riesgo potencial de aadir nuevos fallos. Es raro que se produzcan lanzamientos de nuevas
versiones (aproximadamente una al ao), aunque siempre se pueden encontrar paquetes actualizados
para descarrgar despus del lanzamiento oficial. Slackware es una buena distribucin para aquellos
interesados en profundizar en el conocimiento de las entraas de Linux. La mejor caracterstica de esta
distribucin es: si necesitas ayuda con tu sistema linux, encuentra un usuario de Slackware. Es ms
probable que resuelva el problema que otro usuario familiarizado con cualquier otra distribucin.

Knoppix

Website: http://www.knoppix.org/
Pros: Excelente autodeteccin de hardware, funciona directamente del CD sin instalacin en el disco duro,
puede ser usada como herramienta de recuperacin.
Cons: Bajo rendimiento y velocidad si se utiliza directamente del CD.
Sistema de paquetes: DEB.
Descarga gratuita: Si.

Historia: Es una distribucin de Linux basada en Debian que utiliza KDE. Est desarrollada por el
consultor de GNU/Linux Klaus Knopper. Gnoppix es una variante pero incluye como entorno grfico
Gnome en vez de KDE.

Descripcin: Desarrollada por Klaus Knopper en Alemania, es seguro que esta distribucin basada en
Debian ha puesto muy alto el listn, especialmente con su deteccin automtica de hardware que deja a la
altura del barro la de muchas distribuciones comerciales. Su arranque automtico, gran cantidad de
software, su sistema de decompresin al vuelo y la posibilidad de instalarlo al disco duro han convertido a
knoppix en una herramienta indispensable. Puede ser usada como un disco de rescate, una herramienta
para ensear linux para aquellos que no lo han visto o una herramienta para probar una nueva
computadora antes de comprarla. Tambin puede ser usada como una completa distribucin linux para el
uso diario.Frecuentemente se lanzan nuevas versiones de Knoppix, aproximadamente, una nueva versin
cada 1 o 2 semanas. Las actualizaciones incluyen parches de fallos as como el ltimo software de la rama
inestable de Debian.

Gentoo

Website: http://www.gentoo.org/
Pros: Fcil instalacin de paquetes de software individuales, altamente actualizada, el sentimiento friki de
crear tu propia distribucin atendiendo a las necesidades del usuario.
Cons: Instalacin larga y tediosa, ocasionalmente inestable y con riesgos de romperse, no aconsejada
para servidores con funciones crticas.
Sistema de paquetes: DEB.
Descarga gratuita: Si.

Historia: Es una distribucin GNU/Linux orientada a usuarios con cierta experiencia en este sistema
operativo. El nombre Gentoo proviene del nombre en ingls del pingino de pico rojo (en latn Pygoscelis
papua), la mascota de Linux es un pingino. Gentoo Linux fu creada por Daniel Robbins, un conocido
desarrollador de Stampede Linux y FreeBSD. Fu el contacto del autor con FreeBSD y su funcin de
autobuild llamada "ports" lo que le inspir a incorporar los "ports" en Gentoo bajo el nombre de "portage".
La primera versin estable de Gentoo fu anunciada en Marzo del 2002.

Descripcin: Gentoo Linux es una distribucn basada en cdigo fuente, la nica en esta lista. Mientras
que los sistemas de instalacin proveen de varios niveles de paquetes pre-compilados, para obtener un
sistema Linux bsico funcionando, el objetivo de Gentoo es compilar todos los paquetes de cdigo en la
mquina del usuario. La principal ventaja de esto es que todo el software se encuentra altamente
optimizado para la arquitectura de tu computadora.

Tambin, actualizar el software instalado a una nueva versin es tan facil como teclear un comando, y los
paquetes, mantenidos en un repositorio central, se mantienen bastante actualizados. En la otra cara de la
moneda, instalar Gentoo y convertirla en una distribucin completa, con los ltimos entornos grficos,
multimedia y de desarrollo es un trabajo largo y tedioso, cuenta varios das incluso en una mquina rpida.

Por otro lado hay distribuciones que se han realizado en nuestro pas bien por instituciones pblicas bien
por privadas, abajo te reseo las principales:

LinEx

Desarrollador: Junta de Extremadura.

Website: http://www.linex.org/

Lenguajes: Espaol.

Categora: General basado en Debian.

Descripcin: LinEx GNU/Linux es la distribucin desarrollada por la Junta de Extremadura pensada


para usuarios finales de software. Esta distribucin se basa en Debian 2.2 Potato e integra el entorno
GNOME 1.4.

Guadalinex
Desarrollador: Junta de Andalucia.

Website: http://www.guadalinex.org

Lenguajes: Espaol.

Categora: General basado en Debian.

Descripcin: Hace unos seis meses la Junta de Andaluca public Guadalinex 1.0; una distribucin
GNU/Linux dirigida al usuario personal y domstico, fcil de instalar y de usar, utilizable sin instalacin en
el ordenador. Al mismo tiempo comenz el desarrollo de Guadalinex 2004, versin sucesora de la 1.0 una
conversin de Debian Sid a Sarge.

MoLinux

Desarrollador: Junta de Castilla la Mancha.

Website: http://www.molinux.info/

Lenguajes: Espaol.

Categora: General basado en Debian.

Descripcin: MoLinux es una iniciativa de la JCCM. Es un sistema operativo general y pronto


estarn disponibles versiones modulares adaptadas a usos ms especficos.

ESWare

Desarrollador: ESWare Linux.

Website: http://www.esware.com/

Lenguajes: Espaol.

Categora: General basada en Red Hat.

Descripcin: Una distribucin de Linux desarrollada en Espaa y


orientada hacia usuarios de habla hispana. Es de pago.

HispaFuentes

Desarrollador: HispaFuentes.

Website: http://www.hispafuentes.com

Lenguajes: Espaol.

Categora: General basada en Red Hat.

Descripcin: HispaFuentes es una distribucin en espaol basada el la versin Deluxe de Red Hat.
Incluye toda la documentacin traducida al espaol. Tambin incluye paquetes de software como
StarOffice, Netscape y muchos otros. La ltima versin es la 8 que es de pago.
Existen otras versiones menores como la UTUTO argentina recomendada por Stallman, la LinEspa de la
homnima asociacin, la bluewall de Luis Araujo basada en Debian, la de VidaLinux basada en Gentoo,
UserLinux basada en Debian, o ASLinux de Activa sistemas basada tambin en Debian, etc...

En concreto las realizadas en Espaa aparecen a continuacin: ASLinux Augustux Biadix Ctix
ESware LinuX GNIX-Vivo gnuLinEx Guadalinex GuLIC-BSD HispaFuentes Linux K-
DEMar LinEspa Linuxin GNU/Linux LiVux Lonix Luinux MAX: Madrid_Linux
Metadistro-Pequelin MoLinux ParallelKnoppix Xarnoppix X-evian.

Incluso se ha desarrollado una nueva iniciativa conjunta (Conectiva, SCO, SuSE y Turbolinux) destinada a
frenar la fragmentacin de las distribuciones de Linux y orientada a los grandes servidores llamada
UnitedLinux, sus objetivos aparecen en su pgina: http://www.unitedlinux.com.

Para los amantes de las estadsticas en distro wath se puede ver el impacto relativo (en nmero de visitas
de las pginas de las distribuciones por da en distintos intervalos de tiempo) de cada distribucin, lo que
da una idea de su repercusin e instalacin:

12 meses 6 meses 3 meses 1 mes

1 Ubuntu 2682 1 Ubuntu 2644 1 Ubuntu 2377 1 Ubuntu 2398


2 openSUSE 1880 2 openSUSE 1935 2 openSUSE 1802 2 openSUSE 2076
3 Fedora 1282 3 Fedora 1257 3 Fedora 1190 3 Fedora 1357
4 Mandriva 1191 4 MEPIS 1075 4 MEPIS 1116 4 MEPIS 1106
5 MEPIS 1018 5 Mandriva 886 5 PCLinuxOS 933 5 Mandriva 1040
6 Damn Small 851 6 PCLinuxOS 834 6 Mandriva 873 6 PCLinuxOS 859
7 Debian 783 7 Damn Small 810 7 Debian 751 7 Slackware 848
8 PCLinuxOS 692 8 Debian 771 8 Damn Small 734 8 Debian 830
9 KNOPPIX 654 9 Slackware 638 9 Slackware 716 9 Gentoo 698
10 Gentoo 631 10 KNOPPIX 603 10 Gentoo 596 10 Damn Small 664

Resumiendo y como dice Alan Canton, presidente de Adams-Blake Company, casi hay una interminable
"guerra religiosa" sobre que distribucin es la mejor y cuales de ellas sobrevivirn. Nadie se puede atrever
a decirte cual es mejor o peor (dentro de un orden). Para despejar el terreno de los cientos de
distribuciones y tener una visin ms clara (holstica) a la hora de seleccionar una, bsicamente podemos
clasificar las distribuciones que existen en varios grupos generales:

 Clase Debian (Ubuntu, Mepis, Knoppix, Kanotix, Zen, etc.). Todos proceden de la familia Debian,
pero la mayora vienen de versiones inestables, aunque utilizan el sistema apt-get para conseguir
paquetes estables. La mayora dice que son 100% compatibles Debian y de hecho los cambios que
producen vuelven a la distribucin original, pero parace que hay un mal "feeling" entre la distribucin
"pura" y sus derivadas.Quizs sea debido a la diferencia que existe entre instalar el Debian puro y
una de sus versiones, que es mucha ms sencilla en ests ltimas.
 Clase Red Hat (RH, Fedora, CentOS, Mandrake, etc.). Proceden de Red Hat y pot tanto en este
caso utilizan el sistema RPM de gestin e instalacin de paquetes, que ha mejorado mucho pero
todava no llega a la potencia del apt-get o del Yast. Han dominado el mercado del Linux hasta hace
poco pero las cosas estn cambiando rpidamente y hay distribuciones que ya les "muerden la
cola", quizs por ello se haya creado el proyecto Fedora, que es bsicamente un open RedHat
entreprise.
 Clase Suse (Slackware, Vector Linux, etc.). Aunque siendo justos se debera llamar por antigedad
clase Slackware. Suelen tener un excelente sistema de administracin basado en YaST (YaST2).
Comercialmente la entrada de Novell es muy positiva por las puertas que abre y es un serio
competidor para Red Hat.
 Clase nico propsito. Aqu estaran agrupadas todas las distribuciones que han sido creados con
un propsito o un hardware muy especfico. Como Damm Small.
 Clase inclasificable. Aqu estaran el resto de distribuciones, entre ellas destaca Gentoo, que como
hemos dicho bsicamente se utiliza para crear nuevas distribuciones.

Por ltimo ten en cuenta que en Cantabria existe una asociacin de Usuarios GNU/Linux - LINUCA - y otra
que ha nacido este ao en la Universidad de Cantabria (aunque todava no est en funcionamiento) para el
fomento del software libre -Molusca-.

1.5. Motivacion

Existen varias causas, a parte de las propiedades que hemos visto en el tema anterior, a la hora de haber
escogido el sistema UNIX / Linux como sistema operativo para desarrollar esta asignatura, entre ellas
podemos destacar:

 Relativo xito en la comparacin con otros sistemas operativos. En la siguiente tabla aparecen las
caractersticas comparadas con su ms directo competidor

Linux / UNIX NT / 2000


Estabilidad Elevada robustez Media
Rendimiento Extraordinario Bueno
Escalabilidad ptima Muy Limitada
Soporte Red Amplio Restringido
Limitaciones Hardware Reducida Slo Intel
Dependiente (puede llegar
Seguridad Elevada
a ser muy elevada)
Variable (en algunos
Precio Elevado
casos gratuito)
Limitada (en la mayora de
Capacidad Multiusuario Completa
los casos nula)
Facilidad de Limitada (en algunos
Muy amplia
Administracin casos... de locos)
Limitada, requiere ciertos
Facilidad de uso Sencilla
conocimientos.

Debido a esto, su uso se est imponiendo en la mayora de servidores (ver siguiente punto),
aunque hay que reconocer que en la informtica personal todava se est haciendo un
hueco.

 Preponderancia en el mercado. En la siguiente figura podeis ver como ha evolucionado el mercado


de servidores web en los ltimo aos. La lnea azul indicara los ervidores con tecnologa
Linux/Apache y la roja con Microsfoft/IS. Indicar que en otro tipo de servidores (ciencia / ingeniera)
la diferencia es an ms acusada.
 Compatibilidad. Linux cumple con el estndar de IEEE POSIX para sistemas operativos. Adems
dentro del mundo UNIX cumple con el SYSVR3 y SYSVR4. Esto implica que el cdigo generado en
este sistema es totalmente portable (al menos en teora).

 Hardware. Linux puede ser ejecutado en muchos y distintos procesadores entre los que podemos
destacar: la familia intel x86 (desde 8086 hasta PentiumVI), el Ithanium (64bits), MIPS, Mac
Motorola-PPC, Alpha, PDAs-ARM, etc. En la direccin de SPEC podeis ver la potencia de estos
procesadores. Adems podemos encontrar controladores para la mayor parte del hardware del
mercado, incluso sin el soporte del fabricante como por ejemplo Winmodems.

 Software libre. Linux usa licencias GNU (GPL: GNU Public License). Esto implica que se puede
copiar y distribuir libremente el cdigo fuente del software, siempre y cuando se cite el origen del
mismo. Las caractersticas de esta licencia aparecen a continuacin:
 Cualquier modificacin del nuevo software ha de ser distribuido bajo licencia GPL.
 Emplear fragmentos de este cdigo bajo otro tipo de licencia requiere de la aceptacin del
autor original.
 La copia o distribucin del cdigo en forma de ejecutable ha de ir siempre acompaada del
cdigo fuente.
 El coste de la distribucin esta restringido al coste del soporte.

Este tipo de poltica tiene las siguientes ventajas:

 Rpida resolucin de problemas de seguridad, incompatibilidad, etc.


 Rpida adopcin de nuevas tecnologas.
 Conocimiento profundo e inmensas cantidades de documentacin asociadas al software.
 Si tienes paciencia... te lo puedes hacer t.

pero tambin implica algunos inconvenientes:

 Hay pocas empresas dedicadas a dar soporte profesional. Aunque cada vez hay ms como
IBM. Sin embargo existe una comunidad muy importante de usuarios dispuestos a ayudar en
cualquier momento y gratis.
 Dispersin. Hay mucha dispersin en el software, incluso en las distribuciones que veremos
posteriormente.

Espero que haya conseguido convenceros y que no penseis como este alumnos de una Facultad de
Empresariales:

Alumno: "Se puede usar Word en los ordenadores del Departamento?"


[nota: eran estaciones Sun]
Profesor: "No, esos ordenadores usan UNIX"
Alumno: "Ah, claro, UNIX usa una versin de DOS muy antigua"
2. Instalacin

2.1. Introduccion

E n el captulo anterior mencionbamos que nos centraremos a partir de ahora en la instalacin de sistemas personales, ya
que los grandes sistemas UNIX normalmente:

 Tienen un sistema especfico de instalacin que adems, obviamente, es compatible absolutamente con el hardware
de la mquina a instalar. En la mayora de los casos basta con insertar la cinta o el CD en el dispositivo
correspondiente y encender la mquina para que sta vaya a ejecutar el programa de instalacin en ROM y seguir la
secuencia de instrucciones del manual que pueden ser ms o menos complejas.

 En muchos casos suele ser personal cualificado de la empresa el que procede a la instalacin de la mquina, tanto
desde el punto de vista software como hardware.

En el caso de sistemas personales, la responsabilidad es toda nuestra, adems podemos disponer en nuestra mquina de
hardware que puede ser no compatible con el sistema a instalar. Por eso, antes de proceder a la instalacin del sistema, y
esto es vlido para cualquier distribucin de Linux, debemos:

 Conocer perfectamente el hardware de nuestra mquina, como por ejemplo tipo (marca y modelo) de tarjeta grfica
que utiliza el computador, frecuencia de barrido del monitor, idioma del teclado, tipo de ratn, si contamos con
PCMCIA, tipo de tarjeta de sonido, de CD-ROM, etc.

 Saber si este hardware es compatible con el sistema que vamos a instalar. Esto normalmente lo podemos comprobar
o bien en los manuales que acompaan a la distribucin o preferiblemente on-line (ms actualizada) a travs de la
pgina web de la misma. En el caso del red hat la pgina es: http://www.redhat.com/support/hardware/.

 Comprobar si tenemos la potencia suficiente (CPU y memoria) para que el sistema operativo se pueda ejecutar con
soltura, sobre todo en lo que se refiere a sus capacidades grficas; y espacio suficiente en disco para albergarlo.

Los dos primeros puntos son total responsabilidad del usuario y que sepa manejar los manuales que vienen con el equipo,
no se puede decir ms al respecto. Del ltimo punto se debe tener en cuenta si el sistema a instalar va a coexistir con otro
sistema operativo anterior. Pero antes que nada hay que tener cierto domino sobre el concepto de particin de disco duro,
aunque el Red Hat 7.0 se puede instalar sin particiones.

2.2. Particiones

Aunque parezca un concepto nuevo, las particiones de los discos siempre han existido, lo que pasa es que la gente
compra ordenadores con el sistema pre-instalado y no advierte que su disco duro ha sido formateado y particionado.

Lo primero que debemos hacer con un disco duro virgen es crear en l un sistema de ficheros, para ello deberemos primero
formatearlo (valga la siguiente analoga: aunque un coche circule por tierra, debemos construir carreteras para que nos
podamos desplazar). Esto exige que:

 Un pequeo porcentaje del espacio disponible en el disco sea utilizado para grabar los datos relativos al sistema de
archivos y puede considerarse como la parte inicial del disco.

 El espacio de disco quede repartido en pequeos segmentos de tamao consistente. En el mundo de UNIX, estos
segmentos son conocidos como bloques.

Hay que destacar que cada sistema operativo puede tener su propio sistema de ficheros, incluso varios, los que hace que
estos puedan ser incompatibles entre s.
Una vez que tenemos el disco formateado, lo que haremos es escribir y leer ficheros y directorios en l, lo que se traducir
en la ocupacin de los bloques reseados en el punto dos. Estos bloques no tienen porque ser contiguos ni pertenecer a un
mismo fichero, con lo que se producir por el uso del disco el fenmeno de la fragmentacin (un fichero puede contener uno
o varios bloques y estos estar repartidos por todo el disco).

A medida que la capacidad de los discos crece, el tamao de bloque de los mismos tambin aumenta (para que la
informacin del sistema de ficheros no fuera tan grande), y esto los hace poco eficientes, sobre todo para ficheros
pequeos, por lo que se pens en poder partirlos. Se definieron tpicamente hasta cuatro particiones por disco (siempre nos
referimos a sistemas personales de arquitectura INTEL con sistema de la familia MS-DOS) y para ello, al comienzo del
disco se determin una tabla de particiones que tiene como informacin donde empieza y termina cada particin, si est
activa o no (el sistema operativo que est en la particin activa es el que arranca) y cual es el tipo de particin a travs de
un cdigo numrico de un byte (en nuestro caso el 83 para la nativa de Linux, el 85 para la extendida y el 82 para el swap).

An as, los discos fueron creciendo ms y con cuatro particiones no era suficiente, con lo que se crearon las particiones
extendidas. Una particin extendida funciona como una unidad de disco ms, que puede tener sus propias particiones, por
lo tanto cuando definimos una particin como extendida, lo que hacemos es crear una tabla secundaria de particiones para
esa particin. A las primeras se las llama particiones primarias (slo puede haber cuatro) y a las segundas particiones
lgicas (puede haber todas las que se quiera pero no es aconsejable por rendimiento tener ms de doce en un solo disco).

Otra consideracin que tenemos que tener en cuenta es que cuando tenemos un sistema MS-DOS cada particin
reconocida viene especificada por una letra empezando por la C, de esta manera, usando esa letra accedemos a la
particin y a su sistema de ficheros. En el caso del sistema UNIX esto no es as, cada particin viene determinada en el
directorio de dispositivos /dev por un nombre de fichero (en UNIX ficheros y dispositivos son equivalentes).

Generalmente los discos IDE vendrn identificados por hd y los SCSI por sd, despus seguir una letra indicando en que
dispositivo se encuentra la particin (empezando desde a) y a continuacin un nmero que nos indicar el nmero de la
particin, las primarias tendrn un rango de entre 1 y 4 y las lgicas empezarn en 5, as, hdb7 indicar la tercera particin
lgica del disco IDE segundo.

Otras diferencias entre MS-DOS y UNIX son que este ltimo aunque no pueda leer una particin de otro sistema, si la
reconoce y la tendr numerada como hemos visto y que slo existe un rbol de directorios y ficheros, constituidos por
varios sistemas de ficheros de distintas particiones, que se unen en el rbol de directorios en el conocido procesos de
montaje.

Una vez revisados los conceptos fundamentales sobre las particiones de un disco duro, vamos a ver en que situaciones nos
podemos encontrar a la hora de instalar el sistema operativo.

Instalacin sin particiones

En algunos casos puede resultar ms sencillo hacer una instalacin de Linux sin particiones. Para ello es un requisito
ineludible que la particin sobre la que reside el sistema Windows est formateada como de tipo DOS (FAT), si se tiene un
sistema de tipo NT sobre una particin NTFS se deber crear una DOS(FAT).

Cuando se instale este tipo de sistema (que es totalmente completo), se editar la particin de DOS y se montar en /
normalmente a travs de la herramienta diskdruid de la instalacin. Hay que tener en cuenta que la particin deber tener al
menos 900 Mb. para una instalacin normal (siguiente apartado) o 1,7 Gb. para una instalacin server. No ser necesario
formatear la particin, ya que estamos utilizando una formateada, tampoco deberemos utilizar el cargador del sistema
(LILO), por el contrario se deber crear un disquete de arranque y configurar la BIOS para que la secuencia de arranque
sea A: C:. La gran desventaja de este mtodo es que Linux no contar con particiones nativas y por lo tanto ira ms lento.

2.3. Espacio

A la hora de instalar el sistema operativo nos podemos encontrar con varias situaciones:
 Hay espacio libre disponible sin particiones. Puede ocurrir que tengamos un disco en el que no hay nada instalado,
que compremos uno adicional para montar el nuevo sistema o que exista una particin en el disco que no lo utiliza
completamente, quedando ste sin una particin asignada parcialmente.

 Se encuentra disponible una particin que no es utilizada. Esto puede ocurrir porque tengamos una particin que no
queramos ms y que sus datos no valgan para nada, por ejemplo porque en ella tenamos un sistema operativo
obsoleto.

 Hay espacio libre disponible en una particin utilizada. Es la situacin ms habitual y complicada. Tenemos un
sistema operativo y queremos aadir Linux. El sistema antiguo ocupa la nica particin disponible, pero sta tiene
espacio suficiente para albergar el nuevo sistema.

El primer caso es el ms sencillo, ya que slo deberemos crear en ese disco las nuevas particiones.

El segundo caso es tambin sencillo, ya que si no necesitamos ms una particin existente lo nico que deberemos hacer
es borrarla y despus crear las particiones necesarias para Linux. Esto se puede hacer desde MS-DOS (windows) a travs
del programa fdisk o con cualquier otro programa comercial (gratuito o no) como partition magic o fips. Incluso si elegimos
la instalacin personalizada de Red Hat lo podremos hacer.

El tercer caso es el ms complicado y a la vez el ms comn, ya que es raro que tengamos un disco en exclusividad para
Linux o una particin que no queramos. En estas circunstancias podremos proceder de dos maneras, o bien destruyendo la
particin existente y perdiendo todos los datos, o bien realizando una nueva particin con el espacio no usado de la anterior
de forma no destructiva.

En el caso destructivo lo que deberemos hacer es borrar la particin existente, de nuevo lo podemos hacer con fdisk y crear
en ese espacio particiones ms pequeas. Como vamos a perder los datos de la particin es conveniente que antes
hayamos hecho una copia de seguridad de la misma (lo ms prudente es hacer dos y comprobar que realmente se han
hecho con un restore). Tenemos que tener en cuenta que no se puede meter Santander en Santoa y que si el disco es
pequeo y debemos mantener en una particin el sistema de tipo MS-DOS y en otras Linux, debemos asegurarnos que los
distintos sistemas caben con holgura en las particiones que creemos.

Para el caso no destructivo (aunque se supone que no se van a perder los datos es igual de conveniente realizar una copia
de seguridad por si algo sale mal o incluso por si tenemos la mala suerte de que haya un corte de luz durante esta
delicadsima e irreversible operacin) deberemos valernos de un programa que trabaje con particiones de los que hemos
indicado. Todos tienen en comn, a parte de la comodidad de trabajar con ellos, tres etapas: en la primera se hace una
desfragmentacin (a veces llamada compresin) de los datos, en la segunda una reduccin de la particin existente y en la
tercera la creacin de nuevas particiones en el espacio liberado. Veamos cada una de estas tres etapas.

Cuando estamos trabajando en una particin: escribiendo y leyendo ficheros, estamos llenando los bloques de esa
particin, pero nada obliga a estos bloques a estar al comienzo de la misma (puede que al comienzo del uso del sistema s,
pero una vez que transcurra el tiempo y empecemos a borrar ficheros, iremos dejando huecos, bloques libres, en la
particin y la misma se ir fragmentando). Lo que intenta el proceso de desfragmentacin es ir moviendo los bloques
repartidos por la particin y colocarlos al comienzo de la misma de forma contigua. En algunas ocasiones hay programas
que exigen que un determinado fichero est en un bloque determinado (por ejemplo por proteccin contra el pirateo) y por
lo tanto no se puedan mover, en ese caso no tendremos otro remedio que utilizar el mtodo destructivo.

Una vez que


hemos movido todos los bloques, se trata de poner los bloques
vlidos en una particin del mismo tipo que la original con un tamao a especificar (se supone que ms grande que lo que
ocupan los bloques asignados) y crear otra u otras en el espacio sobrante. La realizacin de esta tarea depende
fuertemente del programa que estemos utilizando, pero normalmente se crear otra particin libre del mismo tipo que la
original y sin formatear.
La tercera etapa es la creacin de una o ms particiones, en este caso de tipo Linux. Si el programa que se utiliza no tiene
en cuenta este tipo de sistema, nos veremos obligados a hacer esta creacin con el programa integrado en la distribucin
fips, del que podremos encontrar documentacin en el directorio /dosutils/fipsdocs del primer CD de instalacin (mira en el
men de acciones para encontrar una referencia en el curso), que lo que har es crear una nueva particin en el espacio
dejado por la original. Posteriormente deberemos elegir la instalacin personalizada para borrar esa segunda particin y
crear las que necesite Linux.

Cabe ahora preguntarnos cuntas particiones debemos crear y de qu tamaos al instalar el sistema operativo. La
recomendacin es que sean al menos dos, una para el propio sistema y otra para el swap, que es donde se alberga la
memoria secundaria y que ser tratada por el sistema de distinta manera ya que no albergar ningn sistema de ficheros.
El tamao de la primera ser el suficiente para poder almacenar el sistema operativo (dependiendo de la distribucin que
usemos y de los paquetes que instalemos) y los ficheros que vayan a crear los usuarios y la segunda similar al tamao de
la memoria fsica (no existe una regla fija), aunque depender mucho del uso al que vayamos a destinar el ordenador, por
ejemplo si utilizamos con frecuencia el entorno grfico deberemos aumentar el tamao de esta particin.

A partir de ah, podemos dividir la primera particin en tantas como creamos necesarias de acuerdo a criterios de seguridad
y comodidad. Por ejemplo es conveniente separar el entorno del sistema y de los usuarios en dos particiones para que
puedan crecer separadamente. Lo mismo se puede decir de la del sistema, en muchas ocasiones se divide en dos y se
deja una particin mnima de 16 Mb. para el directorio de arranque: /boot, que contendr el ncleo del sistema operativo y
ciertos ficheros relativos a ese arranque relacionados directamente con la BIOS del ordenador.

2.4. Instalacin

Una vez que se conoce como funcionan las particiones vamos a instalar el sistema. Existen varios mtodos de instalacin,
el estndar es a travs de un CD-ROM. Lo ideal sera que el ordenador contara con una BIOS moderna que nos permitiera
arrancar desde CD-ROM, si esto no es as, deberemos instalar el sistema a travs de un disquete de arranque (tambin
deberemos utilizar este mtodo si tenemos una tarjeta de red de tipo PCMCIA).

Si se compra una distribucin original, como por ejemplo la de Red Hat, se dispondr de un disquete de arranque, si no es
as lo podremos hacer desde Windows (MS-DOS) o desde Linux. Un disquete de arranque siempre se construye a partir de
un fichero imagen, que no es ms que una copia exacta del contenido futuro del disquete con informacin sobre el sistema
de archivos y sus ficheros.

Si es desde MS-DOS, dentro del CD-ROM en el directorio \dosutils (para procesadores Intel) encontraremos una
herramienta que nos permitir hacer la transferencia del fichero imagen y crear el disquete, se llama rawrite. La secuencia
que nos podemos encontrar (asumiendo que el CD-ROM est en D:) es:

C:\> d:
D:\> cd \dosutilsD:\dosutils> rawrite
Enter disk image source file name: ..\images\boot.img
Enter target diskette drive: a:
Please insert a formatted diskette into drive A: andpress --ENTER-- : Enter
D:\dosutils>

Si el disquete se crea bajo Linux, se deber tener permiso para escribir en el dispositivo disquetera, en Linux /dev/fd0. Se
introducir el disquete sin montar y el CD-ROM de Linux montado, iremos al directorio donde est el fichero imagen
contenido en el CD y ejecutaremos:

# dd if=boot.img of=/dev/fd0 bs=1440k

Puede ser necesario crear otros disquetes de ficheros imagen, como por ejemplo un disco de arranque de red o PCMCIA
(para otros sistemas de arranque que sern revisados en un apartado posterior), pero el procedimiento ser el mismo.

Una vez que vamos a inicializar de CD-ROM o de disquete conviene saber el hardware que tenemos, como dijimos en el
primer apartado. Si tenemos instalado el sistema Windows, una fcil manera de saberlo es acceder al panel de control (o
propiedades del sistema) y mirar las caractersticas del hardware. Si no es as deberemos recurrir a los manuales del
ordenador.

El hardware a comprobar aparece en la siguiente lista (se puede apuntar nuestro caso en la segunda columna):

Caractersticas Nuestro sistema


Disco(s) Duro(s): Tipo, etiqueta, tamao; ej. : IDE hda=1.2G
Particiones: mapa de las particiones y puntos de montaje;
ej: /dev/hda1=/home, /dev/hda2=/ (rellnelo cuando sepa dnde
residirn).
Memoria: La cantidad de RAM instalada en su sistema; ej. : 64MB,
128MB,...
CD-ROM: Tipo de interfaz; ej. : SCSI, IDE (ATAPI)
Adaptador SCSI: Si est presente, marca y nmero del modelo; ej.:
BusLogic SCSI Adapter, Adaptec 2940UW,...
Tarjeta de red: Si est presente, marca y nmero del modelo; ej. :
Tulip, 3COM 3C590,...
Ratn: Tipo, protocolo y nmero de botones; ej. : ratn genrico PS/2
3 botones, ratn serie MouseMan 2 botones,...
Monitor: Marca, modelo, y especificaciones del fabricante; ej.:
Optiquest Q53, ViewSonic G773, ...
Tarjeta de Vdeo: Fabricante, nmero de modelo y cantidad de VRAM;
ej.: Creative Labs Graphics Blaster 3D, 8MB, ...
Tarjeta de Sonido: Fabricante , chipset y nmero de modelo; ej.: S3
SonicVibes, Sound Blaster 32/64 AWE,
Direcciones IP: Cuatro nmeros, separados por puntos; ej.: 10.0.2.15
Mscaras de Red: Generalmente cuatro nmeros , separados por
puntos
Direccin IP Puerto de Salida (Gateway): Cuatro nmeros, separados
por puntos ej: 10.0.2.245
Direcciones IP de uno o ms servidores (DNS): Generalmente uno o
ms conjuntos de nmeros separados por puntos; ej: 10.0.2.1
Nombre del Dominio: el nombre dado a su organizacin;
Hostname: el nombre de su ordenador; seleccin personal de
nombres

A continuacin rebotaremos el sistema, bien desde disquete (hemos cambiado en la BIOS la secuencia de arranque a A: -
> C: ) o bien, si nos lo permite la BIOS, desde CD-ROM. Si tenemos MS-DOS cargado podemos colocarnos en el
directorio /dosutils y hacer:

C:\> d:
D:\> cd \dosutils
D:\dosutils> autoboot.bat

El sistema cargar el fichero imagen y entraremos en una pantalla (siempre en la distribucin Red Hat) que nos pedir el
tipo de arranque: enter para la instalacin normal de tipo grfico, expert para la instalacin tipo experto, en la que
podremos definir hardware adicional como tarjeta de red y controladora scsi y donde se eliminan algunos test automticos
de hardware, y text si queremos la instalacin en el antiguo modo texto. Existen otras opciones de arranque en las que se
pueden dar opciones al kernel (como por ejemplo indicarle que hay 128 mb. de memoria) o modo de rescate si el sistema
no bota bien.

Lo normal es pulsar enter y hacer la instalacin grfica desde un CDROM local (para otros orgenes se debe partir de un
disquete PCMCIA). A partir de aqu se supone que la tarjeta grfica y el cd son reconocidos y podemos empezar la
instalacin (si el programa de instalacin no detecta el CDROM IDE [ATAPI], se puede reiniciar el programa de instalacin y
en el prompt boot teclear linux hdX=cdrom, donde X con una de las siguientes letras: a - Primer controlador IDE, maestro; b
- Primer controlador IDE, esclavo; c - Segundo controlador IDE, maestro; d - Segundo controlador IDE, esclavo). La
instalacin de texto no difiere mucho de la grfica, salvo por cosas como la instalacin del ratn, que en la grfica es
necesaria, o en algunos mens con ms o menos opciones.

Lo primero que deberemos hacer es definir el idioma en que vamos a trabajar (se utilizar para definir por ejemplo el huso
horario), el tipo de teclado (suele haber problemas con el pad numrcio de la derecha) y el tipo de ratn (si no lo sabemos
siempre se puede usar uno genrico, incluso despus de la instalacin, el ratn se puede configurar
con /sbin/mouseconfig). Las pantallas que aparecern sern:
Como nota curiosa podemos destacar que cuando estamos instalando el sistema en modo grfico, tambin funcionan las
consolas virtuales (Ctrl- Alt + tecla de funcin), siendo F1 el dilogo de instalacin, F2 la shell, F3 el log, F4 los mensajes
del sistema, F5 otros mensajes y F7 la pantalla grfica de las X.

En este modo grfico, la siguiente pantalla ser la de bienvenida del sistema, en el modo texto, antes nos pedir que
definamos el origen de la instalacin: cd-rom, disco, nfs, ftp, etc. y despus elegiremos si queremos instalar o actualizar el
sistema. En el primer caso podemos optar por varios tipos:

 Estacin de trabajo (workstation). Ser la eleccin normal. Tiene el inconveniente (o ventaja) de que har bastantes
cosas por nosotros, entre ellas definir las particiones e instalar los paquetes de software. Est opcin si se hace
sobre un sistema Linux lo destruir. Adems se debe tener en cuenta que es incompatible con un sistema previo de
tipo Windows NT, ya que el sistema de carga obligatorio ser el LILO (se ver con ms detalle en un apartado
posterior) montado sobre el MBR (el MBR o registro de arranque principal es una zona especial en el disco que es
cargada automticamente por la BIOS del ordenador) lo cual eliminar el cargador de NT y no podremos botar en
ese sistema (esto se puede arreglar con la instalacin personalizada, haciendo que LILO se monte sobre el primer
sector del disco [no sobre el master] o bien haciendo un disquete de arranque).

 Sistema servidor (server system). Instalacin orientada a sistemas que van a dar servicios de red a otros
ordenadores como servidores de web (apache), de ftp, de correo, nfs, etc.

 Sistema Personalizado. Podremos ir realizando la instalacin paso a paso, pidindonos el sistema en cada momento
opinin. Adems tendremos el control sobre los paquetes a instalar. Se recomienda utilizar est opcin.

El siguiente paso es construir los sistemas de ficheros teniendo en cuenta lo que se ha descrito de las particiones. Existen
dos mtodos generales, el automtico a partir de la instalacin workstation o el manual, que se puede hacer con dos
herramientas, el diskdruid y el fdisk. El primero (aparece una imagen de l en la siguiente figura) es tan sencillo y completo
que no merece la complicarse ms con el segundo.
Se recomienda crear una particin de bote o arranque de 16 mb., donde se cargar el kernel del sistema para botar,
montada sobre el directorio /boot, otra de usuario con un tamao acorde a las perspectivas de uso que tengamos para el
sistema, dependiendo tambin del tamao de disco que tengamos, ser montada sobre /home, una particin de swap,
tpicamente igual a la memoria fsica (como mnimo ser de 16 mb., siendo el tamao tambin dependiente del uso grfico
del sistema y del tamao de disco duro y memoria fsica) y por ltimo una particin nativa de Linux hasta el final del espacio
de disco duro (el tamao tpico para una distribucin Red Hat 7.0 es de 900 Mb.).

Con este montaje tendremos las mencionadas particiones Linux, ms las preexistentes de otros sistemas, teniendo la
opcin de comprobar si hay sectores defectuosos en las mismas y poder formatearlas (las de Linux).

El siguiente paso depende de si tenemos instalada una tarjeta de red o no. Para ello deberemos tener en cuenta los
parmetros vistos en la tabla de este mismo apartado.

Seguidamente fijaremos el huso horario acorde con nuestro pas, pudiendo adems configurar el offset de la UTC (si se
est de acuerdo con este sistema, el ordenador se cambiar de hora automticamente en verano e invierno).

A continuacin pasaremos al men de creacin de cuentas, una ser la del superusuario o root, la clave tendr que cumplir
las normas habituales de seguridad, otra ser la de al menos un usuario (nosotros), ya que para realizar tareas no
administrativas no es conveniente entrar al sistema como root (al tener control sobre toda la mquina podemos causar
cualquier destrozo inadvertidamente). En modo texto adems podremos configurar el servicio de autenticidad (ver captulo
de gestin de usuarios y grupos) a travs de shadow password, MD5 y NIS (ver captulo de sistemas de ficheros en red).

Posteriormente le diremos al sistema de instalacin los paquetes software que vamos a instalar en el equipo, que
dependern del espacio en disco y de si vamos a trabajar de forma grfica o no. Si es as, deberemos incluir un sistema de
gestin de ventanas, usualmente Gnome o KDE (si disponemos de bastante espacio en disco [1,8 gb.] se pueden instalar
los dos) dependiendo de nuestros gustos. Tambin le podremos decir al sistema si vamos a usar impresora, conectividad
con MS-DOS o un sistema de desarrollo (compiladores y libreras) de texto o grfico. Si incluimos algn paquete
dependiente de otro que no hemos instalado, el sistema nos lo reflejar con una dependencia no resuelta.

La situacin normal es que optemos por una configuracin grfica, para lo cual habr que configurar el sistema X, es decir,
la tarjeta grfica que disponemos y el monitor. En cuanto a la tarjeta grfica, el sistema nos ofrecer un repertorio de
marcas y modelos entre los que elegir la adecuada, si no sabemos cul, se puede elegir una genrica y ms tarde utilizar
las aplicaciones Superprobe (detecta el chip y la memoria de la tarjeta) y Xconfigurator para dar estos parmetros. De la
misma forma podemos indicar del monitor, en este caso si no encontramos la marca, los dos parmetros bsicos que
deberemos indicar sern las frecuencias de refresco horizontal y vertical, de las cuales no podremos salir (incluso algunos
monitores se pueden estropear por poner frecuencias superiores a las que pueden manejar). Una vez indicados tanto la
tarjeta grfica como el monitor, le diremos al sistema el tamao de nuestra ventana de trabajo y el nmero de colores que
queremos trabajar dentro de una de las posibilidades que nos presenta, que dependern de la memoria de la tarjeta grfica
y de su compatibilidad con el monitor, lo usual suele ser una pantalla de 800x600 y al menos 16 mil colores.

Realizada esta configuracin, el programa de instalacin pasar a actuar sobre el sistema de forma irreversible, instalando
los paquetes indicados. Una vez grabados, se indicar como va a realizarse el arranque del sistema, que depender de si
tenemos otro sistema operativo en el computador o no. Lo usual suele ser instalar el cargador por defecto que es LILO,
salvo que tengamos un sistema NT, en cuyo caso deberemos optar por botar en Linux desde disquete, o poner el LILO en
el primer sector del disco y hacer que el cargador de NT lo llame o no. En cualquier caso, siempre es conveniente, aunque
no se utilice, crear un disquete de arranque para las situacions conflictivas en que por alguna causa se haya perdido el
LILO por sobreescribir de forma accidental el MBR (despus de la instalacin, en funcionamiento normal del sistema,
siempre se puede crear un disco de arranque con el comando mkbootdisk).

A partir de este momento (ventana de enhorabuena) estamos en condiciones de botar el sistema (habr que retirar el
disquete de instalacin y el CD si lo hubiera). Si hemos optado por disquete de arranque, bastar con introducirlo y dejar
que el computador arranque desde a:. Si hemos optado por LILO se necesita presionar enter para decirle que queremos
arrancar en LINUX o dejar pasar un tiempo, con lo cual se empezar tambin en LINUX. Sino, escribiremos dos para
arrancar el sistema en MS-DOS / Windows (en el caso de NT arrancar con su propio cargador).

Otros tipos de instalacin


Hasta ahora hemos visto el sistema normal de instalacin a travs de un CD-ROM local, pero existen otros mtodos ms
apropiados cuando se est trabajando en un entorno con red y servicios de tipo servidor o cuando por ejemplo no se
dispone de un CD Local, o ste est en otra mquina. En estos casos siempre se deber hacer la instalacin en modo texto
y tener la red configurada en su caso. Un esquema de todos los mtodos aparece a continuacin:

 CD-ROM. Este es el mtodo normal de instalacin cuando se posee un lector de CD-ROM. Puede ser necesario un
disco de arranque normal (si no se puede botar de CD-ROM) o un disco de tipo PCMCIA si tenemos el CD-ROM
colgado de uno de estos dispositivos.

 Disco Duro. Se tienen los ficheros de Red Hat Linux copiados en un disco duro local. En este caso le deberemos
decir a la instalacin cual es la particin que tiene esos ficheros para preservarla.
 Imagen NFS. Se ejecuta la instalacin desde un servidor NFS que exporte el CD-ROM de Red Hat Linux o desde un
mirror de Red Hat Linux. Al men habr que darle el nombre de la mquina que hace de servidor de NFS y en que
directorio estn los ficheros.

 FTP. Exactamente igual slo que ahora el servidor es FTP. Al igual que en el caso anterior en vez de nombre de
mquina tambin se puede escribir la direccin IP.

 HTTP. Lo mismo pero en este caso habr que introducir la direccin de web (site) y el directorio de ficheros.
Eliminacin del sistema
Dependiendo del sistema de instalacin habr que:

 Sin particiones. Eliminar los ficheros redhat.img y rh-swap.img del directorio raz de windows (MS-DOS) \.

 Con particiones. Suprimir la informacin de LILO del MBR a travs de LINUX con /sbin/lilo u o a travs de
Windows (MSDOS) con fdisk /mbr. Despus habr que eliminar las particiones Linux de la forma que se ha indicado
en este captulo.
3. Arranque y Parada

3.1. Introduccion

E l proceso por el cual un computador arranca y pone a disposicin de los usuarios el sistema operativo es conocido como
"booting" (bootstrapping). Es un periodo de especial vulnerabilidad, donde cualquier error de configuracin puede hacer que el computador no
funcione, adems requiere conocimientos sobre algunos aspectos del sistema, como el sistema de ficheros, los demonios, la ejecucin de macros,
o la configuracin del kernel, siendo adems muy dependiente del hardware que est debajo, lo que lo hace especialmente dependiente de la
mquina en si y poco general.

A pesar de todo, se siguen unos pasos comunes que se pueden resumir de la siguiente manera:

1. Carga e inicializacin del ncleo.


2. Deteccin y configuracin de dispositivos.
3. Creacin de procesos espontneos (se llaman procesos espontneos a los que no han sido creados por otros procesos
a travs de la llamada fork. Estos procesos varan en nombre y nmero en diferentes sistemas, pero todos tienen en comn al
proceso init encargado de la carga del ncleo).
4. Posible operacin del administrador en modo monousuario.
5. Ejecucin de las macros de arranque.
6. Operacin normal multiusuario.

Estas fases, adems, pueden ser realizadas de forma automtica o manual. La usual es la primera, donde a partir de un dispositivo como
puede ser el disco o algunas veces la cinta, un pequeo programa residente en alguna zona especial de estos dispositivos se encarga de leer el
cdigo del ncleo y volcarlo a memoria. La segunda se utiliza cuando hay algn problema en el arranque del computador, en cada paso el sistema
se detiene para devolver el control al operador y normalmente se ejecuta la inicializacin en modo monousuario.

En el caso de un sistema personal el proceso comienza con el POST (Power On Self Test) que chequea el sistema y pasa el control a la
BIOS, la cual habr configurado el usuario para que cargue el sistema operativo desde algn lugar. Esto, que en principio es versatilidad, puede
ser una fuente de inseguridad ya que alguien (intruso) podra insertar un disquete para montar otro sistema. Podemos evitar esto botando
directamente desde disco y haciendo que la BIOS arranque con una clave.

Una vez localizado el dispositivo, se ejecutar el programa de carga del sector de arranque (ver siguiente seccin) que sabr como cargar
el sistema operativo.

3.2. Cargador LILO

C omo ya hemos mencionado, esta parte del sistema es independiente del Linux/UNIX y variar fuertemente de un sistema operativo a
otro, por eso, en este apartado, nos referiremos de forma fundamental al cargador ms habitual en el sistema Linux (puede servir para otros
sistemas operativos) que es el LILO (LInux LOoader). Este es el nombre que recibe para la arquitectura ms normal que es la INTEL, pero
tambin existe en otras como la Alpha de Digital (MILO) o la SPARC de Sun (SILO). Existen otros gestores de arranque para Linux menos
utilizados como:

 GRUB, GRand Unified Bootloader, muy potente y flexible (ver arriba referencias).
 Loadlin, para cargar Linux desde MSDOS, incluido en el directorio /dosutils.
 SYSLinux, suele ser utilizado por distribuciones de disquetes o CD instalables.
 NTLDR, para Windows NT.
 Poof, Para iMac.
 Otros programas comerciales como System Comander, Boot Manager, BootMagic o BootStar.
 O incluso sin disco a travs de la red (si nos lo permite la BIOS [la BIOS es el sistema bsico de entrada/salida, es un chip situado en
la placa madre de los PC que da una interfaz para el manejo de dispositivos como el disco, el teclado o la pantalla, LINUX no utiliza la
BIOS, ya que por eficiencia y para evitar las limitaciones de la misma trabaja directamente con los dispositivos, pero el LILO si lo hace]).

Si hemos optado por LILO, podremos colocarlo de diversas maneras: en el MBR hacia donde salta la BIOS automticamente, en el primer
sector del disco, tpicamente accesible por el programa cargador del MBR (o IPL), o en un disquete, si las BIOS tienen la secuencia A: C:. Todo
depender de la situacin en que estemos, si slo tenemos Linux en nuestro sistema lo lgico ser instalarlo en el MBR, si el sistema es dual y
nos interesa tener el cargador de otro sistema deberemos instalarlo en la particin raz o en el disquete.

El comando de instalacin de LILO se encuentra en el fichero /sbin/lilo (ejecutndolo lo instalamos en el lugar que indiquemos),
teniendo como fichero de configuracin /etc/lilo.conf (le decimos dnde y cmo lo vamos a instalar y cmo debe cargar el sistema
operativo). La configuracin del LILO se puede hacer, o bien desde el prompt del programa o editando el fichero de configuracin, en cualquier
caso, el cargador LILO usar las opciones que aparecen posteriormente, pero para su modificacin hay que tener en cuenta cuales son las
particiones que hemos creado (vienen reflejadas en el fichero /etc/mtab).
Existen dos tipos de opciones (se pueden ver todas haciendo: man lilo.conf), las generales vlidas para cualquier sistema colocadas al
principio del fichero y las particulares para un sistema operativo (imagen) precedidas por su correspondiente etiqueta o ttulo. Entre las globales
podemos destacar:

 boot=dispositivo. Estamos diciendo que vamos a instalar LILO en el MBR de la particin (dispositivo) indicada. Se le indicar en
que dispositivo (por ejemplo una particin del disco duro) se debe arrancar (o instalar) el sector de arranque (MBR) y por tanto donde est
LILO, por defecto, ser la particin donde se encuentre el sistema raz de archivos LINUX. LILO siempre deber estar en el primer disco
IDE (/dev/hda) o SCSI (/dev/sda) o en un disquete (/dev/fd0). En el primer caso slo se puede instalar en el MBR o en particiones
primarias o extendidas pero no lgicas. La particin donde est instalado debe ser de LINUX, no de otro sistema operativo.
 install=fichero. Se instala el archivo especificado como sector de arranque, sino se usar /etc/lilo/boot.b. Si hemos creado la
particin especial de arranque boot se deber usar boot/boot.b.
 linear. Genera direcciones lineales de sectores en vez de direcciones de tipo sector/cilindro/cabeza (para acceder a un disco, la
BIOS utiliza direcciones conocidas como 3D o CHS [cilindros, cabezas, sectores] que obviamente dependen de la geometra del mismo,
para manejar discos grandes, los fabricantes han introducido otro tipo de direccionamiento conocido como LBA, en que se accede a los
discos de forma lineal) cuando se utiliza LBA.
 message=fichero. Para mostrar un mensaje antes de que se presente el prompt de boot. La longitud del fichero debe ser como
mximo de 65535 bytes. Si se coloca 0xFF (Ctrl. L) en el mensajese borrar la pantalla.
 verbose=nivel. Ser un nmero entre 1 y 5. Cuanto mayor es el nmero mayor informacin es presentada en pantalla.
 backup=fichero. Copia el sector de arranque en el fichero indicado.
 delay=nmero. Nmero de dcimas de segundo que se esperar para arrancar la primera imagen (sistema operativo) indicada.
 prompt. Se exige que se escriba algo en el arranque de LILO.
 timeout=nmero. Ser el nmero de dcimas de segundo de espera para escribir algo en el arranque. Si es un cero LILO
esperar indefinidamente. Superado este tiempo se pasar a la opcin por defecto indicada por default.
 default=imagen. Ser el sistema operativo (imagen) por defecto (ver siguiente prrafo). Si no se coloca ser la primera.
 vga=modo. Indica el modo grfico de la pantalla en el boot. Puede ser normal, extendido (ext) o a peticin (ask).
 password=contrasea. Se pueden proteger las imgenes de arranque. Esto es interesante para que nadie pueda venir con un
disquete rearrancar el ordenador y cargar lo que el quiera. Combinado con el password de la Bios podemos proteger el sistema totalmente.
Debido a que el fichero de configuracin es visible, y que el password no va encriptado, deberemos poner en el mismo la proteccin 600, es
decir lectura y escrituta slo a root.

Si se modifica cualquiera de las opciones, se deber ejecutar de nuevo LILO, usualmente con lilo -v, no importa hacerlo de nuevo si no
estamos seguros de haber cambiado lilo.conf y no haberlo hecho antes. Esto es as ya que LILO cuando arranca no sabe nada del sistema
de ficheros y lo que se hace al ejecutar el comando LILO es tomar referencias absolutas del disco para despus poder botar.

Las opciones particulares para los sistemas operativos se clasifican en dos, las de LINUX encabezadas por la opcin image y las de otros
sistemas por other. Su dos encabezaminetos son:

 image=ncleo. Se indica dnde est la imagen del ncleo del sistema operativo que vamos a cargar con LILO.
 other=dispositivo. Es el equivalente de root en Linux y servira para indicar cual es la particin donde se encuentra el sistema
operativo.

En ambos casos, se pueden poner opciones comunes al principio y redefinirlas en alguna seccin donde difieran. Las opciones ms
utilizadas son:

 label=nombre. Se define el nombre (etiqueta o ttulo) de la imagen del sistema operativo. Si no se indica, se utilizar el nombre (sin
camino) puesto en image o other.
 alias=nombre. Se define un segundo nombre para el sistema.
 single-key. Permite arrancar este sistema con una sola tecla, para ello la etiqueta o el alias deben ser de una sola letra.
 password=contrasea. Se define un acceso protegido para esta imagen.
 restricted. Se puede usar con password para aplicarlo slo cuando se introduzca algo por teclado.

En el caso Linux se indicar la imagen a cargar, que normalmente estar en el directorio /boot con nombre vmlinuz seguido de la
versin del ncleo (el kernel a cargar por LILO deber estar en los primeros 1024 cilindros del disco IDE en la primara interfaz: hda o hdb, en las
BIOS anteriores al 98, de ah lo de la particin /boot, en otro caso se puede usar la opcin LBA de la BIOS, siempre que est permitido, y poner
al LILO en modo lineal), opciones habituales especficas para Linux son:

root=dispositivo. Indica que particin (dispositivo) ser montada como raz del sistema.
read-only. Indica que la imagen no se debera cambiar, lo cual es natural.
 append=cadena. Se define una cadena a aadir a los parmetros pasados al ncleo del sistema. Por ejemplo ser necesario
cuando en el computador tengamos ms de 64MB. de memoria: cadena = "mem 128M", por ejemplo.

En el caso de otros sistemas operativos podremos utilizar algunas de estas opciones:

 table=dispositivo. En algunos sistemas operativos es necesirio indicar que particin contiene la tabla de particiones, como por
ejemplo la familia de MS-DOS, ya que de ella se toma informacin sobre el disco.
 change. Con diferentes subopciones permite modificar la tabla de particiones, como por ejemplo activar o desactivar una particin o
cambiarlo de estado (tipo).
 map-drive. Se puede "cambiar" la BIOS para que por ejemplo un dico secundario pueda aparecer como primario y viceversa, ya que
podemos tener un sistema que est en este disco pero no pueda botar de l.

A continuacin aparece una configuracin normal del fichero /etc/lilo.conf cuando slo existe un sistema operativo LINUX pero se pueden
cargar dos ncleos:

# opciones globales a todos los sistemas


boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
message=/boot/message
linear
default=linux

read-only
# opciones particulares para linux
image=/boot/vmlinuz-2.2.16-2
label=linux
root=/dev/hda6

# opciones particulares para linux


image=/boot/vmlinuz-2.2.14-2
label=viejo
root=/dev/hda7

Si hubiera un sistema de doble arranque podra aparecer:

# opciones particulares para sistema Microsoft


other=/dev/hda1
label=dos
table=/dev/hda

Adems de estas opciones, cuando arranca el LILO le podemos dar mandatos on-line para comunicarle eventos especiales como que
ponga al LINUX en modo monousuario (ver niveles de ejecucin en un apartado posterior) o decirle que arranque desde otro dispositivo, las ms
usuales son:

 Linux Rescue. Inicia al Linux en modo monousuario, de tal manera que se puedan hacer reparaciones en el sistema.
 Linux Single. Del mismo efecto que la anterior intentando arrancar desde disco. Estas opciones deberan estar protegidas con
password y usando la opcin restricted.
 Root=dispositivo. Parecida a la entrada de lilo.conf, permite al usuario arrancar el sistema desde otros dispositivos como por
ejemplo un CD-ROM.
 Vga=modo. Permite modificar el modo de la consola.

Normalmente se usan estos comandos on-line cuando estamos en situaciones de prdida de LILO, por ejemplo cuando hemos instalado
LILO en el MBR y despus hemos instalado Windows y lo hemos borrado. En estos casos es vital tener siempre un disquete de arranque (el
disquete de arranque se crea cuando se instala el sistema, despus, como se indic en el captulo anterior, siempre se puede hacer con el
comando mkbootdisk) y una vez que nos presenta el inductor de arranque (prompt de boot) escribir: linux root=/dev/hda7 en nuestro caso (en
esa particin estaba el sistema raz). Una vez arrancado el sistema tendremos que ejecutar lilo -v para volver a instalar el LILO.

Tambin resulta muy til hacer una copia del MBR por si ocurre alguna desgracia, lo podemos conseguir con el conocido comando dd:

dd if=/dev/hda of=<archivo> bs=512 count=1

Para restaurar el IPL salvado slo tenemos que ejecutar el comando:

dd if=<archivo> of=/dev/hda bs=446 count=1

Si no tuvieramos disquete de arranque (muy mal hecho), deberamos proceder a la instalacin, pero en vez de llevarla a cabo, pararnos
cunado nos pida el boot e indicar el dispositivo de root. Si tenemos un disquete de rescate tampoco tendramos problemas y procederamos de la
misma manera. Una vez que estemos en el sistema tendremos que ejecutar LILO y rebotar.

Un ltimo aspecto que hay que tener en cuenta es si algn da se quiere cambiar el cargador de arranque LILO por otro, en este caso habr
que ejecutar lilo -u. Si lo hubieramos colocado en el MBR tambin habr que eliminarlo de all con fdisk /mbr.

Si se necesita ms informacin sobre todas las opciones de LILO (por ejemplo ponerlo en modo grfico) siempre (al igual que en otros
aspectos de Linux) se puede recurrir al manual del sistema y a las pginas web de la distribucin utilizada o de Linux en general (la pgina de Red
Hat tiene un buscador para cualquiera de los sites de Linux). All encontraremos soporte software y hadware, faqs (preguntas frecuentes) y
Howtos (Comos), adems de foros y servicios de noticias donde podemos hacer consultas a otros usuarios de la red y Linux. En las referencias de
este captulo estn varias direcciones de inters.

Como ltimo recurso puedes recurrir a Linuxconf en sus seccin de LILO.

3.3. Ejemplos Cargador LILO

Ejemplos no probados tomados de la red.


1. Tengo un disco duro con slo Linux, en la particin /dev/hda1, y la imagen del ncleo es /boot/vmlinuz. Queremos instalar Lilo como
gestor de arranque principal.

boot=/dev/hda # Instalar Lilo en el MBR del primer disco IDE


image=/boot/vmlinuz # Imagen del ncleo de Linux
root=/dev/hda1 # Particin donde est el sistema raz de Linux
read-only # Opcin recomendable para particiones Linux ext2

2. Tengo Linux en la particin primaria /dev/hda2. Quiero instalar Lilo en el sector de arranque de esa particin porque uso otro gestor
de arranque principal. La imagen del kernel es /boot/vmlinuz.

image=/boot/vmlinuz # Imagen del ncleo de Linux


root=/dev/hda2 # Particin del sistema raz y donde se va a instalar Lilo
read-only # Opcin recomendable para particiones Linux ext2

3. Tengo el sistema raz de Linux en la unidad lgica /dev/hda5. Quiero instalar Lilo en el sector de arranque de la particin extendida,
que es la /dev/hda4, porque uso otro gestor de arranque principal.

boot=/dev/hda4 # Instalar Lilo en el sector de arranque de la particin extendida


image=/boot/vmlinuz # Imagen del ncleo de Linux
root=/dev/hda5 # Unidad lgica donde est el sistema raz de Linux
read-only # Opcin recomendable para particiones Linux ext2

4. Tengo un disco duro con Ms-Dos en /dev/hda1, Windows 95/98 con FAT32 en /dev/hda2, NT en /dev/hda3 y Linux en la unidad
lgica /dev/hda5 de la particin extendida /dev/hda4. Adems tengo un segundo disco duro con Ms-Dos o Windows 95/98. Quiero usar Lilo
como gestor de arranque principal y se imprimir un mensaje inicial.

# Opciones globales

boot=/dev/hda # Instalar Lilo en el MBR del primer disco IDE


message=/boot/message # Mensaje inicial
single-key # Permitir seleccionar el OS con la pulsacin de una sola tecla
change-rules # Inicio de definiciones de tipos de particin
type=DOS32 normal=0x0b # Definicin del tipo de particin FAT32
type=NTFS normal=0x07 # Definicin del tipo de particin NTFS

# Seccin de la imagen de Linux

image=/boot/vmlinuz # Imagen del ncleo de Linux


label=linux # Nombre identificativo
alias=1 # Nombre alternativo
root=/dev/hda5 # Unidad lgica donde est el sistema raz de Linux
read-only # Opcin recomendable para particiones Linux ext2

# Seccin para el Ms-Dos

other=/dev/hda1 # Particin donde est el Ms-Dos


label=dos # Nombre identificativo
alias=2 # Nombre alternativo
table=/dev/hda # Opcin necesaria para los OS de Microsoft
change # Inicio de la seccin de modificacin del MBR
partition=/dev/hda1 # Modificar la particin Ms-Dos
activate # Activar el flag de arranque
set DOS16_big_normal # Hacer visible la particin
partition=/dev/hda2 # Modificar la particin Win 95/98
deactivate # Desactivar el flag de arranque
set DOS32_hidden # Ocultar la particin
partition=/dev/hda3 # Modificar la particin del NT
deactivate # Desactivar el flag de arranque
set NTFS_hidden # Ocultar la particin

# Seccin para el Win 95/98

other=/dev/hda2 # Particin donde est el Win 95/98


label=win # Nombre identificativo
alias=3 # Nombre alternativo
table=/dev/hda # Opcin necesaria para los OS de Microsoft
change # Inicio de la seccin de modificacin del MBR
partition=/dev/hda1 # Modificar la particin del Ms-Dos
deactivate # Desactivar el flag de arranque
set DOS16_big_hidden # Ocultar la particin
partition=/dev/hda2 # Modificar la particin del Win 95/98
activate # Activar el flag de arranque
set DOS32_normal # Hacer visible la particin
partition=/dev/hda2 # Modificar la particin del NT
deactivate # Desactivar el flag de arranque
set NTFS_hidden # Ocultar la particin

# Seccin para el NT

other=/dev/hda3 # Particin donde est el NT


label=nt # Nombre identificativo
alias=4 # Nombre alternativo
table=/dev/hda # Opcin necesaria para los OS de Microsoft
change # Inicio de la seccin de modificacin del MBR
partition=/dev/hda1 # Modificar la particin del Ms-Dos
deactivate # Desactivar el flag de arranque
set DOS16_big_hidden # Ocultar la particin
partition=/dev/hda2 # Modificar la particin del Win 95/98
deactivate # Desactivar el flag de arranque
set DOS32_hidden # Ocultar la particin
partition=/dev/hda2 # Modificar la particin del NT
activate # Activar el flag de arranque
set NTFS_normal # Hacer visible la particin

# Seccin para el otro disco duro

other=/dev/hdb1 # Particin del segundo disco donde est el OS


label=disco2 # Nombre identificativo
alias=5 # Nombre alternativo
table=/dev/hdb # Opcin necesaria para los OS de Microsoft
map-drive=0x80 # Intercambia el primer y segundo disco en la Bios
to=0x81 # para as poder arrancar del segundo disco
map-drive=0x81 # Entonces, para la Bios, el segundo disco ser el
to=0x80 # primero, y el primero ser el segundo

3.4. Inicializacin

U na vez que el kernel est cargado y sabe cuanta memoria tiene (en la mayora de los casos el kernel utiliza una cantidad fija de memoria
para sus tablas internas), chequea el entorno de la mquina para saber que hardware est disponible (se supone que cuando se construye un
kernel, el usuario le ha dado esa informacin como hemos visto en el captulo anterior) y lo inicializa. Si la informacin pasada al kernel es
insuficiente, el kernel probar los drivers de los dispositivos y en caso necesario requerir informacin de los mismos. Si stos no responden, sus
dispositivos sern desactivados. Ocurrir lo mismo si los dispositivos se conectan despus de la inicializacin, no sern accesibles hasta que el
sistema bote de nuevo (esto no es del todo cierto en ncleos que soporten mdulos, como es el caso del LINUX actual, ya que un mdulo puede
soportar un driver y es reconocido despus de la inicializacin. Los mdulos se pueden cargar o descargar con los comandos insmod y rmmod o
directamente por el ncleo a travs de su demonio kerneld).

Una vez que la configuracin hardware est realizada, el ncleo crea los procesos espontneos en el espacio del usuario, cuyo nmero y
nombre depender del sistema en cuestin; en el caso de sistemas BSD sern tres: el swapper (0), el proceso init (1) y el pagedaemon (2); en
sistemas ATT (System V): el sched (0), el init (1) y varios manejadores de memoria.

En este punto, la misin de inicializacin del ncleo ha terminado, pero ninguno de los procesos que se encarga de operaciones bsicas
como aceptar logins y terminales ha arrancado todava, al igual que el resto de demonios del sistema. Toda est inicializacin del sistema es
funcin del proceso init de PID nmero 1, que es el nico proceso que realmente se ejecuta en el espacio de usuario, ya que el resto de procesos
espontneos son copias de parte del ncleo que se separan por razones de planificacin.

Si se ha indicado al ncleo del sistema que la inicializacin va a ser en modo monousuario (un de los niveles de ejecucin), ste al crear a
init se lo indicar, con lo cual este proceso slo ejecutar una shell de tipo sh. A travs de sta shell el superusuario o root podr ejecutar la
mayora de los comandos que ejecutara con el sistema completo, con la salvedad de que slo la particin de root es montada y que la mayora de
los demonios no estn creados, con lo que no funcionarn servicios bsicos de red como el correo o comandos que no residan en /bin, /sbin
o /etc. El comando que con mayor frecuencia se utilizar ser el fsck que sirve para chequear el sistema de ficheros y repararlo, ste se ejecuta
de forma automtica en el bote normal (otro nivel de ejecucin), pero en este caso se deber hacer manualmente.

Una vez que el proceso init est cargado y ejecutndose, el siguiente paso ser la puesta en marcha de las macros de arranque. Para
ejecutarlas el proceso init arranca una sh que las interpretar, la ubicacin, contenido y nombre de las macros es muy dependiente (de nuevo) del
sistema. En los sistemas BSD estn guardadas en el directorio /etc y empiezan por rc. En los sistemas ATT las macros estn en el
directorio /etc/init.d y estn linkadas (con ln) al directorio /etc con nombres rcx.d donde x es un nmero que indicar el nivel de ejecucin
(ver posteriormente).

Las funciones tpicas de estas macros sern:

 Dar nombre al computador.


 Poner la zona horaria.
 Chequear el sistema de ficheros.
 Montar las particiones.
 Borrar ficheros de /tmp.
 Configurar la red.
 Arrancar demonios y servicios de red.
 Activar las cuentas y las cuotas.

Las macros suelen ser muy "expresivas", tcnicamente verbosas, y nos irn diciendo en cada momento lo que estn haciendo, lo cual es
muy til cuando hay problemas en el arranque.

Una vez ejecutadas, el sistema est listo para aceptar a los usuarios. Para que esto ocurra el proceso init ha creado a un proceso getty por
cada terminal. Si se recibe una entrada, este proceso crear a su vez a un proceso login que verificar el nombre y la contrasea del
usuario y si todo va bien se crear una shell de comunicacin con el mismo.

3.5. Inicializacin ATT/ REDHAT

D ebido a que esta es otra de las partes del sistema que vara bastante entre sistemas operativos, en este apartado nos vamos a centrar
en la inicializacin del Red Hat que sigue fundamentalmente el esquema de ATT (System V).

La gran diferencia con sistemas de tipo BSD es que en ATT el proceso init soporta varios niveles de ejecucin (el proceso init de puede
ejecutar en lnea con el nmero de nivel de ejecucin, por ejemplo init 0 apagar el sistema) que habilitan diferente recursos, de esta manera las
macros son divididas en partes ms pequeas que son ejecutadas dependiendo del nivel de ejecucin.

Fichero o directorio Tipo Funcin


/etc/inittab F Indica que hacer en cada nivel de ejecucin
/etc/rc.d D Directorio de macros de arranque
/etc/rc.d/rc.sysinit F Macro comn de inicio
/etc/rc.d/rc F Macro que toma el nivel de arranque
/etc/rc.d/rc.local F Macro para caractersticas particulares
/etc/rc.d/rcx.d D Directorios de arranque para cada nivel de ejecucin
/etc/rc.d/init.d D Directorio de ubicacin de servicios

Los niveles de ejecucin estn planificados (le dicen a init lo que debe hacer en cada uno) en el fichero /etc/inittab. Si este fichero
est defectuoso o no existe, la nica forma de botar ser en modo monousuario (si el ordenador no arranca por culpa de un /etc/inittab mal
definido o no permite la conexin porque hay un /etc/passwd corrupto o simplemente la contrasea de root ha sido olvidada, basta con arrancar
en modo monousuario tecleando linux single, si no est protegido, en la lnea de comandos de LILO). El fichero de texto est compuesto
por lneas de un formato parecido a este:

id:ejecucion:accin:proceso

donde id es la identificacin de la entrada dentro de inittab, ejecucion ser el nivel o los niveles de ejecucin asociados a esa entrada,
proceso ser una lnea sh que indicar a init que proceso ejecutar cuando se especifica alguno de los niveles correspondientes a la entrada y
accin especifica lo que deber hacer init con el proceso, las ms usadas son: wait esperar a que acabe, off ignorar la entrada, once ejecutarle
slo una vez, respawn volverle a ejecutarlo si muere y la ms importante sysinit que indicar a init que debe preguntar al operador.

Los niveles de ejecucin (en Red Hat hay hasta 10 niveles pero del 7 al 9 estn indefinidos) son:

0 Halt. El nivel 0 se utiliza para cerrar el sistema. Las tareas a realizar sern fundamentalmente y por ese orden: terminar
todos los procesos, desactivar la zona de intercambio de memoria en disco y desmontar los sistemas de ficheros.

1 Monousuario. Este es el estado administrativo usado por los system managers para hacer mantenimiento de software.
Los sistemas de ficheros estn montados pero la red est inactiva.

2 Multiusuario. Este es el nivel de ejecucin multiusuario, pero con los servicios de red parcialmente inactivos, como por
ejemplo el NFS.

3 Multiusuario. Este suele ser el nivel de ejecucin predeterminado (primera lnea de inittab). Todos los servicios estn
activos incluyendo los de red.

4 Sin usar. Este es un directorio vaco que se usa para que sea determinado por el administrador.

5 Multiusuario. Es muy parecido al tres con la diferencia que el servicio named (servidor de nombres) est activo y que
adems es el elegido cuando se utilizan sesiones grficas basadas en el sistema X.

6 Reinicializacin. Es parecido al nivel cero, con la diferencia de que la lgica de init.d indicar si el sistema est
inicindose o terminando.

Obviamente el sistema no puede permanecer en los niveles 0 y 6, se usan para pararlo o rebotarlo. El aspecto de un fichero inittab tpico
puede ser (el fichero inittab se puede editar para hacer cambios, aunque resulte muy peligroso y muy poco usual):

#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
#
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
#
# Things to run in every runlevel.
ud::once:/sbin/update
#
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
#
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
#
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
#
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
# Run xdm in runlevel 5
# xdm is now a separate service
x:5:respawn:/etc/X11/prefdm nodaemon

Lo primero que veremos en este tipo de ficheros es el nivel por defecto que se escoger al arrancar sin indicar nada, en este caso el 3 con
la lnea:

id:3:initdefault:

A continuacin con:

si::sysinit:/etc/rc.d/rc.sysinit

indicaremos una serie de servicios comunes a todos los niveles de ejecucin dados en el fichero /etc/rc.d/rc.sysinit. Funciones
tpicas de esta macro son: configurar variables para el PATH, la red, el intercambio de memoria, el hostname, montar el sistema de ficheros raz y
borrar algunos ficheros no necesarios. Entrar en ms detalles se sale de este curso bsico.

Despus, arrancaremos una macro llamada rc residente en el directorio /etc/rc.d a la que se la pasa el nivel de ejecucin. sta, adems
de configurar el nivel de ejecucin actual y anterior, ir a un directorio de formato rcx.d, donde x es el nivel de ejecucin en el
directorio /etc/rc.d, donde aparecern una serie de enlaces a ficheros. Estos ficheros son servicios que estn en el
directorio /etc/rc.d/init.d y tambin estn en forma de macro. Los enlaces empiezan por S o K seguidos de un nmero y un nombre, y nos
indicarn que servicios arrancar (start) o terminar (kill) por la macro rc y en que orden (por el nmero, como las lneas de BASIC). Si encuentra
una S, la macro rc mandar un start al servicio y si es una K un stop. Debemos tener en cuenta que cualquier macro (incluidas las de los
servicios) puede ser ejecutada manualmente desde la lnea de comandos. As, un comando como:

/etc/rc.d/init.d/httpd stop

detendra el servidor de httpd (de web). Podemos ver todos los servicios simplemente haciendo un ls del directorio. Normalmente cada
servicio est asociado a un demonio.

La macro rc (en este ejemplo se ve con claridad la complejidad que puede alcanzar una macro en UNIX) tendr un aspecto parecido a las
siguientes lneas (en lo que se refiere a parar y arrancar servicios):

...
# Is there an rc directory for this new runlevel?
if [ -d /etc/rc$runlevel.d ]; then
# First, run the KILL scripts.
for i in /etc/rc$runlevel.d/K*; do
# Check if the script is there.
[ ! -f $i ] && continue
# Don't run [KS]??foo.{rpmsave,rpmorig} scripts
[ "${i%.rpmsave}" != "${i}" ] && continue
[ "${i%.rpmorig}" != "${i}" ] && continue
[ "${i%.rpmnew}" != "${i}" ] && continue
# Check if the subsystem is already up.
subsys=${i#/etc/rc$runlevel.d/K??}
[ ! -f /var/lock/subsys/$subsys ] && \
[ ! -f /var/lock/subsys/${subsys}.init ] && continue
# Bring the subsystem down.
if egrep -q "(killproc |action )" $i ; then
$i stop
else
action "Stopping $subsys: " $i stop
fi
done
# Now run the START scripts.
for i in /etc/rc$runlevel.d/S*; do
# Check if the script is there.
[ ! -f $i ] && continue
# Don't run [KS]??foo.{rpmsave,rpmorig} scripts
[ "${i%.rpmsave}" != "${i}" ] && continue
[ "${i%.rpmorig}" != "${i}" ] && continue
[ "${i%.rpmnew}" != "${i}" ] && continue
# Check if the subsystem is already up.
subsys=${i#/etc/rc$runlevel.d/S??}
[ -f /var/lock/subsys/$subsys ] || \
[ -f /var/lock/subsys/${subsys}.init ] && continue
# If we're in confirmation mode, get user confirmation
[ -n "$CONFIRM" ] &&
{
confirm $subsys
case $? in
0)
:
;;
2)
CONFIRM=
;;
*)
continue
;;
esac
}
# Bring the subsystem up.
if egrep -q "(daemon |action )" $i ; then
$i start
else
if [ "$subsys" = "halt" -o "$subsys" = "reboot" -o "$subsys" = "single" -o
"$subsys" = "local" ]; then
$i start
else
action "Starting $subsys: " $i start
fi
fi
done
fi

Y la macro del servicio ms sencillo, que es killall tendra un aspecto:

#!/bin/bash
# Bring down all unneeded services that are still running (there shouldn't
# be any, so this is just a sanity check)
for i in /var/lock/subsys/*; do
# Check if the script is there.
[ ! -f $i ] && continue
# Get the subsystem name.
subsys=${i#/var/lock/subsys/}
# Bring the subsystem down.
if [ -f /etc/init.d/$subsys.init ]; then
/etc/init.d/$subsys.init stop
else
/etc/init.d/$subsys stop
fi
done

Una vez que la macro rc, llamada adecuadamente por el proceso init a travs del fichero inittab, ha terminado su trabajo, se pasar a
ejecutar el comando /sbin/update, que crea un demonio del kernel que manda los buffers "sucios" (los que han sido escritos) a disco (en
muchas ocasiones esto suele estar incluido en la propia rc).

Tambin /etc/inittab describe como el sistema debe gestionar la traduccin de Ctrl-Alt-Delete en algo como el
comando /sbin/shutdown -t3 -r now (rebotar el sistema ahora haciendo que init espere 3 segundos). Y a continuacin /etc/inittab
indica que debe hacer el sistema si falla el fluido elctrico, esto slo tendr sentido cuando est conectado un sistema de alimentacin
initerumpida UPS.

Despus el fichero /etc/inittab se replica para ejecutar un proceso getty para cada consola virtual. En este caso los niveles 2-5 tienen
seis consolas, el nivel 1, que es monousuario, slo tiene una consola y como es natural, los niveles 0 y 6 no tienen consolas virtuales. Cuando
estamos trabajando en una consola normal de Linux (y tambin otros sistemas), tenemos varias consolas virtuales en el mismo dispositivo de
salida (pantalla) a las que se accede a travs de la combinacin de teclas Ctrl-Alt-tecla de funcin, normalmente la quinta (F5) est reservada
como terminal X (grfico) y el resto son de texto.

En el nivel de ejecucin 5, tambin se ejecuta una macro llamando /etc/X11/prefdm. El script prefdm configura la variable PATH de forma
adecuada para el entorno grfico y ejecuta el gestor de pantalla preferido (gdm si escogemos GNOME, kdm si KDE, o xdm en otro caso,
AnotherLevel) basndose en el fichero /etc/sysconfig/desktop, si en ste no aparece nada, coger el primero indicado.

A continuacin, en Red Hat (a semejanza de los UNIX de la familia BDS como en Freebsd) se ejecuta opcionalmente la macro rc.local,
donde se coloca la parte de la inicializacin que no se ha querido poner en las macros anteriores de tipo System V. Suele usarse para obtener el
nombre del sistema operativo y la arquitectura del computador, adaptando el fichero /etc/issue. En algunos casos se puede colocar setserial
en rc.local o rc.serial si se tienen puertos serie que inicializar. Tambin se pueden poner arranques de demonios adicionales o inicializar una
impresora. Pero el /etc/rc.d/rc.local por defecto, simplemente crea un bonito mensaje de bienvenida (/etc/issue) con la versin del kernel
y el tipo de ordenador.

Otras configuraciones posibles, al estilo de /etc/rc.config.d usados en los sistemas HP-UX, se obtienen modificando los ficheros que
se encuentran en el directorio /etc/sysconfig que usualmente contienen definiciones de variables para "sintonizar" el sistema. En la siguiente
tabla aparecen las ms frecuentes:

Fichero Funcin
apmd Manejo del demonio de energa (power).
clock Tipo de reloj que se tiene.
desktop Tipo de escritorio.
harddisks Tipo de disco.
hwconf Informacin usada por Kudzu (proceso de arranque).
i18n Formato local de fechas, lenguajes, etc.
init Manera en que los mensajes de init son enseados.
keyboard Tipo de teclado.
mouse Tipo de ratn para las X.
Opciones globales de la red: hostname, gateway,
network
etc.
Para arrancar demonios relacionados con la
pcmcia
PCMCIA.
sendmail Opciones del demonio de correo sendmail.

Tambin existen dentro de l otros directorios de macros como console o network-scripts.

3.6. Herramientas

E xisten tres comandos relacionados con el arranque del sistema que nos permitirn modificar los servicios a arrancar o parar sin
necesidad de crear enlaces en los ficheros rcx.d. El primero es de tipo grfico y se llama tksysv (propio de Red Hat), que puede ejecutarse tanto
desde la lnea de comando grfico como desde el panel de control, tiene su propia ayuda y es muy sencillo de usar, fue creado por Donnie Barnes
y est escrito en tcl/tk, de ah el nombre "tk System V".

Existe una versin con un interfaz de carcter con ventanas que se llama ntsysv, que hace la misma labor, fue realizado por Erik Troan.

Por ltimo, el comando ms bsico, del que provienen los anteriores (y ste a su vez de IRIX) es chkconfig. La definicin de la utilidad
chkconfig es: proveer de una simple herramienta de lnea de comandos para mantener la jerarqua de directorios /etc/rc.d. De esta manera
libera a los administradores de sistemas de tener que manipular directamente numerosos enlaces simblicos en /etc/rc.d.

Se puede tener informacin completa a travs del comando man, pero la opcin ms habitual es:

chkconfig [--level levels] name <on|off|reset>

donde indicaremos el nivel de ejecucin el nombre del servicio y lo que queremos hacer con l.

3.7. Cierre del Sistema

Y a sabemos como se inicia un sistema UNIX, nos queda ver, para concluir este captulo, como se cierra y como podemos cambiar el nivel
de ejecucin.

Para apagar un sistema Red Hat LINUX (en general cualquier sistema UNIX), hay que ejecutar el comando shutdown, jams deberemos
apagar el sistema directamente como si se tratara de un sistema MS-DOS, esto no es una manera aceptable de parar el sistema, ya que corremos
el riesgo de perder informacin de archivos e incluso estropear algunos discos viejos sin autoaparque, adems de la seguridad de perder tiempo
en la inicializacin posterior del sistema, que ser mucho ms lenta debido al obligatorio chequeo del sistema de ficheros. Pero existen otras
formas para realizar esta parada que podemos describir aqu:

 Usando shutdown. Es la forma ortodoxa de parar un sistema. Podemos encontrar ms detalles en las pginas de manual de
shutdown, ya que es un comando que depende en alguna medida del tipo de UNIX que tenemos, incluso su ubicacin (en Red Hat est
en /sbin), pero bsicamente lo que har es parar el sistema en algn periodo de tiempo (puede ser inmediato), mientras tanto podr
mandar mensajes de advertencia a los usuarios que estn conectados. Ambos parmetros se pueden especificar.
La parada la efectuar enviando seales de tipo SIGTERM a los procesos que se estn ejecutando (lo que les permite salir de un modo
seguro) y cambiado a init de nivel de ejecucin: 0 para parar el sistema, 6 para rebotarlo o 1 para pasar a modo monousuario. Esto se
consigue con las opciones -h, -r y (sin opciones). Existen otras opciones menos usados como -a (para permitir que slo usuarios dados
en /etc/shutdown.allow puedan echar el sistema abajo), -f para chequear el sistema de ficheros con fsck, -c para cancelar
un shutdown en espera o -k para mandar slo el mensaje a todos los usuarios pero no pararlo. Las opciones en general son:

shutdown [-t sec] [-arkhncfF] time [warning-message]

 Usando los comandos BSD reboot y halt. Son equivalentes a shutdown -r now y shutdown -h now. Es una mala
costumbre utilizarlos, ya que no todos los sistemas operativos tipo LINUX y similares soportan esta caracterstica.

 Mandando al proceso init una seal de tipo TERM. El resultado de enviar a init esta seal suele ser impredecible y un poco sucio.
Normalmente init reacciona matando todos los procesos de usuario, los demonios, los getty y poniendo el sistema en modo monousuario.

 Cambiando de nivel de ejecucin. El comando telinit indica al proceso init que cambie de nivel de ejecucin, suele usarse con un
argumento de tipo numrico (nivel de ejecucin) de 0 a 6 o ms brevemente S o s para pasar a modo monousuario. Tambin se le puede
indicar que vuelva a leer el fichero /etc/inittab con la opcin -q. Utilizar esta va no nos ofrecer ningn periodo de espera, ni ningn
mensaje de advertencia, por eso es muchsimo mejor utilizar shutdown iS (en Red Hat simplemente shutdown).

 Matando a init. En la mayora de los computadores esto producir un rebote automtico, incluso en algunos kernel se entrar en
modo pnico. Es tan desaconsejable como apagar el computador.

3.8. Consejos

Para acabar el captulo daremos unos consejos finales que no se debern eludir:
 Utilizar slo root para tareas administrativas, no por defecto. El mismo Linus borr accidentalmente todo el sistema de ficheros por
error, aunque despus pudo recuperar los ficheros uno a uno debido a sus conocimientos del sistema, pero recordar que son miles de
ficheros.

 Tener disponible copias de seguridad. Ver captulo quinto.

 Tener discos de emergencia, al menos uno que incluya el kernel que se est utilizando. Si se puede otro con los ficheros
imprescindibles.

 No apagar el ordenador, usar siempre shutdown.

 No preocuparse por la fragmentacin del disco en LINUX y utilizar sistemas de ficheros de tipo extendido (e2fs).

 Si hay problemas con el arranque, conocer bien las herramientas de chequeo de discos (ver captulo quinto).
4. La Shell

4.1. Shell

La shell es el programa que ms se utiliza en un sistema UNIX, ya que cada vez que se establece una
sesin de trabajo, se ejecuta una shell. Este programa permite la comunicacin con el sistema, dndole
comandos que ejecutar y por ltimo es el que controla el final de la sesin. En el caso de Linux, una vez
arrancado el sistema, tendremos varias consolas disponibles (como seis terminales), accesibles a travs
de la combinacin de teclas alt-F1,..., alt-F6 (en algunos sistemas la combinacin es de tres teclas:
controlalt F1, ... , F6), todas ellas son consolas en modo texto donde se arrancar una shell como las
que vamos a ver. Existe una tercera con F7 que es de tipo grfico.

Las caractersticas principales de la shell son las siguientes:

 Permite el dialogo interactivo entre el usuario y el sistema a travs de una serie de comandos
definidos.
 Permite ejecutar programas en background, es decir, despus de empezar la ejecucin de un
programa, la shell devuelve el control al usuario para que pueda realizar otras tareas. Cuando el
primer programa termina la shell avisa al usuario a travs de un mensaje que aparece en pantalla.
 Permite la redireccin de la entrada y la salida normales por terminal hacia otros dispositivos o
ficheros.
 Permite hacer que la salida de programas pueda servir como entrada de otros programas (pipes) y
as de una manera sencilla construir programas ms complicados.
 Se permite el uso de caracteres comodines para seleccionar uno o ms ficheros.
 Se permite programar la shell para hacer comandos como combinacin de la ejecucin secuencial
de otros comandos, es decir, hacer macros, que en el entorno UNIX se llaman Shell Scripts. Las
estructuras sintcticas que se pueden usar en una macro dependen de la shell que se utilice, en la
C Shell es parecida al lenguaje de programacin C.
 Se permite controlar el funcionamiento (caractersticas) de la shell, a travs de unas variables
definidas en la misma. De esta manera podemos cambiar por ejemplo la forma del prompt o el
camino (pathname) para encontrar ficheros ejecutables.

La utilizacin de la shell como se ha visto es bien sencilla, el sistema pone una pantalla de login (de
entrada de un usuario) pidiendo que se introduzca el nombre del usuario y su palabra de paso (password)
para protegerle de otros usuarios. Una vez que se ha realizado con xito la entrada, se ejecuta una shell
(se puede escoger la shell a ejecutar y adems puede haber varias ejecutndose), que pone el prompt en
la pantalla y espera que se introduzca una lnea de comando, la cual analizar y ejecutar (un programa
es cdigo que reside en un fichero y puede ser ejecutado, un proceso es un ejemplar de un programa
ejecutndose en memoria) en caso de estar correcta o nos devolver un mensaje de error en caso
contrario. En ejecucin normal el control del terminal pertenecer en ese momento al programa que
hemos mandado ejecutar, y cuando termine ste, se devolver el control del terminal a la shell, volviendo
a aparecer el prompt. Cuando queramos terminar la sesin de trabajo deberemos teclear el Control-D o
exit, con lo cual la shell terminar y se volver a pedir el nombre del siguiente usuario.

Actualmente existen dos familias de shell: la bash (Bourne Again Shell) y la tcsh, procedentes de otras
dos clases anteriores: la ksh (David Korn Shell) y la csh (Berkeley UNIX C shell). La primera es ms usual
para trabajos en general y la segunda est ms orientada hacia la programacin de guiones (shell scripts)
(se vern posteriormente), aunque ambas tienen casi todas sus caractersticas comunes (salvo
redireccin, definicin de varibales y startup) ya que proceden de la shell bsica que es la sh, la shell de
Bourne.

Lo que haremos en los siguientes temas es repasar estas caractersticas.

4.2. Comandos

Los comandos que puede ejecutar el sistema siempre tienen la misma estructura por un lado est el
nombre del comando, a continuacin las opciones que modifican la ejecucin del mismo y que empiezan
por el smbolo "-" (en los ejemplos siguientes de color verde), y por ltimo los argumentos necesarios
sobre los que toma o vuelca informacin, normalmente nombres de ficheros (en los ejemplos siguientes
de color azul) .

Los comandos ms utilizados en una sesin normal de trabajo son los que nos permitirn trabajar con
ficheros, directorios y movernos en la estructura jerrquica que hemos visto anteriormente.

Los ms importantes son los siguientes (sin indica sin opciones o sin argumentos):

Manejo de directorios

pwd sin sin pinta directorio de trabajo


$ pwd
/usr/ramon/trabajos
$...

cd sin sin|directorio cambia de directorio (o sin, va la directorio


home)
$ cd ../textos
$...

mkdir sin directorio hace un nuevo directorio


$ mkdir /usr/ramon/graficos
$...

rmdir sin directorio remueve (borra) un directorio


$ rmdir graficos
$...

Manejo de ficheros

cp sin f1 f2 fn directorio copia ficheros origen destino


$ cp origen destino
$ cp f1 f2 f3 graficos
$...

ls -a,c,l,r,s,... sin|directorio lista directorios


$ ls alrt muestra todos los archivos (incluidos los
ocultos) de forma extendida y ordenados por fecha de ltima
modificacin en orden creciente
$...

En este comando el nombre del directorio es opcional y las opciones son: a


para dar todos los ficheros, c para ordenar por fecha, s para mostrar tamao, r
para invertir el orden de salida y l para dar formato largo a la salida del
directorio, esta opcin se usa tanto que hay una orden que sustituye a ls -l y es
ll. En Linux incluso se pueden presentar los distintos tipos de ficheros por
colores.

$ ll /usr/ramon
total 6
-rw-rw-rw- 1 grupo 7 alumnos 54 Nov 24 11:17 pepe.c
drw-rw-rw- 1 grupo 7 alumnos 654 Jul 01 13:11 ventas
-rw-rw-rw- 2 grupo 7 alumnos 3654 Nov 24 12:17 regis

donde en total nos dice el nmero de bloques de espacio listados (6), despus
en la siguiente lnea y en el primer carcter nos dice el tipo de fichero que es, y
a continuacin los permisos del mismo, el nmero de enlaces, el propietario
del fichero, el grupo al que pertenece, el tamao en bytes, la fecha del ltimo
cambio y por ltimo el nombre del fichero.

cat sin fichero (concatenar) muestra un fichero


$ cat pepe.c
main ()
{
...

more varias ficheros muestra por pginas un fichero


$ pg pepe
$...

tiene su propio lenguaje de comandos, principalmente se puede dar un nmero


positivo (+) o negativo (-) de pantallas para ir hacia adelante o hacia atrs, si
se da el nmero sin signo nos posicionamos en una determinada pantalla, si
pulsamos [enter] avanzamos una pantalla adelante y si pulsamos q nos
saldremos del programa (en algunos sistemas UNIX se utiliza el comando pg
de similares caractersticas).

head varias fichero muestra las primeras lneas de un fichero


$ head pepe.c
main ()
{
...

tail varias fichero muestra las ltimas lneas de un fichero


$ tail pepe.c
...
}
}

mv sin origen destino mueve ficheros a un directorio


f1 f2 fn directorio
$ mv registro almacen
$ mv reg1 reg2 reg3 muestras
$...

ln varias fichero directorio enlaza (link) un fichero a otro virtual


fichero fichero
$ ln /usr/ramon/ventas /usr/ramon/graficos
$...
En este comando la forma de enlazado se puede hacer de dosmaneras: hard,
crea un enlace en el directorio sin crear el fichero enlazado (un mismo fichero
con dos nombres, es decir, comparten el mismo inodo); soft, se crea un fichero
que simplemente guarda informacin sobre como llegar al original. Los
directorios slo se pueden enlazar de esta manera.

rm sin fichero elimina un fichero


rm -r directorio elimina un directorio y sus ficheros
$ rm fich
$ rm -r /usr/ramon/ventas Borra recursivamente sin preguntar
$...

Hay que tener mucho cuidado con este comando, al igual que con rmdir, ya
que en UNIX no existe la orden undelete ni nada parecido y se se borr no se
podr recuperar lo eliminado.

Informacin

Hay un comando muy til en caso de duda y es el que escribe el manual en la pantalla, su
uso es simple:

man [seccion] comando

nos presentar la informacin que hay disponible sobre un determinado comando o


aplicacin. La informacin del manual est dividida en secciones y deberamos saber a que
seccin pertenece lo que intentamos buscar (si es un comando normalmente la 1 que es
tomada por defecto), pero tambin podramos buscar una llamada al sistema (la 2) u otra
entidad del sistema. El comando man nos responder con la primera informacin que
encuentre por seccciones. El formato de salida ser el del comando more, cuya actuacin
es parecida al comando pg. Entre las muchas opciones que tiene, la -k es posiblemente la
ms interesante y en Linux es equivalente al comando apropos que busca el string
indicado en la base de datos de bsqueda del sistema. Hay que destacar que es diferente a
-K que busca el string en todo el manual y puede ser muy lento, como podrs comprobar si
haces:

man -k apropos o man -K apropos

Las secciones del comando residen en el directorio /usr/man y son:

1. Comandos de usuario
2. Llamadas al sistema
3. Funciones y rutinas de librera
4. Configuracin y formato de ficheros
5. Miscelnea
6. Ficheros especiales y hardware
7. Ficheros especiales y hardware
8. Comandos de mantenimiento
9. Drivers
10. ...

Por ltimo y para acabar con este tema, podemos encadenar varios comandos en una sola lnea de
comandos simplemente separndoles con un ;. Tambin se pueden encerrar varios comandos entre
parntesis, en este caso hay que tener en cuenta que su ejecucin se realizar dentro de una subshell, si
se quisiera ejecutar la lista de comandos dentro de la misma shell se utilizaran las llaves con ; como
terminacin interior (es importante el espacio):

(cd; pwd) ; pwd pintar el directorio home, y despus el actual, dejndonos en


l.
cd ; pwd ; pwd pintar dos veces el directorio home y se quedar en l.
{ cd; pwd;} ; pwd equivalente al anterior

Existen otras variantes de cadenas de ejecucin, pero en este caso condicionales. Cada vez que se
ejecuta un proceso, devuelve a la shell un valor lgico (exit status) que la indica si este proceso se ha
ejecutado bien o no. El status valdr cero (al contrario que en lenguaje C) cuando el comando se haya
ejecutado con xito. Se puede utilizar este valor para encadenar la ejecucin de varios comandos de
forma condicional, de tal manera que si se ha ejecutado el primero, se ejecute el segundo o no. Para ello
existen dos operadores principales: el AND, &&, y el OR, || :

comando1 && comando2 se ejecutar el 2 si el 1 es correcto (status 0)


comando1 || comando2 se ejecutar el 2 si el 1 es no correcto (status <> 0)

4.3. Comodines

U na caracterstica que est en otros sistemas operativos es la posibilidad de utilizar caracteres


especiales que sirven de comodines (Pattern Matching) para referenciar un grupo de ficheros.

En UNIX (en la shell) existen dos caracteres especiales el "*" que sirve para sustituir a una
secuencia de 0 ms caracteres y el "?" que slo sustituye uno. A diferencia de otros
sistemas operativos el punto en un nombre de un fichero no acta como un carcter especial
separando nombre y extensin, sino que forma parte del nombre completo, por lo cual el "*"
tambin lo sustituye.

Algunos ejemplos de utilizacin son:

rm * borrar el directorio actual.


rm pep* borrar todos los ficheros que sean o empiecen por pep
rm reg? borrar los ficheros reg1, reg2 y reg3, pero no reg12

Hay una modificacin del "?" y es cuando se especifican entre corchetes los caracteres que se van a
sustituir, as:

rm reg[12] slo borrar los ficheros reg1 y reg2

Tambin se pueden utilizar otros caracteres especiales: {} para replicar (expansin) un grupo de nombres
encerrados entre las llaves y separados por comas:

a{b,c,d}e se referir a abe, ace y ade

Adems en la tcsh existe el caracter ^ ( 94) para negar cualquier seleccin hecha con los comodines. Por
ejemplo, si tengo los ficheros bang, crash, cruch, y out, ls ^cr* dar como resultado bang out.

Otro caracter comn a ambas shell es la tilde: ~ (126) -en el teclado de un PC se puede obtener con alt
126-. Este caracter sustituye al directorio home.

Por ltimo, existe un carcter especial ms que es el \, que antepuesto, sirve para interpretar
literalmente (quoting) algn carcter especial como puede ser un comodn o un espacio. Esto es til
cuando por error (por estupidez o capricho) hemos introducido uno de estos caracteres en el nombre de
un archivo he intentamos acceder a l, piensa por ejemplo como podras borrar un fichero que tiene en
medio del nombre el caracter espacio. Al igual que en lenguaje C, tambin existen las secuencias de
escape y tienen aqu el mismo significado.

Consejo: puedes hacer pruebas creando ficheros con el comando touch.

4.4. Redireccion

otra caracterstica importante de las shells del UNIX es la redireccin de los canales de entrada/salida
estndar. Cuando se ejecuta un programa, normalmente la shell le adjudica al proceso tres canales o
ficheros estndar, por un lado un canal de entrada, de donde el programa toma los datos, por otro lado un
canal de salida donde se dejan los resultados, y por ltimo un canal de error que recibir los mensajes de
error que se produzcan durante la ejecucin del proceso. Los dos primeros canales estn asignados
normalmente al terminal donde se trabaja (teclado y pantalla) y el tercero a la pantalla del terminal
(distinto de forma lgica al canal de salida). Estos tres canales tienen 3 descriptores de fichero asignados:
0 para entrada, 1 para salida y 2 para errores.

Desde la lnea de comandos se pueden cambiar estos canales a travs de un proceso que se
llama redireccin y que utiliza dos caracteres especiales el ">" y el "<", el primero para la salida
y el segundo para la entrada, estos smbolos pueden ser precedidos por el descriptor de fichero,
aunque si son los normales (0 y 1) son omitidos, no as el de error.

Si tenemos un programa que nos pide datos desde la lnea de comandos y produce un resultado en la
pantalla podemos hacer que esos datos los tome desde un fichero en vez de escribirlos uno a uno junto
con el comando, para ello utilizaremos la redireccin de entrada:

$ programa < datos

donde datos es un fichero con la informacin necesaria para que el programa funcione. De igual manera
podemos hacer que la salida de ese programa no se pierda en la pantalla, sino que se escriba en un
fichero, entonces tendremos que utilizar la redireccin de salida:

$ programa > salida

e incluso podemos hacer que tome los datos y los saque en dos ficheros a la vez:

$ programa < datos > salida

Tambin podemos hacer que el fichero donde se sacan los datos no se inicialice cada vez que
ejecutamos el programa si no que se aadan los nuevos datos a los antiguos, esto se consigue con ">>":

$ programa >> salida

Y como hemos dicho la equivalencia entre un fichero y un dispositivo en UNIX es total, por lo que
podemos redirigir la entrada o la salida hacia un dispositivo:

$ programa > /dev/lp

Tambin se puede redirigir la salida de error con "2>":


$ cat pepe 2> juan

de tal manera que si no existe el archivo pepe se escribir el error en el archivo juan.

Tambin se puede hacer que la salida de errores y la normal (o viceversa) vayan hacia el mismo canal.
Para ello existe la combinacin &> o >&, aunque se recomienda la primera forma. En el primer caso
(salida normal desviada a errores) deberamos usar 1&>2, en el segundo caso 2&>1.

Es conveniente saber que las redirecciones que hemos utilizado aqu son para las shell derivadas de sh
directamente: ksh y bash. Para la tcsh tambin sirven con dos salvedades: que no se usan los
descriptores de ficheros, lo que implica que la salida de errores se redirecciona con ">&"; y que la salida
normal y la de errores no se pueden usar simultneamente, con lo cual tenemos que utilizar la ejecucin
en una subshell para corregirlo:

$ (programa > salida ) >& error

4.5. Canalizacin

L a canalizacin est relacionada con la comunicacin entre procesos y aunque se utilice tambin en la
lnea de comandos y junto con la redireccin, no tiene nada que ver con sta. La canalizacin consiste en
transmitir datos directamente de un proceso (comando) a otro, de tal manera que si un comando va a
producir una salida que puede servir como entrada de otro comando, esto se pueda hacer directamente a
travs de la utilizacin del smbolo "|" (pipeline) que comunica dos comandos. Tcnicamente hace una
pipe (tubera) entre ellos y no a travs de un fichero temporal y dos ejecuciones. Adems no hay lmite
entre el nmero de procesos que se pueden encadenar:

$ programa1 < entrada | programa2 | programa3 > salida

Existe un comando especial tee que divide la salida de otro programa (su entrada) en dos, una de las
cuales puede dirigirse hacia un fichero y otra encadenarse en la pipeline hacia otro comando:

$ programa1 | tee fichero | programa2

Tambin podemos encadenar comandos a listas de comandos como se ha hecho en los dos ejemplos
siguientes:

echo hola|{ write rafa||mail rafa;} Manda hola a un usuario o bien por
pantalla si est en el sistema o bien por mail.
cat fichero|write usuario&&echo funciono Manda un fichero por pantalla a un
usuario y pone funciono slo si realmente funcion.
4.6. Background

Hay dos formas de ejecutar un programa/comando una es la usual "foreground" y la otra es en


background. En la primera el programa una vez ejecutado toma el control de la entrada/salida, en la
segunda el control del terminal vuelve a la shell desde donde hemos ejecutado el comando (hay que tener
en cuenta que las salidas del programa se podrn mezclar en el terminal con el prompt y lo que
escribamos a la shell). Para realizar la ejecucin de esta manera basta con poner un "&" detrs del
comando:

$ programa > salida &

Cuando se ejecutan varios procesos en background se puede ver si realmente se estn ejecutando con el
comando ps (status de proceso) que no tiene argumentos y en el cual las opciones nos dicen que
procesos representar (todos los del sistema, los de un usuario, etc.) y su formato. La forma ms normal
es:

$ ps
PID TT TIME COMMAND
3243 30 0:11 ksh
3254 30 0:01 ps

la informacin que aparece se refiere a la identificacin del proceso (PID), al nmero de terminal, al
tiempo empleado en la ejecucin y al nombre del proceso.

El directorio /proc (pseudo sistema de ficheros de slo lectura) hace de interfase (la veremos
posteriormente en el captulo de recursos) con el ncleo del sistema (ms informacin con man proc).
En l aparecen una serie de "directorios" con nombre numrico (PID) que corresponden a los procesos
activos en ese momento en el sistema. En estos directorios podemos encontrar toda la informacin
necesaria para describir un proceso, como por ejemplo los ficheros que tiene abiertos (fd), el mapa de
memoria (maps), o el estado del mismo (status).

Otra forma de ver la jerarqua de los procesos es el comando pstree que nos da una imagen en forma
de rbol de los procesos que se estn ejecutando actualmente.

Conociendo el PID (nmero) de un proceso siempre lo podemos abortar con el comando kill, al cual
daremos como argumento ese PID. En Linux muchas veces resulta ms cmodo dar el nombre del
proceso (o procesos si tienen el mismo nombre como a.out) que queremos eliminar, esto se puede
hacer con el comando killall. En ambos casos los comandos pueden tomar una opcin numrica que
es la seal (evento del sistema) que queremos enviar, en el caso de no poner nada la seal enviada es la
nmero 15. Los procesos pueden estar protegidos contra la recepcin de seales, en ese caso el
comando kill no les afectara. Por seguridad hay una seal que nunca puede ser evitada que es la nmero
9. Por eso en muchos casos se usa:

$ kill -9 12038 o $killall -9 proceso

Los procesos son generales al sistema, pero la shell permite tratar a los procesos creados en una sesin
de una forma ms sencilla, son los jobs. No hay que pensar que los jobs son diferentes a los procesos,
simplemente es una forma ms sencilla de utilizarlos y no tener en cuenta el resto de procesos creados
en el sistema. De esta manera nosotros podemos suspender un proceso que se est ejecutando con la
pulsacin de ctrl-z (no confundir con ejecucin en background, en sta el proceso se est realmente
ejecutando en otro plano) y al tener el control de la shell de nuevo, mandar un nuevo proceso a ejecutar.
Para ver la lista de procesos de la sesin, jobs, tenemos en comando del mismo nombre jobs, que nos
dar una lista de los mismos entre corchetes:

$ jobs
[1]+ Running ls --color=tty -lR / &

Para ejecutarles slo tenemos que utilizar los comandos fg y bg, que ponen respectivamente al job en
ejecucin foreground o background.

Tambin existen comandos especficos para ejecutar en background un proceso o bien a una
determinada hora o bien cuando el sistema tenga tiempo de CPU libre, estos comandos son at y batch
(primitivo sistema de colas) de los que se puede encontrar ms informacin en el manual. Siempre se
puede ver la cola de procesos ejecutados con at con atq y tambin se pueden borrar con atrm. No todos
los usuarios tienen el privilegio de poder ejecutar programas con at.

Por ltimo en algunas ocasiones nos interesa mantener un trabajo despus de acabar la sesin de trabajo
(obviamente no puede tener ni entradas ni salidas), esto normalmente no es posible ya que la shell
manda la seal de SIGHUP para terminar con todos los procesos. Esto se puede evitar si ejecutamos un
comando antecedindole nohup:

$ nohup ls -R /

4.7. Variables

O tra caracterstica potente de las shell es la definicin de variables que servir, primero para guardar
datos y despus para modificar su comportamiento. Esto se hace o bien a travs de la creacin de
variables de shell del usuario, o bien modificando el valor de las definidas por la propia shell.

La definicin de las variables depende del tipo de shell. En el caso de tener la shell bash se utiliza su
nombre seguido de "=" y el nuevo valor. Hay que recordar que en UNIX es distinto una letra mayscula
que una minscula y que las variables se suelen poner en maysculas. Una vez definida la variable, se
podr utilizar en cualquier comando del sistema simplemente anteponiendo a su nombre el carcter $.
Por ejemplo:

$ DIRECTORIO=/home/pepe/proyecto/sesion/trabajo/grupo Definicin
$ echo $DIRECTORIO Uso

En cuanto a las variables definidas por la shell, las ms usadas son (hacer man bash para ver todas):

PATH Donde se guardan los directorios donde se pueden encontrar


ficheros ejecutables.
HOME E l directorio de trabajo (home) del usuario.
PS1 El string que se utiliza como prompt ($).
PWD El directorio donde estamos.

En el primer caso la definicin de la variables ser el conjunto de directorios donde la shell va a buscar
ejecutables (en otros directorios no se podr ejecutar nada) separados por ":" . Si hacemos echo $PATH
se podra obtener algo parecido a :

/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:$HOME/bin
La segunda variable se puede usar como hemos visto para obtener el directotio home de un usuario. En
el tercer caso se puede usar como valor un string y alguno de los modificadores que existen (hacer man
bash para ver todos). Los modificadores ms importantes son:

\d La fecha.
\H El nombre de mquina.
\j El nmero de jobs.
\s El nombre de la shell.
\t La hora.
\u El usuario.
\w El directorio actual.
\! El nmero del comando dentro de la historia de comandos.
\# El nmero de comando.
\$ Ser $ en caso de usuario normalo # en caso de root.

un caso habitual puede ser: [\u@\h \W]\$.

Debemos tener en cuenta que la definicin de una variable slo tiene efecto en esa sesin de shell, si
queremos que sirva para posteriores sesiones (variables de entorno o environment variables) hay que
utilizar el comando export (realmente es un comando interno [built-in] de la shell). Esto es importante en
el siguiente apartado en que veremos que es una macro, ya que las macros se ejecutan en una subshell.
El entorno definido (conjunto de variables exportadas) se pasa tambin a cualquier programa ejecutado
desde la shell en el tercer argumento de main (en el caso de lenguaje C).

Otro comando interesante es el set nos pondr en pantalla las variables que tenemos asignadas (si slo
queremos conocer una podremos hacer echo $variable). Su contrapartida est en unset que borra
una variable. Servirn tanto para la shell bash como para la tcsh, en el caso de esta ltima, que
veremos a continuacin, tambin existe el comando setenv para ver las variables de entorno.

La shell tcsh

En las shell derivadas de la c, como la tcsh, se utiliza este mismo comando set para definir las variables
(con la opcin -r se definen constantes y no variables). La forma usual de hacerlo es con el nombre de la
variable seguida de "=" y del valor (si es una sola palabra). Si el valor fuera de varias palabras se utilizan
los parntesis y para el prompt el apstrofe:

$ set variable=valor
$ set path=($path . $/home/bin)
$ set path=(/usr/local/bin /bin /usr/bin .)
$ set prompt='%/ %M %n %# hola '

El ltimo pondr el directorio, el host, el usuario, el >, y el string hola. Ms modificadores de prompt se
pueden ver al hacer man tcsh.

Si al usar el set el valor es nulo servir para borrarla, en ambas shell se puede usar el comando unset
para borrar una variable. Como en el caso de la bash (sh), slo valen para una nica sesin, si queremos
exportarlas tendremos que usar en este caso el comando setenv en vez de set, ya que export no
existe.

4.8. Macros
U n aspecto importante de las shell de UNIX y esencial en la administracin de sistemas, es que se
pueden programar y hacer macrocomandos compuestos de la ejecucin secuencial de otros comandos
ms simples. Es lo que se llama en UNIX shell scripts (guin) o normalmente macros. Esta caracterstica
es muy til cuando se utiliza a menudo una secuencia de comandos, ya que nos permitir repetirla
fcilmente con un slo nombre.

Bsicamente, un macrocomando es un fichero de texto que tiene el atributo de ejecutable (o puede ser
ejecutado con sh macro) y en el que hemos escrito una serie de comandos que queremos ejecutar
secuencialmente, incluyendo redireccin, canalizacin y background. Pero la estructura de los
macrocomandos puede llegar a la misma complejidad que la de un programa de C, de hecho dentro de
un macrocomando se pueden utilizar las mismas estructuras de control que en un programa y tambin se
puede hacer uso de variables, tanto definidas por el usuario como por la propia shell.

Una vez escrita la macro con el editor de textos, podremos ejecutarla, para ello tendremos que arrancar
una minishell (bourne) a la que le damos el nombre del script:

sh macro

El comando sh nos crear otra shell que ejecutar la macro de tal manera que cuando termine sta,
tambin terminar la nueva sub shell. Otra forma de ejecutarla es cambiando el modo del fichero
hacindolo ejecutable como se ver en el siguiente captulo.

Adems una macro puede recibir datos desde el exterior en la propia lnea de comandos, estos datos son
conocidos como argumentos posicionales y pueden ser usados dentro de la macro antecediendo su
posicin con el smbolo $ (ya que realmente son variables), de tal manera que $0 es el nombre de la
macro, $1 el primer argumento, etc. No es usual poner ms de 10 argumentos, aunque si se diera el
caso, se podran tomar con el comando interno shift.

Las variables ms comunes son (antecedindolas el $ para obtener su valor):

$1 a 9 Variables de parmetros posicionales.


$0 El nombre de la propia macro.
$# El nmero de argumentos dados.
$? El cdigo exit del ltimo comando ejecutado, cuando se ha
ejecutado sin errores valdr 0.
$! El identificador de PID del ltimo proceso ejecutado.
$$ El identificador del proceso.
$* Un string conteniendo todos los parmetros pasados empezando
en $1.

Esto se ha utilizado algunas veces para redefinir comandos de otros sistemas operativos como comandos
de UNIX. Por ejemplo, podramos hacernos nuestro propio dir del MS-DOS escribiendo un fichero de
texto que se llamara dir, que se ejecutara como dir directorio y que contuviera :

ls -l $1

En este caso $0 sera el propio nombre de la macro:dir, y $1 el primer argumento: directorio. De


todos modos en la prctica no se usan las macros para este menester, ya que tenemos el comando
interno alias, que permite realizarlo ms simplemente:

$ alias cd.. = cd ..
$ alias dir = ls l

en estos dos ejemplos hemos redefinido el comando ls como dir y hemos evitado un error frecuente
que se comete al no dejar espacio entre cd y el directorio "..". Si quisieramos eliminarlos utilizaramos el
comando interno de la shell unalias.

Las variables (informacin del exterior) tambin se pueden leer del teclado. Para ello se usa el comando
interno read (si hacis un man de read os daris cuenta de la importancia de poner la seccin adecuada
en el man, ya que existen dos, el perteneciente a la shell y la llamada al sistema read). El siguiente
ejemplo nos demuestra como crear variables y utilizar comandos dentro de una macro (un # indica que la
lnea es un comentario):

# Esta macro usa variables y los comandos echo y read


echo "Por favor entra tu apellido"
echo seguido de tu nombre:
read nombre1 nombre2
echo "Bienvenido a UNICAN $nombre2 $nombre1"

El comando echo (el mismo que el del tema anterior) sirve para poner un mensaje en pantalla, tanto con
comillas como sin ellas, read leer desde teclado los valores de variables, en este caso nombre1 y
nombre2 y por ltimo se pintarn estos valores usando el $ delante de la variable.

Si un comando necesita en una macro unas cuantas lneas de texto se utilizan los documentos here que
comienzan por <<- identificador y acaban en identificador, para ms detalles man bash.

En algunos casos se suele utilizar una lnea de comienzo especial que indica con que programa se tiene
que ejecutar la macro, as, podramos haber comenzado el script con la lnea:

#! /bin/sh

que es la shell por defecto. Como prueba cambia este comando por el cat y mira que ocurre.

Lo que hemos visto hasta ahora hara las veces (en un programa) de declaracin de varibales y
entrada/salida, pero como hemos dicho, en una macro se pueden utilizar instrucciones de control de flujo
como seleccin e iteracin. El primer paso para hacerlo es poder construir expresiones condicionales y
lgicas, para ello tenemos el comando test (los valores de las expresiones condicionales son contrarios
a los del lenguaje C, en este caso 0 es TRUE y distinto de 0 es FALSE, esto es debido a que cuando un
programa funciona bien devuelve un valor de exit de 0 que puede ser obtenido con la variable $?). test
adopta la forma de cualquier comando: el nombre las opciones y los argumentos (ms informacin puede
encontrarse con man test), precisamente las opciones nos dirn lo que tenemos que comprobar (test).
En lo que se refiere a ficheros como argumentos, las principales opciones son: -e para existencia, -d para
directorio y -f para fichero regular.

test -e $fichero Comprueba si el fichero $fichero (variable) existe o no.

En la mayora de las shell modernas, en una macro en vez de utilizar test se puede usar [ ]; que es
equivalente: [ -e fichero];. Tambin admite argumentos de tipo expresin lgica realizando entre
ellos operaciones lgicas: AND (-a) y OR (-o), string y enteros sobre los que puede establecer
comparaciones. Adems si usamos la tcsh (es la nica ventaja de usar esta shell), en las expresiones
tambin se pueden utilizar los mismos operadores lgicos que en el lenguaje C e incluso se pueden
utilizar operadores aritmticos. Los ms importantes son:

== != <= >= < > || && ! | & ^ ~ >> << + * - / % ( )

Las expresiones construidas con test (o la ejecucin de cualquier comando que como hemos visto
tambin es una expresin lgica) son utilizadas para cambiar el flujo de control de la macro, la orden ms
bsica es:

if expresion
then ordenes
fi

Un ejemplo de utilizacin sera:

if test ! -f $FICHERO
then
if test "$MENSAJE" = "si"
then
echo "$FICHERO no existe"
fi
fi
En este caso estamos usando el comando test combinado con la sentencia if (terminado con fi).
Como hemos dicho, al igual que utilizamos estas sentencias en C tambin las podemos utilizar en las
macros, en el ejemplo anterior miramos si el fichero dado por la variable FICHERO existe y es regular, si
no existe comprobamos si la variable MENSAJE est puesta a si entonces pintaremos un mensaje
(observar que hemos utilizado el operador = del comando test).

Tambin existe la combinacin de la sentencia if con la else, al igual que estas estructuras se pueden
anidar (else if o su contraccin elif) su estructura sera:

if test
then
comandos (if condicin es true)
else
comandos (if condicin es false)
fi

Se pueden hacer comprobaciones ms complejas utilizando los comandos existentes en la shell de Unix,
ya que sabemos que la ejecucin de un comando devuelve un cdigo exit:

if who | grep -s pepe > /dev/null


then
echo pepe esta en el sistema
else
echo no esta
fi

En este caso utilizamos el comando who (del ambiente multiusuario) combinado con el comando de
bsqueda grep para saber si un usuario est en el sistema, la opcin -s indica que no se presenten
mensajes de error y la salida estndar se desva a nada para que no aparezca en pantalla.

Existe tambin la construccin case, que compara una palabra dada con los patrones de la sentencia,
como siempre termina con la sentencia inversa esac:

case palabra in
patron1) comando(s)
;;
patron2) comando(s)
;;
patronN) comando(s)
;;
esac

Igual que existen sentencias condicionales, tambin existen sentencias iterativas, la primera de ellas es la
sentencia for que utiliza una variable de indice que se puede mover entre los valores de una lista de
valores, por ejemplo $* (todos los argumentos posicionales) que ser tomado por defecto. La estructura
es:

for var in lista de palabras


do
comandos
done

Un ejemplo de utilizacin del bucle for se ve a continuacin, donde pasamos a una macro una serie de
nombres de usuarios para saber si estn en el sistema o no estn:

for i in $*
do
if who | grep $i > /dev/null
then
echo $i esta en el sistema
else
echo $i no esta
fi
done

Otros tipos de bucle son el while y el until cuyo significado es claro y cuya estructura aparece a
continuacin.

while lista de comandos until lista de comandos


do do
comandos comandos
done done

En el siguiente ejemplo podemos esperar a que un usuario salga del sistema (sleep 60 parar la
ejecucin durante un minuto):

while who |grep $1 >/dev/null


do
sleep 60
done
echo "$1 se ha ido"

Arranque (start up) de una shell

Cuando hacemos definiciones de variables o cambios de las existentes y queremos que siempre estn
presentes en cualquier sesin de trabajo que establezcamos, deberemos definirlas y exportarlas en
ficheros especiales (estn ocultos ya que empiezan por ".") de definicin de shell. Estos ficheros no son
ms que macros que se ejecutan en el inicio de la sesin y que por lo tanto tambin pueden ejecutar
comandos como por ejemplo alias. La nica dificultad es que cada tipo de shell (incluidos los entornos
grficos) tiene sus propios ficheros de arranque. Los que nosotros tenemos presentes estn en el
directorio de trabajo: $HOME y se pueden ver con:

ls -a $HOME

Una de las macros tpica es .profile , que en el caso de la shell bash se llama .bash_profile. Cada
vez que abramos una sesin de trabajo, la shell ejecutar este fichero y despus nos devolver el prompt.
En este fichero se suelen poner configuraciones del terminal que estamos usando, por ejemplo: stty erase
^h o definiciones de variables de la shell como PS1 o PATH.

En el caso de la tcsh habr que colocar la definicin en el fichero .cshrc (.tcshrc) o .login. La
diferencia entre ellos es que el fichero .login no es ejecutado por la shell cuando no se produce un
procesos de login, por ejemplo con el comando su.

Otras programas de creacin de "macros"

Cuando el trabajo que debe realizar la macro (script) se hace ms complejo, las herramientas disponibles
en la shell se quedan cortas, por eso existen comandos avanzados como el awk (de los apellidos de los
autores Aho, Weinberger y Kernighan -gawk en su versin GNU-) que bsicamente realizan bsquedas
en ficheros y procesan patrones a travs de expresiones regulares. Las expresiones regulares se utilizan
en ms programas como el editor vi (ver apartado 5.2), el comando grep (apartado 5.3) o incluso otros
intrpretes de comandos como el sed. Su uso sera:

awk programa fichero

donde programa contendra las expresiones regulares y patrones a buscar en fichero. Queda fuera de
una asignatura bsica explicar su funcionamiento (aunque no es muy complejo) pero como muestra valga
un botn, supongamos que tenemos un fichero organizado en 6 columnas donde la primera columna es
un producto, la segunda su precio, y de la tercera a la sexta las ventas trimestrales. Quremoa aadir al
fichero dos columnas ms con las ventas totales del ao y el importe. En este caso programa tendra este
aspecto:

{total=$3+$4+$5+$6; print $0, total, total*$2}

que se ejecutar en dos etapas (;) en la primera se calcula el total y en la segunda se pone la lnea
original ($0) seguida de las dos nuevas columnas.
Tambin han surgido nuevos lenguajes interpretados ms potentes que estos comandos entre los que
cabe destacar perl (Practical Extraction and Report Language -http://www.perl.org/-) y phyton
(http://www.python.org/), ms sencillo y claro que el anterior y a caballo entre un lenguaje interpretado tipo
perl y un lenguaje de medio nivel como C o Java. El que os escribe es un odiador nato de perl a pesar de
que reconozco que es muy potente, pero como dicen del UNIX, si un chimpanc se pusiera delante de un
teclado lo primero que escribira sera una lnea de Perl.

4.9. Edicin

La principal ventaja de las nuevas shell frente a la clsica sh (Bourne) es fundamentalmente la


posibilidad de editar la lnea de comandos. Es decir, tener almacenadas todas las rdenes escritas
(history) y poderlas recuperar y editar fcilmente (en la bash se pueden ver con el comando interno
history, y hay dos variables que controlan por un lado el nmero de rdenes y por otro lado donde:
HISTSIZE y HISTFILE). En el caso de un PC, las lneas de comando anteriormente ejecutadas pueden
ser editadas a travs de las teclas de flechas del teclado. Normalmente tambin se sigue una
nomenclatura de desplazamiento similar al editor de textos que exista definido para el usuario,
normalmente el vi o el emacs:

^F mueve al siguiente carcter ^A mueve al comienzo


de lnea
^B mueve al carcter anterior ^E mueve al final de
lnea
^D borra carcter Delete borra
carcter a la izquierda
^K borra hasta el final de la lnea ^Y undelete

Tambin la shell puede completar la lnea de edicin actual utilizando la tecla tabulador, para ello se
tiene en cuenta la fraccin de la lnea editada. As, si la pulsamos al teclear un comando la shell nos lo
completar con el comando que empiece con lo que hasta el momento hemos pulsado, o si estamos
utilizando el nombre de un fichero o directorio, con su nombre. Si existe algn tipo de ambigedad, la
shell pitar y presentar en pantalla las posibilidades, a lo cual el usuario responder con la pulsacin de
algn carcter que resuelva la ambigedad.

Otra posibilidad muy til es la expansin del history, de tal manera que si queremos repetir y/o modificar
alguna orden introducida, teclearemos el expansor "!" seguido del comienzo de la orden, la shell nos
pondr automticamente (lo ltimo en el history que coincida) lo que va a ejecutar y despus de un
lapso breve lo ejecutar. As,

$!man b

ejecutar man bash si es lo ltimo que empieza por man b.

En el caso de la tcsh, el comportamiento puede ser modificado a travs de los valores de las variables
de la shell relacionadas: autolist y fignore. Con la primera nos pondr la lista de posibilidades
automticamente, con la segunda se pueden ignorar algunas terminaciones de ficheros en esa lista.
Tambin a travs de la variable correct se puede activar el servicio de autocorreccin para que la shell
compruebe la correccin del comando editado automticamente. Si hay algn error, la shell nos
propondr la versin correcta, a lo cual nosotros responderemos con y, n, e o a, para decir si estamos o
no de acuerdo, para dejar la que estaba, o para abortar. El conjunto de variables, as como cualquier
ampliacin, se puede ver con man tcsh.
5. Uso de la Shell

5.1. Multiusuario

Como se ha dicho, el sistema UNIX es multiusuario y multiproceso, esto significa que varios usuarios
pueden estar ejecutando varios procesos a la vez. Para poder hacer esto, el sistema tiene que tener unas
determinadas caractersticas:

 Sistema de seguridad de acceso. Se debe garantizar que un usuario tiene a salvo su trabajo libre
de accesos no permitidos. En el caso del sistema UNIX a travs de un password (ver captulo de
gestin de usuarios).
 Seguridad de ficheros. Se debe garantizar que los usuarios no accedan y por tanto cambien o
destruyan ficheros del sistema o de otros usuarios. En UNIX se utilizan tres tipos de permisos y
tres modos de acceso que se vern posteriormente.
 Comparticin de recursos. Los recursos comunes deben ser repartidos equitativamente entre todos
los usuarios (ver captulo de gestin de recursos). En el UNIX se utilizan sistemas de spooling.
 Control de recursos. Tambin se debe llevar la cuenta de los gastos de los distintos usuarios (uso
de CPU, papel, etc.). Se llama accounting.
 Administracin de sistemas. El sistema debe garantizar mecanismos para hacer backups de los
trabajos de los usuarios y la posible recuperacin de errores (ver captulo de gestin de ficheros).

Como hemos dicho, la seguridad del sistema se lleva a cabo en dos niveles, por un lado pidiendo el
password al usuario, y por otro lado y una vez dentro del sistema, no permitiendo el acceso a ficheros no
autorizados. El password es una palabra secreta que slo conoce el propietario de la misma y que debe
introducir en el sistema cuando entra al mismo. Para proteger el secreto cuando se introduce esta
palabra, el terminal se pone en blanco de tal manera que los caracteres introducidos no se vean
reflejados en la pantalla. El usuario siempre puede cambiar su password a travs de un comando del
sistema operativo.

El segundo nivel de seguridad es el acceso a los ficheros. Cada fichero del sistema, incluyendo los
directorios, tienen un usuario propietario y por tanto un grupo (cada usuario pertenece a un grupo). De
esta manera, el acceso al mismo depender de si se es el propietario, de si se es del mismo grupo de
usuarios, o de si se es de otro grupo cualquiera. Y es el propietario del fichero el que puede cambiar estos
tres permisos de entrada.

A la vez existen tres tipos de acceso al fichero: para leerlo (r), para cambiarlo (w), o para ejecutarlo (x);
(en el caso de un directorio hacer un ls, incluir un fichero dentro o hacer un cd a l) pudindose cambiar
estos accesos a cada tipo de usuario. Teniendo en cuenta esto, existen en total 9 permisos que el
propietario del fichero puede cambiar y que se pueden ver al hacer un listado de un directorio en modo
largo, es decir, con la opcin -l (ll):

-rw-rw-rw- 2 grupo 7 alumnos 3654 Nov 24 12:17 fichero


uuugggooo

El primer tro de la izquierda rwx corresponde a los permisos del usuario (uuu), cuando aparezca una letra
significar que se tiene ese permiso y cuando aparezca un "-" que no, los otros dos tros son los del grupo
(ggg) y los de los otros usuarios (ooo). La letra que falta indicar como ya hemos visto el tipo de fichero,
siendo el "-" el correspondiente a un fichero regular y "d" a un directorio.

Los permisos de un determinado fichero se pueden cambiar a travs de la orden chmod (cambio de
modo), que es un poco especial ya que no tiene opciones pero si los permisos que se quieren cambiar, y
toma como argumentos los ficheros o directorios afectados. La forma de poner los permisos se compone
de tres partes, por un lado a que tipo de usuarios afecta el cambio, simbolizados por tres letras: la u para
el usuario, la g para el grupo y la o para los otros usuarios, por otro lado si se da o se quita el permiso,
simbolizado por + -, y por ltimo el tipo de permiso de lectura (r), escritura (w) y ejecucin (x). As, para
quitar los permisos de lectura y escritura a todos menos el propietario del fichero nominas habra que
hacer:
chmod go-rw nominas

Otra forma de utilizar este comando es dando como permiso un nmero octal de tres cifras, donde cada
cifra es un tipo de usuario y donde cada dgito binario del octal es un tipo de permiso, por ejemplo 777
(sera 111 111 111) dara todos los permisos a todo el mundo. Por ejemplo, si quisiramos hacer
ejecutable una macro escrita en un fichero de texto podramos hacerlo de dos formas:

chmod +x macro
chmod 755 macro

Hay que tener en cuenta que el inodo del fichero contiene 12 bits de control de acceso de los cules 9
corresponden a estos permisos. Los otros 3 bits son conocidos como setuid, setgid y sticky. El primero de
ellos servir para que un ejecutable tome como usuario el propietario del ejecutable y no al usuario que lo
ha ejecutado. Por ejemplo el fichero /etc/passwd slo puede ser editado por el root, sin embargo cuando
ejecutamos passwd lo podemos cambiar, esto es debido a que passwd tiene activado el setuid. Lo mismo
el segundo pero para el grupo. El tercer bit (el bit pegajoso) se usa tambin en ejecutable cuando
queremos que permanezcan permanentemente en memoria (lo que querra cualquier virus). Hay que
tener en cuenta que la manipulacin de estos bits es peligrosa ya que ciertos agujeros de seguridad se
basan en su manipulacin.

Por defecto, todos los accesos estn permitidos, a no ser que est definido por el comando umask algn
otro acceso. Este comando toma como argumento una mscara (cdigo de inhibicin) que es restado al
666 (acceso total sin ejecucin ya que los ejecutables lo tienen activado por defecto) cada vez que se
crea un fichero (no aplicable a directorios). Normalmente se ejecuta cuando arranca una shell umask
022 lo que equivale a unos permisos 644 (rw-r--r--).

Otros comandos para manejarse en el sistema multiusuario son:

who para decir que usuarios estn en el sistema.


chown usuario fichero para cambiar el propietario de un fichero.
chgrp grupo fichero para cambiar el grupo propietario de un fichero.
su usuario para cambiar temporalmente de usuario.
login usuario para cambiar de usuario sin retorno.
passwd [usuario] para cambiar el password de un usuario.
write usuario para mandar un mensaje a otro usuario.
mesg y, n para mandar un mensaje a otro usuario.

Los dos ltimos sirven para comunicar usuarios que estn en ese momento en el sistema. Con el primero
conseguiremos que le aparezca en la pantalla del otro usuario el mensaje que le hemos escrito (terminar
en control-d), con el segundo evitaremos que nos aparezcan estos mensajes (mesg n), sobre todo
cuando se edita, ya que puede resultar muy molesto. Existen otras maneras ms sofisticadas de
comunicar usuarios:

 El comando finger usuario@maquina. Nos permite conocer el estado de un usuario en un


sistema determinado. Nos muestra el tiempo que lleva sin conectarse, su fichero .plan, y si tiene
correo sin leer. Es peligroso, por lo que la mayora de sistemas tiene deshabilitado este servicio.
 El comando wall. Permite mandar un mensaje (broadcast) de texto a todos los usuarios
conectados.
 El comando talk usuario@maquina. Como el write, pero permite establecer una
comunicacin completa (similar al IRC).

Hay una excepcin en la utilizacin de los ficheros en los sistemas UNIX, ya que existe un encargado del
mismo que tiene privilegios sobre el resto de los usuarios, es el llamado superusuario (en el que nos
convertiremos despus del curso). Por convencin, el nombre del superusuario es root y como este
nombre indica su directorio de trabajo es el directorio raz y tendr los suficientes privilegios como para
acceder a cualquier fichero del sistema.

Por ltimo, para compartir los recursos comunes del sistema entre varios usuarios, en concreto la
impresora, lo que se utiliza es el mecanismo de spooling, de tal manera que cuando varios usuarios
intentan acceder a la impresora a la vez, este mecanismo almacena los requerimientos e impone un
orden de envo a la misma (se forma una cola de impresin).
Para utilizar el spooling existen varios comandos en el UNIX, los ms usados son:

lp ficheros para enviar a la impresora un fichero(s) (lpr en


LINUX).
lpstat para ver la cola de impresin (lpq en LINUX).
cancel trabajo para cancelar un envo anterior (lprm en LINUX).

5.2. Editor vi

En todos los sistemas UNIX y formando parte del mismo como un comando ms, existe una familia de
editores que nos permitirn procesar texto. Esta familia procede del editor ed, que era el editor original del
UNIX, pero que prcticamente ya no se usa.

La familia consta de tres miembros, por un lado el ex que es la versin moderna y mejorada del ed, el
edit que es un subconjunto del ex para principiantes, y el vi, que a diferencia de los otros editores que
eran de lnea, es de pantalla (un editor de lnea slo trabaja con una lnea, por lo que es muy incmodo
de usar, un editor de pantalla nos permite trabajar en todo el texto, aunque slo nos muestra una ventana
del mismo). Este ltimo adems realiza llamadas al ex para realizar determinadas funciones.

En el sistema nos podremos encontar con otros editores como el emacs y tendremos la tentacin de
usarlo, ya que el vi es muy poco amigable o sinceramente desagradable de usar, pero tienen la
desventaja de que es universal y por eso se escoge en este curso.

Funcionamiento
Todos los editores funcionan de igual manera, es decir, a travs de un buffer en memoria. Cuando se lee
un fichero desde el editor, este se carga en memoria en un buffer sobre el cual se hacen las
modificaciones y una vez terminado el trabajo se vuelca el contenido de la memoria en el fichero. Esto
tiene una ventaja y es que si se hace algo mal podemos dejar el trabajo sin salvar (pasar a disco), pero
tambin tiene una gran desventaja, y es que si ocurre una fallo en la corriente o en el sistema, todo el
trabajo realizado sobre la memoria se perder, por eso es muy importante realizar volcados a disco cada
cierto tiempo.

El editor vi tambin trabaja con un buffer en memoria que conviene salvar cada cierto tiempo. Para ello
tendremos que ponerlo en modo comando y hacer ":w", pero qu significa modo comando? El vi tiene
dos modos de trabajo, uno donde introduciremos caracteres que formarn parte del texto y otro donde
esos caracteres son acciones sobre el editor (como veremos ms adelante), pero antes lo tendremos que
arrancar, tomando normalmente como argumento el fichero que queremos editar:

$ vi fichero

si el fichero ya existe, aparecer en pantalla el mismo, si es nuevo aparecer una tilde "~" en las lneas
que estn sin ocupar, en este caso la primera, donde se realizar la escritura del texto.
Cuando ejecutemos el vi nos lo encontraremos en modo comando, con lo cual esperar que le
introduzcamos una orden (carcter) para actuar y pasar a modo texto. Para pasar a modo comando de
nuevo se utiliza un carcter especial que es el de escape (Esc) y que se puede conseguir con la tecla de
escape (arriba a la izquierda del teclado). No hay ningn problema en pulsar varias veces esa tecla, a
parte de un pitido por cada par de pulsaciones. En la pantalla del vi y debido a su universalidad, slo
aparece el texto sobre el que se escribe, por lo que no sabemos (con algn indicativo en pantalla) en que
modo estamos, por lo que se suele pulsar varias veces la tecla escape para garantizar el modo comando,
esto unido a lo anterior, hace de una sesin de varios usuarios de vi, un concierto de pitidos.

Comandos
El vi tiene casi un centenar de comandos, de los que habitualmente slo se utilizan una docena. Estos
comandos se pueden dividir en varios grupos dependiendo de la funcin a realizar.

Movimiento del cursor

Existen ms de 40 comandos de este tipo, pero los principales son cuatro, indicativos de las cuatro
direcciones sobre las que nos podemos mover:

h : izquierda
l : derecha
j : abajo
k : arriba

la direccin a la que apuntan es la misma que la posicin que ocupan en el teclado, restringindose su
movimiento a la zona ocupada por el texto (si intentamos salir de esa zona nos avisar con un pitido).
Tambin se podrn utilizar las flechas del teclado.

Hay que incluir dentro de los comandos de movimiento la combinacin de caracteres avance de lnea (10)
y retorno de carro (13), que se consiguen con la tecla return o enter. Esta servir para dar a una lnea por
concluida y pasar a la siguiente en la primera posicin.

Otros comandos de movimiento menos usados aparecen en la siguiente tabla, donde "^" significa que se
debe pulsar antes del comando la tecla de control (un carcter de control es otro carcter ms):

b : principio palabra (begin)


e : final de la palabra (end)
0 : comienzo de lnea
$ : final de lnea
^d : 12 lneas abajo (down)
^f : 24 lneas abajo (forward)
^u : 12 lneas arriba (up)
^b : 24 lneas arriba (back)
nG : ir a la lnea n (go)
^g : nmero de lnea actual

Entradas a modo texto

Fundamentalmente hay tres comandos para escribir texto, el a para aadir a partir de la posicin del
cursor, el i para insertar delante del cursor y el o, O para aadir una nueva lnea.

a : aadir (append)
i : insertar (insert)
o : abrir debajo una lnea
O : abrir arriba una lnea

Hay que recordar que en todo el entorno Unix las maysculas y las minsculas son diferentes, por eso
tambin existen las variantes A y I, la primera aadir texto al final de la lnea actual y la segunda
insertar texto al comienzo de la misma. Si queremos escribir caracteres especiales antes tendremos que
sealarlos con el carcter ^v.
Borrado y alteracin

Una vez que hayamos escrito algo, ese texto se puede borrar o alterar pasando a modo
comando. Para borrar se utilizan dos comandos fundamentales (y sus variantes) el x y el d.
El x para borrar el carcter sobre el que estamos y el d (que se suele utilizar modificado)
para borrar y pasar a una zona de memoria especial donde se puede recuperar lo borrado.

x : borra un carcter
d : borrar poniendo en el buffer
r : reemplazar un carcter (replace)
R : reemplazar varios caracteres
c : borrar e insertar (change)

El r es el comando de hacer sustituciones de texto, si utilizamos la versin minscula, slo podremos


sustituir un carcter, pasando de nuevo a modo comando, si utilizamos la mayscula nos pondremos
permanentemente en modo sustitucin (hasta que con escape pasemos a modo comando), con lo que
podremos sustituir varios caracteres. El comando c es una combinacin del comando d y el i, primero
borra lo indicado y despus pasa a modo insercin para escribir de nuevo lo borrado.

Deshacer cambios

En caso de error, existe un comando para deshacer los cambios realizados, este es el u (undelete), del
cual hay la versin minscula para deshacer un slo cambio o la mayscula para deshacer todos los de la
lnea.

u : deshacer un cambio (undelete)


U : deshacer todos los cambios de la lnea

Salida

Una vez que hayamos realizado la edicin, normalmente querremos salvar nuestro trabajo en un fichero y
abandonar la edicin. Existen desde el vi varias formas, la ms usual es la que parece a continuacin:

ZZ : salva en el fichero y sale

Separacin y unin de lneas

Hay dos comandos fundamentales para cortar y unir lneas, el primero y obvio es el retorno de carro, el
segundo es J (join), observar que se utiliza la mayscula.

<enter> : separar dos lneas


J : unir dos lneas (join)

Copiado y recuperacin

A parte del fichero y del buffer temporal donde se realiza el trabajo de edicin, hay una serie de buffers
temporales auxiliares donde se colocan los ltimos cambios o borrados que hayamos hecho, y hay una
serie de comandos que nos permiten trabajar con estos buffers para hacer copias de texto.

Hay fundamentalmente tres comandos que nos permiten trabajar con estos buffers, por un lado est el
comando d que ya hemos visto, y con el cual realizamos borrados de texto que colocamos temporalmente
en un buffer. Y por otro lado estn el comando y (yank) y el p (put), el y copia el texto seleccionado y lo
coloca en un buffer, y el p hace lo contrario, coge la informacin del buffer y la coloca en el texto.

y : copiar dejando en el buffer (yank)


p : poner el buffer en el texto despus (put)
P : poner el buffer en el texto antes

Modificadores de comandos
Hay ciertos comandos, sobre todo los del ltimo apartado, que casi nunca se utilizan solos, sino que lo
hacen con sus modificadores. Hay varios tipos:

 Repetir el comando: Esto hace que el comando acte en toda la lnea. As si d borra, dd borra toda
una lnea.
 Poner un nmero delante del comando: Hace que ese comando se repita tantas veces como el
nmero indicado. As, 4dd borrar 4 lneas.
 Alcances: Hay una serie de caracteres que despus de un comando modifican el alcance del
mismo. Estos alcances son:
 e : hasta el final de la palabra.
 w : hasta el comienzo de la siguiente palabra.
 b : hasta el comienzo de la palabra.
 $ : hasta el final de la lnea.
 0 : hasta el comienzo de la lnea.
 ) : hasta el comienzo de la siguiente frase.
 ) : hasta el comienzo de la frase.
 } : hasta el final del prrafo.
 { : hasta el comienzo del prrafo.

As, de borrar hasta el final de la palabra donde est situado el cursor, o d$ borrar hasta el final de la
lnea.

Cualquiera de estos modificadores puede utilizarse conjuntamente con otros, de esta manera 2dw borrar
dos palabras.

Hemos dicho que con estos comandos se utilizan unos buffers especiales donde se colocan los cambios
que estamos realizando, en vi no slo existe un buffer para realizarlos, sino que hay varios que se
nombran con los nmeros y letras del alfabeto, aunque lo normal es utilizar el buffer por defecto.

Para utilizarlos se pone delante del comando unas comillas, el cdigo del buffer, y por ltimo el comando
(incluso con otros modificadores).

As, "c4dd borra cuatro lneas y las coloca en el buffer c. Para recuperar las cuatro lneas borradas
bastara hacer: "cp. Recordad que si no nos interesa lo recuperado, siempre podemos volver atrs con el
comando u. Esta forma de utilizarlo puede servirnos para ir inspeccionando los buffers uno a uno.

Llamadas al editor de lneas ex


El vi est capacitado para utilizar los comandos del editor de lneas ex, de tal manera que tenemos otro
conjunto de comandos a los cuales se accede en modo comando anteponindoles el carcter ":". De echo
se puede pasar de un editor a otro utilizando el comando Q (pasa al ex) y el : (pasa al vi). En muchos
casos estos comandos son tan importantes como los originales del vi.

Adems se pueden utilizar varios comandos juntos como: :r !who que ejecuta el comando who, lo lee, y lo
coloca en el fichero de edicin.

Cabe destacar que los comandos del ex admiten delante de ellos dos nmeros que son el rango de filas
donde actan, as, si escribimos :3,5w fic, estamos haciendo que se escriban las lneas 3, 4 y 5 en el
fichero fic. Lo mismo se puede hacer con :co y :m, para :r slo hace falta poner la lnea detrs de la cual
se colocar el fichero ledo. Para indicar todas las lneas del texto se utiliza la g, que significa que se har
globalmente, esta opcin es muy importante en los comandos que se vern posteriormente.

Los comandos de bsqueda y sustitucin son muy utilizados. Estos se hacen en combinacin con el ex.
Los dos comandos del vi para realizar estas tareas son el / y el ?. El primero busca un patrn hacia
adelante y el segundo hacia atrs. Adems tenemos el comando n que repite la bsqueda. A continuacin
aparece una tabla de los ms utilizados:

Comando Descripcin Ejemplo


:wq Salva el texto en un fichero y sale del editor :wq
:w fichero Escribe el texto en un fichero :w pepe
:q! Sale del editor sin salvar el texto :q!
:r fichero Lee un fichero y lo coloca en el cursor :r pepe
:! comando Ejecuta un comando de la shell desde el editor :! who
:co Copia unas determinadas filas :3,5co7
:m Mueve unas determinadas filas :4,8m9

La estructura de un comando de este tipo es la siguiente:

:direccin/orden/parmetros

donde direccin consta de las lneas donde se debe realizar la accin y el patrn (secuencia de
caracteres) a buscar, orden ser lo que se quiere hacer despus de encontrado el patrn, y parmetros
normalmente el nmero de veces que se quiere realizar la operacin. Veamos unos ejemplos:

:1,7/can /s//perro / Se substituye de la 1 a la 7 can por


perro una vez.
:g/can /s//perro /g En todo el fichero y todas las veces.
:/patrn/s/patrn/nuevo/ Busca patrn y sustituye por nuevo.
:g/p/s/p/n/ Busca p y lo sustituye por n globalmente.

En el primer ejemplo la direccin seran las lneas 1 a 7 y el patrn can , una vez buscado se dice con la
orden s// que se sustituya ese patrn (habra que repetirlo pero por defecto es el mismo, por lo tanto se
escribe //) por el nuevo patrn perro . Si se coloca como parmetro la g se realizar la sustitucin en
todos los encuentros.

Por ltimo hay que decir que desde el vi se pueden editar varios ficheros a la vez (uno detrs de otro),
para ello se deber ejecutar el vi con varios ficheros contiguos: vi f1 f2 f3. Los comandos son:

:e fichero Editar otro fichero.


:n Pasar al siguiente fichero en edicin mltiple.

Opciones del editor


Por ltimo y brevemente, hay que decir que el vi se puede personalizar y ponerle otras opciones como los
espacios por tabulador, o el nmero de columnas de texto. Para ello se utiliza el comando del ex :set.
Las opciones ms comunes son:

ai identar.
ic ignorar maysculas.
nu numerar las lneas.
redraw reescribir.
sw nmero de espacios en ai.
ts nmero de espacios en tab.
w nmero de lneas de texto.
all ver todas las opciones.

Un ejemplo de utilizacin de este comando, y quizs el ms til, sera para poner delante del texto como
referencia en nmero de la lnea:

:set nu
5.3. Bsqueda

E xisten una serie de comandos muy utilizados en la administracin de un sistema, estos comandos los
repasaremos en este tema. Son comandos sencillos de lnea pero que se utilizan frecuentemente para
localizar informacin en el sistema:

El primero de ellos es el comando grep que se utiliza asociado a una canalizacin para localizar un
patrn entre "algo" que produce otro comando, aunque su versin completa aparece a continuacin:

grep [opciones] PATRN [ARCHIVO...]


grep [opciones] [-e PATRN | -f FICHERO] [ARCHIVO...]

que buscar PATRN (normalmente encerrado entre apstrofes) en los ARCHIVOS y producir una lnea
en la pantalla por cada coincidencia. El patrn se puede dar tambin con la opcin -e til cuando ste
empieza por "-". Si el patrn est escrito en un fichero utilizaremos la opcin -f. Otras opciones
interesantes son:

-c En lugar de imprimir por salida estndar las lneas coincidentes, imprime la cantidad de
lneas que coincidieron en cada archivo.
-H Imprimir el nombre del archivo con cada coincidencia.
-r Buscar recursivamente dentro de todos los subdirectorios del directorio actual.
-i Ignora si son maysculas o minsculas.

El patrn de bsqueda normalmente es una palabra o una parte de una palabra, tambin se pueden
utilizar expresiones regulares, para realizar bsquedas ms flexibles.

Ejemplos de uso de este comando son:

ps ef | grep rafa Pintar en pantalla en formato largo los procesos de rafa


grep 'pepe' fichero Pintar las lneas con pepe en el fichero

Otro comando de bsqueda es find. Se utiliza este comando para buscar archivos dentro de una
jerarqua de directorios. La bsqueda, como veremos ms adelante, se puede realizar mediante varios
criterios. La sintaxis de este comando es:

find [camino...] [expresin]

El camino ser donde queremos que empieze la bsqueda y la expresin se conforma de:

- opciones,
- pruebas (test) y
- acciones

y empieza con algunos de los siguientes caracteres: '-', '(', ')', ',', o '!'. La accin por
defecto es la de escribir los resultados por pantalla. Las opciones afectarn normalmente al test (por
ejemplo para medir tiempos, escoger el comienzo del da (-daystart) o utilizar las ltimas 24 horas) y
los test (pruebas) ms frecuentes son:

-atime n Ficheros abiertos exactamente hace n das.


-amin n Ficheros accedidos hace n minutos.
-mtime n Modificados hace n das.
-links n Ficheros con n links.
-newer file Modificados despus del fichero file.
-size n Con tamao exactamente n bloques (bloques de 512
bytes).
-type c Tipo de fichero f=texto, d=directorio, etc.
-name 'patron' Con nombre patron (se pueden usar comodines).
-perm p Con permisos p (en octal).
-user UID Con propietario numrico UID.
-mtime +7 Modificado hace ms de 7 das.
-size -100 Menores de 100 bolques.

Aunque existen muchas ms que se pueden comprobar haciendo un man find. Estos test tambin se
pueden combinar de forma lgica con los operadores AND (-a, -and), OR (-o, -or) y NOT (!, -not), donde el
AND es el que se toma por defecto.

-atime +60 mtime +120 abiertos hace ms de 60 das y


modificados hace ms de 120.
-atime +7 o mtime -10 abiertos hace ms de 7 das o
modificados hace menos de 10.

En cuanto a las acciones se puede decir que escriba los resultados por pantalla o que los muestre de
forma extendida o que ejecute un comando, esto ltimo se consigue con la accin -exec (hay una
versin que pregunta que es -ok) que tiene que estar terminada con los dos caracteres "\;" y donde "{}"
sustituyen a los ficheros encontrados.

busca los ficheros que


find -name 'pep*' -exec cat {} \;
empiecen por pep y los presenta en pantalla

Existen dos comandos ms de bsqueda, el primero de ellos es whereis que localiza donde est un
determinado comando, tanto su cdigo binario (-b), su fuentes (-s) o la pgina del manual (-m).

whereis -b whereis

El ltimo comando que vamos a ver es locate, que es un comando de bsqueda de archivos, bastante
parecido al comando find. La diferencia de locate es que la bsqueda la hace en una base de datos
indexada para aumentar significativamente la velocidad de respuesta. locate realmente no busca en el
disco del sistema, sino en un archivo con la lista de todos los archivos que existen en el GNU/Linux.

5.4. Entorno Grfico

A pesar de que en Linux disponemos de varias consolas de texto virtuales a travs de la pulsacin
conjunta de las teclas de funcin y de alt y control, esto en entornos modernos no es suficiente, por eso el
MIT (Robert Sheifler) dentro del proyecto ATHENA (con la colaboracin de DEC) introdujo un soporte de
entorno grfico de usuarios (GUI) llamado X Window (proviene de un desarrollo anterior conocido como
sistema W) que actualmente es controlado por el X-Consortium de OSF.

Una peculiaridad fundamental del entorno X Window es que est diseado para ofrecer servicios a travs
de red (la informacin se transmite con el protocolo X) siguiendo una arquitectura de tipo cliente/servidor
(en la figura se ven tres computadores, los tres son clientes X, pero slo uno de ellos es el servidor X al
que los tres acceden) por lo tanto un cliente X puede ejecutar una sesin grfica usando un servidor X
remoto, por lo tanto es independiente de la localizacin y de la plataforma (hardware y Sistema
Operativo).
Si un programador quiere crear una aplicacin X deber usar la librera Xlib que nos permite abstraernos
del proticolo X y centrarnos en la aplicacin (creacin de ventanas y primitivas de dibujo). An as est
librera es incmoda de usar por lo que por encima de ella de han creado herramientas que se conocen
como Toolkit (creacin de distintos tipos de ventanas, botones, desplegables, etc.) y que permiten un uso
ms amigable con programacin orientada a objetos, las ms importantes son X Toolkit y OSF / Motif
Toolkit, quizs la ms conocida, aunque es comercial.

Existen multitud de aplicaciones (clientes) X:

 xterm. El emulador de terminal usado por la mayora de las aplicaciones en modo texto dentro de
X.
 xdm. El gestor de sesiones, maneja las entradas al sistema (los login).
 xclock. Un reloj simple
 xcalc. Una calculadora.
 xman. Un lector de pginas de manual para X.
 xload. Un Indicador de carga del sistema.
 xedit. Un editor de textos.
 xset. Cliente para cambiar comportamiento del sistema X.
 xmodmap. Cliente para cambiar el mapa asignado al teclado.
 xlsfonts y xfontsel para ver y escoger las fuentes del sistema.
 xeyes. Aparecen unos ojos vigilando el puntero del ratn.
 xkill. Para terminar un cliente X.
y muchos ms. Pero el cliente X ms importante es el gestor de ventanas (wm). Es el que hace la
comunicacin entre el sistema y el usuario y el que colocar las ventanas X en su lugar, las
redimensionar, permitir su iconizacin y movimiento as como el aspecto de sus marcos. Adems
manejar todos los mens e iconos.

El sistema X en los Linux es el Xfree de tipo GPL, en concreto la versin 11 y la revisin 6 (X11R6). Este
sistema proporciona todas las herramientas bsicas para construir aplicaciones cliente X.

La distribucin estndar XFree86 incluye twm, el clsico controlador de ventanas del MIT, aunque hay
disponibles controladores mucho ms avanzados como Open Look Virtual Window Manager (olvwm) y un
controlador de ventanas muy popular entre los usuarios de Linux, el fvwm. Es un pequeo controlador
que requiere menos de la mitad de la memoria usada por twm. Proporciona aspecto de 3 D para las
ventanas, as como un escritorio virtual si el usuario desplaza el ratn al borde de la pantalla (la pantalla
entera es desplazada como fuese mucho ms grande de lo que realmente es). fvwm es altamente
configurable y permite acceso a todas las funciones tanto desde el teclado como desde el ratn.

Un paso ms adelante sobre el gestor de ventanas es construir un escritorio (desktop) completo, los dos
ms utilizadas actualmente son la KDE y la Gnome. El primero de ellos usa el toolkit Qt y el segundo el
GTK.

Arranque
Antes de usar el sistema X (XFree86), deberemos configurarlo, esto se hace a travs de un fichero de
texto: /etc/X11/XF86Config, pero normalmente antes de proceder a su edicin es ms sencillo utilizar
la herramienta Xconfigurator que a travs de una serie de preguntas lo har por nosotros. Respuestas
tpicas que deberemos conocer es el tipo de driver de pantalla que utilizamos (tarjeta grfica) o tipo de
monitor (frecuencias horizontales y verticales), el ratn se tomar del fichero /etc/sysconfig/mouse.
Si estamos usando un servidor, tambin deberemos dar el tipo de servidor adecuado localizado
en /usr/X11R6/bin/XF86_<server>.

Una vez configurado el Xfree86 procederemos a arrancar la sesin grfica utilizando el comando startx
o alguna de sus variantes X11, o xstart (normalmente hace de interfase entre el usuario y el comando
xinit que es el que realmente arranca el entorno X, es decir, el servidor y los clientes definidos) que
leer la macro /etc/X11/xinit/xinitrc donde se pueden redefinir parmetros de teclado
(xmodmap), clientes para arrancar (xterm,mail,etc..), entorno de ventanas, etc.

Si quisieramos arrancar slo el servidor X deberamos utilizar el comando X. Cuando queramos


abandonar la sesin grfica (volver a la de texto) lo haremos con la combinacin:
CRTL+ALT+BACKSPACE.

Tambin se puede arrancar el sistema con el administrador de pantalla (X display manager) xdm (al haber
escogido el nivel 5 de arranque), en este caso el fichero sera /etc/X11/xdm/Xsession que es similar
a xinitrc. El xdm es una parte suplementaria de sistema X que se encarga del manejo de sesiones y
hara las veces - en trminos de texto - de los demonios getty / login. Por lo tanto se encargar de los
ingresos en el sistema y arrancar un gestor de ventanas que puede ser tambin un escritorio. En este
caso abandonaremos la sesin saliendo de la sesin (o abreviando con CRTL+ALT+BACKSPACE).
Tambin podemos pasarnos a 6 consolas de texto con CTRL+ALT+F1...F6 y regresa al servidor X con
CTRL+ALT+F7.

Una vez arrancado cada servidor ser visto desde el punto de vista del usuario como un nombre
DISPLAY almacenado en una variable de entorno del mismo nombre de la forma a:

hostname:displaynumber.screennumber

donde hostname es el nombre de la mquina que tiene la pantalla, displaynumber es el nmero de


terminal dentro de la mquina (si es un PC o una workstation normalmente slo habr uno empezando
desde cero) y screennumber es el nmero de pantalla (en el caso hipottico y extrao de que varias
pantallas compartan un teclado).
Sesiones remotas
En este entorno y debido a que el sistema X es independiente de la plataforma (hardware y software)
podemos el servidor arrancado en una mquina y el cliente en otra, y bastara con que indicsemos
donde queremos producir la salida utilizando la nomenclatura anterior (definir la variable de shell
DISPLAY).

Por ejemplo si estamos en el computador alfa donde tenemos arrancado el servidor X, podramos
arrancar clientes en otro computador beta y que la salida de estos clientes fuera en el servidor alfa. Para
ello deberamos autorizar el uso a travs del comando xhost de la forma (o denegarle este permiso a
otro hipottico gamma):

$ xhost beta (xhost -gamma)

La forma de arrancar los clientes sera (en este caso los ojos):

$ xeyes -display alfa:0.0&

Y si no quisieramos poner siempre el display definiramos la variable DISPLAY de acuerdo a la shell que
estemos usando:

% setenv DISPLAY alfa:0


$ DISPLAY=alfa:0; export DISPLAY

El arranque de sesiones remotas X puede ser un agujero de seguridad por eso se utilizan servicios de
autentificacin complementarios (basados en "cookies") como xauth.
6. Gestin de Usuarios

6.1. Creacin de Usuarios

El proceso de creacin de usuarios siempre ha sido la tarea ms tediosa para un administrador, ya que
los pasos a realizar eran largos aunque no complicados, bsicamente son:

1. Editar el fichero /etc/passwd.


2. Poner un password inicial.
3. Crear un directorio propio al usuario con los permisos adecuados.

Adems es conveniente hacer:

1. Copiar los ficheros de configuracin al usuario.


2. Poner una cuenta de correo y los directorios asociados.
3. Registrar el grupo del usuario en /etc/group.
4. Servicios de accounting.
5. Recopilar informacin de contacto del usuario.
6. Activar cuotas de disco.
7. Verificar que la cuenta funciona.

Por eso normalmente todos los administradores creaban macros para hacer esta trabajo de una forma
ms o menos automtica. Actualmente, casi todos los sistemas disponen de algn comando que realice
esta tarea, usualmente useradd o adduser, e incluso en Red Hat herramientas grficas como
Linuxconf. Si no disponemos de ellos tendremos que hacer esta labor manualmente.

El primer paso es editar el fichero /etc/passwd (en sistemas BSD se puede utilizar el comandode
edicin vipw). Este fichero contiene, en cada lnea, informacin sobre cada usuario, ya sea real o
generado por la instalacin del sistema. En cada lnea estn el nombre de usuario, el password
encriptado, el UID (nmero de usuario), el GID (nmero de grupo de usuario), informacin de contacto,
directorio personal y tipo de shell por defecto. A continuacin puede verse su aspecto (cuando tenemos
shadow password):

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:
daemon:x:2:2:daemon:/sbin:
adm:x:3:4:adm:/var/adm:
lp:x:4:7:lp:/var/spool/lpd:
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:
news:x:9:13:news:/var/spool/news:
uucp:x:10:14:uucp:/var/spool/uucp:
operator:x:11:0:operator:/root:
games:x:12:100:games:/usr/games:
gopher:x:13:30:gopher:/usr/lib/gopher-data:
ftp:x:14:50:FTP User:/var/ftp:
nobody:x:99:99:Nobody:/:
xfs:x:43:43:X Font Server:/etc/X11/fs:/bin/false
gdm:x:42:42::/home/gdm:/bin/bash
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/bin/false
rpc:x:32:32:Portmapper RPC user:/:/bin/false
mailnull:x:47:47::/var/spool/mqueue:/dev/null
rafa:x:500:500:Rafael Menendez de Llano Rozas:/home/rafa:/bin/bash
alumno:x:501:501::/home/alumno:/bin/bash
jagm:x:502:502::/home/jagm:/bin/bash

El nombre de usuario tendr hasta 8 caracteres (los dems se ignorarn), pudiendo contener (pero no
empezar ) nmeros, pero no signos de puntuacin. Maysculas y minsculas son diferentes (hay que
tener en cuenta que normalmente el nombre de usuario ser el mismo que la cuenta de correo). Un
mtodo que se suele usar es utilizar el primer apellido antecedido de la inicial del nombre (por supuesto
hay todas las variaciones que quiera el administrador), si esta combinacin resulta larga (ms de 8
caracteres) se pueden hacer una entrada en aliases, por ejemplo Rafael Menndez tendra un login
rmenendez de 9 caracteres, entonces podemos crear una cuenta rafam y escribir en el fichero de
alias: /etc/aliases una lnea como:

rmenendez: rafam

A partir de ahora tendremos dos nombres para una sola cuenta, al menos en lo que al correo se refiere,
por lo que tendremos que tener la precaucin de no usar ninguna de ellas de nuevo en una nueva cuenta.
Si estamos trabajando en red es muy conveniente por claridad y seguridad que un mismo usuario tenga
siempre en todas las mquinas el mismo login.

El segundo campo que nos encontraremos ser el password del usuario encriptado. Esto es as ya que el
fichero es visible por todos los usuarios y no se podra dejar sin codificar. El cambio de contenido se debe
hacer con el comando passwd (el root puede utilizar este comando con un nombre de usuario para
cambiar el password de alguien, pero tampoco sabr el password que estaba asignado anteriormente).
En entornos distribuidos que utilizan NIS (cuando desde varios computadores se accede a una misma
cuenta residente en una nica mquina) el comando adecuado ser yppasswd. Este password se
comunicar al usuario de forma oral (no conviene que est escrito en ningn sitio), el cul deber
cambiarlo cunato antes.

A la hora de crear una cuenta siempre se deber poner en este campo el smbolo * que har que no se
pueda acceder a la cuenta hasta que no se le asigne un password de la manera anteriormente indicada.
Si dejamos el campo en blanco significa que ese usuario no tiene password, lo que constituye un agujero
de seguridad tremendo.

Actualmente en la mayora de sistemas, aparte del fichero /etc/passwd existe otro fichero donde estn
codificados los passwords de los usuarios, es el /etc/shadow, con la diferencia que ese fichero no es
visible por los usuarios (excepto por el root). Esto es as porque teniendo un computador potente y las
claves encriptadas de los usuarios se puede ejecutar un programa de desencriptacin que las descubra a
base de comparaciones con diccionarios en unas horas o das (para nombres de seis caracteres). Por
eso aparece en el /etc/passwd en este campo una x y los password encriptados en /etc/shadow
de forma no visible para un vulgar mortal.

El siguiente campo es el nmero de usuario, como todas las entidades de UNIX estn codificadas con un
entero, en este caso con un nmero de 0 a 32767. Es conveniente que cuando estemos en un entorno
distribuido usando NFS (el directorio personal [u otros] slo reside en un disco de una mquina del
sistema pero es visto por todas, a la hora de entrar a una mquina, ese directorio se monta por red y es
visto desde all) el nmero del usuario sea el mismo en todas las mquinas del sistema.

Existen unos cuantos nmeros definidos para usuarios de instalacin y el propio root, para usuarios
creados por el administrador normalmente se empieza a contar a partir de 500, esto no es obligatorio,
pero si lo es el no repetir ningn nmero para distintos usuarios. Los usuarios estndar aparecen junto
con su informacin asociada en la siguiente tabla:

Usuario UID GID Directorio raz Shell


root 0 0 /root /bin/bash
bin 1 1 /bin
daemon 2 2 /sbin
adm 3 4 /var/adm
lp 4 7 /var/spool/lpd
sync 5 0 /sbin /bin/sync
shutdown 6 0 /sbin /sbin/shutdown
halt 7 0 /sbin /sbin/halt
mail 8 12 /var/spool/mail
news 9 13 /var/spool/news
uucp 10 14 /var/spool/uucp
operator 11 0 /root
games 12 100 /usr/games
gopher 13 30 /usr/lib/gopherdata
ftp 14 50 /var/ftp
nobody 99 99 /

Igual que los ficheros se agrupan en directorios, los usuarios se concentran en grupos que tambin estn
codificados con un entero. El siguiente campo de /etc/passwd es ese nmero. Los grupos estn
localizados en algo similar al fichero passwd, ese fichero es /etc/group. Una tabla de grupos por
defecto aparece en la tabla posterior.

Grupo GID Miembros


root 0 root
bin 1 root, bin, daemon
daemon 2 root, bin, daemon
sys 3 root, bin, adm
adm 4 root, adm, daemon
tty 5
disk 6 root
lp 7 daemon, lp
mem 8
kmem 9
wheel 10 root
mail 12 mail
news 13 news
uucp 14 uucp
man 15
games 20
gopher 30
dip 40
ftp 50
nobody 99
usuarios 100

Un campo opcional es el de los datos personales de contacto (GECOS), que suelen tener el nombre
completo de la cuenta, la localizacin, el nmero de telfono de trabajo y casa. Estos datos pueden ser
obtenidos con el comando finger y pueden ser cambiados con chfn.

Todos los usuarios (salvo raras excepciones que comparten root) tiene su propio directorio personal,
normalmente colgado de /home. El directorio suele llamarse de la misma manera que la cuenta del
usuario. Este directorio deber tener los permisos y propietarios adecuados, esto lo conseguiremos con la
combinacin de comandos (para un supuesto usuario rafa que pertenece al grupo usuarios):

mkdir /home/rafa
chown rafa /home/rafa
chgrp usuarios /home/rafa
chmod 700 /home/rafa

que crear el directorio, le cambiar de dueo, de grupo y de modo de acceso, en este caso slo con
permisos para el dueo de la cuenta.
Por ltimo, est el campo de la shell, donde indicaremos que tipo de shell arrancar el sistema cuando el
usuario haga login. Todas las shells estn en el directorio de binarios /bin y si no se especifica ninguna,
el sistema arrancar la shell por defecto (Bourne) que es la sh. Curiosamente no es obligado poner una
shell, puede ser cualquier ejecutable, de hecho si se /bin/false es una manera de hacer que un
usuario tenga prohibida la entrada.

Una vez que hemos creado la entrada en /etc/passwd, deberemos darle al usuario un password inicial.
Esto se hace, como hemos mencionado, con el comando passwd seguido del nombre de usuario
(cuidado de poner el nombre de usuario, si no ponemos nada cambiaramos el de root). Una vez el
usuario haya entrado al sistema lo podr cambiar el mismo con ese comando (tambin se le pedir el
password antiguo), pero en este caso sin argumentos. Actualmente muchos de los sistemas por
seguridad tienen comandos passwd que exigen introducir un password con ciertas caractersticas, como
un determinado nmero de caracteres o una combinacin adecuada de letras, nmeros y signos de
puntuacin. Sino cumplimos con estas reglas (puestas para garantizar la seguridad del usuario) no
podremos cambiar el password de la cuenta.

Si ya hemos creado el directorio del usuario como hemos indicado, el resto de tareas que deberemos de
hacer no sern obligatorias, pero si bastante convenientes. La primera ser copiar en ese directorio todos
los ficheros de arranque necesarios, que dependern de los programas que ejecute el usuario, incluida la
shell. Una funcin del administrador es tener un directorio, por ejemplo /usr/local/lib/arranque,
donde est una coleccin adecuada de estos ficheros para ser copiados en el directorio de usuario (el
sistema nos proporciona uno en el directorio /etc/skel), normalmente todos estos ficheros comenzarn
por . para que no sean visibles salvo con ls -a. Una vez hecho esto, podemos proceder as (advertir
que no podemos hacer: chown usuario /home/usuario/.* ya que en ese directorio tambin est
".." que es /home, al que no podemos cambiar de usuario):

cp /usr/local/lib/arranque/.[a-zA-Z]* /home/usuario
chmod 644 /home/usuario/.[a-zA-Z]*
chown usuario /home/usuario/.[a-zA-Z]*
chgrp grupo /home/usuario/.[a-zA-Z]*

Otra tarea til ser configurar una cuenta de correo electrnico, sobre todo si estamos en un entorno
distribuido para que el usuario reciba correo slo en una mquina, para ello deberemos manipular el
fichero /etc/aliases de forma conveniente:

usuario: usuario@maquina
nombreapellido: usuario

haremos que el usuario reciba slo el correo en la maquina y adems tener un alias con el nombre y el
apellido de alguna forma.

De forma muy opcional (slo en sistemas antiguos) podremos actualizar el ficheros de grupos, que tendr
una lnea por grupo con los siguientes campos (separados por :): nombre, password (vestigio nunca
usado), numero de grupo GID, lista de usuarios del grupo separados por comas.

El resto de tareas depender de si el sistema lleva servicios de accounting (captulo sexto) y cuotas
(captulo quinto). Por ltimo slo nos quedar entrar en la cuenta y verificarla. Se suele utilizar el
comando pwd para ver si el directorio personal es el adecuado y ls -la para ver si estn los ficheros de
arranque.

Borrado, deshabilitacin y modificacin de usuarios


Cuando queramos que un usuario desaparezca del sistema deberemos asegurarnos de que se cumplan
las siguientes tareas:

1. Si hay coutas de disco ponerlas a 0.


2. Quitar todos los alias que existan relacionados con l.
3. Matar todos sus procesos, si hay alguna corriendo, as como sus trabajos pendientes
(comando at) o tareas peridicas (cron).
4. Borrar todos los ficheros que estn en /tmp o /vat/tmp (pertenencientes a l).
5. Quitar la entrada en el fichero /etc/passwd y /etc/group.
6. Borrar su directorio home.
7. Quitar el spool de correo.

Existe un comando para borrar usuarios que es userdel (ver apartado siguiente).

Si lo que queremos es deshabilitar a un usuario temporalmente podemos tomar varias iniciativas:

1. Poner un "*" delante del password encriptado, de tal manera que el usuario no pueda entrar.
Esto no es definitivo porque se podra todava entrar desde la red.
2. Se pude cambiar la shell y poner un programa que pinte un mensaje advirtiendo del hecho.
Este programa (shell) no debera estar en el fichero /etc/shells donde estn las shells
permitidas, para que no se pueda entrar en la cuenta, no slo directamente, o con demonios
como el de telnet, sino tambin por ftp o c correo (sendmail).
3. Tambin se puede colocar el programa /bin/false para que no se haga nada.
4. Tambin se puede utilizar el comando passwd con la opcin -l (lock).

Por ltimo, si queremos cambiar las caractersticas de un usuario, podemos hacerlo manualmente
editando el /etc/passwd o usando el comando usermod (ver siguiente apartado).

Cambio de usuario
Si hemos entrado al sistema y queremos cambiar de usuario, podemos hacerlo con el comando login, al
que podemos dar el nombre de usuario, si no es as, el propio comando nos lo pedir. La utilizacin de
login puede estar restringida creando el fichero /etc/nologin que ser presentado en pantalla. Si el
usuario al que queremos cambiar es root, primero se mirar el fichero /etc/securetty para ver
desde que terminales podemos hacerlo, por ejemplo, slo se podr entrar como root desde el terminal
principal, no de forma remota. Tambin se pude restringir el uso de login a distintos tipos de usuarios en
el fichero /etc/usertty (usar man login para ms informacin).

Otra forma de cambiar de usuario es utilizar el comando su (sustituir). A diferencia del anterior, su crea
una shell con un usuario distinto y por tanto podremos volver al original simplemente terminando la
sesin.

Para evitar estos cambios en muchos sistemas (en particular en la distribucin Ubuntu no existe el
usuario root) existe la herramienta sudo (SUperuser DO) para realizar las tareas administrativas sin
necesidad de cambiar al usuario root. El fundamento de sudo reside en su fichero de configuracin, el
fichero /etc/sudoers. Este fichero tiene, en los casos ms sencillos, dos partes: una parte de alias y
otra parte de reglas. La parte de alias, lo que hace es "agrupar" de alguna manera listas de usuarios y
listas de aplicaciones. La parte de reglas define qu grupos de usuarios pueden usar qu grupos de
programas con permisos distintos de los suyos y en qu condiciones pueden hacerlo.

6.2. Especial Red Hat


En este apartado veremos dos aspectos especficos de Red Hat, el tratamiento de los grupos de
usuarios y las herramientas para shadow passwords.

En cuanto al primero surgi por la dificultad de encuadrar a los usuarios en los grupos de la manera
tradicional, ya que en muchos proyectos, un usuario puede pertenecer eventualmente a varios grupos de
trabajo y sin embargo l est asociado al grupo primario donde fue creado. Red Hat Linux utiliza un
esquema de grupo privado de usuarios (UPG, del ingls "User Private Group") que permite que el manejo
de grupos UNIX sea mucho ms fcil. El esquema UPG no aade o cambia nada al modo tradicional
UNIX de manejar internamente grupos, simplemente ofrece una nueva convencin para ello, cada vez
que se crea un nuevo usuario, por defecto, se le asigna un nico grupo donde l es el nico miembro, la
mscara se cambia a 002 (antes era 022, ver comando umask que lee la mscara puesta a todo el
sistema en el fichero /etc/profile) ya que ahora no es necesario extenderla al grupo, y el bit setgid
(se hace con el comando chmod g+s directorio) para su directorio ser activado. De esta manera,
los archivos creados en ese directorio tendrn el grupo del directorio.

Veamos esto con un ejemplo, se tiene un proyecto llamado proyecto en el cual van a trabajar varios
usuarios que pertenecen a sus propios grupos. Se crear un directorio para el mismo llamado proyecto
y un grupo del mismo nombre. A ese directorio se le cambiara de grupo con el comando chgrp. Despus
se pone el bit setgid a ese directorio, con lo cual todos los ficheros creados en l pertenecern al grupo
del directorio y no del usuario que los cree. Por ltimo se aaden los usuarios al nuevo grupo creado.
Para hacer esto se cuenta con dos comandos:

 Para crear un grupo: /usr/sbin/groupadd grupo.


 Para aadir un usuario a un grupo: /usr/bin/gpasswd -a usuario grupo. Si quisieramos
quitar a un usuario del grupo utilizaramos la opcin -d.

Si usramos UPG y un usuario estuviera trabajando en muchos proyectos, no tendra que cambiar su
mscara o grupo cuando se muevan de un proyecto a otro, ya que el setgid nos hace este trabajo.

En cuanto al segundo, el tratamiento de shadow password, existen varios comandos para trabajar con
ellos, ya que manualmente no se puede editar el fichero /etc/shadow, ni se podra escribir el password
encriptado, ya que el comando passwd trabaja exclusivament con el fichero /etc/passwd.

De todos modos, puede darse el caso de que no nos interese instalar esta utilidad:

1. Nuestro sistema no tiene cuentas de usuario.


2. Nuestro sistema est en red y las cuentas estn por NIS(Network Information Services).
3. Existe en la mquina un software especial que revisa la entrada de usurios.

Si este no es el caso, ser conveniente instalar esta utilidad (buscar paquete shadow), que entre otras
cosas proporciona los siguientes comandos nuevos: chage, newusers, dpasswd, gpasswd,
useradd, userdel, usermod, groupadd, groupdel, groupmod, groups, pwck, grpck,
lastlog, pwconv, y pwunconv. Conviene destacar los siguientes:

 pwconv. Crea un fichero shadow a partir de un /etc/passwd y un virtual /etc/shadow. Primero,


las entradas en el shadow que no estn en passwd son eliminadas; segundo, las entradas que no
tienen "x" en passwd son aadidas al shadow; tercero, es aadido a shadow cualquier entrada
nueva; y por ltimo, los password en el fichero passwd son convertidos a "x". Para hacer la
encriptacin, se usa la librera crypt. Por seguridad, antes de efectuar la conversin se bloquear
los ficheros.
 pwunconv. Crea un fichero passwd desde un /etc/passwd y desde /etc/shadow y quita este
ltimo. Primero los passwords en el fichero passwd son aadidos desde el shadow; segundo, las
entradas que existan en passwd pero no estn en shadow son dejadas sueltas; y por ltimo se
borra el shadow. Tambin se bloquean los ficheros.
 pwck. Verifica la integridad de sistema, es decir, todas las entradas en /etc/passwd
y /etc/shadow. Si alguna est mal (nmero de campos, nombre nico, identificador de usurio y
grupo vlidos, correcto directorio home y shell adecuada), se preguntar al usuario si quiere
borrarla.

6.3. Creacin, Modificacin y Borrado

Toda esta tarea de creacin que hemos visto en la seccin anterior, puede ser llevada a cabo con una
sola macro o comando que vara de un sistema a otro, pero que suele llamarse adduser o useradd y
estar localizado /usr/sbin. La sintaxis del comando es:

useradd [-c comment] [-d home_dir]


[-e expire_date] [-f inactive_time]
[-g initial_group] [-G group[,...]]
[-m [-k skeleton_dir] | -M] [-p passwd]
[-s shell] [-u uid [ -o]] [-n] [-r] login

donde se puede dar toda la informacin necesaria para crear la cuenta, lo nico imprescindible es el
nombre de la cuenta.

Como vimos en el apartado anterior, otros comandos relacionados con la creacin de cuentas de usuarios
los podemos encontrar cuando se instala el paquete shadowutils, las utilidades que se soportarn sern:

 Conversin de normal a shadow passwords y viceversa (pwconv, pwunconv).


 Verificacin de contraseas, grupo y ficheros shadow asociados (pwck, grpck).
 Mtodos estndar en el mercado para aadir, borrar y modificar la cuenta de un usuario (useradd,
usermod y userdel).
 Mtodos estndar en el mercado para aadir, borrar y modificar los grupos de un usuario
(groupadd, groupmod y groupdel).
 Mtodos estndar en el mercado para administrar el fichero /etc/group (gpasswd).

Una vez que hemos creado una cuenta, podemos tener intencin de modificarla o borrarla, como hemos
visto, manualmente, pero tambin existen comandos para hacerlo de un solo golpe, la sintaxis de los
comandos para modificar la cuenta de un usuario o borrarla es:

usermod [-c comment] [-d home_dir [ -m]]


[-e expire_date] [-f inactive_time]
[-g initial_group] [-G group[,...]]
[-l login_name] [-p passwd]
[-s shell] [-u uid [ -o]] [-L|-U] login

userdel [-r] login

Si estamos usando un terminal grfico (tambin se puede hacer en uno de texto pero con otra interfase
ms primitiva) en el sistema Red Hat podemos utilizar la aplicacin Linuxconf (la aplicacin es tan
avanzada que incluso se puede usar por web a travs del puerto 98 de esta manera:
http://el.nombre.de.la.maquina:98, antes habr que configurar la mquina LINUX para que acepte este
tipo de accesos desde el cliente) de cdigo abierto , que nos permitir cambiar, modificar o borrar
usuarios (cuentas). En lo que se refiere a la creacin de cuentas de usuario su aspecto sera:
6.4. Auditora y Contabilidad

En todos los sistemas modernos el sistema operativo lleva un control (accounting) sobre la actividad del
sistema generando ficheros de contabilidad (log), en particular esto se hace tambin para los usuarios del
sistema. Estos ficheros suelen estar residentes en los directorios /var/log y /etc. Normalmente esta
informacin es muy prolija y se recoge, visualiza o utiliza a travs de comandos especficos, por ejemplo
los comandos vistos who y finger. Los responsables de estos ficheros suelen ser demonios que se
controlan a travs del fichero /etc/syslog.conf.

Los ficheros ms importantes dentro de /var/log son los siguientes:

 messages. Son los mensajes que aparecen en la pantalla del administrador, de tal manera que
ninguno de estos mensajes se pierda.
 lastlog. En este fichero se escribe una entrada cada vez que se produce un login en el sistema, en
algunos sistemas puede ser visto directamente, en otros est codificado. Para ver ver este fichero
bien por usuarios o por das se utiliza el comando lastlog.
 utmp. Proporcionan informacin sobre los usuarios conectados, tambin puede estar
en /var/run y se utiliza normalmente con el comando who.
 wtmp. Proporcionan informacin sobre la duracin de las sesiones, se consulta normalmente con
los comandos last y who.
 btmp. Proporcionan informacin sobre los intentos fallidos de conexin.

Estos ficheros pueden llegar a ser gigantescos por lo que para tratarlos se utiliza el comando logrotate
que puede hacer del fichero un buffer circular, almacenarlo comprimirlo o mandarlo incluso por correo.
Tambin se puede activar por tiempo o por tamao del fichero (ver cron en apartado posterior).

Adems de lo explicado, en UNIX / GNULinux tambin se puede llevar una contabilidad de los recursos
utilizados (a partir del ncleo 1.3.73), desgraciadamente la gestin de la contabilidad depende del sistema
y adems las herramientas no suelen estar instaladas. Hay dos sistemas fundamentales: el sistema BSD
(Berkeley) y el de System V, aunque se suele emplear mucho menos. Los pasos para activar la
contabilidad suelen ser:

1. Traer el paquete adecuado e instalarlo. El nombre es: quota-acct.


2. Modificar el system init script para que habilite la contabilidad con el comando /sbin/accton en
el fichero /var/log/pacct.
3. Crear ese fichero si es necesario con touch. El fichero debe pertenecer a root con permisos de
lectura/escritura y slo lectura para el resto.
4. Rebotar la mquina para que tenga efecto.

Los comandos para trabajar despus sern:

 ac
Sirve para hacer algo similar a last con la ventaja de que puede mostrar los tiempos totales por
da (-d) y por cada usuario (-p).
 accton
Sirve para apagar o encender el proceso de contabilidad, normalmente es colocado en las macros
de inicio.
 sa
Resume (summarizes accounting) informacin de comandos previamente ejecutados y que han
sido registrados en /var/account/pacct.
 lastcomm
Igual que el anterior pero muestra toda la informacin.

6.5. Comunicacin Usuarios

E l ltimo punto que nos queda por ver en este captulo sobre usuarios, es la comunicacin que podemos
establecer con ellos. Existen varios mecanismos que podemos utilizar:

1. message of the day. Es un fichero que est en /etc/motd y que se presentar en pantalla
despus que un usuario ha realizado un login con xito. Es un mecanismo que consume muchos
menos recursos que mandar un mail a todos los usuarios.

2. wall. Si queremos mandar un mensaje a todos los usuarios que estn en ese momento
conectados, podremos usar el comando wall. Este comando aceptar como argumento un
mensaje terminado en EOF (aunque no es necesario) ya que esta pensado para redireccin de
entrada. Para que los mensajes puedan llegar a los usuarios, estos deben tener habilitado el
terminal para escritura con la orden mesg que toma un argumento con dos valores: y o n, aunque
el root siempre tiene este permiso.

3. write. Idntico al anterior, pero en este caso slo se manda un mensaje al usuario indicado como
primer argumento, en el segundo podemos poner opcionalmente el terminal donde est conectado,
esto tendr sentido si el usuario est en varios terminales. El mensaje se dar a continuacin de
forma interactiva terminado en EOF (ctrl.-d desde el teclado).
4. talk. Este comando tiene el mismo propsito que el anterior pero lo hace de una forma visual,
dividiendo la pantalla en dos, en una parte aparecen los mensajes enviados y en otra los recibidos.
Toma los mismos argumentos que write, pero en este caso el usuario tambin puede estar en una
mquina remota tomando la forma: usuario@maquina. Este comando hace uso de un demonio
llamado talkd para establecer las conexiones.

5. mail. Si lo que queremos es mandar un aviso a un usuario que no est conectado, no nos quedar
otro remedio que hacerlo con el tradicional mail. Para hacer esto deberemos poner como
argumento el nombre del usuario(s) (se puede mandar una copia con la opcin c) al que
queremos mandar el correo y despus el mensaje en si terminado en EOF (si queremos poner un
asunto [subject] al mensaje lo podremos hacer con la opcin s). Si lo que queremos es leer el
correo bastar con que utilicemos el comando sin argumentos, despus podemos utilizar distintos
comandos interactivos para actuar sobre los mensajes recibidos: d para borrar, r para responder o
x para abortar una sesin o q para salir.

Hay varios ficheros relacionados con el correo:

 /var/spool/mail/usuario. El fichero general del usuario para correo.


 ~/mbox. Fichero de correo de mensajes obsoletos.
 ~/.mailrc. Servir para introducir rdenes al mail, como por ejemplo, hacer listas de
correo con alias (tambin se puede hacer alias de correo con el fichero /etc/aliases).
 /tmp/R*. Ficheros de correo temporales.
 /usr/lib/mail.help. Ficheros de ayuda.
 /etc/mail.rc. Fichero de inicializacin.
7. Gestin de Archivos

7.1. Introduccin

Bsicamente, el propsito de todo sistema de ficheros es representar y organizar la informacin que se


guarda en el sistema de almacenamiento. En sistemas UNIX no slo es esto, es decir, contener ficheros y
directorios, adems el sistema de ficheros puede contener procesos, puertos serie, canales de
comunicacin y segmentos de memoria compartida de forma ms o menos natural.

Por lo tanto un sistema de ficheros comprende cuatro componentes:

1. Un espacio de nombres. Es decir, una forma de nombrar objetos y organizarlos de forma


jerrquica.
2. Una API (Application Programming Interface). Un conjunto de llamadas para manipular
estos objetos.
3. Seguridad. Un esquema para proteger, esconder y compartir los objetos.
4. Implementacin. El cdigo para mantener lo anterior sobre la estructura del disco o sistema
de almacenamiento.

No est definido que componente del sistema operativo debe mantener los cuatro componentes, en
algunos casos es el propio subsistema de almacenamiento, en otros los propios drivers del kernel. Para
complicar ms la cuestin, casi todos los sistemas operativos modernos trabajan con ms de un sistema
de ficheros: el del propio UNIX, compatibles con MS-DOS, de CD, etc.

Independientemente de esto, un sistema de ficheros en una jerarqua que comienza en el directorio raz
"/" y contina hacia debajo de forma arbitrariamente profunda con un nmero de subdirectorios (el
nmero y nombre se ver en el siguiente apartado).

En sistemas modernos, cada elemento dentro del directorio raz debe tener un nombre de no ms de 255
caracteres y su pathmane (camino hasta llegar a l) no debe superar los 1023 caracteres. Los nombres
pueden contener cualquier carcter salvo el "/" y el nulo. Incluso podran tener espacios, lo cual es
bastante incmodo, ya que los intrpretes de comandos (ver apuntes de la shell) lo usan como separador.

Estos elementos pueden ser de varios tipos:

1. Ficheros regulares. Es simplemente un conjunto de bytes sin ninguna estructura de


contenido. Pueden ser accedidos de forma secuencial o aleatoria. Un enlace "hard link" es
equivalente a un fichero.
2. Directorios. Fichero especial que contiene nombres a otros ficheros. Existen dos directorios
especiales "." Que se refiere a si mismo y ".." a su inmediato superior o padre.
3. Dispositivos de tipo carcter. Ficheros que permiten a los programas comunicarse con el
hardware. Hay mdulos del kernel (drivers) que se enlazarn con el respectivo fichero. Si
son de tipo carcter, el driver podr hacer buffering de los datos comunicados.
4. Dispositivos de tipo bloque. Si son de tipo bloque, los datos manejados son grandes
paquetes y es el kernel es el que har buffering.
5. Sockets. Son conexiones entre procesos. Pueden referirse a procesos locales o remotos.
Los ficheros asociados slo podrn ser escritos o ledos por miembros involucrados en la
conexin.
6. FIFOS (pipes con nombre). Otra forma de conexin en este caso totalmente local.
7. Enlaces simblicos ("soft links"). En un fichero que contiene el nombre (la referencia) a otro
fichero.

En el sistema van a existir comandos para hacer este tipo de ficheros (no se describen aqu ya que estn
ms relacionados con la programacin de sistemas que con su administracin). Podremos distinguir al
hacer un ls -l ya que cada uno tiene asociado un carcter:
1. Fichero regular: "-".
2. Directorio: "d".
3. Dispositivo carcter: "c".
4. Dispositivo bloque: "b".
5. Socket: "s".
6. FIFOS: "p".
7. Enlace simblico: "l".

Por ltimo, cada fichero puede tener sus propios atributos que se pueden cambiar con el comando
chmod. Atributos tpicos son: seguid, setgid, sticky bit y permisos. Tampoco se ven aqu ya que
estn ms relacionados con la programacin.

7.2. rbol de directorios

Uno de los problemas que existan a la hora de utilizar un sistema UNIX era la estructura de ficheros,
que aunque similar, difera de unos a otros, a veces de forma significativa. Eso provoc que en Agosto de
1993 se hiciera un esfuerzo por reestructurar la estructura de directorios y ficheros. Un hijo de este
estndar fue el FSSTND, exclusivo para LINUX, que fue creado el 14 de febrero de 1994. Otras versiones
posteriores aparecieron meses despus.

Despus de la aparicin de esta versin, con la ayuda de miembros de BSD, se hizo otro esfuerzo por
ampliarla a otro tipo de sistemas UNIX, a esta versin se le cambi de nombre en reconocimiento de la
generalizacin y se le llam FHS (Filesystem Hierarchy Standard), es decir, Estndar de Jerarqua del
Sistema Ficheros.

El documento que define el FHS es la referencia vinculante para cualquier sistema compatible FHS, sin
embargo el estndar da pie a la extensibilidad de unas reas o no define otras. En esta seccin se
proporciona un resumen del estndar y una descripcin de aquellas partes del sistema de ficheros que no
cubre el estndar. El estndar completo se puede ver en: http://www.pathname.com/fhs/ (ver esta pgina
para la versin actual, la ltima es de mayo de 2001, versin 2.2).

Los directorios definidos en FHS que cuelgan del directorio raz aparecen a continuacin:

/
|- bin binarios de comandos esenciales
|- boot ficheros estticos del cargador
|- dev ficheros de dispositivos
|- etc ficheros de configuracin del sistema
|- mnt punto de montaje temporal
|- lib modulos del kernel y libreras compartidas
esenciales
|- opt paquete aadidos de software
|- root directorio home para el usuario root
|- sbin binarios de sistema usados por el root
|- tmp ficheros temporales
|- usr jerarqua secundaria
|- var datos variables

Hay otros tres directorios que debern estar en el directorio raz si es que son necesarios para el sistema:
/
|- home directorio de usuarios
|- lib<esp> libreras esenciales que son compartidas
alternativas
|- root directorio home para el root

Algunos de estos directorios del estndar son descritos a continuacin:

El directorio /dev

El directorio /dev contiene archivos que representan dispositivos del sistema.


Estos archivos son esenciales para el correcto funcionamiento del mismo.

El directorio /etc

El directorio /etc est reservado para archivos de configuracin que afectan


directamente al ordenador. No deben colocarse ejecutables en /etc. Los
ejecutables que antiguamente se colocaban en /etc deberan estar en /sbin
o posiblemente en /bin.

Los directorios X11 y skel deben ser subdirectorios de /etc. El directorio


X11 es el que contiene archivos de configuracin de X11 como XF86Config.
El directorio skel (ya hablamos de l en el captulo de usuarios) contiene
archivos de "esqueleto" (del ingls "skeleton"), es decir, archivos que se
utilizan para rellenar el directorio raz de un usuario cuando es creado.

El directorio /lib

El directorio /lib debe contienen slo las libreras que son necesarias para
ejecutar los ejecutables /bin y /sbin.

El directorio /sbin

El directorio /sbin es para ejecutables utilizados slo por el superusuario y


aquellos que se necesitan durante el arranque y para montar /usr y poder
realizar mantenimiento y recuperacin del sistema. El FHS especifica:

"/sbin suele contener archivos esenciales para iniciar el sistema adems


de los ejecutables de /bin. Lo que quiera que se ejecute una vez que /usr
est montado (cuando no hay problemas) debera colocarse en /usr/sbin.
Ejecutables de administracin del sistema propios del ordenador deberan
emplazarse dentro de /usr/local/sbin."

Como mnimo, los siguientes programas deberan estar en /sbin:

arp, clock, getty, halt, init, fdisk, fsck.*, ifconfig, lilo,


mkfs.*, mkswap, reboot, route, shutdown, swapoff, swapon y
update.

El directorio /usr

El directorio /usr es para archivos que pueden ser compartidos en toda una
organizacin. El directorio /usr suele tener su propia particin y debera
poder ser montado en modo slo lectura. Los siguientes directorios deberan
ser subdirectorios de /usr:

/usr
|- X11R6
|- bin
|- doc
|- etc
|- games
|- include
|- lib
|- libexec
|- local
|- sbin
|- share
+- src

El directorio X11R6 es para las X (XFree86 en Red Hat Linux), bin es para
ejecutables, doc es para documentacin varia, etc es para archivos de
configuracin comunes a la organizacin, games es para juegos, include es
para archivos de cabecera de C, lib contiene libreras, libexec contiene
pequeos programas auxiliares llamados por otros programas, sbin es para
ejecutables de administracin del sistema (aquellos que no son necesarios
para la inicializacin que estaran en /sbin), share contiene ficheros que no
son de arquitecturas especificas y src es para cdigo fuente.

El directorio /usr/local

El FHS dice:

"La jerarqua /usr/local ser utilizada por el administrador del sistema


al instalar software localmente. Debe estar a salvo de poder ser
sobreescrita cuando se actualice software del sistema. Puede ser utilizada
para programas y datos, compartibles entre un grupo de ordenadores, que
no se encuentren en /usr."

El directorio /usr/local es similar en estructura al directorio /usr. Tiene los


siguientes subdirectorios con una intencin similar a la de aquellos que se
encuentran en el directorio /usr:

/usr/local
|- bin
|- doc
|- etc
|- games
|- info
|- lib
|- man
|- sbin
+- src

El directorio /var

Puesto que el FHS requiere que /usr pueda ser montado en modo slo
lectura, cualquier programa que escriba archivos de trazas o necesite los
directorios spool o lock (por ejemplo la impresora) debera escribir en el
directorio /var. FHS lo describe as:

"archivos de datos variables. Incluye directorios y archivos de spool,


datos administrativos y de traceo, y ficheros temporales y transitorios."

Los siguientes directorios deberan ser subdirectorios de /var:


/var
|- cache
|- db
|- ftp
|- gdm
|- lib
|- local
|- lock
|- log
|- named
|- nis
|- opt
|- preserve
|- run
+- spool
|- anacron
|- at
|- cron
|- fax
|- lpd
|- mail
|- mqueue
+- news
|- rwho
|- samba
|- slrnpull
|- squid
|- up2date
|- uucp
|- uucppublic
|- vbox
|- voice
|- tmp
|- yp

Archivos de trazas del sistema como wtmp y lastlog van a /var/log. El


directorio /var/lib tambin contiene las bases de datos de los RPMs del
sistema. Los ficheros lock van a /var/lock. El directorio /var/spool
contiene subdirectorios para los varios sistemas que necesitan almacenar
archivos de datos.

/usr/local en Red Hat LINUX

En Red Hat LINUX, el uso que se pretende de /usr/local es ligeramente


diferente del especificado por el FHS. El FHS dice que /usr/local debera
ser donde se almacene software que debe permanecer intacto tras
actualizaciones de software del sistema. Puesto que las actualizaciones desde
Red Hat son seguras gracias al sistema RPM y Gnome-RPM, no es necesario
proteger archivos colocndolos en /usr/local. En vez de ello, es mejor
utilizar /usr/local para software que slo se instale en el ordenador local.
Por ejemplo, imaginemos que se ha montado /usr va NFS en modo slo
lectura. Si hay un paquete de software o programa que se quiere instalar, pero
no se permite la escritura, debera instalarse en /usr/local. Ms adelante
quizs, si se convence al administrador del sistema NFS para que instale el
programa en /usr, puede desintalarse de /usr/local.

Hay directoriosespecficos de Linux que tambin estn en el estndar como:

El directorio /proc

El directorio /proc contiene archivos especiales para obtener o enviar


informacin del o hacia el kernel. Es un mtodo sencillo de acceder a
informacin sobre el sistema operativo usando el comando cat. En otros
sistemas pueden ser imgenes de todos los procesos que se estn
ejecutando.

Otros directorios y ficheros no pertenecientes al estndar

Existen otros directorios que no pertenecen al estndar y que estn en muchos sistemas entre ellos
podemos destacar:

/
|- sys ficheros de configuracin para BSD y rea de trabajo del
kernel
|- kernel ficheros necesarios para cargar el kernel en Solaris.

7.3. Creacin

Una vez que hemos descrito cual es la visin que un usuario tiene del sistema de ficheros, vamos a
detallar cual sera el proceso para construir (crearla para que un usuario lo pueda utilizar) uno. Parte de
los pasos necesarios ya los hemos realizado en la instalacin del sistema, pero de todos modos vamos a
resumirlos en los siguiente puntos:

1. Conexin del dispositivo al computador.


2. Creacin del dispositivo a travs del cual accedemos al disco.
3. Formateo del disco.
4. Etiquetado y particionado del disco.
5. Creacin de un sistema de ficheros UNIX dentro de las particiones.
6. Verificacin del sistema de ficheros.
7. Montaje del sistema.

Una vez que hemos superado el primer punto, esto es, conectar el dispositivo al computador, lo que
tendremos que hacer es crear un fichero de dispositivo en /dev asignado al disco (disco duro, cdrom o
disquete ...). Este paso depender en gran manera del sistema UNIX con que contemos, bsicamente
existen dos tipos de dispositivos, los de bloque o acceso aleatorio y los de carcter o acceso secuencial,
la gran diferencia entre ellos es que el de bloque almacena los datos y estos pueden ser accedidos en
cualquier orden (de forma aleatoria) y el de carcter no, simplemente nos dar la siguiente ristra de bytes.
Al hacer un ls l /dev veremos en la primera columna de datos una b o una c que nos indicar el tipo
de dispositivo, adems, antes de la fecha, veremos dos cifras que son el nmero mayor y el menor, el
mayor indica al kernel cual de los controladores corresponde al dispositivo y el menor a la copia del
mismo, por ejemplo un nmero mayor 3 indica un disco duro de tipo IDE y el nmero menor ser cero
para el primer disco y del uno al 15 posibles particiones del mismo. En la mayora de los sistemas existen
suficientes dispositivos en /dev para todos los dispositivos que podamos conectar a nuestra mquina,
por ejemplo, en mi sistema hay 140 dispositivos de disco duro IDE ya realizados (en el captulo 1 veamos
la correspondencia entre discos IDE y SCSI [y sus particiones] y los ficheros de dispositivos de /dev). Si
creamos uno, tendremos que tener mucho cuidado con los permisos que coloquemos al fichero, dando
slo permiso de escritura al root y como mucho a un grupo especializado.
El siguiente paso ser el formateo del disco, en algunos casos, como los discos SCSI, este paso viene ya
realizado de fbrica. Despus se procede al etiquetado y particionado del disco, si es que nos interesa
que ese disco tenga particiones. Este paso lo hemos realizado en la instalacin del sistema con el
programa diskdruid, pero una vez instalado tenemos el programa fdisk.

Realizadas las particiones, tenemos que colocar sobre ellas un sistema de ficheros (salvo en la particin
que hayamos dedicado a memoria secundaria [swap], ya que no tiene un sistema de ficheros normal y la
particin se condiciona con mkswap y se activa o desactiva con swapon y swapoff). Esto se realiza
normalmente con el comando mkfs o newfs. Estos comandos son actualmente un front-end de una serie
de programas a los que llaman, constituidos por el nombre mkfs y el sufijo con el tipo de sistema de
ficheros que queremos, todos ellos en el directorio /sbin.

La estructura de cada sistema de ficheros est compuesta de cuatro grandes partes:

1. Bloque de arranque (boot), normalmente est en el primer sector del sistema de ficheros y contiene
un pequeo programa que se encarga de buscar el sistema operativo y cargarlo en memoria.
2. Superbloque, es el bloque que describe el sistema de ficheros dando informacin sobre su tamao,
lista de bloques disponibles, primer bloque libre, nmero de iodos, lista de inodos libres, ndice del
primer inodo libre, flag de modificacin, etc.
3. Lista de inodos, es una lista donde se guarda una entrada (inodo) por cada fichero, donde se
almacena informacin respecto del mismo, como situacin del mismo, propietario, permisos, fecha
y hora de modificacin, etc.
4. Bloque de datos, es la zona donde se almacenan los ficheros del sistema y a la cual hacen
referencia los inodos, como hemos dicho, los bloques tienen un tamao fijo en cada sistema de
ficheros y slo pueden estar ocupados por un slo fichero, aunque ste no ocupe toda su longitud.

En LINUX, el comando mkfs servir para construir tpicamente hasta media docena de tipos de sistemas
de ficheros, desde MS-DOS, al extendido nativo de Linux, terminando en el extendido doble ext2, que es
el que se recomienda para uso normal. Adems, permitir formatear el sistema de forma automtica, esto
nos evita conocer el formateo para cada uno de los tipos de sistemas. A este comando se le dan como
mnimo dos datos: el tipo de sistema de ficheros y el dispositivo sobre el que queremos construirlo.
Dependiendo del primer argumento, mkfs llamar a otro programa mkfs.sistema residente en /sbin
(estas terminaciones nos indicarn que tipo de sistemas de archivos podemos tener, suelen aparecer
en /proc/filesystems), incluso existen dos comandos especializados que son mkdosfs y mke2fs.

Esto exige conocer con cierto detalle el dispositivo sobre el que queremos formar el sistema de ficheros.
As, otras opciones suplementarias para el comando pueden ser:

 -c para chequear los bloques del dispositivo.


 -v para que presente lo que va haciendo paso a paso o modo verboso.

Si se llama directamente a mk2efs se tendr un control ms amplio sobre el sistema de ficheros


construido:

 -b para indicar el tamao de bloques en bytes.


 -i para indicar el nmero de bytes por inodo, o dicho de otra manera, el nmero de inodos que se
crearn en el sistema de ficheros. Slo se indicar este ratio si sabemos con seguridad el nmero
de ficheros que habr en ese sistema o el tamao tpico de los mismos.
 -N directamente se pone el nmero de inodos.
 -m para decir el porcentaje del sistema reservado para el superusuario, por defecto un 5%.
 -L coloca la etiqueta del sistema.
 -S slo crea el superbloque, esto es til cuando slo este bloque est corrupto.

As, si quisiramos realizar un sistema de ficheros de tipo ext2 en un disquete (dispositivo fd0),
tendramos que hacer simplemente (si quisiramos hacerlo compatible con windows se pondra -t
vfat):

mkfs t ext2 /dev/fd0

Una vez que tenemos sobre cada particin un sistema de ficheros, nos queda un ltimo paso ms que es
el montaje del sistema de ficheros en el rbol de directorios general. Esto se hace con la orden mount, a
la que normalmente hay que dar dos argumentos: el dispositivo que sostiene a la particin (puede
tambin ser un nombre de ordenador si se monta por red) y un directorio vaco (si no est vaco todo lo
que contiene se ocultar) del rbol general. Cada vez que se monte un sistema de ficheros se crear
automticamente un directorio llamado lost+found que es usado por el comando fsck (ver siguiente
apartado) en situaciones de emergencia.

La rden mount tiene una serie de opciones, dos de las ms importantes son:

 -t para dar el tipo de sistema.


 -o seguido de un nombre para decir como se debe efectuar el montaje (que en muchos casos
depende del tipo de sistema), las ms frecuentes son:
 auto/noauto, para indicar al sistema de arranque que monte esos sistemas
automticamente o no lo haga. Cuando se usa la opcin -a , usualmente escogida por el
arranque, se montarn todas las unidades especificadas que no tengan la opcin noauto.
 exec/noexec, para permitir o no al ejecutar programas de ese sistema de ficheros.
 user/nouser, para permitir que ese sistema pueda ser montado por un usuario normal, por
defecto, para proceder al montaje de un sistema, hay que ser root.
 sync/nosync, despus de realizada una escritura, el programa puede esperar a que se
transfieran los datos al dispositivo o no, la opcin por defecto es no, ya que suele ser mucho
ms ptima en discos duros y NFS, aunque tambin puede producir perdidas de datos en
situaciones de emergencia.
 ro/rw para decir si el sistema es de solo lectura o de lectura-escritura.

La orden mount se basa en un fichero de texto editable (con sumo cuidado, ya que cualquier error har
que no se monte una unidad) que contiene los sistemas que estn montados o se pueden montar, este
fichero se llama /etc/fstab (en algunos sistemas /etc/vfstab o /etc/checklist). La informacin
est dividida en columnas para que pueda ser entendida tanto por "humanos como por programas":

 En la primera columna aparecen los dispositivos.


 En la segunda los directorios de montaje.
 En la tercera el tipo de sistema de ficheros.
 En la cuarta las opciones que existen para el montaje.
 En la quinta el nmero de das que han pasado sin realizar un dump. Esta informacin ser
utilizada por programas de back up (ver un prximo apartado en este captulo), si es cero o no
aparece no ser necesario hacer back up.
 En la sexta el orden en que debern hacerse los chequeos de esa particin (ver apartado
posterior), empezando por uno. Si dos particiones tienen el mismo nmero, el chequeo se har en
paralelo (no tiene sentido poner el mismo nmero a particiones del mismo disco), si aparece un
cero no ser necesario hacer chequeo.

El aspecto de un fichero /etc/fstab podra ser:

LABEL=/ / ext2 defaults 1 1


LABEL=/boot /boot ext2 defaults 1 2
LABEL=/home /home ext2 defaults 1 2
/dev/cdrom /mnt/cdrom iso9660 noauto,owner,ro 0 0
/dev/fd0 /mnt/floppy msdos noauto,owner 0 0
none /proc proc defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
/dev/hda6 swap swap defaults 0 0

donde se indica en las tres primeras lneas las tres particiones del disco duro y donde tienen que ser
montadas (en este caso a travs de la etiqueta, pero tambin podra aparecer el dispositivo), en las dos
siguientes el cdrom y la unidad de disquetes (se observa que el tipo de sistema de ficheros ha cambiado)
y en las tres ltimas, dispositivos especiales como el swap o el directorio /proc, usado por el kernel para
informar del sistema a programas de usuario.

Si el sistema de ficheros que queremos montar aparece en el fichero /etc/fstab, bastar con que
indiquemos el dispositivo, todas las dems instrucciones las tomar mount de ese fichero. As, para
montar la disquetera bastar con que hagamos:
mount /dev/fd0

para que se monte el disquete en /mnt/floppy. Si por cualquier causa el directorio no existe o el
sistema ya est montado la orden puede generar un error. Muchas veces, como truco, se coloca un
fichero con un nombre adecuado como disquete_no_montado en el directorio de montaje, de esta
manera al hacer un ls podremos ver si el sistema est montado o no (si est montado, el fichero se
oculta y aparecer el directorio del disquete).

Para ver las particiones que estn montadas, se puede utilizar mount, mount -l o mount -v. No
montarn nada, slo nos ofrecern la informacin, en el caso -l incluyendo las etiquetas de los
dispositivos.

Si queremos desmontar una unidad se emplea la rden umount, seguida del dispositivo. Normalmente si
estamos usando un sistema de ficheros (fichero abierto o un proceso ejecutndose), el sistema no nos
dejar desmontarlo, podemos comprobarlo con la orden fuser seguida del punto de montaje.

Si estamos en un sistema LINUX, distribucin Red Hat, disponemos de una herramienta grfica de
gestin del sistema de cdigo abierto que es Linuxconf. En ella hay un apartado referido a la gestin
del sistema de ficheros.

7.4. Verificacin

Una vez creados y montados los sistemas de ficheros, puede ocurrir que estos se deterioren por varias
causas:

 Si es un dispositivo extraible, puede haber sido extrado a destiempo.


 Alguna prdida de corriente elctrica.
 Algn usuario, que no ha sido llevado por el sendero de la inteligencia, ha apagado el ordenador
por las buenas o ms dudosamente por error.
 Algn fallo hardware.

Un sistema UNIX, como parte del arranque (rc.sysinit), siempre ejecuta un mecanismo de chequeo
de los sistemas de ficheros, esto se realiza a travs del comando fsck (existe una versin especializada
para sistemas extendidos llamada e2fsck) y deber ser ejecutado cuando la unidad est desmontada. El
arranque sabe cuando un sistema est limpio porque cuando se echa abajo un sistema se produce el
desmontaje de las unidades y el kernel escribe una huella indicando que no ha habido errores, despus
cuando se arranque y se montan de nuevo, esta huella se elimina y no se hace reparacin.

Si por cualquiera de las causas anteriores la huella no est escrita, el kernel lo sabr y proceder a
realizar el chequeo (en muchos casos tambin el chequeo se realiza de forma programada, por ejemplo
cada 20 encendidos o cada seis meses) utilizando:

fsck -V -a /

para realizar el chequeo del sistema raz de forma no interactiva (-a) y verbosa (-V). Y a continuacin
se ejecuta:
fsck -R -A -V -a

para el resto de unidades (-A) menos la raz (-R) que ya est y de la misma forma que antes.

Si el programa no puede reparar los errores, se ejecutar una shell para permitir que el administrador
ejecute fsck directamente de forma interactiva (sin -a). Aqu pueden empezar los problemas, ya que el
programa nos puede pedir que eliminemos restos del sistema de ficheros o nos ir indicando los
problemas existentes de una forma poco comprensible, por ejemplo:

existe un problema en el inodo 40834, desea fijarlo ?.

no nos quedar otro remedio que decir que si.

Si aun as no se puede reparar el sistema, puede ser debido a que el superbloque se haya corrompido.
Dependiendo del tipo de sistema, pueden guardarse copias de seguridad de este superbloque a
intervalos definidos, por ejemplo en ext2 cada 8 kilobytes (existe un comando para modificar los
parmetros de un sistema extendido llamado tune2fs) y as restaurar una de las copias con:

fsck t ext2 b 8193

Si incluso esto falla (extrao y doloroso), conviene recurrir a la religin o a algn gran experto. Lo ms
normal es simplemente chequear el sistema de ficheros que nos interese. Por ejemplo, si lo quisiramos
hacer con un disquete (desmontado y compatible con windows) deberamos ejecutar:

fsck -t msdos /dev/fd0

y nos respondera con:

Parallelizing fsck version 1.18 (11-Nov-1999)


dosfsck 2.2, 06 Jul 1999, FAT32, LFN
/dev/fd0: 0 files, 0/2847 clusters

ya que siempre intentar hacer el chequeo en paralelo.

7.5. Control

Una tarea importante de un administrador es controlar el uso de disco por parte de los usuarios, esto se
puede hacer de dos maneras: una sometiendo a presin a los usuarios de alguna manera y otra
poniendo alguna cuota de disco (si no se tiene un sistema de cuotas otra solucin consiste en poner a
determinados usuarios en una particin con un tamao limitado). Esto se puede hacer con antelacin (a la
hora de construir el sistema de ficheros) o a posteriori.

El gasto de disco usado se puede obtener con dos comandos: du y df:

 du nos dar informacin sobre el gasto de disco por ficheros y directorios de forma recursiva, la
informacin ser ofrecida por directorios de abajo a arriba. Esta informacin puede darse de varias
maneras dependiendo de las opciones que se utilicen: -b en bytes, -k en kilobyes (o bloques), -h
en formato humano, etc. Una opcin muy til es -s (sumario) que nos da slo los totales, en vez
de todo el rbol.
 df nos dar un resumen del gasto por sistemas de ficheros montados. Tiene las mismas opciones
que el anterior, pero adems, aparte de darnos la informacin en bloques, nos la puede dar en
inodos, es decir, en nmero de ficheros. Esta informacin la podemos utilizar en las cuotas de
disco, ya que se pueden poner de dos clases: bien por espacio o bien por nmero de ficheros.

A la hora de fijar un cuota, se podr introducir un periodo de gracia en el que los usuarios puedan
sobrepasar esa cuota antes de que el sistema les bloquee su funcionamiento normal, pidiendo
perentoriamente que liberen espacio de disco. La filosofa de la cuota es la siguiente: hay dos parmetros:
el lmite blando y el duro. Cuando el usuario sobrepasa el blando es avisado por el sistema para que
libere espacio, el duro jams se puede sobrepasar. Como hemos dicho, se puede especificar un tiempo
de gracia para el lmite blando (por defecto est entre 3 y 7 das) pasado el cual, ambos lmites igualan su
propsito y el usuario ser bloqueado (no puede hacer nada til salvo liberar espacio).

Para que el sistema de cuotas funcione, se debe dar un requisito: el kernel debe estar notificado de que el
sistema est implantado (conviene recordar que no siempre es as, y que en muchos casos no est ni
siquiera instalado el sistema de cuotas). Esto se hace, o bien de forma permanente, poniendo para
alguna unidad en el fichero de montaje /etc/fstab como opcin quota (no hacer caso de que est
opcin sea ignorada), o bien de forma temporal utilizando el comando quotaon. Una vez hecho,
aparecer un fichero llamado quotas en el directorio raz de la unidad (particin) elegida.

Modernamente, y esto ocurre en GNU/Linux, el sistema de cuotas puede ser puesto a los usuarios
individuales o a los grupos, lo que permite un poco ms de juego a la hora de poner las mismas,
desgraciadamente, cuando un usuario puede estar en varios grupos, no tiene mucho sentido. Si
utilizamos este sistema, podremos tener dos ficheros de cuotas: quota.user y quota.group en el
mismo sito de quotas, que no estar.

Los comandos relacionados con las cuotas son los siguientes:

 quotaon. Comando en /usr/sbin. Tiene su contrapartida en quotaoff. Es el encargado de


notificar al kernel (sistema) que ha sido activado el servicio de cuotas.
 quotacheck. Comando de /sbin. Realizar un chequeo del sistema de ficheros indicado (bien
con la etiqueta o directorio de montaje, bien con la unidad de /dev) y crear o actualizar el
fichero de cuotas, sea cual sea.
 repquota. Comando en /usr/sbin. Dar un resumen de cmo estn las cuotas para una unidad.
 edquota. Comando en /usr/sbin. Servir para cambiar las cuotas (o bien el tiempo de gracia
con -t). Este comando llamar al editor por defecto (si no se ha cambiado ser el vi) para editar
un fichero donde estn definidas las cuotas para el usuario (por defecto) o el grupo invocado. El
aspecto de ese fichero podra ser:

Quotas for user alumno:

/dev/hda5: blocks in use: 384, limits (soft = 1000, hard = 1100)

inodes in use: 94, limits (soft = 500, hard = 550)

Un inconveniente de las cuotas es que pueden reducir el rendimiento de un disco incluso hasta un 30%,
por eso se suelen poner en determinados directorios de usuarios, pero casi nunca en el directorio raz,
que es donde se desarrolla la mayora de actividad de disco.

Las cuotas en Red Hat tambin se pueden establecer con la herramienta grfica Linuxconf, en el
apartado de gestin del sistema de ficheros.
7.6. Copias

La realizacin de copias de respaldo (backup) es posiblemente la tarea ms importante, conocida y


tediosa de todo administrador de sistemas. Y es la ms importante porque hay cientos de maneras
creativas de perder datos, desde desastres naturales, a problemas hardware o software, pasando por
acciones involuntarias no deseadas.

Antes de ver como se hace una copia de respaldo conviene estar familiarizados con los distintos
dispositivos hardware que existen y las diferentes tcnicas (sistemtica) que se utilizan para realizar
verdaderamente una copia de seguridad fiable y eficaz.

En lo que se refiere a los dispositivos (media) sobre los que podemos realizar un backup los podemos
dividir en tres tipo bsicos:

 Disquetes. Es el peor media sobre el que realizar copias, ya que es con diferencia el ms pequeo
en capacidad y rapidez, lo que hace que el costo por megabyte sea uno de los ms elevados. La
gran ventaja este medio es su gran disponibilidad.

 Disco Duro. Sera la mejor forma de hacer un backup si su disponibilidad fuera adecuada, pero la
verdad es que pocas veces se puede disponer de otro disco duro para hacer exclusivamente un
backup, adems sera conveniente que el disco duro estuviera conectado en otra mquina, de
nada sirve hacer un backup de una parte de un disco en otra parte.

 Cinta y otros dispositivos. La cinta es el dispositivo genuino para hacer backup, pero actualmente
existen otros dispositivos como los flopticals o los cd-rom de una o varias escrituras para hacer
copias. A la hora de escoger el dispositivo, tendremos que tener en cuanta, de acuerdo a nuestras
necesidades, sus caractersticas, las ms importantes son: costo, capacidad de almacenamiento,
disponibilidad y rapidez. Veamos en la siguiente tabla comparativa las caractersticas de diferentes
medios de almacenamiento (M significa magntico y O ptico):

Medio Cap. med. Coste Tipo Reu. Acceso


Disquete LS 120 Mb. 1800 M SI Random
Cartuchos (Travan) 1 Gb. 4000 M SI Secuencial
Cinta DLT 15 Gb. 7000 M SI Secuencial
JAZ 2 Gb. 17000 M SI Random
flopticals 500 Mb. 1500 M/O SI Random
Cartucho QIC 4 Gb. 3000 M SI Secuencial
Cintas (Obsoletas) 200 Mb. 2500 M SI Secuencial
CD-ROM 600 Mb. 200 O NO Random
CD-ROM WR 600 Mb. 500 O SI Random
Cartucho 8mm. (exabyte) 5 Gb. 2000 M SI Secuencial
DAT 4mm. (DDS) 5 Gb. 4000 M SI Secuencial

Un parmetro interesante de calcular es el coste en pesetas por megabyte, donde como se ve,
obtendramos ventajas en el ltimo formato.

En lo que se refiere a la sistemtica, tenemos que tener en cuenta que la copia de un sistema de ficheros
completa es bastante costosa de hacer y puede requerirnos varias cintas (si ste es el dispositivo
elegido). Por eso existen dos tipos de copias de respaldo: las absolutas que comprenden todo el sistema
y las incrementales que son copias parciales con respecto a la anterior, es decir, slo se copian los
ficheros modificados respecto de la ltima copia, ya sea absoluta o incremental.

Por eso se debe disear una planificacin de copias, scheduling, de acuerdo a nuestras necesidades, es
decir, la actividad de nuestros sistemas de ficheros, la capacidad del dispositivo escogido, el nivel de
redundancia que queremos y el nmero de cintas (u otro media) que podemos comprar.

Si el sistema de ficheros es menor que la capacidad de la cinta, el esquema puede resultar muy sencillo,
hacer copias de seguridad absolutas por la noche cada da. Esto no suele ser as por lo que se escogen
planificaciones ms sofisticadas (incluso siguiendo el algoritmo de las torres de Hanoi), la ms usual
suele ser hacer una copia completa por ejemplo los domingos (da de menor uso supuestamente) y
copias incrementales cada da por la noche. Esto se puede modular teniendo en cuenta, como hemos
dicho, la caractersticas de nuestro equipo: no todos los sistemas de ficheros tienen la misma actividad,
cuanta ms actividad mayor deber ser la frecuencia de la copia, siendo innecesario hacer copia de
algunos directorios como el /tmp, si el nmero de cintas y su capacidad es pequeo, deberemos reducir
el rgimen de copiado y por ltimo deberemos tener en cuenta en grado de redundancia, normalmente se
debern tener dos copias del sistema que debern ser guardadas en distintos sitios por razones de
seguridad y adems porque cuando estemos haciendo una copia el sistema tambin puede fallar y
quedarnos sin el sistema y sin la copia.

Cmo podemos realizar lo explicado hasta ahora con UNIX/LINUX? Existen una serie de comandos
para realizar las copias de seguridad, adems de para el empaquetado. Los ms usuales son:

 dump / restore.
 tar, cpio.
 gzip / gunzip, zip / unzip, compress / uncompress.

La primera pareja de comandos es la ms habitual a la hora de hacer copias de seguridad, las otras dos
(o su combinacin tar / gzip) son ms utilizadas para hacer copia de ficheros para mover entre equipos (o
si se prefiere copias de seguridad domsticas).

El comando dump lo que hace bsicamente es empaquetar un conjunto de ficheros (teniendo en cuenta
el anterior dump a travs de una pequea base de datos) en un gran archivo que es volcado en un
dispositivo externo. Adems tiene como ventajas que ese archivo volcado puede estar localizado en
varias cintas, ya que segn sus clculos lo dividir en varios volmenes, que puede estar compuesto de
cualquier tipo de ficheros, incluso de /dev o con agujeros, que los permisos y fechas son guardados, y
que las copias pueden seguir el esquema incremental que hemos fijado. La desventaja relativa (ya que
cada sistema de ficheros tiene una actividad) es que dump slo puede hacer copias de un nico sistema
de ficheros, por lo que si tenemos un disco partido, sern necesarios varios dump, adems estos
sistemas de ficheros debern ser locales (no NFS) aunque la unidad de cinta puede estar en otra
mquina si usamos rdump (dump remoto).

Para poder hacer copias incrementales, dump utiliza un sistema de niveles, desde el cero hasta el nueve.
El nivel cero indicar un volcado (dump) absoluto, el resto de niveles sern relativos al anterior (no tienen
por qu ser consecutivos). As, podemos utilizar, siguiendo nuestra supuesta planificacin, un nivel cero
los domingos y el resto de los das un nivel superior, de uno a seis (o cualquiera de las combinaciones
siempre que se usen nmeros de menor a mayor). Para ello dump utiliza el fichero /etc/dumpdates
(pequea base de datos) que actualiza en cada copia siempre que usemos la opcin -u.

Los argumentos habituales de dump sern: el nivel de copia, las opciones (normalmente -u), el
dispositivo de salida (en algunos casos son la opcin -f) y el directorio (o sistema de ficheros) sobre el
que queremos hacer la copia. Adems, deberemos tener cuidado con la longitud de la cinta que estamos
usando (si hacemos varios dump en una cinta no se deber rebobinar automticamente), ya que si
sobrepasamos sta, el dump se estropear. dump asume unos determinados parmetros para cada
dispositivo (incluido el por defecto si no usamos -f), si estos no coinciden con la cinta que hemos
introducido en esa copia deberemos usar las opciones -s y -d que indicarn el tamao y la densidad de
la misma. Tambin se puede usar la opcin -a que indicar que se escriba hasta el final de la cinta, esto
es til cuando tenemos varios volmenes en una cinta o se hace un backup con compresin.

En el siguiente ejemplo haremos una copia absoluta (0) adaptando el fichero /etc/dumpdates, en el
dispositivo st0 del directorio /usr/src:

/sbin/dump -0u -f /dev/st0 /usr/src


Siempre que realicemos unas copias de respaldo tendremos que tener en cuenta los siguientes consejos
de la abuela:

 Es conveniente, cuando se tiene una red de computadores, centralizar las copias de backup en
uno solo utilizando rdump. As la administracin se har ms fcil.
 Las cintas u otros medios usados para hacer el backup debern estar etiquetados de forma
unvoca y clara. Una cinta sin etiquetar ser en la prctica una cinta en blanco.
 Seleccionar un intervalo temporal entre copias adecuado, ni tan pequeo para sobrecargar al
administrador y la mquina, ni tan grande como para correr riesgos de prdidas de datos
importantes.
 Escoger los sistemas de ficheros de forma adecuada. Si hay un sistema de ficheros que
prcticamente no sufre cambios es innecesario hacer sobre l una copia absoluta de forma
peridica. Al igual pasa con el directorio /tmp.
 Si se tienen dispositivos de alta capacidad como las dds, no cuesta mucho programar el comando
cron para que nos haga una copia incremental cada noche de los sistemas con bastante actividad.
 Sera conveniente siempre hacer sistemas de ficheros ms pequeos que el dispositivo de
volcado.
 Cuando se pueda, sera conveniente guardar las cintas en un sitio distinto al de otra copia o del
computador, y a ser posible, en un sitio seguro, dependiendo de las necesidades del usuario
(empresa).
 Siempre es conveniente, para mantener la coherencia de las copias, hacerlas en periodos de baja
actividad del sistema, incluso hay aplicaciones de backup que lo aseguran.
 Siempre que se hace una copia conviene, aunque se tarde ms tiempo, hacer una comprobacin
de lo copiado. En muchas ocasiones cuando se va echar mano de un backup resulta que est
estropeado o no realizado cuando ya es demasiado tarde. Veremos en los siguiente prrafos como
hacerlo.
 Como regla general siempre hay que aplicar la ley de Murphy y ponerse en el peor caso.

Una vez que hemos realizado la copia de respaldo, deberemos tener una forma de poder comprobar lo
escrito y adems leerlo en caso de apuro. Esto se realiza con el comando restore. Las opciones ms
normales en LINUX son las siguientes:

 C: Hace una comprobacin del sistema de ficheros guardado, comparndolo con el que est en
disco.
 i: Este modo permite la restauracin interactiva de los ficheros guardados en una copia hecha con
dump. Es el mtodo recomendado cuando se quieren hacer extracciones de ficheros seccionados.
Cuando se ejecuta as, el comando ejecuta una shell que nos permitir:
 Aadir con add ficheros a restaurar.
 Cambiar de directorio con cd.
 Quitar ficheros a extraer con delete.
 Extraer los ficheros seleccionados con extract.
 Ejecutar ls y pwd para ver un directorio y decirnos cul es.
 Ejecutar Quit para salir.
 r: Extrae (restaura) un sistema de ficheros completo (antes de recuperar un sistema completo
deberemos asegurarnos que el problema que lo caus ha sido eliminado). Antes de poder
proceder, el sistema a restaurar deber haber sido creado y montado. Una vez hecho esto,
buscaremos el backup de nivel cero (absoluto o completo) ms reciente y ejecutaremos restore r.
Despus restauraremos en el mismo orden en que fueron hechos con dump, los posteriores
respaldos incrementales. Si debemos movernos por una cinta con varios volmenes, tenemos el
comando mt para posicionarnos donde nos interese.
 x: con un fichero o directorio de argumento lo extrae del respaldo instalado.

Los comandos dump y restore no son los nicos comandos para realizar copias, de hecho son los
mejores para hacer backup de la forma que hemos indicado, pero por ejemplo son demasiado complejos
para copiar en algn sitio (cinta, disquete, otra parte del disco, ...) un conjunto ms o menos pequeo de
ficheros.

El primero de ellos es el comando tar que lo que hace es empaquetar en un nico fichero un conjunto de
ficheros y directorios que queramos copiar, tambin servira para realizar un backup de algo que
preveamos con seguridad que necesitaremos restaurar posteriormente, es decir, es el perfecto sustituto
para copiar una serie de ficheros de un medio a otro. Adems tiene la ventaja que restituye los atributos
del fichero como fueron almacenados (-p), pero tambin cuenta con las siguientes desventajas: no
maneja varias cintas, ni ficheros de /dev, ni caminos de ficheros de ms de 100 caracteres (la versin
GNU si lo hace pero desde un tar viejo no lo podramos leer) y lo que escribamos tiene que caber en el
tamao de la cinta. Las principales opciones de tar son:

 -A, --catenate, --concatenate. Aade ficheros a un tar.


 -c, --create. Crea un nuevo archivo tar.
 -d, --diff, --compare. Encuentra diferencias entre los archivos de tar y los del disco.
 --delete. Borra ficheros del tar, no se puede usar en cintas (acceso secuencial).
 -r, --append. Aade ficheros al final del tar.
 -t, --list. Lista el contenido de un tar.
 -u, --update. Slo aade ficheros que sean ms nuevos que los del tar.
 -x, --extract, --get. Extrae ficheros de un tar.

Tambin se suelen usar: -v para que nos indique lo que est haciendo, -p para preservar los permisos
de los ficheros y -f para indicar un fichero tar o un dispositivo distinto del de por defecto. Por ltimo,
indicar que los ficheros tar suelen tener esa extensin. As, para copiar todo el sistema de directorios en
una cinta por defecto se debera hacer algo tan sencillo como:

tar c /

Si fuera otro dispositivo lo tendramos que indicar, por ejemplo copiar un directorio personal en el
disquete:

tar cf /dev/fd0 /home/pepe

y si quisiramos recuperar un fichero (fichero.doc) deberamos ejecutar:

tar xvf /dev/fd0 /home/pepe/fichero.doc

Para los sistemas ATT, aunque est prcticamente generalizado, existe una versin de tar que es cpio.
Se puede mirar man cpio para los detalles de un sistema particular.

Hasta ahora hemos copiado ficheros empaquetados sin ningn tipo de compresin. Si queremos
comprimir-expandir un fichero podremos utilizar la pareja de comandos compress-uncompress, que es
la utilidad ms comn en todos los sistemas UNIX. Si compress puede proceder a la compresin del
fichero especificado (si no se especifica nada, se tomar la entrada y salida estndar [esto estar
indicado para utilizar canalizacin]), crear un fichero con el mismo nombre al que se le ha aadido la
extensin .Z. Esto se suele utilizar mucho con ficheros .tar. Utilizando la opcin r podemos hacer una
compresin de un directorio de forma recursiva.

En sistemas GNU como LINUX, y actualmente en la mayora de sistemas, existe una pareja de comandos
que hace mejor esta labor, son los comandos gzip y gunzip. En este caso, la extensin de los ficheros
comprimidos ser .gz. Con ellos obtendremos en un poco ms de tiempo que compress reducciones de
tamao ms grandes, todo lo contrario que ocurre con la utilizad pack que es ms rpida pero obtiene
poca compresin, adems de que prcticamente est obsoleta.

7.7. Bsqueda
P ara acabar este captulo, revisaremos brevemente algunos comandos que nos pueden servir para
localizar ficheros o directorios dentro de un sistema de ficheros general.

 El primer mtodo y ms directo es usar el comando whereis, que nos servir para localizar
ficheros binarios b, fuente s o en pginas de manual m. Si no tenemos este comando en
nuestro sistema siempre podemos utilizar la canalizacin clsica: ls l / | grep fichero.
 Otra forma ms sofisticada de buscar ficheros es usando el comando GNU locate o su versin
segura slocate. Este comando crear un ndice asociado a una base de datos para hacer que las
bsquedas sean mucho ms rpidas, si queremos crear esa base de datos desde el directorio raz
deberemos usar la opcin u. Una vez construida, slo le deberemos dar la palabra a buscar y el
comando nos dar donde aparece la misma. Como se observa, este comando esta ms orientado
a buscar patrones de nombres de ficheros que ficheros en si, ya que para esta ltima labor ya
tenemos el whereis.
 Por ltimo tenemos la orden find (vista anteriormente) que busca desde un directorio indicado,
opcionalmente como primer argumento, los ficheros que nosotros le pedimos buscar de acuerdo a
una condicin expresada como segundo argumento opcional que comenzar usualmente con
apstrofes. Esta condicin puede estar compuesta de opciones, preguntas y acciones separadas
por operadores. Como preguntas se aceptan multitud de opciones como el tipo de fichero, la hora o
minutos del ltimo acceso, tipos de permiso, patrn de nombre, etc.

Por ltimo, siempre podremos pedir al sistema informacin sobre algo con:

 man para informacin sobre un comando o llamada que est en el manual.


 whatis. Busca en la base de datos de comandos y palabras especiales para ofrecer informacin de
ellos en pantalla.
 apropos. Mismo propsito que el anterior.
8. Gestin de Recursos

8.1. Gestin del Procesador

Aunque la forma en que podemos ejecutar nuestros programas, incluidos los del administrador, no entra de lleno en lo
que es la tarea de administracin, siempre es conveniente saberla, incluida alguna que si es propia de l, como la
ejecucin peridica de ciertas tareas a travs del demonio crond.

Podemos esquematizar la ejecucin de programas en dos tipos: ejecucin presencial (la que menos interesa al
administrador) y ejecucin no presencial (realizada por el programador para grandes tareas o por el administrador para
servicios en baja carga).

Ejecucin presencial: background y manejo de jobs

Dentro de la ejecucin presencial tenemos a su vez dos tipos: la ejecucin en foreground y la ejecucin en background.
La primera es la normal, la segunda es la que se realiza cuando queremos que el control del terminal vuelve a la shell y
no al programa ejecutado. Hay que tener en cuenta que las salidas del programa se podrn mezclar en el terminal con
el prompt y los comandos que introduzcamos. Para realizar la ejecucin de esta manera basta con poner un "&" detrs
del comando:

$ programa > salida &

Cuando se ejecutan varios procesos en background se puede ver si realmente se estn ejecutando con el comando ps
(status de proceso) que no tiene argumentos y en el cual las opciones nos dicen que procesos representar (todos los
del sistema, los de un usuario, etc.) y su formato. La forma ms normal es:

$ ps
PID TT TIME COMMAND
3243 30 0:11 ksh
3254 30 0:01 ps

la informacin que aparece se refiere a la identificacin del proceso (PID), al nmero de terminal, al tiempo empleado
en la ejecucin y al nombre del proceso.

Adems

/proc - pseudo-sistema de ficheros asociado a los procesos. Es empleado como interfase a las estructuras de datos del kernel
asociado a los procesos. Permite visualiar el estado de cada proceso (statm),

[vpuente@bonito /proc]$ ls /proc/


1 18570 20219 23902 24908 29068 348 4464 827 9609 bus ioports mounts swaps
10735 18572 20224 23905 24922 29069 349 4467 828 973 cmdline kcore mtrr sys
10736 18917 21097 24002 24945 29070 359 476 8381 974 cpuinfo kmsg net tty
13352 18919 21368 24004 24988 29071 4 5 8391 975 devices ksyms partitions uptime
13648 18920 21369 24006 27536 29072 427 507 902 976 dma loadavg pci version
14128 18923 22844 24131 28453 29073 429 527 9077 977 fb locks rtc
14244 19566 23353 24147 28980 29074 430 566 9078 9987 filesystems mdstat scsi
17049 19691 23754 24809 29046 3 431 6 9079 9989 fs meminfo self
17055 19983 23899 24817 29056 307 432 615 955 9990 ide misc slabinfo
17899 2 23901 24907 29067 317 446 819 956 9991 interrupts modules stat
[vpuente@bonito /proc]$ ls 24817
cmdline cpu cwd environ exe fd maps mem root stat statm status

fd Ficheros Abiertos por el proceso


maps Rangos de memoria fsica asociada al proceso
stat estado actual del proceso: PID, PPID, utime, etc...
ps p. ej. accede a este sistema de ficheros para informarnos el estado de los procesos.
pstree
Conociendo el PID (nmero) de un proceso siempre lo podemos abortar con el comando kill, al cual daremos como
argumento el nmero del proceso.

Los procesos son generales al sistema, pero la shell permite tratar a los procesos creados en una sesin de una forma
ms sencilla, son los jobs (no hay que pensar que los jobs sean diferentes a los procesos, simplemente es una forma
ms sencilla de numerarlos, pertenecen a una sesin de trabajo y empiezan por cero). De esta manera, nosotros
podemos suspender un proceso que se est ejecutando (foreground) con la pulsacin de ctrl-z (no confundir con
ejecucin en background, en sta, el proceso se est realmente ejecutando pero en segundo plano) y mandar un
nuevo proceso a ejecutar. Para ver la lista de procesos suspendidos, tenemos en comando jobs, que nos dar una
lista de los mismos empezando con el identificador 0 entre corchetes. Para ejecutarles slo tenemos que utilizar los
comandos fg y bg, que ponen respectivamente al job en ejecucin foreground o background.

Ejecucin no presencial

Como su nombre indica, la ejecucin no presencial se realiza cuando queremos ejecutar un programa y no estar
presentes, para ello nos deberemos asegurar que el programa no va a pedir datos interactivos, o si los va a pedir,
hacer que estos procedan de un fichero y que la salida del programa no se realice en pantalla, si no a algn dispositivo
o fichero.

Dentro de la ejecucin no presencial podemos distinguir dos tipos: por un lado la ejecucin futura que realizarn los
usuarios del sistema cuando quieran que los programas se ejecuten a una determinada hora, o la ejecucin a cargas
bajas, cuando un programa por polticas de administracin de la CPU no pueda ejecutarse en foreground por consumir
muchos recursos del sistema y afectar a otros usuarios, y por otro lado la ejecucin peridica, tpicamente
administrativa, realizada por root a travs del demonio crond.

La ejecucin futura y a cargas bajas se puede realizar respectivamente con los comandos at y batch, internamente
ejecutados con el demonio atd. Este demonio se controla con el comando atd, que en otros sistemas se llama atrun.
Los comandos relacionados con la ejecucin futura sern:

Atd. Ya mencionado. Se utiliza para controlar al demonio de ejecucin en dos aspectos: con l la
carga media de trabajo por debajo de la cual se ejecutarn los trabajos en batch, por defecto est al 80%
y con b el intervalo en segundos entre dos ejecuciones en batch, por defecto 60 seg.

Batch. Sirve para ejecutar programas en batch o background se activar cuando la carga del sistema
lo permita, o dicho de otra manera, cuando el trabajo interactivo normal est bajo (controlable con atd). A
este comando con q se le puede cambiar la cola de ejecucin por defecto (existen varias colas de
ejecucin nombradas desde la a a la z, la cola a con ms prioridad [menor nmero nice] ser la por
defecto para ejecuciones con at, la cola b ser para ejecuciones en batch), con f indicaremos el fichero
(normalmente en forma de una macro que se encargar de ejecutar lo que queremos) de ejecucin, si no
se pone nada se pedir de forma interactiva, con m indicaremos por mail al usuario la terminacin del
programa, y por ltimo opcionalmente se puede poner el tiempo futuro en el que queremos que se ejecute
(ver siguiente apartado).

At. Para ejecutar programas en un futuro. Tiene las mismas opciones que batch, pero ser
obligatorio poner un tiempo que estar en forma de POSIX.2 extendido. As, se puede poner en formato
de hora como HH:MM; a unas horas predeterminadas: midnight, noon y teatime; con fecha como
MMDDYY o MM/DD/YY o MM.DD.YY (mes, da ao, siendo el ao opcional); o de forma relativa como
tomorrow (existen combinaciones de las anteriores y otros formatos como nombrados de mes, incluso
con formato de 12 o 24 horas, pero lo ms sencillo es como se ha indicado). De est manera si
quisiramos ejecutar un programa (dndosele de forma interactiva) a las 23 horas y 59 minutos del 14 de
julio de 2001 deberamos ejecutar entre otras posibilidades:

at 23:59 07.14.01

si no hemos usado f (modo interactivo) nos preguntar lo que queremos ejecutar, para salir utilizaremos
^d. Como nota final del comando, deberemos asegurarnos que la fecha y la hora estn bien con el
comando date.

Atq. Con este comando veremos una cola (q) de trabajos a ejecutar, por defecto la a. Si somos el
administrador veremos todos los trabajos, si somos un usuario slo veremos los nuestros. Cada trabajo
vendr identificado con un nmero, estando almacenados internamente en el directorio de
spool: /var/spool/at.

Atrm. Aceptar (si somos los propietarios) una identificacin de trabajo at visto con atq y lo quitar de
la cola.
No todos los usuarios pueden ejecutar el comando at, esto depender de la poltica de administracin del sistema.
Para ello existen dos ficheros de control: /etc/at.allow y /etc/at.deny. Si los ficheros no existen slo el
administrador podr usar at. Si el primero existe, slo los usuarios que figuren en l podrn usar at. Si no existe, pero
existe el segundo, todos los usuarios no mencionados en l podrn usar at (si el fichero existe pero no contiene nada,
situacin por defecto, todos los usuarios podrn usarlo).

Ejecucin no presencial peridica

El otro tipo de ejecucin no presencial es la realizacin de tareas peridicas, tpicamente administrativas. Estas tareas
sern ejecutadas por el demonio crond (cron procede de crongrafo), que leer el fichero de cron
(normalmente /etc/crontab) donde estarn las instrucciones a ejecutar y sus periodos. En muchos sistemas este
demonio se despertar cada minuto y revisar el fichero de rdenes (crontab) cada minuto, en otros sistemas ms
modernos, el analizar el fichero de rdenes hace que el demonio se despierte slo a la siguiente hora en que le toque
ejecutar algo.

Como casi siempre, existen dos grandes versiones de cron, una de BSD, donde el fichero de cron reside
en /usr/lib y se distinguen dos clases de fichero: el cron local crontab.local y el cron de red crontab,
siendo estos ficheros slo modificados por root (aunque se pueden ejecutar los comandos indicados en modo usuario).
La edicin del crontab se realiza a mano y se advierte del hecho, mandando al demonio crond una seal hangup. La
otra versin es la de ATT escrita por Paul Vixie de DEC, es ms abierta y la que se suele utilizar siempre. Existe un
directorio de cron donde estn los ficheros de cron (de cada usuario) que son remitidos a ese directorio a travs de un
comando crontab, que es el que se encarga de avisar a crond para que se actualice. Adems en ATT se puede
explicitar que usuarios pueden ejecutar crontab siguiendo una poltica idntica al comando at, pero en este caso con
los ficheros: /etc/cron.allow y /etc/cron.deny.

Independientemente de la versin (actualmente casi todas siguen POSIX), el formato clsico del fichero crontab
consta de lneas de siete campos: minuto (de 0 a 59), hora (de 0 a 23), da (de 1 a 31), mes (de 1 a 12), da de la
semana (de 1 a 7, si es 0 es domingo tambin), usuario (si es el crontab del sistema, sino ya est diferenciado por
ficheros) y comando (las lneas de comentarios empiezan por #). Los campos estarn separados por espacios, ,
significarn varios valores para un campo, / pasos y - un rango, un asterisco en un campo significa que ste no
importa. As, 0,30 * 13 * 2 significa cada media hora del martes y cada media hora del da 13 del mes, no slo del
martes 13; y */2 * * * * significa cada dos minutos.

Adems, en los ficheros modernos, se pueden definir y redefinir variables de entorno. Por ejemplo cron coge sh como
SHELL y LOGNAME (USER en BSD) y HOME de /etc/passwd si tiene su usuario (cron) definido en /etc/passwd.
Adems, la variable MAILTO nos indicar a quien se manda un mail cuando se ejecuta un comando, si est vaco ()
no ser enviado mail y si no est, ser enviado al usuario propietario del crontab (hay que tener en cuenta que los
comandos que pongamos sean los adecuados; no es adecuado poner un comando que tiene la salida por pantalla,
porque entre otras cosas, si tenemos puesta la variable MAILTO, la salida ir al mail y no a la pantalla, esto es
importante para las pruebas de funcionamiento que hagamos, de todos modos, la filosofa de cron no es hacer ejecutar
programas interactivos, sino servicios que se necesita que se ejecuten cada cierto tiempo sin intervencin humana).

A continuacin aparece el fichero crontab general de mi sistema residente en /etc, donde se definen las variables que
hemos comentado antes de aparecer la parte ejecutable:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

# sysstat
0 * * * 0,6 /usr/lib/sa/sa1 600 6 &
5 19 * * * /usr/lib/sa/sa2 -A &

Despus, como hemos dicho, cada usuario autorizado puede tener el suyo en /var/spool/cron. En este directorio
(en algunos sistemas en vez de /var ser /usr) aparecern los nombres de los usuarios que hayan realizado el
crontab, estos ficheros no se editan, sino que son generados por el sistema al ejecutar crontab. El proceso sera el
siguiente:

1. Crear un fichero que tenga una o varias lneas con el formato de crontab (5 campos de tiempo, uno
de usuario [opcional] y otro con el comando ejecutable por sh).
2. Ejecutar el comando crontab con el nombre del fichero.

3. Comprobar con la opcin l que est.

con lo cual aparecer algo como esto:

# crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (trabajo.cron installed on Fri Jan 12 14:47:40 2001)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
*/2 * * * * cp /root/pepe.c /root/jose.c
*/2 * * * * echo "por fin ha funcionado"

si queremos editarlo despus, usaremos crontab e (aparecern solo las dos ltimas lneas en el ejemplo) y si
queremos borrarlo crontab r.

El sistema guarda en el directorio de registro de sucesos: /var/log, uno o varios ficheros referidos a cron (llamados
precisamente as), donde podremos encontrar lo que ha estado ejecutando el demonio, as como en messages los
cambios hechos por crontab. Esto puede ser til para ver si realmente se est haciendo lo que hemos indicado.

Existe un comando parecido al entorno cron que es el anacron, que est indicado para sistemas que no estn
permanentemente encendidos. El periodo se indica en das y el fichero de rdenes ser /etc/anacrontab. La
dinmica es parecida a cron (se puede ver informacin como siempre con man anacron). Conviene recordar que man
tiene una posible opcin que es una cifra indicando la seccin del manual donde queremos buscar la informacin
pedida. As, man crontab nos buscar informacin sobre el comando, pero man 5 crontab nos mostrar
informacin sobre el fichero de configuracin y su formato.

8.2. Monitorizacin

Existen varios comandos para monitorizar el funcionamiento del sistema on-line, los ms comunes son:
 top. Es un comando interactivo (acepta subcomandos) mucho ms potente que ps, que nos dar una
lista de los procesos ms activos del sistema, actualizndose cada cierto tiempo (puede ser configurado
con la opcin d o el interactivo s). En la cabecera de informacin muestra la lnea de uptime (se
puede conseguir tambin con el comando uptime); la lnea de las estadsticas de procesos: el nmero
total de ellos y el nmero de cada estado (ejecutndose, dormido, parado, terminado, etc.); el estado de
la CPU, dando porcentajes de uso de la misma en los diferentes estados: modo usuario, modo sistema,
modo nice (tareas que tienen el nmero nice negativo), y de inactividad (estas dos ltimas lneas pueden
ser ocultadas/mostradas con el subcomando t); y dos lneas con el estado de la memoria (total, libre,
usada y compartida), tanto real (fsica) como virtual (swap) que pueden ser ocultadas/mostradas con m.

Despus vendr informacin de los procesos, donde podremos obtener informacin de: el PID, pid; PPID,
pid del padre; UID, identificacin del usuario; USER, nombre del usuario; PRI, prioridad de la tarea; NI,
nmero nice; SIZE, tamao del cdigo y datos del programa en Kbytes; TSIZE, tamao del cdigo (no
sirve para procesos del sistema o con formato ELF); DSIZE, tamao de datos ms el stack asignado;
SWAP, tamao que reside en swap del proceso; RSS, tamao de la memoria fsica usada, incluyendo
libreras; SHARE, tamao de memoria compartida usada; STAT, estado del proceso (S, durmiendo, R,
ejecutndose, Z, zombie, T, parado, N, con nice positivo y W para swapeado); TIME, tiempo total de
CPU desde que arranc; %CPU y %MEM, porcentaje de CPU y memoria fsica desde la ltima
actualizacin; y por ltimo COMMAND que es el nombre del proceso.

Como hemos dicho, top es un comando interactivo que aceptar rdenes, de las que destacamos:
espacio o ^l para actualizar, h para ayuda, k para matar procesos, n para cambiar el nmero de
procesos a ensear, r para cambiar la prioridad (nice), y f para aadir campos. Adems podemos cambiar
entre el tipo de informacin con: c, t, m, l. Y ordenar los procesos por criterios con: N, A, P, M, y T. top
puede salvar la configuracin actual con W en un fichero de configuracin /etc/toprc.
 free. Ensea el estado de la memoria, tanto fsica como secundaria (swap). El aspecto y la informacin
presentada es:

# free
total used free
shared buffers cached
Mem: 62872 58580 4292
40948 6936 27984
-/+ buffers/cache: 23660 39212
Swap: 136512 5460 131052

 uptime. Nos dar la informacin que aparece en la primera lnea de top (tiempo que lleva el sistema
encendido, usuarios conectados y media de carga en el ltimos 1, 5 y 15 minutos), con un aspecto como:

#uptime
8:22pm up 1 day, 3:04, 3 users, load average:
0.40, 0.13, 0.06

 renice. Cambia la prioridad o bien a un proceso, o bien a un usuario o bien a un grupo. Para ello habr
que dar el nmero nice (ver curso de programacin) y respectivamente las siguientes opciones con sus
argumentos: p, u y g.

En lo que concierne a la monitorizacin del sistema, ste, en sus diferentes partes, guarda informacin
sobre los sucesos que ocurren en el mismo. Este almacenamiento se puede hacer de varias maneras
dependiendo de la capacidad del disco:

 Nulo. Se tiran los mensajes de sucesos, esto se hace desvindolos a /dev/null.

 Presentacin. Se ponen en pantalla haciendo un desvo a /dev/console.

 Rotatorio. Se guardan los mensajes de hoy, de ayer, de dos das, etc. en ficheros que tienen la extensin
nombre, nombre.1, nombre.2, etc., de esta manera, cada da que pasa, se van renombrando con un lmite
determinado que suele estar entre 4 y 8 das, es decir, entre 4 y 8 ficheros. Este mtodo es el que sigue
LINUX.

 Permanentes. En algunos casos, por seguridad, interesa tener estos ficheros guardados, esto se hace de
forma rotatoria, pero el ltimo fichero no desaparece sino que es almacenado en cinta o el sistema de
backup, normalmente de forma comprimida.

Los mensajes del sistema son configurables en /etc/syslog.conf, donde indicamos a donde tienen que ir los
mensajes. El aspecto de este fichero puede ser:

# Log all kernel messages to the console.


# Logging much else clutters up the screen.
#kern.* /dev/console

# Log anything (except mail) of level info or higher.


# Don't log private authentication messages!
*.info;mail.none;authpriv.none /var/log/messages

# The authpriv file has restricted access.


authpriv.* /var/log/secure

# Log all the mail messages in one place.


mail.* /var/log/maillog

# Log cron stuff


cron.* /var/log/cron

# Everybody gets emergency messages, plus log them on another


# machine.
*.emerg *

# Save mail and news errors of level err and higher in a


# special file.
uucp,news.crit /var/log/spooler

# Save boot messages also to boot.log


local7.* /var/log/boot.log

Los ficheros de registro o de syslog normalmente residen en el directorio /var/log y podremos encontrar ficheros
generados por el kernel, por cron, por el correo, por la red, etc. Adems podremos ejecutar el comando lastlog
en /usr/bin que interpreta el fichero lastlog en /var/log y que nos indicar para todos los usuarios, la ltima
entrada al sistema.

8.3. Dispositivos

Como se vio en el apartado de creacin de sistemas de ficheros y en el de el rbol de directorios, existe un directorio
donde estn todos los dispositivos del sistema llamado /dev. Bsicamente existen dos tipos de dispositivos, los de
bloque o acceso aleatorio y los de carcter o acceso secuencial, la gran diferencia entre ellos es que el de bloque
almacena los datos y estos pueden ser accedidos en cualquier orden (de forma aleatoria) y el de carcter no,
simplemente nos dar la siguiente ristra de bytes. Al hacer un ls l /dev veremos en la primera columna de datos una b
o una c que nos indicar el tipo de dispositivo, adems, antes de la fecha (en vez del tamao), veremos dos cifras que
son el nmero mayor y el menor (major y minor), el mayor indica al kernel cual de los controladores (hardware y sus
parte software el driver) corresponde al dispositivo y el menor el propio dispositivo (este nmero suele ser parte del
nombre del fichero). La construccin de este nombre suele ser un poco crptica - por ejemplo hda2 o sda2 - y en
algunos casos se suele hacer un enlace software (ln -s) con otro nombre ms claro - por ejemplo lo que se hace con
cdrom - .

Cuando se adquiere un nuevo dispositivo hay que crear un controlador (como se coment la creacin se suele hacer
con el comando mknod), la parte software del controlador (driver) que se encarga de realizar las operaciones asociados
al dispositivo - lecturas escrituras y control - debe suministrarse con el dispositivo. Esto en algunas ocasiones (muy
reciente o muy viejo) es difcil de conseguir en Linux.

Una vez que tengamos el driver, deberemos incorporarlo al sistema (ver captulo del kernel). Antiguamente estos
drivers formaban parte del ncleo y por tanto este deba compilarse de nuevo. Actualmente existen los mdulos que
son parte del software del sistema pero que no estn incluidos en el kernel y adems as se consigue aligerar al ncleo.
La filosofa es que los drivers muy utilizados estn en el ncleo y los poco utilizados en los mdulos, con la ventaja
aadida de que las pruebas se pueden hacer fuera del ncleo sin necesidad de compilarlo de nuevo.

Para visualizar los mdulos que existen en el sistema se puede utilizar el comando /sbin/lsmod o tambin ver el
directorio /proc/modules. Para cargar los controladores externos en primer lugar se incluirn en el
directorio /lib/modules y se cambiarn los ficheros /etc/modules y /etc/modules.conf
o /etc/conf.modules. Despus se usarn los comandos /sbin/insmod y /sbin/modprobe para realizar la
carga y la prueba (en algunos sistemas esto se hace de forma automtica por el demonio kerneld).

8.4. Impresora

Antes de empezar a trabajar con la impresora y configurarla, conviene tener en cuenta varios aspectos importantes.
1. La impresora es un recurso compartido, esto quiere decir que puede ser usado por varios usuarios a
la vez, con lo cual tiene que haber un arbitraje del recurso para evitar conflictos. Esto se consigue a travs
de un mecanismo de spooling, es decir, los trabajos de impresin no se mandan directamente al
dispositivo, sino que se almacenan en una cola, y es un programa el que prioriza estos trabajos y los
manda a la impresora secuencialmente.

2. Las impresoras modernas no son de texto puro, normalmente trabajan con un mapa de puntos, de
hecho, la calidad de una impresora se define en dpi (puntos por pulgada) que normalmente pueden ir de
300 a 1200. Adems, aceptan un lenguaje conocido como de descripcin de pgina (PDL) para colocar
las imgenes, pudiendo tener un mdulo de RIP, que no es ms que un sistema que convierte el PDF a
bitmap. Entre los PDL ms conocidos estn el PostScript de Adobe o el PCL (Lenguaje de comandos de
impresora) de Hewlett-Packard.

3. No se usa el mismo esquema de impresin en todas las mquinas UNIX, como casi siempre, existen
tres familias: las que siguen el esquema BSD (vanilla), las de ATT o una combinacin de ambos. En este
caso, casi nadie sigue el esquema de POSIX. La primera usa comandos del tipo: lpd, lpc, lpr, etc., la
segunda lpsched, lpadmin, lp, etc. La forma ms segura de distinguir cual es nuestro sistema es mirar que
demonio est ejecutndose, si es lpd ser de tipo BSD y si es lpsched de tipo ATT, ya que muchas veces
los comandos estn combinados o se aceptan todos. En el caso de Red Hat se utiliza el esquema BSD,
que actualmente es el ms seguido y al que nos referiremos a partir de ahora.

Siguiendo el mecanismo indicado de spooling, los elementos encargados de realizar este trabajo en el sistema UNIX
son:

lpr. Es el comando que utilizar el usuario para mandar trabajos de impresin. Cuando mandamos un
trabajo de impresin, este comando crea dos ficheros en el directorio de spool (cola de impresin), uno de
control, usualmente llamado cf o tf seguido de la identificacin del trabajo (un nmero), y otro de datos, df
ms el nmero comentado. Cuando estn creados los ficheros, lpr manda una notificacin a lpd. lpr se
puede usar con varias opciones: C para cambiar de prioridad al trabajo (cada prioridad viene marcada
desde la A [por defecto] hasta la Z [mayor prioridad]), h para quitar el encabezado, k para el nmero
de copias, m para enviar un correo si hay problemas de impresin, P para escoger la impresora, T
pone titulo al trabajo (se usar el comando pr), U especifica el usuario, y w para dar la anchura del
trabajo.

lpq. Servir para ver como est la cola de impresin. Con P podremos escoger la impresora y con
a nos dar informacin de todas.

lprm. Borrar un trabajo de la cola de impresin. Este trabajo se puede indicar de varias maneras:
nada, borrar el ltimo trabajo que el usuario haya enviado, usuario, borrar todos los trabajos de un
usuario, all, borrar todos los trabajos de esa cola. Se puede escoger la cola (impresora) con P y el
usuario con U.

/var/spool/lpd. Ser la cola de impresin. Usualmente habr un directorio por cada impresora
conectada al sistema, de hecho, este directorio tendr el nombre de la impresora. Por ejemplo, si slo
tenemos una impresora, sta se llamar lp y el directorio colgado de /var/spool/lpd tambin. Las
siguiente impresoras, a no ser que indiquemos lo contrario de llamarn lp1, lp2, etc.

/etc/printcap. Ser el fichero de configuracin de las impresoras. En el caso de Red Hat este
fichero ser modificado con la utilidad grfica printtool, que nos dejar aadir impresoras locales,
remotas en mquinas LINUX, Windows, Samba o NetWare, y con su propia direccin. Funciona como
una base de datos y debe ser creado antes de poder usar la impresora. Este fichero est compuesto por
definiciones de impresoras (los comentarios empiezan con #), que empiezan por su nombre (nombres
supletorios pueden ser dados detrs separador por |). Por cada impresora existen una serie de
definiciones identadas que empiezan y terminan por : (si forman parte de la misma definicin de
impresora y estn en distintas lneas, stas acabarn con una \), los tipos de definiciones (o variables
de printcap) las podemos agrupar es:

o Especificaciones de ficheros y directorios: Las principales variables son: sd, directorio


de spool; lf, fichero de errores; lp, nombre de dispositivo (si la impresora es en red ser
nulo); af, fichero de accounting.

o Informacin de acceso remoto: rm, mquina remota donde est conectada la impresora;
rp, nombre de la impresora remota.

o Filtros de impresin. of, fichero de salida, if, fichero de entrada.

o Parmetros. mx, tamao mximo de trabajo, br, ratio de baudios (slo para impresoras
conectadas por lnea serie), existen otras variables para cambiar ciertos bits de
comunicacin.

o Informacin de pgina. pw y pl para anchura y longitud de pgina y px y py para la


resolucin horizontal y vertical.

A continuacin aparece un ejemplo de un fichero printcap con una impresora conectada directamente a
la red con su propio nombre y direccin, con una impresora local y con una conectada remotamente en un
sistema UNIX:

##PRINTTOOL3## DIRECT
lp|cachon:\
:sd=/var/spool/lpd/lp:\
:mx#0:\
:sh:\
:af=/var/spool/lpd/lp/acct:\
:lp=/dev/null:\
:if=/usr/lib/rhs/rhs-printfilters//directprint:
##PRINTTOOL3## LOCAL
lp0:\
:sd=/var/spool/lpd/lp0:\
:mx#0:\
:sh:\
:lp=/dev/lp0:
##PRINTTOOL3## REMOTE
lp1:\
:sd=/var/spool/lpd/lp1:\
:mx#0:\
:sh:\
:rm=bonito.atc.unican.es:\
:rp=/var/spool/lpd/lp:\
:lpd_bounce=true:

lpd. Es el proceso de sistema o demonio encargado de leer la cola de impresin y mandar los
trabajos almacenados al dispositivo impresora. Cuando es despertado por lpr , coge el primer trabajo de
la cola (poltica FIFO que se puede cambiar con lpc) y verifica a travs de /etc/printcap si el trabajo
es para una impresora local o remota, en el primer caso chequea que haya un demonio creado para la
cola de impresin y si no lo hay crea uno que es una copia de si mismo (esquema tpico cliente/servidor),
en el segundo establece una conexin con el lpd de la otra mquina y le manda los dos ficheros, el de
control y el de datos.

Existir un fichero de filtro de entrada opcional, indicado en /etc/printcap, donde se podr hacer
alguna transformacin del formato de los datos a enviar a la impresora. Estos ficheros de filtro cada da
son menos importantes, de hecho en la mayora de las impresoras, si se necesitan, vienen con el
software de la misma.

lpc. Es el comando de control de la impresora. Servir para: habilitar o deshabilitar una impresora (o
todas), as como una cola de impresin (o todas); mover trabajos al principio de la cola (poltica de
planificacin distinta FIFO); ver el estado de impresoras, demonios de impresin y sus colas asociadas;
arrancar o parar servicios de impresin; bloquear o liberar trabajos de impresin; redirigir trabajos de una
impresora a otra; restablecer trabajos de impresin despus de que haya habido problemas y reimprimir
trabajos.

Printtool

En Red Hat es muy sencillo instalar una impresora, ya que disponemos de la herramienta grfica printtool, usable slo
por el administrador. Antes de instalarla, lo primero que deberemos de garantizar es que la impresora est soportada
por el sistema para, para ello podemos visitar: http://hardware.redhat.com/redhatready/cgi-bin/us/db-hcl.cgi para
cualquier tipo de hardware y especficamente para impresoras: http://www.linuxprinting.org/printer_list.cgi.

Una vez comprobado, arrancaremos la aplicacin, que tiene un aspecto como la siguiente figura:
En ella podremos editar, aadir o borrar impresoras. Estas impresoras pueden estar conectadas de muchas maneras,
en Red Hat 7.0 de cinco maneras: local, remota en UNIX, remota en Windows, remota en Net Ware y con su propia
direccin. Una ventana como la siguiente nos aparecer en pantalla:

Dependiendo del tipo de impresora que escojamos, habr que dar una serie de parmetros que rellenar de forma
automtica el fichero /etc/printcap sin ms molestias. En la siguiente figura aparece la ventana de datos de una
impresora local.

Cuando seleccionemos el filtro podemos tener problemas si nuestra impresora no aparece en la lista suministrada. La
solucin ms sencilla es encontrar uno parecido (del mismo fabricante, pero un modelo diferente). Despus se pueden
seleccionar otras opciones, como el tamao del papel y otro tipo de resoluciones (ver siguiente figura). Una vez
configurada la impresora iremos a la ventana principal de la aplicacin e intentaremos imprimir una pgina de prueba,
si no funciona deberemos cambiar el filtro. Existen otra forma ms sofisticada que es utilizando el lpdomatic de la
forma que se menciona en http://www.linuxprinting.org/lpd-doc.html.
Adems, los escritorios Gnome y KDE nos proporcionan a travs del men, dos aplicaciones ms de impresin, una
para controlar las impresoras de tipo HP Laser Jet y otra para gestionar las colas de impresin de forma grfica (lo que
se poda hacer con el comando lpc).

Otros sistemas

Existen otras tcnicas para manejar impresoras como las CUPS (common unix printing system) de parecidas
caractersticas. Son ms complejas de configurar pero tienen la ventaja de ser compatibles con los servidores de web
(apache).

8.5. P. Serie

D entro de este apartado entran dispositivos como los terminales de texto (bsicamente la configuracin del teclado),
modems o incluso ratones. Veremos someramente como se tratan y nos referiremos exclusivamente a sistemas de tipo
Linux sobre PC basados en Intel.

Cada dispositivo tiene asignado un fichero en el directorio /dev. En este directorio (en mi caso hay 2034 dispositivos
tty) podremos encontrar los que estn asignados a los cuatro puertos serie de un PC, que adems estarn diferencias
por entrada o salida:

/dev/cua0, /dev/ttyS0 (COM1) direccin 0x3f8 IRQ 4


/dev/cua1, /dev/ttyS1 (COM2) direccin 0x2f8 IRQ 3
/dev/cua2, /dev/ttyS2 (COM3) direccin 0x3e8 IRQ 4
/dev/cua3, /dev/ttyS3 (COM4) direccin 0x2e8 IRQ 3

Los ttySx sern los dispositivos serie de entrada (teclado - las consolas virtuales tienen los nombres /dev/tty1 a
tty6 -) y los cuax sern los de salida (orientados a modem). Cada puerto serie tiene su propia direccin y tiene
asignada una interrupcin, esto se puede configurar con el comando setserial (ver man setserial). Adems de
estos cuatro dispositivos, en ese directorio puede haber enlaces para el ratn o el modem (mouse y modem) que
apuntarn a los dispositivos bsicos correspondientes, por ejemplo en mi sistema existe un ratn serie que tiene
asignado un dispositivo mouse que es un enlace a ttyS0, ya que est conectado a COM1. Otro ejemplo de enlace
simblico sera el terminal principal /etc/console.

Como sabemos, casi todos los dispositivos vienen creados ya en el sistema y vienen asignados en la tabla de
dispositivos por un nmero mayor y uno menor, que es el que realmente determina su comportamiento,
independientemente del nombre. En el caso de los puertos serie, estos nmeros sern:

/dev/ttyS0 mayor 4, menor 64 /dev/cua0 mayor 5, menor 64


/dev/ttyS1 mayor 4, menor 65 /dev/cua1 mayor 5, menor 65
/dev/ttyS2 mayor 4, menor 66 /dev/cua2 mayor 5, menor 66
/dev/ttyS3 mayor 4, menor 67 /dev/cua3 mayor 5, menor 67

Si por cualquier causa no existieran, siempre les podremos crear con la orden mknod:

$ mknod -m 666 /dev/cua0 c 5 64


$ mknod -m 666 /dev/ttyS0 c 4 64

Creados los dispositivos, por cada lnea serie se establece en el proceso de arranque (a travs de inittab o de un
fichero asociado como rc.local o rc.serial), el proceso getty, que coloca las principales caractersticas del
terminal o modem (existe una versin mnima de getty que es mingetty especialmente diseado para las consolas
virtuales, que tienen asignadas los dispositivos ttyx) y despus ejecuta un proceso de login, dando valor a la variable de
la shell TERM.

El proceso getty toma el dispositivo terminal de la lnea de comando de inittab, la asociacin entre el dispositivo
terminal y el tipo de terminal est en un fichero en /etc que depende del tipo de sistema que usemos: ttys, ttytab o en
Linux ttytype acompaado del fichero /etc/securetty que nos dir desde que terminales podemos entrar como root.

Al igual que ocurre con las impresoras, pero de forma ms compleja, existe una base de datos que nos indica los
posibles tipos de terminales que podemos conectar y que reside en el fichero /etc/termcap, donde tambin se
gestionan la asignacin de las teclas del terminal (teclado). En algunas distribuciones existe el
script /etc/sysconfig/keyboard para trabajar con ese fichero y la asignacin de teclas. Obviamente los tipos de
terminal que podamos poner en ttytype tendrn una entrada en esta base de datos.

Comandos relacionados con la disposicin de terminales sern:

tty. Pinta el dispositivo terminal que estamos usando.

tset. Inicializa el terminal, para ello lee el tipo de terminal de la propia lnea de comandos, de la
variable TERM, o lo pondr a desconocido.

stty. Cambia parmetros del terminal, tomando como argumento opcional un tipo de dispositivo. Esto
nos permitir cambiar algunos parmetros del terminal o caracteres especiales, como por ejemplo como
se realiza el borrado. Si no ponemos nada, el comando presentar la velocidad del terminal y la definicin
de caracteres especiales.
9. Instalacin Programas

9.1. Introduccin

Una de las tareas habituales que debe realizar el administrador de un sistema es la instalacin (conviene distinguir entre tres trminos
similares: instalacin, configuracin y actualizacin, la primera indica que es la primera vez que se carga y prepara una aplicacin
para su uso; la segunda, que esa aplicacin ya cargada, es adaptada para un sistema concreto; la tercera es que una aplicacin
instalada y configurada se est mejorando de alguna manera) del software. Evidentemente el tipo de software y su frecuencia de
actualizacin dependern en gran medida de las necesidades de sus usuarios.

En los sistemas multitarea y multiusuario, como lo es UNIX / LINUX, la instalacin de aplicaciones se complica ms que en otros
sistemas por distintas causas:

 Puede haber usuarios diferentes con necesidades diferentes respecto de una misma aplicacin.
 Las aplicaciones requieren ms recursos del sistema, como disco y CPU, por lo que el administrador deber asegurar que la
instalacin de la aplicacin no pone en riesgo la funcionalidad del sistema. Esto se ve agravado al poder ejecutarse varias
copias de la aplicacin al mismo tiempo, adems puede que algunas aplicaciones interfieran sobre otras, lo cual tambin debe
ser comprobado.
 Por ltimo, puede que la actualizacin de la aplicacin requiera una del sistema, por lo que su uso sea incompatible.

Por eso las responsabilidades del administrador aumentan en el sentido de:

 Arrancar y parar el sistema cuando se requiera, de forma que la suspensin del mismo afecte lo menos posible a los usuarios.
 Comprobar que hay suficiente espacio en memoria y disco, para que el sistema funcione de forma ptima.
 Proteger al sistema de incursiones no autorizadas y de posibles acciones destructivas.
 Configurar el sistema para que el mayor nmero posible de usuarios tenga acceso ptimo a los recursos hardware y software.

Vistas las responsabilidades del administrador, ya estamos en disposicin de describir como se instalan los paquetes de software.

Clsicamente, un programa se instala igual que lo podra hacer cualquier usuario: si nos dan los fuentes, compilndolos (ver la
herramienta make en la siguiente seccin) y produciendo los ejecutables para esa mquina en sitios predeterminados, para los que
tendremos que actualizar el path del usuario. Adems, todos los ficheros necesarios (fuentes, ejecutables y documentacin sobre el
software y su instalacin) pueden (suele ser as) estar empaquetados y comprimidos (extensiones tar y gz), por lo que se suelen
acompaar de una macro de instalacin (que puede ser el propio make), por lo que el fichero make (por defecto makefile) puede
llegar a ser muy complejo.

Por eso, en la siguiente seccin, aunque no sea objetivo de este curso, se repasa la construccin de un programa UNIX. La
desempaquetacin y descompresin ya la hemos revisado en el captulo de copias de seguridad.

Despus, en un siguiente apartado, veremos como se instalan paquetes, sobre todo en sistemas Linux, a travs de un nuevo mtodo
de instalacin ms estructurado y ordenado que es el RPM (Administrador de paquetes Red-Hat), que no slo permite instalar
aplicaciones, sino que a travs de una base de datos, nos permitir desinstalarla, actualizarla (sin perder nuestros ficheros de
configuracin) y verificar si esa aplicacin est instalada en nuestro sistema o no.

9.2. Construccin

A unque, como hemos dicho, esta seccin pertenezca a un curso de programacin y no de administracin UNIX, antes de poder
instalar un programa conviene saber o repasar como realizaramos nosotros un programa para que otros usuarios lo pudieran usar en
sus sistemas. Para ello revisaremos herramientas de desarrollo de aplicaciones como son el compilador de C, la macro de compilacin
automatizada make y la programacin modular a travs de libreras.

Herramientas usuales de compilacin

Una vez que tenemos escrito el programa en C, debemos convertirlo en un programa ejecutable, al primero se le llama cdigo fuente y
al segundo cdigo objeto. La herramienta que se utiliza en sistemas UNIX para realizar esta conversin es el cc (en sistemas gnu el
gcc/g++). Este "compilador" (realmente es un front-end que lanza varios programas) realiza automticamente toda la cadena de
operaciones para producir un fichero ejecutable:
1. Llama al preprocesador cpp y produce un programa.i si el programa fuente se llama programa.c. Los ficheros cabecera
para el preprocesador terminan en ".h".
2. Lo compila (comp es el compilador) produciendo un fichero en ensamblador programa.s o programa.S. El compilador
siempre espera que se le d un nombre de fichero que contenga un programa fuente de lenguaje C, para distinguir estos
ficheros de cdigo fuente del resto de ficheros del sistema, es obligatorio que todos terminen en ".c". Si no hacemos esto, el
compilador nos responder con algo parecido a: "file not recognized: File format not recognized". Otras
terminaciones comunes son: .C, .cc, y .cxx para ficheros en lenguaje c++.
3. Ensambla (as es el ensamblador) el programa y produce un fichero objeto programa.o. No slo se pueden usar ficheros
objeto producidos desde cdigo C, podemos utilizar cualquier otro lenguaje de bajo o alto nivel, desde ensamblador a PASCAL.
4. Lo enlaza (linka), ld es el linker, y produce el ejecutable a.out. En este punto es donde podemos utilizar varios ficheros objeto
para producir el ejecutable.
5. Si usamos la opcin -g estamos introduciendo una serie de elementos de compilacin para que el programa ejecutable pueda
ser usado con el depurador gdb.
6. Todos los ficheros intermedios son escritos en el directorio /tmp y despus eliminados.

Como cualquier otro comando del sistema, el formato para ejecutarlo ser gcc [-opciones] y argumentos. La forma ms
sencilla de ejecutarlo para producir un fichero ejecutable con nombre a.out sera la siguiente (en un sistema gnu):

gcc programa.c

Las opciones usualmente se colocan delante del nombre del fichero fuente y debern estar separadas, por ejemplo, no es lo mismo
poner gcc -dr que gcc -d -r. Las opciones estn divididas en varios grupos: globales, del lenguaje, de alerta, de depuracin, de
optimizacin, de preprocesado, de ensamblador o linkador, de directorios y de dependencias del hardware.

A continuacin aparecen las opciones ms habituales (se pueden encontrar con man gcc):

Generales (controlan la cadena de ejecucin de programas):

 -c No se llama al linker y se produce un cdigo objeto.


 -E Ejecuta slo el preprocesador y produce cdigo fuente C.
 -S No se llama al programa ensamblador, por tanto genera slo cdigo ensamblador.
 -o nombre Se le indica el nombre del fichero ejecutable.

Del lenguaje:

 -ansi Compila siguiendo las reglas del ANSI C.

Del linker:

 -l libreria Incluye la librera libreria.

De directorios:

 -Ldirectorio Aade otro directorio de libreras donde se buscar lo dado por -l (anterior opcin).
 -Idirectorio Aade el directorio a la lista de directorios donde encontar includes del preprocesador.

De alerta:

 -w Inhibe los mensajes de warning. stos indicarn algo que no es un error pero que hay que
tener en cuenta.

De depuracin:

 -g Produce informacin para poder utilizar alguno de los depuradores (debuggers) del sistema
como gdb.

Si el programa es ejecutado con el debugger del sistema: gdb ejecutable, su transcurso se podr controlar con acciones tpicas
como: ejecucin lnea a lnea, ejecucin hasta un punto de ruptura, colocacin de estos puntos, visualizacin de los valores de las
variables, etc. Para ms informacin se puede utilizar el comando interno help. Tambin se puede utilizar el depurador para obtener
informacin de los ficheros core del sistema. Cuando un programa se aborta en ejecucin se produce un fichero de nombre core
que puede ser analizado con gdb core.

Otra herramienta interesante cuando se hacen grandes programas que estn compuestos de varios ficheros es make. sta se utiliza
con un fichero de comandos (makefile) donde decimos de que ficheros est compuesto nuestro programa, que libreras utiliza y
como se pueden obtener los ejecutables. Hay que recordar que un programa en C puede estar compuesto de varios ficheros,
obligatoriamente uno de ellos tendr la funcin main() y los otros sern otras funciones ya compiladas con la opcin -c. La sintaxis
sera:

make [-f fichero de make] [-opciones] [objetivos]

La ventaja de utilizar el make, es que nos compilar slo los ficheros que sean necesarios segn la fecha del ltimo cambio y que no
tendremos que poner una complicada lnea de comando para realizar la compilacin o realizar una macro, slo make, el cual leer el
fichero de rdenes makefile (tambin GNUmakefile y Makefile), donde encontrar como hacer la compilacin.
El fichero de rdenes se compondr de una serie de targets (objetivos) a cumplir (indicados para el usuario) y de la descripcin de
como realizarlos (indicacin para la mquina), las lneas de realizacin siempre empiezan con el carcter tabulador (indicado abajo
como tab), pudiendo haber varias para un solo objetivo.

Tambin se puede indicar un objetivo especial que es el clean para borrar aquellos ficheros no deseados (este slo se ejecutar si
hacemos make clean).

programa : main.o lib_uno.o lib_dos.o


tab gcc -o programa main.o lib_uno.o lib_dos.o
main.o : main.c
tab gcc -c main.c
lib_uno.o : lib_uno.c
tab gcc -c lib_uno.c
lib_dos.o : lib_dos.c incluido.c
tab gcc -c lib_dos.c
clean:
tab rm core
tab rm *.o

En este ejemplo, el fichero makefile (nombre por defecto) estar compuesto de cinco objetivos: programa, main.o, lib_uno.o,
lib_dos.o y clean. El primer objetivo es el fichero ejecutable programa cuyas dependencias aparecen a continuacin de los ":". En la
siguiente lnea (empieza por tabulador) se dice a la mquina como se puede obtener, en este caso compilando e incluyendo los
ficheros objeto. A continuacin se indica como obtener estos objetivos secundarios, en este caso compilando con la opcin -c para
producir ficheros objeto. Se observa que el objetivo lib_dos.o tiene dos dependencias: lib_dos.c e incluido.c, ya que
lib_dos.c tiene una instruccin de tipo #include incluido.c. Por ltimo est el objetivo especial clean que se suele usar para
borrar ficheros no deseados como los core o los *.o.

Otro objetivo tambin bastante utilizado es:

print: dependencias
tab lp *.c

que sirve para imprimir los ficheros que interesen. Como norma general, se puede poner un objetivo que sea una combinacin de
comandos, que slo se ejecutarn cuando se haga explcitamente make objetivo.

En algunos sistemas (no en nuestro caso) existen un par de comandos de ayuda a la hora de programar en c. El primero de ellos es
lint, que chequea los errores de sintaxis y da algunos consejos sobre portabilidad del cdigo. El otro es cb (embellecedor de c) que
sangrar adecuadamente el programa y pondr llaves si es necesario.

Programacin separada (modular)

Hasta ahora hemos visto que todos nuestros programas estaban en un fichero que se edita, compila y ejecuta. Pero normalmente, en
programas grandes, esto no se hace as, sino que se construye de forma modular en varios ficheros, aplicndose el principio de "divide
y vencers", ya que los mdulos del programa sern ms fciles de entender y depurar (algo parecido a la divisin de un programa en
funciones pero a otro nivel ms abstracto). Con esta forma de trabajar conseguimos algunas ventajas:

1. Obviamente los mdulos tienen una extensin menor que el programa completo. Por lo tanto, stos sern ms fciles de
manejar.
2. Cada mdulo se puede compilar por separado lo cual ser ms rpido.
3. Cada mdulo ser ms fcil de depurar por separado, ya que no se tendrn que tener en cuenta influencias externas.
4. La divisin del trabajo entre varios programadores es ms sencilla y limpia de realizar.

Esto conlleva que se tengan que aplicar (conveniente no obligatorio) ciertos criterios a la hora de construir ese programa utilizando la
estructura en rbol de directorios y ficheros:

1. Se puede utilizar un directorio (en vez de un fichero como antes) para contener los ficheros de los que va a estar constituido el
programa.
2. Dentro de ese directorio general se puede crear varios subdirectorios donde se sepa que se va a encontrar lo que estamos
buscando, como por ejemplo:
1. Un directorio para los ficheros fuente.
2. Un directorio para los ficheros de cabecera del preprocesado (normalmente "include"). Ver punto 4. Los includes del
sistema estn en el directorio /usr/include.
3. Un directorio de libreras, normalmente "lib".
4. Un directorio de ejecutables, normalmente "bin".
5. Un directorio de documentacin, normalmente "doc".
3. Los mdulos tienen que ser construidos (divisin del programa) teniendo en cuenta principios semnticos (significado) y
ofreciendo servicios a otros mdulos externos (cajas negras), de tal manera que se garantice el perfecto funcionamiento de los
mismos de forma aislada (gran parte de los inconvenientes del cdigo dependiente se pueden solventar con la compilacin
condicionada que nos proporciona el preprocesador, referencias ms amplias de l las podemos encontrar en el libro de
Kernigham). Tambin se deber tener en cuenta que:
1. Hay partes dependientes del hardware que deben ser sealadas como tal. De hecho, por definicin no son transportables
a otros sistemas y deben estar separadas del resto del programa.
2. Otras dependern de algo especfico como llamadas a un sistema operativo concreto y debern ser tratadas de la misma
forma.
4. Los ficheros de cabecera *.h estn destinados normalmente a contener las definiciones comunes a varios mdulos. En ellos
suelen aparecer distintos tipos de informacin:
1. Definicin de constantes.
2. Definicin de tipos de datos.
3. Definicin de prototipos de funciones.

Suele ser una mala prctica de programacin incluir las propias definiciones (reservas de espacio) de variables.

Gestin de libreras en UNIX

Anteriormente se ha comentado que podemos incluir en nuestro programa, cdigo objeto realizado en otros lenguajes o en el mismo
C, as, la lnea de compilacin que veamos en el anterior apartado podra complicarse:

gcc modulo1.c modulo2.c prepro.i programa.c objeto.o -o eje -lm

donde hemos incluido al compilar dos mdulos de cdigo fuente C, un fichero de preprocesado, el programa principal fuente, un cdigo
objeto (no necesariamente C) y una librera esttica (podemos considerar una librera como un conjunto de ficheros que contienen
cdigo objeto, las propiedades de esos ficheros son asimiladas en la propia librera que los mantiene a travs de un registro ndice), en
este caso la librera matemtica (para ello deberemos haber usado en alguna parte del cdigo un #include math.h).

Una pregunta que podemos hacernos es por qu hemos incluido esa librera. La respuesta es porque con el fichero de cabecera
math.h slo hemos incluido definiciones de constantes (por ejemplo PI), tipos de datos y prototipos de funciones, pero no el cuerpo
compilado de estas funciones, que est contenido precisamente en esa librera (todas las librera estticas empiezan por lib y tienen
extensin ".a", en medio va el nombre de la librera que es el que se ultiza con -l, en este caso el nombre de la librera es m y el del
fichero librera es: libm.a), ya que estas funciones no son de uso general. Ocurre lo contrario con las libreras de manejo de la
entrada/salida y funciones comunes, que si que se incluyen por defecto al realizar los ejecutables, estas libreras son crt0.o y
libc.a

Otra pregunta que surge es: Puedo yo crear mis propias libreras?. La respuesta es s. Existe el comando ar que nos permite
crearlas (aadir mdulos), modificarlas o eliminarlas (quitar mdulos). Como cualquier comando, la sintaxis del mismo incluye opciones
y argumentos:

ar -[opciones] [mdulos] librera [ficheros]

Las opciones ms habituales son:

Opcin Significado
d Borrar mdulos a travs de los ficheros indicados
m Cambia de orden (mueve) un mdulo en la librera
p Pinta en pantalla un mdulo a travs de su fichero
q Aade de forma rpida mdulos (sin registro ndice) al final
r Reemplaza mdulos a travs de su fichero
t Muestra el contenido de la librera
x Extrae mdulos a travs de su fichero
o Preserva la fecha original del mdulo en la extraccin
s Crea o actualiza el registro ndice
u Reemplaza teniendo en cuenta la fecha
Modificador
a Lo coloca detrs de un mdulo existente
b, i Aade delante de un mdulo existente
c Crea una librera
v Modo "verbose"

De esta manera si tenemos una librera que se llama libre.a (la librera sera re) y tres mdulos mod1.o, mod2.o y mod3.o podemos
hacer por ejemplo:

Ejemplo Accin
ar c libre.a Crea la librera
ar r libre.a mod1.o Aade el mdulo y crea la librera si no existe
ar tv libre.a Muestra el contenido de la librera
ar q libre.a mod2.o mod3.o Coloca al final de forma rpida el mdulo
ar s libre.a Actualiza el registro ndice
ar x libre.a mod3.o Extrae el tercer mdulo

A la hora de usar la librera creada tenemos que tener en cuenta las siguientes reglas:

1. Las libreras se buscarn en los directorios por defecto que son lib y /usr/lib. Si no ponemos nuestra librera ah,
tendremos que utilizar la opcin del compilador -L para indicarlo.
2. Lo mismo tendremos que hacer con los ficheros incluidos de cabecera (include y /usr/include), en este caso la opcin es
-I.
3. Todas las libreras que creemos empezarn con la palabra lib a la que seguir el nombre propio de la librera con una
extensin .a.
4. Al compilar tendremos que invocar al enlazador con la opcin -l para que incluya la librera creada (en el ejemplo -lre).

Existe un comando relacionado con las libreras, nm, para ver el contenido de sus mdulos. La sintaxis es:

nm -[opciones] [ficheros]

donde el fichero puede ser un mdulo o una librera, en este ltimo caso se puede usar la opcin -s para ver el ndice.

Existe otro tipo de libreras que son las dinmicas (las anteriores eran estticas) que se son el equivalente DLL del mundo Windows.
Estas librera no se incluyen en el ejecutable, estn residiendo en memoria y pueden ser compartidas por varias aplicaciones, con lo
cual ahorramos espacio en memoria. Otra ventaja de estas libreras es que su actualizacin supone una actualizacin implcita de las
aplicaciones que las usan y una desventaja es que si queremos activar un servicio (aplicacin) ya no ser suficiente con cambiar el
ejecutable si no que lo deberemos hacer tambin con las libreras que usan stos tanto estticas como dinmicas.

Las libreras dinmicas tienen la extensin .so (las estticas .a) y se ubican en los mismos sitios: /lib, /usr/lib
y /usr/local/lib. Para su uso deberemos utilizar la opcin del compilador -shared.

9.3. RPM

U na de las utilidades ms potentes e innovadoras de la empresa Red-Hat es el gestor de paquetes (RPM), que no slo se usa en
sistemas Linux Red-Hat (Suse, Mandriva, ...), sino que se ha extendido a otros sistemas Linux y UNIX. En la siguiente tabla aparecen
los sistemas y arquitecturas que cuentan con la utilidad RPM:

Linux: Sparc/Intel/PowerPC/Alpha/m68k/SGI OS/2


Solaris - Sparc/Intel, solaris2.4 Hewlett-Packard HP-UX 10.20
SCO OpenServer 5.0.2 osf3.2
SunOS 4.1.3 sinix5.42
HP-UX 9.04 AIX 3.2.5
AIX 4.1.4 cygwin-B20
LynxOS 3.0.1 MachTen
IRIX ncr-sysv4.3
FreeBSD NetBSD
Mint AmigaOS (with GeekGadgets)
Beos (with GeekGadgets)

Bsicamente un paquete es un conjunto de ficheros y metadatos (macros de ayuda, atributos de ficheros e informacin del paquete)
usados para instalar y borrar una aplicacin. Esta aplicacin puede venir dentro del paquete en dos modalidades:

 Ficheros binarios, donde el paquete se usa bsicamente para encapsular la aplicacin.


 Ficheros fuente, donde a parte de los programas fuente existen macros para producir los ejecutables binarios.

Los paquetes RPM se pueden usar desde la lnea de comando con una estructura de tipo:

rpm [opcin] nombre_de_paquete

Las dos fuentes bsicas de paquetes RPM sern por un lado la distribucin (usualmente en CD-ROM), en el caso de RedHat en el
directorio RedHat/RPMS, y la direccin de RPM: http://www.rpm.org donde se encuentra la herramienta (buscador de web)
http://rpmfind.net/ a la que daremos el nombre del paquete o aplicacin buscada y nos mostrar una lista con las versiones
disponibles. Esta versin suele ser parte del nombre del paquete, que est compuesto por: nombreversin
publicacin.arquitectura.extensin (rpm). Los nmeros de versin estn divididos en tres partes: el nmero mayor, el
nmero menor y la revisin. Un aumento en el primer nmero implica grandes cambios y siempre merecer la pena actualizar el
software si est disponible. El nmero menor indica la estabilidad del producto, los nmeros pares son estables, los impares indican
versiones en desarrollo. El ltimo nmero indica el nivel de actualizacin alcanzado por la versin, en los pares avanzar poco a poco
y en las impares se pueden dar hasta dos revisiones por semana.

Actualmente (enero 2006) est operativa la versin 4.4.2, (se puede comprobar la nuestra con: rpm -version), que nos permitir operar
en cinco modos (excluyendo el modo de construccin, ms orientado a programadores/distribuidores que a administradores y otros
menores como las firmas de los paquetes):
 Instalacin (opcin i). La sintaxis de este modo es:

rpm i opciones paquetes

Entra las opciones de instalacin se pueden destacar:

 vv, para dar informacin completa (verbose).


 h, muestra # para saber que el programa sigue funcionado.
 percent, para dar un porcentaje en vez de #.
 test, para saber que ocurrir con la instalacin sin hacerla realmente.
 force, forzar a que RPM instale el paquete a pesar de que haya conflictos de instalacin.

El origen del paquete a instalar puede ser tanto un fichero local como alguna direccin de ftp (normalmente
rpmfind.net), como por ejemplo: ftp://ftp.rpmfind.net/linux/redhat/redhat-5.2/updates/i386//glint-2.6.3-1.i386.rpm, para
conseguir la versin 2.6.3 de glint para Linux basados en Intel.

Cuando se realiza la instalacin, el programa RPM ejecutar varios pasos:

 Comprobar la dependencia con otros paquetes y tambin si hay conflictos (instalar un software ms antiguo que el
existente).
 Preservar ficheros de configuracin.
 Instalar los archivos del paquete en los directorios pertinentes.
 Configurar el software y
 Actualizar su base de datos (registro de programas instalados) usualmente en /var/lib/rpm.

 Desinstalacin (opcin e). La sintaxis de este modo ser:

rpm e opciones paquetes

Las dos opciones de borrado ms tiles son:

 vv, para dar informacin completa (verbose) y


 test, para saber que ocurrir con la desinstalacin sin hacerla realmente, normalmente se utilizan juntas.

Cuando de realiza la desinstalacin de un paquete, RPM ejecuta varias acciones:

 Comprueba si otros paquetes son dependientes del que se quiere borrar, si esto ocurre no se producir el borrado hasta
que se indique.
 Guarda una copia del fichero de configuracin.
 Realiza el borrado efectivo de los ficheros y
 Actualiza la base de datos o registro.

 Actualizacin (opcin U). La sintaxis de este modo ser:

rpm U opciones paquetes

Las opciones sern las mismas que las opciones de instalacin. Primero se realizar la instalacin de la nueva versin y
despus se borrarn las anteriores, teniendo en cuenta la configuracin existente. Si la configuracin no es compatible con la
nueva versin, se advertir con un mensaje como : saving /etc/paquete.conf as /etc/paquete.conf.rpmsave,
debiendo hacerse posteriormente los ajustes necesarios entre las dos versiones de configuracin.

 Consulta (opcin q). La sintaxis de este modo ser:

rpm q opciones paquetes

Las opciones son:

 name, para dar el nombre del paquete.


 a para dar la lista de todos los paquetes instalados en el sistema.
 f fichero, para dar el paquete asociado a un fichero.
 i, para dar informacin sobre el paquete y
 l, da la lista de ficheros asociados al paquete.

 Comprobacin (opcin V). La sintaxis de este modo ser:

rpm V paquete
En este modo se comprobarn los ficheros existentes de un paquete con los originales en varios aspectos (presentados abajo),
si no hay discrepancias no se mostrar nada, si las hay se presentarn los siguientes cdigos:

 c, configuracin.
 5, verificacin de suma para comprobar si el contenido.
 S, tamao.
 L, enlaces.
 T, fecha.
 D, atributos.
 U, usuario.
 G, grupo.
 M, modo.

Adems de las opciones ms usuales vistas para cada modo de utilizacin de RPM, existen otras de carcter general, como:

 help, que nos dar informacin sobre el uso de RPM (tambin se puede hacer man rpm).
 version, que nos dar la versin de RPM que estamos usando.
 showrc, que nos indicar el proceso de inicializacn y
 rebuilddb para reconstruir la base de datos.

Por ltimo, existe una herramienta grfica llamada glint que permite ejecutar los modos de accin de RPM de forma mas amigable.
Si disponemos de una versin de Red-Hat con un entorno grfico Gnome, ya no necesitaremos instalar glint, ya que desde el propio
men contamos con la aplicacin grfica (ver figura posterior).

9.4. DEB

La otra familia de distribuciones basada en Debian: Debian, Ubuntu, Knopixx, Gentoo, ... utiliza otro tipo de instalacin de paquetes
similares a los RPM pero distintos en su funcionamiento interno, llamados paquetes DEB. Hay que tener en cuenta que en la mayora
de los sistemas pueden convivir los dos tipos de instalacin perfectamente.

Existen dos formas de usar estos paquetes:

 dpkg y dpkg-deb que sustituyen al comando rpm para la instalacin de paquetes Debian. O mejor:
 La familia apt (Advanced Packaging Tool). Especialmente el comando apt-get que se encarga de la instalacin y
actualizacin del software automticamente (se debe editar el fichero /etc/apt/sources.list para indicar al sistema las
ubicaciones de dnde se puede encontar el software) sin necesidad de "saber" dnde est. El contenido de este archivo,
normalmente sigue este formato:

deb http://host/debian distribucin seccin1 seccin2 seccin3


deb-src http://host/debian distribucin seccin1 seccin2 seccin3

La primera lnea para cdigo ejecutable y la segunda para cdigo fuente. Por defecto aparece lo siguiente (las
lneas de cdigo fuente deshabilitadas):

# See sources.list(5) for more information,


especialy
# Remember that you can only use http, ftp or file
URIs
# CDROMs are managed through the apt-cdrom tool.
deb http://http.us.debian.org/debian stable main
contrib non-free
deb http://non-us.debian.org/debian-non-US
stable/non-US main contrib non-free
deb http://security.debian.org stable/updates main
contrib non-free

# Uncomment if you want the apt-get source


function to work
#deb-src http://http.us.debian.org/debian stable
main contrib non-free
#deb-src http://non-us.debian.org/debian-non-US
stable/non-US main contrib non-free

Si tuvieramos dudas de que servidor usar lo podramos escoger con el comando netselect que nos dar
el de menor ping. Incluso podramos aadir el dispositivo CDROM en vez de la red con apt-cdrom add.

Las opciones ms frecuentes de apt-get son:

install paquete. Para instalar un paquete nuevo. Si hubiera alguna dependencia de otro
paquete tambin se instalar automticamente.

remove paquete. Para eliminar un paquete que no sea necesario, incluyendo sus
dependencias.

upgrade. Para actualizar los paquetes instalados en el sistema. Se deber hacer


peridicamente.

dist-upgrade. Para actualizar la distribucin entera. Normalmente se hace desde CDROM.

clean y autoclean. Cuando instalamos paquetes estos son guardados de forma local
en /var/cache/apt/archives/ . Este depsito puede crecer con el tiempo y es necesario su
ajuste. Utilizaremos clean para borrar todos los archivos (salvo los bloqueados) y autoclean
para hacer una autolimpieza consistente en borrar versiones anteriores de los paquetes, ya
sea localmente (existen dos guardadas, se borrar la ms antigua) o en red (si existe una
nueva versin en red ser borrada la local).

Para usar algunas de estas opciones antes debemos saber el nombre del paquete con el que queremos
trabajar. Esto se hace con otro comando de la familia que es apt-cache:

search nombre. Con esta opcin buscaremos informacin sobre nombre.

show. Suministra informacin de un paquete en concreto que hayamos podido encontrar con
la opcin anterior.
10. Ncleo

10.1. Introduccin

La configuracin del kernel es un proceso muy delicado y crtico que no se suele hacer muy a menudo y cuando se
hace es con todas las precauciones y medidas de seguridad posibles, como un sistema de arranque suplementario (en
caso de Linux con un disquete) y una copia de seguridad.

Esta operacin merecer la pena ser efectuada en determinadas ocasiones, que podemos enumerar as:

1. Instalacin de un sistema nuevo. Esta situacin es obvia, a no ser que el sistema venga montado ya con un
sistema UNIX reciente que no deba ser renovado por razones de eficiencia.
2. Instalacin de algn driver de dispositivo. En la mayora de los casos, sobre todo en sistemas UNIX antiguos,
instalar un nuevo driver requiere parar el sistema y efectuar esa instalacin, ya que esto requiere reconfigurar
tablas internas del kernel, que deber ser recompilado. En sistemas ms modernos, en el caso del Linux, a partir
de la versin 2, existen los mdulos cargables, en los que no es necesario parar el ncleo para aadirle nuevas
funcionalidades, adems tiene la ventaja de que el kernel con mdulos es ms pequeo, ahorrndose memoria,
y que los mdulos slo se cargan cuando se necesitan. Otros autores opinan que introducir mdulos en plena
ejecucin es como realizar una operacin cerebral a un individuo que est manejando maquinaria pesada.
3. Ajustar las tablas del ncleo. El kernel por eficiencia trabaja con un espacio constante de memoria, teniendo
todas sus tablas (nmero de procesos, segmentos de memoria, dispositivos, etc.) un tamao fijo. Si queremos
ajustar el tamao de esas tablas (compromiso entre gasto de memoria y cantidad de recursos que pueden ser
usados) no nos quedar otro remedio que reconfigurar y recompilar el kernel.

Otra posible causa es porque nuestro kernel se ha quedado anticuado. Slo merecer la pena cambiar este ncleo
cuando exista una gran diferencia de versin en el nmero grande (ver captulo anterior). Si slo queremos cambiar de
revisin existe otro mtodo que es aplicar parches (patch) a partes del ncleo.

10.2. Actualizacin

Para actualizar el ncleo de Linux es necesario que tengamos el cdigo fuente del sistema en el
directorio /usr/scr/linux. Si esto no es as, lo instalaremos a travs de un paquete RPM (o DEB) como hemos visto en el
captulo anterior.

Antes de actualizar el kernel es obvio que tenemos que saber que versin del kernel estamos usando, para ello
tenemos el comando uname (opcin r) que nos dar informacin sobre el sistema en general y sobre la versin en
particular.

#uname -r
2.2.16-22

Despus, tendremos que buscar en algn sitio ftp o desde un CD, una nueva versin de las fuentes del ncleo. Estas
fuentes pueden estar de la forma clsica comprimidas y empaquetadas (tar.gz) o en la moderna en forma RPM. Una
direccin (buscar el fichero adecuado dentro) que contiene el ltimo cdigo fuente es:
ftp://sunsite.rediris.es/pub/linux/kernel/sources y otra en forma de paquete RPM:
ftp://ftp.rpmfind.net/linux/redhat.

Otra posible opcin, si no est instalado este cdigo fuente del kernel, es la de la propia distribucin, siempre existe un
CD especial con los cdigos fuente de diversos paquetes.
Una vez que tengamos instalado el cdigo fuente podemos proceder de tres maneras dependiendo del entorno que
tengamos: instalacin basada en texto, instalacin con mens o instalacin grfica (ver siguiente figura). En el primer
caso habr que hacer desde el directorio de las fuentes (/usr/src/linux) make config, en el segundo make
menuconfig y en el tercero make xconfig.

De forma ms o menos amigable (la ventaja de las dos ltimas es que slo responderemos a las partes que deseamos
cambiar), tendremos que responder opcionalmente a las preguntas que nos plantea la aplicacin de configuracin del
kernel. Para cada pregunta que tengamos que responder existir un botn de ayuda para auxiliarnos en la decisin y
tres opciones de respuesta: y para s, n para no y m para mdulo (ver siguiente seccin). Debemos tener en cuenta
que cuando pulsamos y esa parte pertenecer al ncleo cada vez que se inicia el sistema, si decimos n, no estar
cargada y si decimos m, se cargar cuando sea necesaria a travs de un mdulo. Si nos hemos atrevido a configurar el
ncleo es porque tenemos suficiente experiencia y madurez para saber que es lo que debe estar cargado o no en el
mismo y cual es el balance adecuado entre rapidez en dar un recurso y espacio ocupado en el kernel. Las preguntas
sern:

 Grado de madurez del cdigo. Esta parte servir de indicativo para las siguientes, refirindose, por ejemplo, a la
instalacin de un determinado driver que podra estar incompleto o no, ser seguro o no, etc. El sistema en este
caso puede preguntar antes. Se recomienda poner no como eleccin general.
 Soporte para mdulos. Si se quiere usar un kernel que soporte mdulos o uno monoltico. Esta parte tambin
tendr consecuencias sobre las siguientes, ya que si se escoge no, no se podr elegir la opcin m en las
siguientes cuestiones. Se recomienda la primera opcin.
 Caractersticas y tipo de procesador. Indicar si se tiene coprocesador matemtico o va a estar emulado por
software y si hay un conjunto de procesadores simtrico o no.
 Soporte para pnp. Si queremos soportar dispostivos plug and play.
 Configuracin general. Indicaremos si queremos soporte para grandes cantidades de memoria (hay que
configurar el lilo), para la red y para el acceso a PCI. Para comunicaciones de tipo System V entre proceso y
para el formato de los ejecutables.
 Dispositivos de bloque y carcter. Soporte para distintos tipos de discos, como disquetes, cd-rom ATAPI, discos
duros IDE/MFMRLL. Soporte para consolas virtuales y terminales serie y ratones.
 Opciones y soporte de red. Si queremos instalar soporte para sockets, se recomienda decir que s si se tiene
red.
 Soporte de SCSI, telefnico, de radioaficionado. Soporte para distintos dispositivos.
 Soporte de diversos dispositivos: IrDA, USB, I2O, Sonido, etc.
 Tipos de sistemas de ficheros. Nos preguntar si queremos instalar el sistema de cuotas de disco y el
automounter, adems de los tipos de sistemas de ficheros: amiga, apple, DOS FAT, VFAT, Minix, ISO 9660,
Joliet, OS/2, etc. El que nunca deber faltar es el segundo sistema extendido ext2 as como el soporte de /proc,
que es un directorio no residente en disco con informacin del sistema.

Si estamos interesados en alguna opcin ms especfica, antes de compilar el kernel, siempre se pueden revisar las
macros de compilacin para poder hacer algn cambio manualmente. Esto requiere unos conocimientos ms o menos
profundos del sistema.

Una vez que hemos configurado nuestro kernel (se habrn hecho los cambios oportunos en los scripsts a utilizar [existe
un directorio de macros cambiadas llamado scripts]), deberemos pasar a compilarlo, esto se hace con las macros de
make que aparecen a continuacin:

mak dep
make clean
make zImage

Con el primer paso analizamos las dependencias de compilacin del ncleo, con el segundo limpiamos todos los
ficheros objeto que no sirven (con make mrproper se puede hacer ms profundamente) y con el tercero compilamos
ya el ncleo. Dependiendo del sistema que tengamos: procesador y memoria, sta tarea puede llevar ms o menos
tiempo (minutos).

Si todo ha ido bien (no siempre es as -por no decir casi nunca-), y no ha habido errores de ejecucin en make, en el
directorio de fuentes donde est nuestra arquitectura (en el caso de Intel i386) /usr/src/linux/arch/i386/boot/
veremos el fichero zImage que es el ncleo comprimido que se deber cargar en el arranque.

Hasta ahora no hemos hecho nada irreversible, pero llegar el momento de botar con este nuevo ncleo (mover el
fichero zImage al directorio /boot) y aqu viene el paso peligroso, ya que si lo hacemos alegremente, podemos
conseguir que el sistema no arranque, por ello debemos garantizar que:

 Tenemos un disquete de arranque con el sistema viejo (ver captulo de inicializacin).


 O que hemos construido el nuevo ncleo en un disquete, esto se puede hacer ejecutando el make zImage con:
make zdisk. Despus meteremos el disquete, botaremos y si no arranca, siempre podremos sacarle y botar
como siempre.
 O hemos cambiado el fichero de configuracin de lilo /etc/lilo.conf, para que dependiendo del comando
introducido podamos arrancar con el nuevo o el viejo (se recuerda que hay que ejecutar lilo para que tome el
nuevo fichero). Para ello debemos renombrar el fichero vmlinuz de /boot por vmlinuz.old, por ejemplo, copiar
el nuevo ncleo en vmlinuz y poner en el fichero de configuracin lilo un doble arranque con algo parecido a
(esto se hace automticamente con make zlilo):

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
message=/boot/message
linear
default=linux

image=/boot/vmlinuz
label=linux
read-only
root=/dev/hda7
image=/boot/vmlinuz.old
label=anterior
read-only
root=/dev/hda7

El ltimo paso que hay que realizar antes de botar el sistema es hacer los cambios en los mdulos que hayamos
incluido, ya que lo que hemos hecho hasta ahora es actualizar el kernel monoltico sin mdulos (ver apartado de
gestin de dispositivos).

10.3. Mdulos

Hemos dicho que para no cargar el ncleo del sistema con programas que se utilizan pocas veces, desde la versin
2.0 existen los mdulos, que el kernel puede enlazar en tiempo de ejecucin (no existen en todas las arquitecturas, por
ejemplo para Alpha se debe usar un kernel monoltico). Es la forma preferida de usar algunos manejadores como los
de dispositivos PCMCIA o cintas. Actualmente la tendencia es modularizar todos los controladores posibles, salvo
aquellos estrictamente necesarios para arrancar, existiendo un demonio llamado kerneld que se encargar de cargarlos
y descargarlos por nosotros cuando el sistema los necesite.

Existen varios comandos relacionados con el uso de los mdulos (todos estos comandos pueden ser ejecutados de
forma grfica desde el panel de control con el kernel configurator):

 lsmod. Nos dar una lista de los mdulos que estn cargados en memoria, indicando, el nombre, nmero de
pginas de memoria usadas, cuantas veces ha sido usado y por quien (la misma informacin
que /proc/modules). Un listado de lsmod aparece a continuacin:

Module Size Used by


nls_cp437 3876 1 (autoclean)
ide-cd 23628 1 (autoclean)
lockd 31176 1 (autoclean)
sunrpc 52964 1 (autoclean) [lockd]
3c90x 22224 1 (autoclean)
awe_wave 158068 0
sb 33876 0
uart401 6224 0 [sb]
sound 57496 0 [awe_wave sb uart401]
soundlow 420 0 [sound]
soundcore 2596 7 [sb sound]

 insmod. Inserta un mdulo especifico en el kernel.


 rmmod. Elimina un mdulo del kernel.
 depmod. Crea un archivo de dependencias del que se sirve modprobe.
 modprobe. Carga mdulos a partir de una lista generada por depmod.

Todos los cambios hechos con estos comandos o con la herramienta grfica se aplican al
fichero /etc/modules.conf que se encarga de leer el demonio kerneld. Un listado para los mdulos
anteriormente cargados se puede ver a continuacin

alias eth0 3c90x


alias parport_lowlevel parport_pc
alias eth1 3c59x
alias sound-slot-0 sb
options sound dmabuf=1
options opl3 io=0x388
alias midi awe_wave
post-install awe_wave /bin/sfxload /etc/midi/GU11-ROM.SF2
options sb io=0x220 irq=5 dma=1 dma16=5 mpu_io=0x330

Para arrancar y parar el demonio de kernel debemos irnos a las macros de inicio y utilizar
el /etc/rc.d/init.d/kerneld start o stop para realizar esta tarea.

Una vez que sabemos como manejar mdulos, antes de botar el sistema debemos compilar los mdulos que hemos
configurado, al igual que hicimos con el resto del kernel. Para ello tenemos el make modules desde el directorio de
fuentes /usr/scr/linux y despus make modules_install. Como siempre deberemos asegurarnos de que los
nuevos mdulos funcionan, si no as, como en el caso del kernel monoltico, conviene hacer una copia de seguridad de
estos mdulos, para ello se deber ir al directorio /lib/modules y renombrar el directorio que aparecer con el
nombre de la versin que estamos usando, por ejemplo: mv /lib/modules/2.2.16-22 /lib/modules/2.2.16-
22.trabajo.

10.4. Parches
N o siempre es necesario hacer una recompilacin completa del ncleo para cambiar de versin, en muchos casos
para pasar de una versin a otra cercana basta con aplicar los parches necesarios.

Las actualizaciones incrementales del ncleo se distribuyen como parches (no se debe tomar con sentido peyorativo el
trmino parche'', no se trata de un remiendo, lo que hacemos al parchear'' es modificar directamente los fuentes del
ncleo, incluyendo las variaciones que se hayan introducido). Por ejemplo, si se tiene la versin 2.2.16 y se ve que
existe un parche patch18.gz, con ese fichero podr actualizarse el sistema a la versin 2.2.18 (antes se deber
actualizar tambin a la 2.2.17).

Como siempre, antes de actuar se debera guardar una copia del rbol de directorios de las fuentes del ncleo actual
haciendo make clean y luego tar cvfz antiguas-fuentes.tar.gz linux desde el directorio /usr/src.

Despus procederemos a ejecutar el parche haciendo en /usr/src:

gzip cd patch18.gz | patch -p0

donde 18 es la versin a actualizar.

Se debern tener en cuenta los mensajes que se produzcan al ejecutar la lnea por los posibles errores que se puedan
ocurrir (si usamos la opcin s slo saldrn los mensajes de error). Si nos actualizamos de varias versiones se puede
ejecutar algo parecido a esto:

# for i in patch-2.0.2[1234567].gz; do
>zcat $i | patch -p0
>done

Si ha habido algn error se crear un fichero con extensin .rej. Habr un fichero config.in.rej donde vendrn
los parches que han originado problemas.

También podría gustarte