·

Linux #02.04 Herramientas Básicas para el Administrador Linux

El administrador GNU/Linux tiene que enfrentarse a tareas diferentes día tras día. La filosofía UNIX no es tener una única herramienta para realizar una tarea, sino que te da un amplio número de tareas para enfrentar cualquiera de las tareas.

Veremos, a continuación, los diferentes grupos de herramientas y ejemplos de su uso. Dando a conocer algunas funciones básicas de dichas herramientas y su uso.

Empezaremos por estudiar algunos de los estándares Linux, tales como el LSB (Linux Standard Base) y el FHS (Filesystem Hierarchy Standard), nos hablan de herramientas que tendremos disponibles en todos los sistemas Linux, una estructura común de sistemas de ficheros, así como las normas que deben cumplirse para que una distribución sea considerada un sistema GNU/Linux.

Nota: Ver FHS en: www.pathname.com/fhs

Se suelen utilizar lo que llamamos shell scripts para automatizar las tareas de administración, consiste en una agrupación de comandos en un mismo fichero, son lenguajes interpretados por el shell (intérprete de comandos), que son los que nos permiten unir los comandos del sistemas con estructuras de control de flujo.

También se suelen utilizar herramientas de compilación y depuración de lenguajes de alto nivel, un ejemplo de ello el lenguaje C. Serán utilizadas por el administrador para desarrollar nuevas aplicaciones o herramientas, o para incorporar sistema de aplicaciones que vengan con el código fuente y para adaptarse deban compilarse.

Analizaremos algunas herramientas gráficas que realizan las mismas tareas que comandos. Suelen facilitar la tarea al administrador, pero son de uso limitado, ya que son dependientes de la distribución GNU/Linux que utilizaremos, y, a veces, incluso, de la versión. Existen herramientas útiles que son exportables entre distribuciones.

También analizaremos el uso de algunas herramientas gráficas con respecto a las de la línea de comandos.

Estas herramientas suelen facilitar las tareas al administrador, pero su uso es limitado, ya que dependen fuertemente de la distribución de GNU/Linux, o incluso de cada versión. Aun así, hay algunas herramientas útiles que son exportables entre distribuciones.

En último lugar, analizaremos un grupo de herramientas para mantener las actualizaciones, es lo que llamamos herramientas de gestión de paquetes. Normalmente, todas las distribuciones GNU/Linux suelen aportar software de gestión para mantener las listas de paquetes instalados o por instalar, además de control de versiones, o la posibilidad de actualizar las diferentes fuentes.

Herramientas gráficas y líneas de comandos

Existen muchas más herramientas que las que estudiaremos en esta a continuación.

Estas herramientas pueden cubrir los aspectos de la administración y presentables en interfaces diferentes: ya sea en línea de comandos y/o ficheros de configuración asociados o herramientas textuales con algún tipo de menús elaborados, o herramientas gráficas; o asistentes que automaticen tareas, o interfaces web de administración.

Nota: Todo esto nos ofrece un gran número de posibilidades de cara a la administración, pero siempre tenemos que valorar su facilidad de uso con las prestaciones y los conocimientos del administrador que se dedica a estas tareas.

Un administrador GNU/Linux puede llegar a trabajar con diferentes distribuciones, o trabajar con variantes comerciales UNIX. Debemos establecer una manera de trabajar para hacer de forma uniforme las tareas en los diferentes sistemas.

Todas las distribuciones GNU/Linux aportan herramientas del tipo línea de comandos, textual o gráfico.

Hay que tener en cuenta varios puntos:

  • Estas herramientas son una interfaz elaborada de las herramientas básicas de línea de comandos y los correspondientes ficheros de configuración.
  • Ofrecen todas las prestaciones o configuraciones que pueden realizarse a bajo nivel.
  • Los errores serán difíciles de gestionar, simplemente proporcionar mensajes tipo “la tarea no se ha podido realizar”.
  • Son útiles en la mejora de la producción, cuando el administrador tiene los conocimientos adecuados, realiza las tareas rutinarias de forma más eficaz y las automatiza.
  • Puede ocurrir el caso contrario, la tarea puede ser compleja, o necesitar tantos parámetros, o generar tantos datos, que es imposible de controlar de forma manual. En estos casos, es cuando las herramientas de alto nivel pueden ser muy útiles y volver practicables algunas tareas que de otra manera son difíciles de controlar.
  • En la automatización de tareas, estas herramientas pueden no ser las adecuadas, pueden no haber estado pensadas para los pasos que hay que realizar, o bien hacerlo de forma no eficaz.
  • Los administradores suelen querer personalizar sus tareas utilizando las herramientas que consideran más cómodas y fáciles de adaptar. Lo que más suelen utilizar son las herramientas básicas de bajo nivel y la utilización de shell scripts para combinarlas de modo que formen una tarea.

Documentos estándares

Administración
Los estándares nos permiten seguir unos criterios básicos, para guiarnos a la hora de realizar nuestro trabajo y nos proporcionan información básica para el comienzo de nuestro trabajo.

Recuerda: En GNU/Linux encontrarnos los estándares FHS (Filesystem Hierarchy Standard), que nos explica qué podemos encontrar en la estructura del sistema de ficheros de nuestro sistema. O el LSB (Linux Standard Base), que nos comenta diferentes componentes que encontramos en los sistemas.

En el estándar FHS (Filesystem Hierchachy Standard) se describen la estructura de árbol del sistema de ficheros principal (/), donde vemos especificada la estructura de directorios y los ficheros que contendrá. Es el estándar utilizado en mayor o menor medida también para los UNIX comerciales, donde en principio existieron muchas diferencias que hacía que cada fabricante cambiará la estructura a su antojo. El estándar fue pensado para GNU/Linux se hizo para normalizar esta situación. El estándar tiene diferentes grados de utilización, la mayoría de las distribuciones lo siguen, solo aportando cambios aportando nuevos ficheros o directorios que no existían en el estándar.

Nota: El estándar FHS es una herramienta básica para el conocimiento de una distribución, que nos permite conocer la estructura y funcionalidad del sistema de archivos principal del sistema.

Es muy importante conocer esta estructura para manejarse por el sistema.

Un esquema básico de directorios sería:

  • /bin: utilidades de la base del sistema, programas empleados por los usuarios. Por ejemplo; /bin/ls es la lista de directorios o, /bin/bash los shells.
  • /boot: archivos necesarios para el arranque del sistema, por ejemplo la imagen del kernel Linux, en /boot/vmlinuz.
  • /dev: podemos encontrar todos los ficheros que representan los dispositivos disponibles posibles (los podemos tener o no). Podemos encontrar ficheros como /dev/console, /dev/modem, /dev/mouse, /dev/cdrom, /dev/floppy,… estos suelen ser enlaces a dispositivos.
  • /etc: ficheros de configuración. La mayoría de tareas de administración necesitarán examinar o modificar los ficheros contenidos en este directorio.
  • /home: las cuentas de los usuarios, es decir, los directorios personales de cada usuario.
  • /lib: las bibliotecas del sistema.
  • /mnt: punto para montar (comando mount) sistemas de ficheros extraíbles.
  • /opt: el software añadido al sistema posterior a la instalación.
  • /sbin: utilidades de base del sistema. Comandos reservados al administrador (root).
  • /tmp: ficheros temporales de las aplicaciones o del propio sistema.
  • /usr: diferentes elementos instalados en el sistema.
  • /var: ficheros de registro de sesión o de estado (ficheros de tipo log) y/o errores del propio sistema y de diversos servicios. Por ejemplo, ficheros de sesión en /var/log, contenido de los mails en /var/spool/mail, o trabajos de impresión en /var/spool/lpd.

Las distribuciones Red Hat sigue el estándar FHS de cerca, pero representa algunos cambios en los archivos en /usr, /var. En /etc, suele haber un directorio por componente que se pueda configurar, y en /opt, no suele estar el software instalado, a no ser que el usuario lo instale. Debian sigue el estándar, pero añade algunos directorios de configuración en /etc.

El otro estándar en proceso es el LSB (Linux Standard Base). La idea de este estándar es hacer posible la portabilidad de aplicaciones entre distribuciones definiendo unos niveles entre las aplicaciones, bibliotecas y utilidades, además aporta un conjunto de pruebas para verificar el nivel de compatibilidad.

Documentación del sistema

Uno de los aspectos más importante para las tareas de administración es disponer de una buena documentación. Hay muchas fuentes de información, pero a destacar:

  • man es la ayuda por excelencia. Permite consultar el manual de GNU/Linux, agrupado en secciones, correspondientes a comandos de administración, formato de fichero, comandos de usuarios, llamadas de lenguaje C, etc. Para obtener la ayuda:

i.man comando

Cada página describe el comando con sus opciones y, aporta algunos ejemplos. Puede ocurrir que haya más de una entrada al manual, por ejemplo, puede que haya una llamada a C con igual nombre que el comando. En estos casos para especificar la sección:

ii.man n comando siendo n el número de sección.

Existen también herramientas de exploración de los manuales, (xman y tkman), mediante interfaz gráfica facilitan el examen de las diferentes secciones, así como índices de los comandos.

Un comando interesante es apropos palabra, utilizado para localizar páginas man que hablen de un tema determinado.

  • info. Programa desarrollado por GNU para la documentación de muchas de sus herramientas.
  • Documentación de las aplicaciones: es habitual incluir en las aplicaciones documentación extra, ya sea en manuales o tutoriales, o guías de usuario. Estos componentes de documentación se suelen instalar en el directorio /usr/doc.
  • Sistemas propios de las distribuciones. Red Hat suele venir con unos CD de manuales de consulta que son instalables en el sistema y tienen formatos HTML o PDF. Debían trae los manuales como un paquete de softwarec. Además, dispone de herramientas que clasifican la documentación presente en el sistema, y la organizan por menús para su visualización.
  • Por último, los escritorios X, como Gnome y KDE, también traen sistemas de documentación propios con su documentación y manuales.

Shell y Scripts

El termino shell es utilizado para referirse a un programa que sirve de interfaz entre el usuario y el kernel del sistema GNU/Linux. Nos centraremos en los shells de texto, que es lo que nos encontramos como usuarios dentro del sistema.

El shell es lo que los usuarios ven del sistema, el resto esta oculto para ellos. Se ejecuta como un programa más del sistema, no esta integrado en el kernel.

Cuando arrancamos un sistema GNU/Linux podemos tener dos tipos de interfaces, una de texto o una gráfica. Dependiendo del modo de arranque del sistema, que pueden ser cualquier de los diferentes de texto o aquellos en los que tenemos el arranque de la X Windows.

Recuerda: El shell es como un programa que te permite interactuar con el kernel a través de comandos o de ficheros de configuración.

En los modos gráficos de arranque lo que nos encontramos es una ventana gráfica donde introducir los datos necesarios para el acceso, como son: identificador de usuario, y su contraseño.

La mayoría de las distribuciones, también te da la opción de elegir el gestor de ventana, lo más utilizados son Gnome y KDE. Una vez validado el usuario, lo que nos encontraremos será una interfaz gráfica X Windows con su correspondiente gestor de ventanas. Si se desea interactuar desde un shell tendremos intérpretes que nos lo permitirá.

Si nuestro acceso es por modo consola, cuando validados obtendremos el acceso directo al shell interactivo.

Se tiene acceso a un shell interactivo a través del acceso remoto a la maquina, por cualquiera de las vías posibles.

SHELLS INTERACTIVOS (INTÉRPRETE DE COMANDOS)

Una vez iniciado el shell se muestra un prompt, indicándole que puede introducir cualquier comando. El shell asume la responsabilidad de validar y poner los procesos necesarios en ejecución mediante las siguientes fases:

  • Leer e interpretar la línea de comandos.
  • Evaluar los caracteres “comodín” como $ * ? u otros.
  • Gestionar las redirecciones de E/S necesarias, los pipes y los procesos en segundo plano (background) necesarios (&).
  • Manejar señales.
  • Preparar la ejecución de los programas.

Recuerda: Los shell scripts son ficheros de texto que contienen secuencias de comandos de sistema, más comandos propios del shell interactivo, más las estructuras de control necesarias para el flujo del programa (tipo while, for, etc.).

Los ficheros script son ejecutables por el sistema. Para ejecutarlos, se invoca el shell junto con el nombre del fichero, o se dan permisos de ejecución al shell script.

Podemos ver un shell script como código de un lenguaje interpretado que se ejecuta sobre su shell correspondiente. Para un administrador estos son muy importantes, por dos razones:

  1. La configuración del sistema y de la mayoría de los servicios proporcionados se hacen mediante herramientas proporcionadas en forma de shell scripts. 
  2. La principal forma de automatizar procesos de administración es mediante la creación de shell scripts . Todos los programas invocados mediante un shell poseen tres ficheros predefinidos. Estos ficheros son:
    • standard input (entrada estándar): asignada al teclado del terminal; usa el descriptor número 0.
    • standard output (salida estándar): asignada a la pantalla del terminal; usa el descriptor 1.
    • standard error (salida estándar de errores): asignada a la pantalla del terminal; utiliza el descriptor 2.

Cualquier programa ejecutado desde una shell tiene por defecto la entrada asociada al teclado, su salida a la pantalla, y en el caso de producir errores, a la pantalla.

Los shells suelen proporcionar los tres mecanismos siguientes:

  • Redirección: se pueden redefinir los descriptores de los ficheros para que los flujos de datos de un descriptor vayan a cualquier otro descriptor; a esto se le llama redirección.
  • Tuberías (pipes): la salida estándar de un programa puede usarse como entrada estándar de otro por medio de pipes.
  • Concurrencia de programas de usuario: los usuarios pueden ejecutar varios programas simultáneamente, indicando que su ejecución se va a producir en segundo plano (background), en términos opuestos a primer plano (o foreground), donde se tiene un control exclusivo de pantalla.

En los shells UNIX/Linux estos tres aspectos suponen en la práctica:

  • Redirección: un comando va a poder recibir su entrada o salida desde otros ficheros o dispositivos.
  • Pipes: encadenamiento de varios comandos, con transmisión de sus datos:

comando1 | comando2 | comando3

Esta instrucción el comando1 recibirá entrada posiblemente de teclado, enviará su salida a comando2, que la recibirá como entrada, y éste producirá salida hacia comando3, que la recibe y produce su salida hacia salida estándar .

  • Concurrencia en segundo plano: cualquier comando al que le pongamos ‘&’ al final de la línea será ejecutado en segundo plano, y prompt de shell lo vuelves a tener mientras continua su ejecución.

Se puede seguir la ejecución de los comandos con el comando ps y sus opciones. También tenemos el comando Hill para matar los procesos que no deseemos continúen su ejecución.

Ejemplo:

comando op fichero donde op puede ser:

  • < : recibir entrada del fichero.
  • > : enviar salida al fichero.
  • >>: indica que se añada la salida (por defecto, con > se crea de nuevo el fichero)

SHELLS DISPONIBLES

Disponemos de varios shells en el sistema. Los más comunes son:

  • El shell Bash (bash). El shell Linux por defecto.
  • El shell Bourne (sh). Éste ha sido siempre el shell estándar UNIX. Suele ser el shell por defecto del administrador (root). En GNU/Linux suele ser el Bash, una versión mejorada del Bourne. Fue creado por Stephen Bourne en AT&T. El prompt por defecto era ‘$’ (en root ‘#’). El shekk Korn (ksh) es un súper conjunto del Bourne, donde si hizo cierta mezcla de funcionalidades del Bourne y del C.
  • El shell C (csh). Desarrollado en la Universidad de Berkeley por Bill Joy a finales de los setenta . El prompt por defecto para los usuarios es ‘%’. Los usuarios UNIX suelen preferir este shell como interactivo, pero los administradores UNIX prefieren utilizar el Bourne, ya que los scripts suelen quedar más compactos, y la ejecución suele ser más rápida. Una ventaja de los scripts en C shell es que, su sintaxis está basada en el lenguaje C.

El shell Bash (Bourne Again Shell ) forma parte del software GNU. Es un intento de combinar los tres shell anteriores (Bourne, C y Korn), manteniendo la sintaxis del shell Bourne original.

Una forma rápida de conocer bajo qué shell nos encontramos es mediante la variable $SHELL, desde una línea de comandos con la instrucción:

echo $SHELL

Nota: El shell es un programa más de usuario, existiendo diferentes posibilidades de elección, con funcionalidades y prestaciones diferentes.

Algunas cuestiones que encontraremos comunes a todos los shells:

  • Todos permiten la escritura de shell scripts .
  • Los usuarios del sistema tienen un shell por defecto asociado a ellos. Esta información se proporciona al crear las cuentas de los usuarios. El administrador asigna un shell a cada usuario, o el shell por defecto. Esta información se encuentra en el fichero de passwords en /etc/passwd.
  • Cada shell es en realidad un comando ejecutable, normalmente presente en los directorios /bin.
  • Se pueden escribir shell scripts en cualquiera de ellos, pero ajustándose a la sintaxis de cada uno.
  • Cada shell tiene algunos ficheros de arranque asociados, cada usuario puede adaptarlos a sus necesidades, incluyendo código, variables, caminos (path), …
  • La potencia en la programación está en combinar la sintaxis de cada shell, con los comandos internos de cada shell (grep, sed, awk).
  • Si estamos utilizando un shell determinado, podemos arrancar una copia nueva de shell (subshell). Para ello lo invocamos por el nombre del ejecutable, ya sea el sh, bash, csh o ksh. También podemos ejecutarlo desde un shell script.

Algunas diferencias básicas entre ellos:

  • Bash es el shell por defecto en GNU/Linux. En otros sistemas UNIX suele ser el shell Bourne (sh). Bash es compatible con sh, y además incorpora algunas características de los otros shells, csh y ksh.
  • Ficheros de arranque: sh, ksh tienen .profile y también ksh suele tener un .kshrc que se ejecuta a continuación, csh utiliza. login, .logout y .cshrc. Y Bash utiliza el .bashrc y el .bash_profile. Además, el administrador puede colocar variables y caminos comunes en el fichero /etc/profile que se ejecutará antes que los ficheros que tenga cada usuario. Los ficheros de inicialización de los shell se ponen en la cuenta del usuario al crearla (normalmente se copian del directorio /etc/skel).
  • Los scripts de configuración del sistema o de servicios suelen estar escritos en shell Bourne (sh), En GNU/Linux también nos podemos encontrarlos en Bash.
  • Podemos identificar en qué shell se ejecuta el script mediante el comando file. O bien examinando la primera línea del script, que suele ser: #!/bin/nombre, donde nombre es bash, sh, csh, ksh. Es importante que todos los scripts la contengan, ya que si no, se intentarán ejecutar en el shell por defecto, y la sintaxis puede no corresponder.

Herramientas genéricas

Existen herramientas pensadas de forma genérica para la administración:

  • Linuxconf: herramienta genérica que agrupa diferentes aspectos de la administración en menús de texto. Puede utilizarse en casi todas las distribuciones GNU/Linux.
  • Webmin: herramienta de administración pero con una interfaz web, funciona con unos plugins que se pueden añadir para cada servicio a administrar.

Los entornos de escritorio de Gnome y KDE disponen del concepto de “Panel de control”, que permite gestionar tanto el aspecto visual de las interfaces gráficas, como tratar algunos parámetros de los dispositivos del sistema.

En cuanto a las herramientas gráficas del administrador, la distribución GNU/Linux ofrece herramientas dedicadas a gestionar sus funciones.

Otras herramientas

Algunas otras herramientas a considerar serían:

  • Los múltiples comandos UNIX básicos: grep, awk, sed, find, diff, gzip, bzip2, cut, sort, df, du, cat, more, file, which…
  • Los editores, imprescindibles para cualquier tarea de edición, cuentan con editores como: Vi, muy utilizado en tareas de administración por la rapidez de efectuar pequeños cambios en los ficheros. Vim es el editor compatible Vi, que suele traer GNU/Linux; permite sintaxis coloreada en varios lenguajes. Emacs, editor muy completo, adaptado a diferentes lenguajes de programación (sintaxis y modos de edición); dispone de un entorno muy completo y de una versión X denominada Xemacs. Joe, editor compatible con Wordstar. Y muchos otros…
  • Lenguajes de tipo script, útiles para administración, como: Perl, muy útil para tratamiento de expresiones regulares, y análisis de ficheros (filtrado, ordenación, etc.). PHP, lenguaje utilizado en entornos web. Python, otro lenguaje que permite hacer prototipos rápidos de aplicaciones, …
  • Herramientas de compilación y depuración de lenguajes de alto nivel: GNU gcc (compilador de C y C++), gdb (depurador), xxgdb (interfaz X para gdb), ddd (depurador para varios lenguajes).

 Resumen

  • Cualquiera de las distribuciones de GNU/Linux suele aportar herramientas del tipo línea de comandos, textual o gráfica, que complementan las anteriores y simplifican en mayor o menor medida la administración de las tareas.
  • El estándar FHS es una herramienta básica para el conocimiento de una distribución, que nos permite conocer la estructura y funcionalidad del sistema de archivos principal del sistema.
  • En GNU/Linux podemos encontrarnos con estándares como el FHS (FilesystemHierarchy Standard), que nos explica qué podemos encontrarnos (o dónde buscarlo) en la estructura del sistema de ficheros de nuestro sistema. O el LSB (Linux Standard Base), que nos comenta diferentes componentes que solemos encontrar en los sistemas.
  • Hay muchas fuentes de información, como: man, info, documentación de aplicaciones.
  • El término genérico shell se utiliza para denominar un programa que sirve de interfaz entre el usuario y el núcleo (kernel) del sistema GNU/Linux.
  • El shell, como programa, es una utilidad que permite a los usuarios interactuar con el kernel por interpretación de comandos que el mismo usuario introduce en la línea de comandos o en los ficheros de tipo shell script.
  • Las líneas de comandos podrán ser ejecuciones de comandos del sistema, comandos propios del shell interactivo, puesta en marcha de aplicaciones o shell scripts.
  • Los shell scripts son ficheros de texto que contienen secuencias de comandos de sistema, más una serie de comandos propios del shell interactivo, más las estructuras de control necesarias para procesar el flujo del programa (tipo while, for, etc.).
  • Los shell scripts son muy importantes básicamente por dos razones: La configuración del sistema y de la mayoría de los servicios proporcionados se hacen mediante herramientas proporcionadas en forma de shell scripts. La principal forma de automatizar procesos de administración es mediante la creación de shell scripts por parte del administrador. Todos los programas invocados mediante un shell poseen tres ficheros predefinidos, especificados por los correspondientes descriptores de ficheros (file handles). Por defecto, estos ficheros son: standard input (entrada estándar), standard output (salida estándar), standard error (salida estándar de errores).
  • Los shells suelen proporcionar los tres mecanismos siguientes: Redirección, tuberías (pipes), concurrencia de programas usuario.
  • Algunos de los más comunes son: Shell Bash (bash), shell Bourne (sh), shell Korn (ksh), shell C (csh), …
  • El shell es un programa más de usuario, existiendo diferentes posibilidades de elección, con funcionalidades y prestaciones diferentes.
  • Podemos considerar algunas herramientas, como las pensadas de forma genérica para la administración: Linuxcof, Webmin.
  • Algunas de las herramientas que podríamos considerar básicas: comandos UNIX básicos, los editores, lenguajes de tipo script, herramientas de compilación y depuración.