Entorno

De GLASS

Tabla de contenidos

Objetivos

Después de leer este capítulo:

  • Conocerá los mecanismos que usa Linux para configurar el entorno de trabajo para cada usuario.
  • Sabrá qué variables puede y qué no debe modificar para adaptar su sistema a sus necesidades.
  • Entenderá el proceso de arranque del sistema y la estructura de directorios.

Variables de entorno

Dada la condición de Linux como sistema multiusuario, la mayoría de aplicaciones pueden configurarse de un modo genérico para su uso global, pero cada usuario por su parte puede, a modo particular, ampliar o modificar dicha configuración para adecuarla a sus necesidades. Tales aplicaciones, para su correcto funcionamiento necesitan saber información sobre el usuario que las ejecuta, y para ello las shells (BASH como cualquier otra) establecen una serie de valores relativos a la ubicación del espacio para el usuario en el sistema, así como el lenguaje en el que se deben ejecutar las aplicaciones, el modo de visualización, etc. La shell guarda estos valores y los referentes al estado de la sesión del usuario en el sistema, en variables que otras aplicaciones pueden leer posteriormente cuando se vayan a ejecutar. A esas variables las llamamos variables de entorno, dado que de ellas depende que las aplicaciones y sesiones comiencen, se ejecuten y finalicen de un modo u otro. Cada usuario posee variables propias que le definen un entorno particular y personalizado, aunque puede modificarlas si lo desea. La modificación de dichas variables no afecta al resto de usuarios ni al funcionamiento global del sistema.

Una vez entrados en el sistema podemos ver el listado de las variables de entorno de las que disponemos, y sus valores asignados inicialmente. Para ello ejecutaremos el comando set, aunque la salida del mismo posiblemente ocupe más lineas de las que nuestra pantalla pueda mostrarnos, de modo que para paginar la salida ejecutaremos set | less, y podremos movernos por el texto con las teclas Arrows. El resultado debe asemejarse a este:

bash-2.05b$ set
BASH=/bin/bash
BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i686-pc-linux-gnu")
BASH_VERSION='2.05b.0(1)-release'
CC=gcc
CLASSPATH=/opt/blackdown-jdk-1.3.1/jre/lib/rt.jar:.
COLORFGBG='15;0'
COLORTERM=rxvt-xpm
COLUMNS=127
CONFIG_PROTECT='/var/bind /usr/X11R6/lib/X11/xkb /usr/kde/3.1/share/config /usr/kde/3.1/share/config /usr/share/config'
CONFIG_PROTECT_MASK=/etc/gconf
CVS_RSH=ssh
CXX=g++
DIRSTACK=()
DISPLAY=:0.0
EDITOR=/usr/bin/vim
EUID=1000
GROUPS=()
HISTFILE=/home/ttyp0/.bash_history
HISTFILESIZE=500
HISTSIZE=500
HOME=/home/ttyp0
HOSTNAME=ovahflow
HOSTTYPE=i686
IFS=$' \t\n'
INFODIR=/usr/share/info:/usr/X11R6/info
INFOPATH=/usr/share/info:/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info
INPUTRC=/etc/inputrc
JAVAC=/opt/blackdown-jdk-1.3.1/bin/javac
JAVA_HOME=/opt/blackdown-jdk-1.3.1
JDK_HOME=/opt/blackdown-jdk-1.3.1
KDEDIR=/usr/kde/3.1
KDEDIRS=/usr
LC_ALL=en_US
LESS=-R
LESSOPEN='|lesspipe.sh %s'
LINES=48
LOGNAME=ttyp0
MACHTYPE=i686-pc-linux-gnu
MAIL=/var/mail/ttyp0
MAILCHECK=60
MANPATH=/usr/share/man:/usr/local/share/man:/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man:/usr/X11R6/man:/opt/blackdown-jdk-1.3
MOZILLA_FIVE_HOME=/usr/lib/mozilla
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PAGER=/usr/bin/less
PATH=/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/i686-pc-linux-gnu/gcc-bin/3.2:/usr/X11R6/bin:/opt/blackdown-jdk-1.3.1/bin:/opt/               blackdown-jdk-1.3.1/jre/bin:/usr/qt/3/bin:/usr/kde/3.1/bin:/usr/games/bin
PIPESTATUS=([0]="0")
PPID=1317
PS1='\s-\v\$ '
PS2='> '
PS4='+ '
PWD=/home/ttyp0
QMAKESPEC=linux-g++
QTDIR=/usr/qt/3
SGML_CATALOG_FILES=/etc/sgml/sgml-ent.cat:/etc/sgml/sgml-docbook.cat:/etc/sgml/openjade-1.3.1.cat:/etc/sgml/sgml-docbook-3.0.ca               t:/etc/sgml/sgml-docbook-3.1.cat:/etc/sgml/sgml-docbook-4.1.cat:/etc/sgml/dsssl-docbook-stylesheets.cat:/etc/sgml/sgml-docbook-               4.0.cat:/etc/sgml/sgml-lite.cat
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=5
TERM=rxvt
UID=1000
USER=ttyp0
WINDOWID=10485762
XAUTHORITY=/home/ttyp0/.Xauthority
XINITRC=/etc/X11/xinit/xinitrc
_=-

Echando un ojo al resultado puede usted ver muchas variables con valores que posiblemente pueda entender intuitivamente, aunque otras seguramente se cuestionará para qué sirven. Teniendo en cuenta que estas variables acumulan valores que después deben recoger algunas aplicaciones externas, no es necesario saber y comprender el funcionamiento de todas ellas, dado que posiblemente no existan en su sistema si no tiene instaladas las aplicaciones a las que hacen referencia. Entre las variables que le interesa conocer se encuentran las que afectan directamente a la shell, así como las variables de internacionalización.

Siguiendo el orden centrémonos primero en las variables más cercanas al uso de la shell:

BASH=/bin/bash

La variable BASH acumula el camino hacia el fichero ejecutable de la shell Bash.

CC=gcc

Especifica el compilador que debe usarse para compilar el código fuente de las aplicaciones. Las siglas CC significan C Compiler, ya que las aplicaciones para Linux están programadas generalmente en lenguaje C.

DISPLAY=:0.0

Indica el escritorio sobre el que se van a ejecutar las aplicaciones. El valor de display son dos números diferentes separados por dos puntos. El número a la izquierda de los dos puntos se refiere al número de escritorio dentro de la máquina que ejecuta el servidor gráfico. EL número a la derecha de los dos puntos hace referencia a la dirección IP del ordenador que ejecuta el servidor gráfico. En el ejemplo puede ver que la parte izquierda se encuentra vacía,lo que indica que las aplicaciones se ejecutarán en el primer escritorio que se arranque. EL número de la derecha es 0.0, lo que hace referencia a la IP local de su ordenador (0.0.0.0).

EDITOR=/usr/bin/vim

El editor que se va a usar por defecto para editar cualquier fichero de texto. Por norma general los ficheros que edite, usted decidirá con qué editor abrirlos. Esta variable hace solo referencia a aplicaciones que necesitan de un editor para permitirle visualizar un contenido de texto, sin que ésto sea la finalidad primera de la aplicación.

HISTFILE=/home/ttyp0/.bash_history

Indica el camino hacia el fichero que se va a usar para almacenar el historial de comandos ejecutados por el usuario.

HISTSIZE=500

Tamaño máximo del fichero que acumula el historial de ficheros. Debido a que el historial almacena comandos consecutivos y separados, cada uno de ellos se almacena en una línea aparte. De este modo el tamaño del historial se mide en líneas.

HOME=/home/ttyp0

Directorio personal del usuario en el sistema.

HOSTNAME=ovahflow

Nombre que identifica la máquina.

HOSTTYPE=i686

Arquitectura del ordenador, familia del procesador (386, 486, Pentium...)

LOGNAME=ttyp0

Nombre de usuario con el que ha accedido al sistema.

MAIL=/var/mail/ttyp0

Camino hacia el fichero de texto que acumula el correo del usuario.

MANPATH=/usr/share/man:/usr/local/share/man:/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man:/usr/X11R6/man:/opt/blackdown-jdk-1.3.1/man

Caminos hacia los directorios que contienen los ficheros con las páginas del manual de Linux. Las páginas del manual pueden encontrarse en varios lugares del sistema dependiendo de la funcionalidad de su contenido, por ello deben especificarse todas las rutas posibles dentro de la variable manpath. Para distinguir una ruta de otra se usan dos puntos.

OSTYPE=linux-gnu

Tipo de sistema operativo.

PAGER=/usr/bin/less

Paginador de resultados de texto. Cuando un fichero de texto es demasiado grande para que su visualización quepa en una pantalla, o cuando un comando genera una salida de texto que excede el tamaño de la misma, puede usarse un paginador para moverse hacia arriba y hacia abajo en el texto de salida. La variable PAGER indica el camino hacia el ejecutable del paginador que usted desea usar por defecto.

PATH=/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/i686-pc-linux-gnu/gcc-bin/3.2:/usr/X11R6/bin:/opt/blackdown-jdk-1.3.1/bin:/opt/blackdown-jdk-1.3.1/jre/bin:/usr/qt/3/bin:/usr/kde/3.1/bin:/usr/games/bin

El PATH hacia un fichero o directorio es la ruta que debe seguir un usuario por la jerarquía de ficheros hasta encontrarlo. Cuando un usuario ejecuta un comando, éste debe ser un fichero ejecutable, y evidentemente al estar ubicado en alguna parte de la jerarquía de ficheros tiene una ruta de acceso que debe seguir un usuario para ejecutarlo. Para que los usuarios no necesiten ejecutar los comandos especificando su ruta (por ejemplo /bin/ls), la shell lee de la variable PATH el camino hacia los posibles directorios que alojan ficheros ejecutables. Así cuando un usuario ejecuta un comando, la shell busca el fichero ejecutable del mismo en los diferentes directorios especificados en la variable de entorno PATH. Las diferentes rutas, como en el caso de PAGER, se separan con dos puntos.

PS1='\s-\v\$ '

La variable PS1 indica la cadena de texto que formará su prompt (indicador de que el sistema espera que usted introduzca un comando). EL valor de la variable puede simplemente ser un texto, o puede contener caracteres de control que en el momento de la ejecución del prompt serán cambiados por el significado de cada carácter, tal como la versión de BASH, el directorio actual en el que usted está trabajando, la fecha u hora del sistema, así como otras opciones. Si desea modificar su prompt puede leer el manual de bash (man bash).

PWD=/home/ttyp0

El camino hacia el directorio en el que usted se encuentra actualmente.

SHELL=/bin/bash

El intérprete de comandos que usará el usuario en sus sesiones.

TERM=rxvt

Tipo de terminal que utiliza el usuario. La terminal define el modo de visualización de la información en la pantalla. Es posible que le resulte difícil editar archivos de texto debido a la disposición de los caracteres al visualizarlo, o es posible también que los comandos que ejecute no devuelvan los resultados bajo el mismo formato de texto dependiendo de la terminal que esté usando.

Si desea obtener un listado de los tipos de terminal de los que dispone, puede dirigirse a las páginas del manual de terminfo (man terminfo).

UID=1000

Identificador de usuario que le identifica dentro del sistema. Se utiliza para comprobar los niveles de acceso al sistema entre los usuarios. Cada usuario tiene un identificador único. EL usuario root tiene identificador 0, y algunos otros usuarios generados automáticamente por el sistema en el momento de la instalación, también tienen UID's concretos, necesarios para que el sistema funcione correctamente. No todos los usuarios existentes en un sistema deben ser cuentas de acceso para usuarios físicos. Por norma general hay muchas más cuentas de acceso al sistema que usuarios que las utilicen, eso es debido a que el sistema requiere de la existencia de usuarios que realicen algunas tareas rutinarias para las cuales (por motivos de seguridad) no es necesario el acceso del usuario root.

USER=ttyp0

Nombre de usuario de su cuenta de acceso.

XINITRC=/etc/X11/xinit/xinitrc

Camino hacia el fichero de configuración que el servidor gráfico Xfree leerá para arrancar su entorno personal.

Las variables referentes al lenguaje con el que deben leerse los mensajes en las aplicaciones que usted ejecute se encuentran en la salida del comando locale. Usted puede modificarlas si desea obtener los resultados y mensajes del sistema en un idioma diferente al actual. Por defecto el sistema está configurado para devolver los mensajes en inglés puesto que es el lenguaje que cumple los estándares POSIX. Veamos las variables de las que dispone su sistema:

bash-2.05b$ locale
LANG=POSIX
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

El significado de la s variables de internacionalización puede entenderse fácilmente, dado que hace referencia a cuestiones de lenguaje, franja horaria, formato de numeración telefónica, mediciones, monetaria, etc...

A parte de las variables de entorno de las que dispone por defecto, usted puede crear nuevas variables con las que trabajar. Por norma general le interesarán para programar la automatización de ciertas tareas (lo que se conoce como Shell-Script), aunque es posible cambiar las variables de entorno de la misma forma que se pueden crear otras nuevas.

De este modo, el trabajo con variables es completamente accesible al usuario, sea para modificar su entorno tanto como para crear hábitos nuevos de trabajo.

Usted puede crear una variable asignándole directamente un valor. No hace falta que defina una variable antes de asignarle un valor, sencillamente las variables cogen un valor independientemente del tipo del mismo, y se diferencian únicamente por las operaciones que se pueden aplicar al valor asignado. Una variable será de tipo real o entero si pueden realizarse operaciones algebraicas sobre su valor. Del mismo modo, una variable será de tipo string (cadena de texto) si pueden realizarse comprobaciones de longitud de la cadena u otros tipos de operaciones sobre el valor asignado. Por norma general una variable de tipo numérico también admite operaciones de variables de tipo string, puesto que un número no deja de ser una cadena de texto formada por caracteres numéricos.

Pruebe a definir una variable llamada A, asignándole un valor cualquiera. Hágalo de la siguiente forma:

bash-2.05b$ A=hola

Ahora para visualizar el valor que le ha otorgado (la cadena de texto hola), puede hacerlo del siguiente modo:

bash-2.05b$ echo $A
hola

Puede entender que el nombre de la variable hace referencia a la variable, en cambio si lo precede del signo $ hace referencia al valor que acumula. Si desea modificar el valor de una variable no tiene más que asignárselo de nuevo, tal como se observa en el ejemplo:

bash-2.05b$ A=hola
bash-2.05b$ echo $A
hola
bash-2.05b$ A=adios
bash-2.05b$ echo $A
adios

Del mismo modo que ha trabajado ahora con una variable creada por usted mismo, puede modificar cualquier variable de entorno. Pruebe por ejemplo a cambiar el prompt en su shell:

bash-2.05b$ echo $PS1
\s-\v\$
bash-2.05b$ PS1="Primera Prueba ASSL: $"
Primera Prueba ASSL: $echo $PS1
Primera Prueba ASSL: $
Primera Prueba ASSL: $ls
documentacion.pdf	tema1.pdf	tema2.pdf	curso
Primera Prueba ASSL: $


De este modo ha conseguido cambiar la cadena de su prompt por una que usted ha elegido. El valor asignado a esta variable contiene espacios en blanco, de modo que para evitar la confusión del sistema puede englobarse la cadena completa entre comillas.

La asignación de un nuevo valor a una variable tendrá efecto en la shell en la que esté usted trabajando. Si está trabajando con más de una shell simultáneamente, el resto de shells no tendrán noticia del cambio, por lo que no les afectará. Si desea que el cambio realizado en una variable, así como la creación de una nueva, afecte a todas las shells o aplicaciones que tenga en uso actualmente, puede realizar una exportación del valor asignado del siguiente modo:

bash-2.05b$ echo $PS1
\s-\v\$
bash-2.05b$ PS1="Primera Prueba ASSL: $"
Primera Prueba ASSL: $export PS1

Proceso de inicialización del sistema

El sistema operativo cuenta con un mecanismo de arranque llamado Sistema de Arranque, que define el orden y el modo en que se ejecutan las tareas del sistema desde el principio.

Existe un proceso que arranca el sistema operativo, y que consecutivamente se divide en otros procesos, y éstos últimos a su vez llaman a otros terceros. El primer proceso que se ejecuta en el sistema se llama INIT, y posee el identificador de proceso 1, haciendo referencia al orden de aparición en el tiempo. Cada uno de los procesos que se sucedan cobrarán un identificador de proceso (en adelante Pid) mayor según el orden temporal de ejecución.

Remontándose en la historia hasta la aparición del Unix puede recordar que la diversidad de compañías que desarrollaron versiones propias del mismo fue en aumento durante la década de lo 80, lo que desembocó en una orgía de variaciones del código original. Se tomaron como estándares la versión 4.0 del código original de AT&T (Unix System V), y la reciente aparición de la distribución BSD. Las nuevas incorporaciones al panorama Unix debían seguir las pautas dispuestas por AT&T y Berkeley en sus sistemas, de modo que el sistema de arranque era una parte más a definir entre una opción u otra.

Llegados al día de hoy, Linux también debe decidir entre un sistema de arranque de tipo System V o de tipo BSD. Uno difiere de otro en la jerarquía de directorios según la que dispone el acceso al arranque de los procesos necesarios para el arranque del sistema. El proceso INIT es común a ambas distribuciones. Éste, una vez ejecutado busca el fichero /etc/inittab y lee su contenido, en el cual se explicita la distribución y el órden de arranque de los siguientes procesos. Éstos están separados en Runlevels, que son niveles de arranque. Los runlevels siguen una numeración definida por el estándar, especificando los procesos que deben arrancarse en cada uno de ellos. El proceso INIT arranca el sistema partiendo del runlevel especificado por defecto en /etc/inittab. Finalmente le devuelve en pantalla un mensaje pidiendo usuario y password (proceso login).

Sistema de arranque SYSTEM V

El sistma de arranque System V difiere del tradicional BSD en que el proceso INIT se encuentra directamente en /sbin en lugar de en /etc, de modo que facilita la migración de un sistema BSD a uno System V sin tener que formatear el disco para ello.

Los ficheros de configuración de los procesos de arranque se encuentran en un directorio dentro de /etc llamado /etc/rc.d. En él puede encontrar un fichero llamado rc.sysinit, y los siguientes subdirectorios:

init.d/
rc0.d/
rc1.d/
rc2.d/
rc3.d/
rc4.d/
rc5.d/
rc6.d/

init.d contiene scripts que lanzan servicios al arranque del sistema. Los servicios hacen referencia a procesos que ofrecen conexiones de red tanto como a servicios locales del sistema, tales como sendmail, samba, apache, etc... Algunas aplicaciones que no ofrecen servicios, o que no deben ser lanzadas por el sistema de arranque directamente puesto que son aplicaciones que arrancan y finalizan en un periodo breve de tiempo, no deben ser incluidas en init.d, sino que deben ser programadas en el script rc.local.

rc.local debe estar alojado directamente en /etc/rc.d, y su función primera es ejecutar tareas que elsistema de arranque no tiene por qué ejecutar, pero que el usuario desea que se realicen de igual modo antes de comenzar a usar el sistema operativo.

El proceso de arranque sigue los siguientes pasos:

  • 1.EL kernel busca un fichero INIT en varias partes del sistema, y ejecuta el primero de ellos que encuentra. SI usted migra de un sistema de arranque BSD a uno System V debe asegurarse de que el fichero INIT se encuentra directamente en /sbin.
  • 2.INIT ejecuta varios procesos necesarios antes de poder comenzar a lanzar servicios, e inmediatamente después ejecuta el contenido de rc.sysinit
  • 3.INIT ejecuta rc.local
  • 4.INIT ejecuta los scripts que se encuentran en el runlevel por defecto.

El runlevel por defecto está especificado en /etc/inittab. Usted debe tener al principio del fichero una línea similar a la siguiente:

id:3:initdefault:

Observando la segunda columna de esta línea, usted puede averiguar que el runlevel que se va a ejecutar por defecto es el runlevel 3. De este modo, si usted desease cambiar el runlevel para que arranque directamente en entorno gráfico, por ejemplo, debería únicamente sustituir el número 3 por el número de runlevel que ejecuta un arranque a su medida.

El sistema ejecuta todo lo que encuentra en el directorio propio del rulevel 3 (/etc/rc.d/rc3.d). Veamos el contenido del mismo (ls -l /etc/rc.d/rc3.d):

lrwxrwxrwx 1 root root 13 13:11 S10network -> ../init.d/network 
lrwxrwxrwx 1 root root 16 13:11 S30syslog -> ../init.d/syslog 
lrwxrwxrwx 1 root root 14 13:32 S40cron -> ../init.d/cron
lrwxrwxrwx 1 root root 14 13:11 S50inet -> ../init.d/inet
lrwxrwxrwx 1 root root 13 13:11 S60nfs -> ../init.d/nfs
lrwxrwxrwx 1 root root 15 13:11 S70nfsfs -> ../init.d/nfsfs
lrwxrwxrwx 1 root root 18 13:11 S75keytable -> ../init.d/keytable
lrwxrwxrwx 1 root root 23 13:11 S80sendmail -> ../init.d/sendmail.init
lrwxrwxrwx 1 root root 18 13:11 S90lpd -> ../init.d/lpd.init
lrwxrwxrwx 1 root root 11 13:11 S99local -> ../rc.local

Puede comprobar que no existen ficheros reales en el directorio, sino todo son enlaces simbólicos a ficheros que se encuentran en el directorio /etc/init.d. También puede observar que al principio de cada enlace el nombre del mismo comienza por letra S, seguida de una numeración de dos dígitos. La letra S indica que el servicio debe ejecutarse, una letra K indicaría que debe detenerse. La numeración cumple únicamente una función de orden de ejecución. Al leer el directorio, el sistema de arranque sigue la numeración de los enlaces, y ejecuta aquellos que se encuentran precedidos de una letra S siguiendo el orden de la numeración.

Sistema de arranque BSD

El primer proceso que se ejecuta en un sistema de arranque de tipo BSD es, igual que en System V, el INIT. El proceso INIT lee el fichero /etc/inittab para saber cómo debe arrancar el sistema. A diferencia del sistema de arranque System V todos los ficheros que se deben ejecutar están alojados directamente en el directorio /etc/rc.d.

Una vez sabido el runlevel que debe ejecutar por defecto, lee el fichero rc.S para poner a punto ciertos aspectos necesarios del sistema antes de ejecutar dicho runlevel, como la estructuración de la memoria virtual, el montaje de los sistemas de ficheros locales (para lo que lee el fichero /etc/fstab), prepara algunos directorios para los logs (registro de sucesos) del sistema, inicializa los dispositivos Plug & Play, carga los módulos del Kernel, configura los dispositivos PCMCIA, configura los puertos serie, y finalmente ejecuta los ficheros de arranque de tipo System V que pueda encontrar (si existen). Algunos ficheros de inicialización que el sistema de arranque BSD usa para ello son:

rc.S - Es el fichero que se está ejecutando actualmente.
rc.modules – Carga los módulos del kernel referentes a su tarjeta de red, su tarjeta de sonido, la conexión po módem, etc...
rc.netdevice – Realizará prácticamente la misma función, relativa únicamente a los dispositivos de red.
rc.pcmcia – Prueba módulos de tarjetas PCMCIA, útil sobretodo en ordenadores portátiles, soporte sin el cual posiblemente tendrían problemas para arrancar servicios de red.
rc.serial – Ejecuta los comandos para preparar los puertos serie de su ordenador.
rc.sysvinit – Busca ficheros de arranque de tipo System V, y si los encuentra los ejecuta.

Despues de completar la inicialización del sistema, INIT entra en el runlevel especificado por defecto en /etc/inittab. Los runlevels van numerados de un modo similar a como lo hace System V. La nomenclatura se corresponde con los siguientes ficheros y sus funciones correspondientes en un sistema con arranque tipo BSD, en el ejemplo Slackware GNU/Linux :

rc.0 – Apaga el sistema, por defecto está enlazado tambien a rc.6.
rc.4 – Modo multiusuario en entorno gráfico (X11), usando KDM, GDM ó XDM como gestor de acceso al sistema.
rc.6 – Reinicia el sistema.
rc.K – Modo monousuario (runlevel 1)
rc.M – Modo multiusuario en entorno texto. Runlevel por defecto en Slackware GNU/Linux.

Para la inicialización de los servicios de red se usan los runlevels 2,3 y 4 si se encuentran habilitados. En ellos se ejecutan los siguientes ficheros: rc.inet1 – Creado por el comando netconfig, este fichero configura su tarjeta de red proporcionándole una dirección IP, así como las puertas de acceso a otras redes (gateways).

rc.inet2 – Se ejecuta después de rc.inet2 y arranca algunos servicios de red básicos.
rc.atalk – Inicializa los servicios ApleTalk para compatibilidad con redes Macintosh.
rc.httpd – Arranca el servidor web Apache.
rc.samba – Arranca SAMBA para compatibilidad de compartición de ficheros e impresoras en redes Windows.
rc.news – Inicializa el servidor de noticias.

Otros ficheros ejecutados por el sistema de arranque BSD proporcionan servicios de menor importancia, y son lanzados por los ficheros anteriormente explicados de modo que si desea modificar algún parámetro de su ejecución lo único que debe hacer es editarlos:

rc.cdrom – Si se habilita, buscará automáticamente una unidad de CDROM. EN caso de encontrarla montará su contenidodirectamente en /cdrom.
rc.gpm – Arranca el soporte para usar el ratón. Permite copiar y pegar en entorno de consola en modo texto.
rc.ibcs2 – Arranca el soporte de compatibilidad con binarios Intel.
rc.font – Carga la configuración del tipo de fuente (tipo de letra) para la consola.
rc.local – Se encuentra vacío por defecto después de una instalación, se reserva para comandos que los administradores locales deseen ejecutar al inicio del sistema. El fichero rc.local es el último en ejecutarse.

Puede observar que el sistema de arranque BSD es mucho más sencillo que el usado por System V, aportando además la compatibilidad con éste último. Aun así, la gran mayoría de distribuciones surgidas últimamente optan por seguir el sistema de arranque System V.

FHS (Jerarquía de ficheros)

Las siglas FHS hacen referencia a Filesystem Hierarchy Standard, conocido comúnmente como jerarquía de ficheros. En UNIX (y consecuentemente en Linux) los ficheros se ordenan en directorios según la finalidad que posean los mismos. El concepto de las unidades C: , D: y demás, usado en los sistemas de tipo DOS, separa el espacio usado por el sistema en ubicaciones diferentes y aleatorias. En Linux todo el sistema forma una única unidad compacta y ordenada a consciencia. Cada directorio dentro del sistema tiene una finalidad, y ello supone para el usuario una ordenación de los conceptos que conciernen a la administración del mismo. Puede que en un principio le resulte extraño el cambio del punto de vista, la idea completamente diferente de organización de los ficheros y directorios, y sobretodo el hecho de que no exista una solo directorio creado y puesto en su sitio con plena premeditación y un fin concreto. No se preocupe, es tan solo cuestión de costumbre, y en un periodo de tiempo breve agradecerá la forma en que Linux le muestra de forma transparente el funcionamiento de cada parte del sistema.

Para comenzar, debe saber que toda la jerarquía de ficheros parte del punto de montaje inicial, indicado por el símbolo /. Para moverse a ese punto, debe simplemente teclear el comando:

bash-2.05b$ cd /

Una vez situado en /, se encontrará al principio del árbol de directorios. Cada directorio que cuelga de / tiene una funcionalidad distinta, y a su vez se divide en otros subdirectorios ordenados con el mismo fin. Un subdirectorio de cualquier directorio que penda de / tiene como finalidad primera cumplir unos ciertos objetivos relacionados directamente con su directorio padre.

Veamos los directorios que existen al inicio del árbol:

bash-2.05b$ ls
bin  boot  dev  etc  home  lib  lost+found  mnt  opt  proc  root  sbin  tmp  usr  var

Fíjese que aunque los directorios tienen un nombre propio, cuelgan directamente del principio de la jerarquía de ficheros del sistema, de modo que para hacer referencia al directorio bin situado tras la /, nos referiremos al directorio /bin. Esto se debe a la existencia de varios subdirectorios con el mismo nombre, aunque situados en diferentes partes del sistema.

Veamos ahora la finalidad de cada directorio que parte de /:


/bin – contiene los ficheros ejecutables de las aplicaciones básicas del sistema, tales como ls, cd, mount... los ficheros alojados en /bin pueden ser ejecutados por cualquier usuario del sistema.

/sbin – En él se alojan los ficheros ejecutables de las aplicaciones relacionadas con la administración del sistema. Evidentemente el único usuario que tiene (y debe tener) acceso a ellas es el administrador, el usuario root. Algunas de estas aplicaciones son fdisk, linuxconf, etc...

/lib – Aloja librerías de aplicaciones. Las librerías son partes de código de las que depende una aplicación, pero no se incluyen en ella debido a que pueden ser necesitadas por más de una aplicación. De este modo se evita la redundancia de código y se optimiza el espacio.

/boot – Contiene las imágenes del núcleo del sistema (Kernel), así como algunos ficheros requeridos por el gestor de arranque.

/etc – Directorio (y subdirectorios) usado para guardar los ficheros de configuración del sistema y de las aplicaciones. Por norma general muchas aplicaciones guardan sus ficheros de configuración en subdirectorios de /etc.

/proc – Directorio virtual que no existe en el disco duro. Lo genera el sistema en memoria volátil para almacenar ficheros que proporcionan información sobre el estado actual del sistema, consumo de memoria, de procesador, dispositivos conectados a la máquina, etc...

/tmp – En este directorio se almacenan ficheros temporales. Suelen generarse durante la ejecución de una aplicación, y suelen desaparecer al finalizar la ejecución de la misma. Todos los usuarios tienen acceso de lectura y escritura en él.

/var – Contiene información que varía con el tiempo. Dentro se encuentran subdirectorios de logs (registros), directorios para la incorporación de mensajes de correo, para el almacenamiento de las colas de impresión, etc..

/home – Directorio que contiene los subdirectorios que se usarán como casa (directorio inicial y privado) de cada usuario. El home de cada usuario es la única propiedad privada del mismo. Tambien se aloja en él la configuración particular de cada aplicación que el usuario ejecute.

/dev – Aloja los ficheros que se corresponden con los dispositivos conectados al ordenador. Linux trata los dispositivos como ficheros, por tanto pueden renombrarse o borrarse, aunque no sea aconsejable. De este modo usted en su sistema poseerá un fichero /dev/mouse que se corresponde con su ratón, un fichero /dev/modem que se corresponde con su módem...

/mnt – En este directorio se montan normalmente los unidades externas al sistema, discos duros, unidades de CDROM, disquetteras... para ver su contenido. El proceso de montar un dispositivo únicamente hace referencia a la visualización del contenido del dispositivo dentro de un directorio.

/usr – Aquí encontrará una réplica mas o menos exacta del sistema de archivos que cuelga de la raíz (/) del sistema. El motivo de la separación del contenido de /usr del de la raíz del sistema radica en la esencialidad del mismo. /usr contiene archivos ejecutables, librerías y configuraciones de las aplicaciones que no son esenciales para el uso del sistema ni su administración. Encontrará generalmente los siguientes subdirectorios:

/usr/bin – Ejecutables de aplicaciones no esenciales
/usr/sbin – Ejecutables de aplicaciones de administración no esenciales
/usr/lib – Librerías no esenciales
/usr/include – Ficheros de encabezado no esenciales
/usr/src – Ficheros de código fuente
/usr/man – Base de datos del manual de Linux
/usr/local – Aloja redundántemente una estructura de archivos similar a la contenida en la raíz del sistema. Su finalidad es hospedar las aplicaciones que se han ido instalando posteriormente a la instalación del sistema.

FHS es la jerarquía de ficheros estándar dictada por POSIX, aunque muchas distribuciones usan variaciones de la misma. Tenga en cuenta que una excesiva variación de la jerarquía de ficheros estándar puede comportarle la necesidad de algunos métodos de organización de la información que le acarreen una carga innecesaria al procesador de su máquina. Slackware GNU/Linux es, a día de hoy, la única distribución que sigue la FHS al pie de la letra. Algunas de las distribuciones que más la han variado son Red Hat Linux, Mandrake Linux o, sobretodo, SuSe Linux.

Herramientas personales