viernes, 14 de noviembre de 2008

Linux Hacks II

Como les dije en el artículo anterior, en este tratare sobre el archivo .bashrc y otros más, que permiten al usuario configurar el entorno de su sesión cuando entra al sistema (login), cuando arranca algún subshell, o ejecutar comandos cuando sale del sistema (logout). Porque menciono “arrancar algún subshell”, pues porque hay varios interpretes de comandos en Unix y sus clones (GNU/Linux es un clon de Unix), por ejemplo: sh ("Bourne shell"), bash ("Bourne again shell"), csh ("C Shell"), Tcsh ("Tenex C shell"), ksh ("Korn shell"), y zsh ("Zero shell"). Cada uno de ellos con sus particularidades pero en todos corren los mismos comandos básicos, que por cierto son unos cuantos. Entonces un usuario puede estar trabajando en uno de ellos, por ejemplo en bash, que es el que GNU/Linux utiliza de forma predeterminada y quiere trabajar en csh, solo tiene que ejecutar csh o /bin/csh y de esta manera arranca csh sobre bash.

Es importante distinguir entre un login shell y un nologin Shell pues los archivos que se usan son diferentes. El primero es cuando se arranca un Shell producto de haber entrado al sistema (“logueo”, se necesita ingresar usuario y contraseña) y el segundo es cuando se arranca un subshell o se ejecuta algún X-Terminal (terminal en el entorno gráfico).

Los archivos de inicialización de una sesión de login Shell, por el orden en que son leídos son:

  1. etc/profile: Se configuran muchas variables generales del sistema, también llamadas variables de entorno, algunas de ellas son: PATH, USER, MAIL, HOSTNAME, PS1 (promt) y otros valores como la mascara de permisos para la creación de archivos, umask. Este archivo se lee para todos los usuarios y solo el usuario root puede modificarlo.
  2. ~/.bash_profile: Como puede ser modificado por el usuario se usa para personalizar las opciones que se definen en /etc/profile, incluir el código del archivo ~/.bashrc, para nologin shells, o ejecutar comandos inmediatamente después de entrar de entrar al sistema (“loguearse”). Si ~/.bash_profile no existe, o el usuario no tiene permisos para leerlo, entonces buscara a ~/.bash_login, y de no ser este accesible se buscara a ~/.profile. Estos dos archivos son para mantener la compatibilidad con otros shells que no sean el bash.
  3. ~/.bash_logout: Es leído por el bash cuando se sale del sistema (logout). Se usa generalmente para borrar archivos temporales y limpiar la pantalla con el comando clear.
Los archivos de inicialización de una sesión de nologin Shell, por el orden en que son leídos son:

  1. /etc/bash.bashrc: Muy parecido al /etc/profile, se incluyen variables generales del sistema, pero que se lee cada vez que arrancamos una shell en el entorno gráfico (x-terminal) o cualquier instancia de shell nologin (subshell), también es leído cuando se ejecuta bash a través de un demonio de consola remota por ejemplo rshd. Este archivo se lee para todos los usuarios y solo el usuario root puede modificarlo.
  2. /etc/bashrc: Muy parecido a /etc/bash.bashrc pero este es leído únicamente por bash, excluyendo otras shells, por lo que si usamos varios tipos de shells, podríamos dedicar este fichero para configurar el bash. Este archivo se lee para todos los usuarios y solo el usuario root puede modificarlo.
  3. ~/.bashrc: Como puede ser modificado por el usuario se usa para personalizar las opciones que se definen en /etc/bash.bashrc. Se pueden reconfigurar varias opciones y variables de entorno como el PATH y el PS1 (promt). Aquí es donde habitualmente se establecen los alias. Es muy común que este archivo sea invocado desde ~/.bash_profile o sus sustitutos por lo que también afectará a los login shells. Este es el archivo de preferencia para personalizar las configuraciones.
Existen otros archivos, menos conocidos, que también intervienen en la configuración del Shell como por ejemplo: ~/.bash_aliases, ~/.bash_history, y /etc/bash_completion.
~/.bash_aliases es el menos conocido y realmente pocos lo utilizan porque su función, que es el de establecer los alias, ya la cumple ~/.bashrc, aunque si deseamos ganar en organización podríamos utilizarlo, para ello debemos descomentar las líneas en ~/.bashrc, donde se invoca a este archivo que quedarían de esta manera:

if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi

~/.bash_history contiene un listado de los últimos comandos, con sus argumentos, ejecutados en el Shell por nuestro usuario. El número predeterminado de líneas que se guardan es 500, pero este número puede ser cambiado a través de la variable de entorno HISTSIZE. La modificación se puede hacer desde la línea de comandos directamente. Por ejemplo si quisiéramos terner los últimos 1000 seria:

$export HISTSIZE=1000

o podemos cambiarla en el archivo ~/.bashrc, y de no estar declarada adicionarlo

$ echo "export HISTSIZE=1000" >> ~/.bashrc

Otra manera de acotar la información en este archivo es limitando su tamaño en bytes por medio de la variable de entorno HISTFILESIZE. Si queremos que no supere 1kB ejecutaremos:

$ echo "export HISTFILESIZE=1024" >> ~/.bashrc

Si somos un poco paranoicos podemos no desear que se cree este archivo, para eso utilizaremos la variable de entorno HISTFILE asignándole el dispositivo nulo, es decir:

$echo "export HISTFILE=/dev/null" >> ~/.bashrc

Muchas veces repetimos un comando muchas veces, para evitar que se guarden líneas repetidas, exportamos la variable HISTCONTROL:

$echo "export HISTCONTROL=ignoredups" >> ~/.bashrc

Por ultimo les hablare sobre /etc/bash_completion. Este arhivo permite el autocompletado usando la tecla tab o tabulador, como quiera que le llameis en todo el territorio insular, ahorrando mucho trabajo tecleando y te evita tener que memorizar el nombre exacto de comandos, rutas (path) y paquetes del sistema.

/etc/bash_completion es un script que se encarga de buscar todas las posibilidades cuando pulsamos la tecla tab, de modo que escribiendo una o unas pocas letras de una palabra, pulsando una vez el tab, si solo hay una posibilidad nos completará automáticamente el comando o palabra que estuviéramos escribiendo, pero si hay dos o más posibilidades, una doble pulsación nos mostrará todas las posibles opciones que hay con esas letras que ya tenemos escritas. Realmente es un regalo de los dioses a los pobres y mortales usuarios.

Los tipos de completamiento que hace son: de ruta o camino (path), nombrede archivos, de usuarios, y ordenadores.

  • Completamiento de ruta o camino (path): este completamiento ocurre cuando el primer elemento de la línea de comandos permite completar con archivos ejecutables.
  • Completamiento de nombre de archivos: permite completar los nombres de archivos o carpetas.
  • Completamiento de nombres de usuarios: permite completar las carpetas de los usuarios a través del prefijo ~, es decir, solo basta escribir el símbolo ~ y se entenderá que es la carpeta del usuario actual. Si se escribe ~pancho se estara haciendo referencia a la carpeta del usuario pancho.
  • Completamiento de nombre de ordenadores o IP (host): permite completar los nombres de los host utilizando el prefijo @.
  • Completamiento de nombres de variables: permite completar los nombres de variables de entorno utilizando el prefijo $.
Bueno, hasta aqui llegamos con los archivos de configuración del shell. En la próxima veremos como tener nuestra papelera de reciclaje en la consola.

salu2
133(|<70|2

No hay comentarios: