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

jueves, 13 de noviembre de 2008

Linux Hacks I

Leyendo los artículos de Alix en el ezine cubano BlackHack me dije, bueno y por que no ayudo también a difundir el conocimiento sobre el Software Libre y me surgió la idea de escribir algunos artículos sobre como utilizar comandos y otras utilidades que hacen la vida en GNU/Linux mas tolerable, tanto a un “end user” o usuario común, como a un desarrollador o a un administrador.

No es mi intensión repetir su idea, sino hacerla de una manera diferente, siendo más explicativo, por lo que trataría un tema en cada envío. En este, que es el primero, tratare, como tema central, acerca del comando alias, pero antes voy a rápidamente explicar que es un comando Linux y como se utiliza de modo general, es decir, su sintaxis.

El Sistema Operativo (SO) GNU/Linux se puede ver como un sistema de capas de aplicaciones. La capa mas baja es la del kernel. El kernel es la aplicación más importante del SO, pues es el encargado de trabajar directamente con el hardware. Sobre el se encuentra el intérprete de comandos, Shell o consola y sobre esta se ejecutan las demás aplicaciones como son: los servicios web, ftp, correo, el entorno visual y sus aplicaciones, entre otras.

Los comandos de GNU/Linux son pequeños y sencillos programas que corren en la consola (Shell) pero que unidos brindan una gran potencia de trabajo. La sintaxis general de un comando es:

Comando -[opciones] [argumentos]

Las opciones modifican la forma en que el comando va a ejecutarse sobre los argumentos, por ejemplo, el comando para listar el contenido de una carpeta es ls (equivalente al dir del MS-DOS):

$ls -a /home/usuario/

El símbolo $ indica el promt de la consola, la opción -a indica que muestre también los archivos ocultos de la carpeta /home/usuario/. Si además queremos que nos muestre los permisos y los dueños de los archivos y que se muestren diferenciados por colores, las carpetas (azules), los archivos ejecutables (verdes), los archivos especiales (rojos, cyans y amarillos, en dependencia del tipo), entonces tendremos que utilizar las opciones -l y --color=auto. El comando seria:

$ls -a -l --color=auto /home/usuario/

Pero seria tedioso tener que escribir toda esa línea otra vez y a veces tener que recordar todas las opciones puede dar sus dolores de cabeza por lo que utilizar el comando alias es una buena solución a estos problemas. Este comando permite dar un nombre alternativo a un grupo de comandos con sus parámetros y sus sintaxis es:

alias nombre-alias='comandos parametros'

se utilizan las comillas simples ' o las dobles ”

Veamos un ejemplo:

$alias ls='ls -a -l --color=auto'

entonces ahora al ejecutar en la consola

$ls /home/usuario/

estariamos ejecuntando en realidad

$ls -a -l --color=auto /home/usuario/

Fig.1 El comando ls sin alias

Fig.2 El comando ls utilizando el alias ls=' ls -l --color=auto'

Si ya no queremos utilizar ese alias pues escribimos

$unalias ls

y ls vuelve a hacer el mismo de siempre.

Para conocer los alias que estan creados solamente ejecutamos alias:

$alias

Lo malo de crear los alias desde una terminal (consola) es que solo sera valido en ella. Para que se puedan utilizar siempre, debemos ponerlos en el archivo .bashrc que se encuentra en el “home” del usuario. En el próximo árticulo hablare de ese archivo y de otros necesarios para trabajar en la consola.

Ahora les dejo varios alias que pueden agregar al archivo .bashrc (el carácter # indica que esa linea es un comentario):

# lista los archivos y carpetas con sus permisos, dueños, tamaños y ordenados por el tamaño en orden descendente.

alias ll='ls -lhS'

# muestra el dia en el formato “dia_de_la semana tab dia_del_mes mes año”

#ejemplo: sábado 16 agosto 2008

alias dia='date +"%A%t%d %B %Y"'

# muestra la hora en el formato “hora_de_0_a_12:minutos_de_00_a_59:pm/am”

#ejemplo: 8:02 pm

alias hora='date +%l:%M%P'

# descomprime los archivos *.tar.gz (comprimidos con gzip)

# ejemplo: tarz archivo.tar.gz

alias tarz='tar -xzvf'

# descomprime los archivos *.tar.bz2 (comprimidos con bzip2)

# ejemplo: tarb archivo.tar.bz2

alias tarb='tar -xjvf'

# instalar paquetes

# ejemplo: instalar k3b

alias instalar='sudo apt-get install'

# busca paquetes

# ejemplo: buscar-pkg gnome*

alias buscar-pkg='sudo apt-cache search'

salu2

133(|<70|2