Curso Linux
Configurar el sistema
 
 

Gran parte de la productividad que podemos obtener de un sistema Linux, viene dada por nuestra capacidad de configurarlo y conseguir que se adapte segun sus necesidades

La shell algo más a fondo
Una de las principales directivas de Unix es emplear pequeñas aplicaciones, poco útiles por sí mismas, y conbinarlas para que sean capaces de dar solucion a grandes problemas. Partiendo de esta base, podríamos entender que una de las funciones de la shell o intérprete de comandos, es ejercer de nexo de unión entre una y otra utilidad, mediante los operadores de redirección que ya hemos tratado. Los operadores de redirección, el resto de metacarácteres y un limitado conjunto de comandos, conforman el lenguaje de los shell scripts, pequeños archivos de proceso por lotes (como los batch del DOS), pero mucho más potentes.
De entre el resto de metacaracteres, sin duda uno de los más útiles es "&". Con él podemos indicarle al sistema que una determinada tarea u orden ha de realizarse en segundo plano concurrentemente. Para ello, simplemente hemos de incluirlo al final de la línea de comandos. Por ejemplo, si deseamos copiar el contenido de un disquete al disco duro, indicando la orden cp /mnt/floppy/* /temp & el sistema realizaría la tarea en backgroud devolviéndonos inmediatamente el control de la línea de comandos. Otra función interesante es sin duda, que podernos introducir más de un comando en la misma línea, siempre que los separemos convenientemente con el carácter punto y coma ';'. En el siguiente ejemplo podernos descubrir el provecho que a esta propiedad se le puede sacar. Un pequeño handicap de ls es que no muestra el número de ficheros incluidos en el directorio que enseña. La siguiente combinación de comandos solventaría tal problema, gracias a la orden wc: ls -ls ; echo -n El número total de ficheros es: ; ls -1 | wc -l. Primero mostraría la lista de archivos completa del directorio actual, luego el mensaje de texto y por último, le pasaria la lista de ficheros a wc para que muestre el número de líneas que encuentre.
Las listas de comandos se pueden agrupar mediante el uso de paréntesis "O", o llaves "{}". El esquema es simple y análogo para las llaves: ( comando 1 ; comando 2 ; ... ; comando n ). La ejecución de los comandos se realiza de forma secuencias en ambas, con la única diferencia de que empleando paréntesis, la ejecución la lleva a cabo nuestra shell y con llaves, y es realizada por un nuevo intérprete, no modificando así de ninguna forma las variables del entorno inicial. Además, las listas también pueden ser concatenadas mediante el uso de "&&" y " | | ". El formato es idéntico: (lista 1) && o | | (lista 2), con && indicaríamos al intérprete que ejecute la segunda lista sólo en caso de que la primera haya teminado correctamente y con | | el intérprete ejecutaría la segunda lista si no finalizó la primera.
Todo esto sólo proporciona una parte de la potencia de los comandos Unix, la otra la aportan los propios comandos. No hemos nunca de olvidar que un comando puede disponer de un gran número de opciones, y que éstas pueden expandir terriblemente su funcionalidad. La orden ls por sí sola apenas ofrece información, pero si introducimos ls -lsa, nos mostrará el contenido del directorio con todo lujo de detalles. Si quiere conocer las opciones de un determinado comando, recuerde que siempre puede consultar las páginas del manual (man comando) o tecleando comando --hel p. En la tabla 1 se incluyen algunas de las órdenes más comunes, junto con sus opciones más relevantes, las cuales son casi siempre combina- bles.
Por último, en lo concerniente al intérprete de comandos, sólo nos resta comentar los caracteres comodín o wildcards. El asterisco ´*` opera de forma muy similar a como lo hace en DOS, aunque hay que tener presente que el sistema de archivos de Linux no respeta los puntos, es decir, no se ajusta de ninguna manera a los nom- bres 8+3 de¡ DOS o Windows NT/95. Por ejemplo, para copiar todos los ficheros y subdirectorios de /temp/informes a /temp/backup habriamos de escribir cp -R /temp/informes/* /temp/backup. Nótese que se ha escrito con * y no con *.*, pues si pusiéramos lo segundo sólo copiaría los archivos en cuyo nombre se incluyera un punto. Por su parte, el carácter interrogación '?' sustituye un único carácter, mientras que si encerramos una serie de caracteres entre corchetes separados por comas, la shell seleccionaría indistintamente cada uno de ellos. De esa manera, la orden ls *[a,e] mostrará todos los archivos que terminen en 'a' o en 'e'.

Grupos y usuarios
Linux es un sistema multiusuario, lo que significa que podemos definir todos los usuarios que nos sean precisos. Cada usuario a su vez ha de estar incluido en uno o más grupos determinados de usuarios, de los cuales, heredará determinados privilegios, que le permitirán tener acceso a determinados archivos y aplicaciones del sistema.
Para la administración de los grupos de usuarios, disponemos de las herramientas Groupadd, Groupdel y Groupmod, y análogamente para la gestión de usuarios, encontramos Useradd, Userdel y Usermod. Sus funciones son añadir, eliminar y modificar grupos o usuarios respectivamente. Lo primero que hemos de hacer es crear los grupos de usuario con Groupadd, por ejemplo, groupadd NombreGrupo
A continuación, puede crear usuarios en los distintos grupos mediante la orden useradd -g NombreGrupoPrincipal -G listaGruposSecundarios -d RutaDirectoriousuario IdentificativoUsuario. Por ejemplo, para crear un grupo llamado "pruebas" e incluir en él al usuario "invitado" introduciríamos: groupadd pruebas   ; useradd -g pruebas -d  /home/invitado invitado.
A partir de este momento, ya tendriamos creado el usuario "invitado". Solo quedaria especificarle la contraseña que ha de tener dicho usuario con la orden passwd invitado.
Para verificar que se han introducido correctamente nuevos usuarios podemos editar el fichero /etc/passwd (fichero de informacion sobre los usuarios) y /etc/group (información de los grupos) y comprobar que han sido incluidos. Los listados 1 y 2, respectivamente, muestran un ejemplo de estos dos archivos. La orden group- del/userdel tienen una sintaxis muy simple, únicamente especificar el nom- bre del grupo o usuario y éste será eli- minado. Sin embargo, Groupmod y Usermod ya admiten un buen número de parámetros. Por ello, es mucho más cómodo realizar estas tareas de administración, con una herramienta gráfica como usercfg de RedHat o el entorno YAST de SUSE.
La seguridad y el sistema de archivos En cualquier sistema Unix, el propio sistema de archivos incluye toda la información que precisa el sistema para su seguridad. Cuando un usuario modifica o crea un nuevo fichero, junto con el propio contenido del archivo, se incluyen datos como quién es el propietario del archivo, es decir quien lo ha creado o modificado, cual es su grupo principal, y con qué privilegios ha de ser almacenado. A partir de esta información, el sistema es capaz de decidir quién tiene acceso a un determinado archivo, recurso o aplicación y qué puede hacer con él. Para poder comprender cómo funciona, basta con que tomemos como ejemplo cualquier fichero de nuestro sistema de archivos. Si observamos la información que la orden Is -l ofrece de cualquier fichero nos podemos encontrar con un archivo como el siguiente, que muestra las características del archivo datos.
 

-rwxr-xr-     1 invitado     pruebas
1890 May 7 04:40 datos 
La primera columna se refiere a los permisos del archivo, el siguiente número especifica el número de links o enlaces que tiene, luego muestra el nombre del propietario del archivo, seguido del grupo al que pertenece, tamaño, fecha de creación y nombre del fichero en cuestión (datos). Los permisos en la primera columna están formados por 10 caracteres. El primero define el tipo de archivo que es datos (si es un fichero, un directorio, un link, etc.), y con los 9 restantes formamos 3 grupos de 3, que establecen los permisos del propietario, del grupo y del resto de usuarios respectivamente (observar esquema de la figura adjunta). Los caracteres pueden ser tres: "r" para permitir la lectura, "w" la escritura y "x" la ejecución del fichero (definir que es ejecutable). Así pues en el ejemplo anterior del archivo datos, se trata de un archivo que puede ser leído, escrito y ejecutado por su propietario (que es el usuario con nombre invitado), leído y ejecutado por todos los miembros del grupo pruebas, y simplemente leído por el resto de usuarios. Lo mismo es aplicable a los directorios, con la salvedad de que en ellos la "x" significa que se tiene permiso para acceder al directorio con- creto. 
Tanto el usuario root como el propietario pueden cambiar los permisos del fichero con el comando Chmod (change mode). Chmod establece para cada una de las categorías ("u" de usuario, "g" de grupo y "o" de otros) cada uno de los permisos ("r", "w" y "x"), indicando con "+" que el permiso ha de añadirse y con "-" que ha de retirarse. Por ejemplo, la orden chmod g+w-rx aplicada sobre el archivo datos retiraría el permiso de lectura y ejecucion y activara el permiso de escritura a los miembros del grupo, quedando los permisos del archivo datos como - rwx-w-r--.
Por otro lado, el administrador siempre tiene la facultad de poder cambiar tanto el propietario, como el grupo al que pertenece un archivo, con las ordenes Chown (change owner) y Chgrp (changegroup). 

Esquema de los permisos de archivos en Linux 

El proceso de arranque
El proceso de arranque, ya no sólo en Linux, sino en la mayoría de los sistemas Unix, sigue un procedimiento más o menos estándar. El fichero de configuración /etc/inittab es el que controla el arranque del sistema, en cuanto termina de cargarse el núcleo (kernel) en memoria. En este fichero se define principalmente el modo de ejecución (a partir del cuál se arrancan los demonios o servicios del sistema), y se activan los distintos terminales, por los cuales se podrán realizar entradas al sistema (como las tertninales virtuales, puertos serie, módems, etc.). El número y tipo de los demonios arrancados dependerá directamente del modo de ejecución que se active y determinarán en gran medida la utilidad del sistema. Una vez terminado este proceso, Linux queda exclusivamente pendiente a las posibles entradas al sistema. 

Cada vez que un usuario es validado, se leen ciertos archivos de configuración que definirán su entorno inicial. Aquí podemos distinguir dos grupos de configuraciones: las genéricas, y las particulares de cada usuario. Los archivos de la parte genérica, como la mayoria de los de configuración, descansan sobre el directorio /etc. El más relevante es profile, pues en él se definen las variables de entorno (paths, prompts, alias, etc.), aplicables a todos las shell del sistema. Por otro lado, podemos encontrar configuraciones particulares para cada shell, que afectan a todos los usuarios que hagan uso de ella (bashrc para bash, cshrc para esh, cte.). En el terreno particular, cada usuario puede personalizar totalmente su entorno inicial. Para ello no tiene más que crear en su directorio raíz un archivo llamado .profile, .bashrc, .cshrc, etc. Advierta que el archivo cuyo nombre empiece por punto (.) se considera oculto  y especificar en ellos qué ha de suceder cuando él entre al sistema. En este punto, a medida que nos vayamos familiarizando con el sistema, podernos realizar copias de seguridad de los distintos archivos de configuración e intentar personalizar el entorno a nuestro gusto. Quizás no sea una mala idea definir unos cuantos alias con la orden alias rm='rm -i' (que impedirá la eliminación accidental de archivos, una idea interesante, teniendo en cuenta que en Unix no se pueden recuperar), alias copy='cp', alias move='mv'... para poder seguir usando los mismos comandos que en DOS, etc.
Ya puestos a personalizar el arranque, también podernos desear montar en nuestra estructura de directorios, las distintas particiones del resto de los sistemas operativos que tenemos instalados. El archivo que define las particiones que han de ser montadas, el tipo y punto de montaje es /etc/fstab. El formato que tiene es muy simple, y de un vistazo se puede entender como añadir nuevas particiones, aunque en lugar de realizar esta tarea manualmente podemos hacer uso de alguna de las herramientas dispuestas a tal fin como fstool de RedHat o YAST de SUSE.

Instalación de aplicaciones
La mayoría de las distribuciones disponen de algún tipo de aplicación que les permite instalar o desinstalar los distintos paquetes de software que incluyen, pero no son capaces de gestionar la instalación de nuevos programas no incluidos en la distribución original. Si dentro del amplio abanico de aplicaciones existentes deseamos instalar una no contenida en nuestra distribución, hemos de hacerlo manualmente.
Básicamente podemos encontrar los distintos paquetes en dos formatos: código fuente y binarios. Lo más normal es encontrar principalmente las aplicaciones en código fuente, pues de esta forma pueden ser compiladas en múltiples sistemas Unix (no exclu- sivamente Linux).
Al compilar una aplicación, la estamos optimizando para nuestra máquina, pero también nos obliga a tener que disponer del compilador y las librerías precisas. Así pues, por regla general, suele ser más conveniente decantarse por la versión precompilada (binarios).
Entrados ya en los formatos en los que pueden ser empaquetadas las aplicaciones, hemos de destacar sin duda alguna el formato TAR. Es un auténtico estándar, pues existen versiones para todas las plataformas informáticas relevantes. TAR simplemente empaqueta un determinado grupo de archivos y los introduce en un único fichero normalmente de terminación tar. No obstante, TAR no implementa ningún tipo de compresión, y de ahí que se le suela combinar con gzip formando los conocidos ficheros tar.gz o tgz. Para poder ver el contenido de un archivo tar hemos de introducir el comando tar tvf nombrearchivo.tar, y gzip -cd nombrearchivo.tgz | tar tvf -, si se encuentra comprimido. Extraer los archivos en lugar de solo listarlos es cuestión de cambiar la opción "t" del tar por una 'x".
No obstante, el formato emergente es RPM (RedHat Package Manager) que viene a suplir todas las deficiencias que se derivan de la sencillez de TAR. Permite no sólo instalar y desinstalar paquetes de forma sencilla, sino que además es capaz de indicarnos si la aplicación requiere de alguna librería que no tenemos instalada, mostrar una descripción de las funciones de la aplicación, la lista de ficheros, presentar los paquetes que tenemos instalados en un momento dado, informar de a que paquete pertenece cierto archivo dado y actualizar cualquier programa e incluso el sistema entero partiendo de una base ya instalada y configurada. Como consecuencia de su flexibilidad dispone de gran cantidad de opciones (ver tabla 2), si bien, acabaremos usando sólo un par de ellas rpm -i - vv NombrePaquete para instalar aplicaciones, rpm -e NombrePaquete para eliminarlo y rpm -q -ip NombrePaquete para consultar su contenido. Su sintaxis básica es: rpm -modo -OpcionesModo NombrePaquete.
Instalación y configuración de la interfaz X Window
Actualmente, sería difícil encontrar una distribución Linux que no incluyera una versión de la interfaz gráfica, que es un estándar de hecho en el mundo Unix: el sistema X Window. Aunque existen variantes comerciales como Metro-X o Accelerated-X, la más difundida entre los usuarios de Linux es XFree86, una implementación totalmente gratuita del sistema X11R6-3. Los archivos que conforman el núcleo de las XFree86 son, independientemente de los números posteriores de versión: X11R6-contrib-*, XFree86-100dpi-fonts*, XFree86- 75dpi-fonts*, XFree86-3*, XFree86- devel-*, XFree86-Iibs-* y XFree86- XF86Setup-*. A esto sólo resta incluir el servidor apropiado a la tarjeta de vídeo para lo cual las XFree disponen de un buen número de servidores X distintos.
Para averiguar cuál es el indicado para una determinada tarjeta gráfica, lo primero que hemos de averiguar es el chip que la gobierna. Una vez hecho esto, buscar el servidor apropiado se reduce a consultar la infórmación de cada servidor, hasta encontrar el que de soporte a dicho chipset.
La mayoría de los chipsets han sido incluidos en el servidor XFree86- SVGA, pero también hay algunos otros específicos, como por ejemplo XFree86-53, que da soporte a diversas tarjetas basadas en chips de S3, XFree86-W32, que da soporte a las ET4000, etc. Si los servidores se encuentran en formato rpm, podemos consultar su contenido con el comando rpm -q -ip nombre-servi- dor.rpm.
Toda la información sobre la confi- guraci6n de las XFree86, se almacena en un fichero llamado XF86Config, situado normalmente en el directorio letc 6 letc/Xl l. No obstante, la configuración manual no es en absoluto recomendable para usuarios noveles, ésta tarea queda reservada a XF86Setup y xf86config. Ambas aplicaciones se encargan de configurar las X Window. La primera funciona directamente en modo gráfico (por lo que requiere haber instalado el servidor que teóricamente siempre ha de funcionar: XFree86-VGA), y la segunda funciona en modo texto. A un nivel básico, la única información que se precisa es el modelo de ratón, el puerto (recordando que COM1 es /dev/ttyS0 y COM2 es /dev/ttyS1), la marca y modelo (o chipset, en su defecto) de tarjeta gráfica, y las especificaciones del monitor. Si no dispone de dichas especificaciones, sirva como referencia que un monitor convencional de 14" se suele ajustar sin problemas al tipo Super VGA, con una frecuencia vertical de 50-70 y uno de 15", a cualquiera de los dos siguientes tipos, con una frecuencia vertical de 50-90.
Para especificar la tarjeta gráfica, primero busque en la base de datos por si su tarjeta estuviera soportada directamente y, si no fuera así, localice cualquier otra basada en su mismo chipset. 51 ha escogido configurar el servidor con xf86config, cuando le pregunte si desea crear un link simbólico, conteste afirmativamente.
Terminado el proceso de configuraci6n, podemos arrancar la interfaz gráfica mediante el comando startx. La combinación de teclas CTRL+ALT+ "+" y CTRL+ALT+ "-" ("+" y "-" del teclado numérico), permiten aumentar y disminuir respectivamente la resolución de pantalla, mientras que CTRL+ALT+ Retroceso nos devuelve inmediatamente a la línea de comandos.