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.