Servicios principales en un sistema UNIX

En esta sección se describen algunos de los servicios más importantes en UNIX, pero sin mucho detalle. Se describirán más profundamente en capítulos posteriores.

init

El servicio individual más importante en un sistema UNIX es provisto por init. init es el primer proceso que se inicia en todo sistema UNIX, siendo la última acción que el núcleo realiza al arrancar. Cuando init comienza su ejecución, continúa con el proceso de arranque del sistema, realizando varias tareas de inicio (chequear y montar sistemas de archivos, iniciar demonios, etc.).

La lista exacta de cosas que init realiza depende del sistema tipo UNIX con el que estemos trabajando; existen varios para elegir. init normalmente proporciona el concepto de modo de usuario individual (single user mode), en el cual nadie puede iniciar una sesión y root utiliza un intérprete de comandos en la consola; el modo usual es llamado modo multiusuario (multiuser mode). Algunos sistemas UNIX generalizan esto como niveles de ejecución (run levels). Así, los modos individual y multiusuario son considerados dos niveles de ejecución, y pueden existir otros niveles adicionales para, por ejemplo, ejecutar X-Windows en la consola.

GNU/Linux permite tener hasta 10 niveles de ejecución (runlevels) distintos, 0-9, pero normalmente solo algunos de estos niveles están definidos por defecto. El nivel de ejecución 0 se define como “sistema detenido (system halt)”. El nivel de ejecución 1 se define como “modo de usuario individual (single user mode)”. El nivel de ejecución 6 se define como “reinicio del sistema (system reboot)”. Los niveles de ejecución restantes dependen de como la distribución particular de GNU/Linux los haya definido, y varían significativamente entre distribuciones. Observando el contenido del archivo /etc/inittab podemos hacernos una idea de los niveles de ejecución preestablecidos en nuestro sistema y de como se encuentran definidos.

En el funcionamiento normal, init se asegura de que getty se encuentre trabajando para permitir que los usuarios puedan iniciar una sesión, y también se encarga de adoptar procesos huérfanos (aquellos cuyo proceso padre murió; en UNIX todos los procesos deben estar en un árbol individual, y por esta razón los procesos huérfanos deben ser adoptados).

Al cerrar el sistema, es init quien se encarga de matar todos los procesos restantes, desmontar todos los sistemas de archivos, y por último detener el procesador, además de cualquier otra cosa que haya sido configurado para hacer.

Inicio de sesiones desde terminales

El inicio de sesiones desde terminales (a través de líneas serie) y la consola (cuando no se está ejecutando X-Windows) es suministrado por el programa getty. init inicia una instancia independiente de getty por cada terminal en el que está permitido iniciar sesiones. Getty lee el nombre de usuario y ejecuta el programa login, el cual se encarga de leer la password. Si el nombre de usuario y la password son correctas, login ejecuta el intérprete de comandos. Al finalizar el intérprete de comandos (en el caso en que, por ejemplo, el usuario finaliza su sesión; o cuando login finaliza debido a que no concuerdan el nombre de usuario y la password), init se entera de este suceso e inicia una nueva instancia de getty. El núcleo no tiene noción sobre los inicios de sesiones, esto es gestionado totalmente por los programas del sistema.

Syslog

El núcleo y muchos programas de sistema producen mensajes de error, de advertencia y de otros tipos. La mayoría de las veces, es importante que puedan ser visualizados mas tarde, o tal vez mucho después, por lo que tales mensajes deben guardarse en un archivo. El programa que realiza esta tarea es syslog. Syslog puede ser configurado para ordenar los mensajes en diferentes archivos, de acuerdo a quien lo emite o al grado de importancia. Por ejemplo, los mensajes del núcleo son frecuentemente dirigidos a un archivo separado de los demás, debido a que son más importantes, y necesitan ser leídos regularmente para detectar problemas.

Ejecución periódica de comandos: cron y at

Los administradores de sistemas y los usuarios, a menudo necesitan ejecutar comandos periódicamente. Como ejemplo, supongamos que el administrador del sistema desea ejecutar un comando que elimine los archivos más antiguos de los directorios con archivos temporales (/tmp y /var/tmp) para evitar así que el disco se llene, debido a que no todos los programas eliminan correctamente los archivos temporales que ellos mismos generan.

El servicio cron se configura para que realice la tarea anterior. Cada usuario tiene un archivo crontab, en el cual se listan los comandos que se desea ejecutar y la fecha y hora de ejecución. El servicio cron se encarga con precisión de iniciar cada comando, a la fecha y hora adecuada de acuerdo a lo especificado en cada archivo crontab.

El servicio at es similar a cron, pero este se inicia únicamente una vez: el comando es ejecutado a la hora especificada, pero esta ejecución no vuelve a repetirse.

Se puede encontrar información adicional sobre cron(1), crontab(5), at(1) y atd(8) en las páginas de manual.

Interfaz gráfica de usuario (GUI)

UNIX y GNU/Linux no incorporan la interfaz gráfica de usuario dentro del núcleo; en su lugar, es implementada por programas a nivel de usuario. Esto se aplica tanto a entornos gráficos como al modo texto.

Esta disposición hace que el sistema sea más flexible, pero tiene la desventaja de que, al ser simple implementar una interfaz de usuario diferente para cada programa, dificulta el aprendizaje del sistema.

El entorno gráfico principalmente utilizado con GNU/Linux se llama Sistema X-Windows (X para abreviar). X tampoco implementa por sí mismo una interfaz de usuario, sino solo un sistema de ventanas. Es decir, las herramientas base con las cuales se puede construir una interfaz gráfica de usuario. Algunos administradores de ventanas populares son: fvwm, icewm, blackbox y windowmaker. Existen también dos populares administradores de escritorios: KDE y Gnome.

Redes

Una red se construye al conectar dos o más ordenadores para que puedan comunicarse entre sí. Los métodos actuales de conexión y comunicación son ligeramente complicados, pero el resultado final es muy útil.

Los sistemas operativos UNIX tienen muchas características de red. La mayoría de los servicios básicos (sistemas de archivos, impresión, copias de seguridad, etc) pueden utilizarse a través de la red. Aprovechar estas características puede ayudar a que la administración del sistema sea más fácil debido a que permiten tener una administración centralizada, a la vez que disfrutamos de los beneficios de la micro informática y la informática distribuida, tales como costes más bajos y mejor tolerancia a fallos.

De cualquier modo, este libro sólo aborda superficialmente la teoría de redes; Se puede encontrar información adicional sobre este tema en La Guía De Administración De Redes con Linux (Linux Network Administrators' Guide http://www.tldp.org/LDP/nag2/index.html), incluyendo una descripción básica de como operan las redes.

Inicio de sesiones a través de la red

Los inicios de sesión a través de la red funcionan de un modo un poco diferente al inicio de sesiones normales. Existe una línea serie física separada para cada terminal a través de la cual es posible iniciar sesión. Por cada persona iniciando una sesión a través de la red existe una conexión de red virtual, y puede haber cualquier número (no hay límite). [2] Por lo tanto, no es posible ejecutar getty por separado por cada conexión virtual posible. Existen también varias maneras diferentes de iniciar una sesión a través de la red, las principales en redes TCP/IP son telnet y rlogin. [3]

Los inicios de sesión a través de la red tienen, en vez de una cantidad enorme de getty's, un servicio individual por tipo de inicio de sesión (telnet y rlogin tienen servicios separados) que "escucha" todos los intentos de inicio de sesión entrantes. Cuando el servicio advierte un intento de inicio de sesión, inicia una nueva instancia de si mismo para atender la petición individual; la instancia original continúa atenta a otros posibles intentos. La nueva instancia trabaja de manera similar a getty.

Sistemas de archivos de red (NFS)

Una de las cosas más útiles que se pueden hacer con los servicios de red es compartir archivos a través de un sistema de archivos de red. El más utilizado normalmente para compartir archivos se llama Network File System, o NFS, desarrollado por Sun Microsystems.

Con un sistema de archivos de red, cualquier operación sobre un archivo realizada por un programa en una máquina es enviada a través de la red a otra máquina. Se "engaña" al programa, haciéndole creer que todos los archivos en el ordenador remoto se encuentran de hecho en el ordenador en el que el programa se está ejecutando. Con esta manera de trabajar, compartir información es extremadamente simple, ya que no se requieren modificaciones en el programa.

Otra manera muy popular de compartir archivos es a través de Samba (http://www.samba.org). Este protocolo (llamado SMB) permite compartir archivos con máquinas Windows a través del Entorno de Red. También permite compartir impresoras.

Correo

El correo electrónico es el método más popularmente utilizado para comunicarse a través del ordenador. Una carta electrónica se almacena en un archivo con un formato especial, y se utilizan programas de correo especiales para enviar y leer las cartas.

Cada usuario tiene un buzón de correo entrante (un archivo con formato especial), en donde se almacena todo el correo nuevo. Cuando alguien envía un correo, el programa de correo localiza el buzón del destinatario y agrega la carta al archivo de buzón de correo entrante. Si el buzón del destinatario se encuentra en otra máquina, la carta es enviada allí, donde se traslada al buzón de correo como corresponda.

El sistema de correo se compone de muchos programas. El transporte del correo a buzones locales o remotos es realizado por un programa: el agente de transporte de correo o MTA. (Sendmail y Smail son dos ejemplos de esto), mientras que existe un sin número de programas muy variados que los usuarios utilizan para leer y escribir correos (Estos son conocidos como agentes de usuario de correo o MUA, Pine y Elm son ejemplos de esto). Los archivos de buzones de correo están usualmente ubicados en /var/spool/mail.

Impresión

Solo una persona puede utilizar la impresora en un momento dado, pero sería antieconómico no compartir impresoras entre los usuarios. La impresora es por lo tanto administrada por software que implementa una cola de impresión: todos los trabajos de impresión son colocados dentro de la cola, y una vez que la impresora termina de imprimir una trabajo, el siguiente es enviado a la impresora automáticamente. Esto alivia al usuario de la organización de la cola de impresión y de luchar por el control de la impresora.

El software de la cola de impresión también coloca los trabajos de impresión en disco, es decir, el texto a imprimir es mantenido en un archivo mientras que el trabajo se encuentre en la cola. Esto permite a los programas de aplicación entregar rápidamente los trabajos a imprimir al software que administra la cola de impresión; así, las aplicaciones no tienen que esperar a que el trabajo (en inglés "job") esté de hecho impreso para poder continuar su ejecución. Esta forma de trabajar es realmente cómoda, ya que permite enviar a imprimir una versión de un trabajo y no tener que esperar a que ésta sea impresa antes de poder hacer una versión nueva completamente revisada.

La distribución del sistema de archivos

El sistema de archivos está dividido en muchas partes; normalmente en las líneas de un sistema de archivos raíz con /bin, /lib, /etc, /dev, y otros pocos directorios; un sistema de archivos /usr con programas y datos que no tendrán cambios; un sistema de archivos /var con datos que pueden cambiar (como los archivos de log); y un sistema de archivos /home para todos los archivos personales de los usuarios. Dependiendo de la configuración del hardware y de las decisiones del administrador del sistema, la división puede llegar a ser diferente; a pesar de esto, y aunque la división es aconsejable, es también posible distribuir todos los archivos en un solo sistema de archivos.

En el Capítulo 4, Visión General del Árbol de Directorios se describe la distribución del sistema de archivos con algo de detalle; el documento "Estándar de la Jerarquía del Sistema de Archivos de Linux" cubre este tema más en profundidad. [4]



[2] Al menos puede haber muchas. Dado que el ancho de banda es un recurso escaso, existe aún en la práctica algún límite al número de inicios de sesión concurrentes a través de una conexión de red.

[3] Hoy en día muchos administradores de sistemas Linux consideran que telnet y rlogin son inseguros y prefieren ssh , el “intérprete de comandos seguro” que encripta el tráfico en la red, haciendo así bastante menos probable que usuarios malintencionados puedan “espiar” la conexión y obtener datos sensibles como nombres de usuario y passwords. Está altamente recomendado usar ssh en lugar de telnet o rlogin.