Últimas Publicaciones

Organizar un poco la configuración de bash

Si os gusta jugar un poco con el fichero .bashrc conviene mantener un cierto orden para no despistarse, por ejemplo guardando por separado los alias, las funciones, etc. Aquí está el mío:

----------Comienza .bashrc-------------
# Contenido de .bashrc

eval `dircolors ~/.dir_colors`

export LANG=es_ES
export LC_MESSAGES=es_ES
export LC_CTYPE=es_ES

if [ -d /usr/X11R6/lib/X11/nls ]; then
XNLSPATH=/usr/X11R6/lib/X11/nls
export XNLSPATH
fi

set meta-flag on        # conservar bit 8 en entrada de teclado
set output-meta on      # conservar bit 8 en salida por terminal
set convert-meta off    # no convertir secuencias de escape
set horizontal-scroll-mode on
LESSCHARSET=latin1
export MM_CHARSET=ISO-8859-15    # para usar latin1 en los mails

source ~/.alias
source ~/.funciones

inductor_normal

----------Termina .bashrc--------------

Parece cortito, pero observad que, al final, hace dos referencias "source" a dos ficheros externos: ~/.alias y ~/.funciones. Estos dos ficheros cargan, evidentemente, los alias y las funciones por separado. Veamos mi fichero ~/.alias:

----------Empieza .alias---------------
alias ls='ls -Fhl --color'
alias bakstatus='zcat /var/log/asegurados_duro.log.gz'
alias baksearch='zcat /var/log/asegurados_duro.log.gz | grep -A10 '
alias dir='dir --color'
alias gvim='gvim -geometry 100x40'
alias less='less --quit-if-one-screen'
----------Termina .alias---------------

Ahora veamos el fichero de funciones, que tiene más jugo:

----------Empieza .funciones ----------
#!/bin/sh

# Códigos de colores: :-)
AZUL="\[\033[0;34m\]"
AZUL_CLARO="\[\033[1;34m\]"
VERDE="\[\033[0;32m\]"
VERDE_CLARO="\[\033[1;32m\]"
ORO="\[\033[0;33m\]"
ORO_CLARO="\[\033[1;33m\]"
CIAN="\[\033[0;36m\]"
CIAN_CLARO="\[\033[1;36m\]"
ROJO="\[\033[0;31m\]"
ROJO_CLARO="\[\033[1;31m\]"
BLANCO="\[\033[1;37m\]"
NOCOLOR="\[\033[0m\]"

# Aquí es donde se decide qué color aplicar
# Cada usuario, su color.
case "$UID" in
		0)	
			USUARIO="$ROJO"
			U_CLARO="$ROJO_CLARO"
			;;
		501)
			USUARIO="$CIAN"
			U_CLARO="$CIAN_CLARO"
			;;
		502)
			USUARIO="$ORO"
			U_CLARO="$ORO_CLARO"
			;;
		*)
			USUARIO="$VERDE"
			U_CLARO="$VERDE_CLARO"
			;;
esac

# Y ahora vienen las funciones
function inductor_corto {
		case $TERM in
			xterm*)
				local BARRA='\[\033]0;\u@\h:\w\007\]'
				;;
			*)
				local BARRA=''
				;;
		esac
		PS1="${BARRA}$U_CLARO[\u@\h \W]\$ $NOCOLOR"
		PS2='> '
		PS4='+ '
	}

function inductor_normal {
   	case $TERM in
   		xterm*)
   			local BARRA='\[\033]0;\u@\h:\w\007\]'
   			;;
   		*)
   			local BARRA=""
   			;;
   	esac
   	PS1="${BARRA}$U_CLARO[$USUARIO\t/\j$U_CLARO][\u@\h:\w]\$$NOCOLOR "
   	PS2='> '
   	PS4='+ '
	}

function sube_web {
		case "$1" in
			telecable)
				echo "Subiendo la Página Personal a TeleCable"
				wwwsync -T -f ~/.wwwsync
				;;
			wap)
				echo "Subiendo la página WAP"
				wwwsync -T -f ~/.wapsync
				;;
			*)
				echo "Uso: wwwsync [ telecable | wap ]"
				echo ""
			;;
		esac
	}

# Final de las funciones. Preguntar "funciones" para un listado
	function funciones { 
		cat ~/.funciones | grep ^function | awk '{print $2}'
		}
----------Termina .funciones ----------

Vale, aquí hay varias cosas que pueden interesaros. En primer lugar, observad que pongo las funciones en un fichero aparte. Si a algún otro usuario del ordenador le interesan mis funciones o mis inductores del sistema (mi prompt), solo tiene que copiar el fichero a su home e incluir una entrada "source" en su .bashrc

Es más, observad también que ni siquiera tienen que modificarlo. El fichero de funciones pone el color adecuado automáticamente. Eso simplifica también el mantenimiento: por ejemplo se puede poner este fichero en "/etc/funciones" y poner todos los sources apuntando a él. Así, si root cambia el inductor del sistema, el cambio será efectivo automáticamente para todos los usuarios, y seguirá respetando los colores privados de los usuarios. De hecho, así es como lo tengo realmente en mi ordenador.

Pero, naturalmente, eso no significa que sea obligado. Si un usuario desea personalizar su inductor de otra forma, solo tiene que cambiar la entrada "source" para que apunte a otro fichero de su home.

Observad, además, que se incluyen varios inductores distintos en forma de funciones: cortos, largos, etc, por si en un momento dado, apetece otro inductor distinto sin cambiar el que está instalado por defecto. Para cambiar de uno a otro solo hay que usar las funciones:

[23:37:58/0][lacofi@claudia:~]$ inductor_corto
[lacofi@moira lacofi]$ inductor_normal
[23:38:40/0][lacofi@claudia:~]$ 

También os puede interesar, a modo de ejemplo, la última función. Al ejecutarla, os saldría un listado de las funciones disponibles. Fijaos que está algo sangrada para que no se incluya a sí misma en el listado.

	[23:38:40/0][lacofi@claudia:~]$ funciones
	inductor_corto
	inductor_normal
	sube_web
	[23:41:52/0][lacofi@claudia:~]$

Pues eso. Si le sirve de ayuda a alguien...

Salida coloreada del comando “ls”

Observa el siguiente comando:

	[lacofi@claudia externos]$ ls -Fohl --color
	total 142K
	-rw-r--r--    1 lacofi    28K 2000-09-22 23:34 addref.jpg
	-rw-r--r--    1 lacofi    13K 2000-09-22 23:34 altern_q.jpg
	-rw-r--r--    1 lacofi    17K 2000-09-22 23:34 altern_v.jpg
	-rw-r--r--    1 lacofi   1.5K 2000-09-22 23:34 index.html
	-rw-r--r--    1 lacofi   2.3K 2000-09-22 23:34 intro.html
	-rw-r--r--    1 lacofi   4.6K 2000-09-22 23:34 irix.html
	-rw-r--r--    1 lacofi     80 2000-09-22 23:34 newref.txt
	-rw-r--r--    1 lacofi    28K 2000-09-22 23:34 newtable.tar.gz
	-rwxr-xr-x    1 lacofi    43K 2000-09-22 23:34 newtable*
	-rw-r--r--    1 lacofi   4.1K 2000-09-22 23:34 problems.html

Se puede modificar a voluntad qué colores y con qué patrones se producirá la salida. Para ello hay que modificar el fichero "/etc/DIR_COLORS" o bien el fichero ".dir_colors" de nuestro home. Ahora bien, yo me he encontrado con que en algunos sistemas no funciona, y por mucho que modifiques, solo salen los directorios en color azul (el resto de los ficheros salen sin colorear). ¿Cómo solucionarlo?.

Pues yo lo soluciono simplemente metiendo en el ".bashrc" de nuestro home la siguiente orden:

	eval `dircolors ~/.dir_colors`

Un truco sencillito esta vez, ¿verdad?. :-)

Prompt con colores

Habreis observado que mis indicadores de comandos suelen mostrar colores diferenciados dependiendo de qué usuario esté logado:

	[lacofi@claudia lacofi]$ su
	password:
	[root@claudia lacofi]# su maria
	[maria@claudia lacofi]$ 

Esto se consigue metiendo secuencias ANSI en el prompt, por medio de la variable $PS1. Esto se define metiendo en el fichero .bashrc de nuestro home:

	export PS1='\[\033[1;33m\][\u@\h \W]\$ \[\033[0m\]'

El término \033 es el carácter de escape. [1;33 es el código para el color amarillo, mientras que [1;36 sería para el color cian y [1;31 para el color rojo. Ejecutando este script veremos una muestra de qué colores y qué codigos hay disponibles (por cierto que este script no es mío... a alguien se lo debo, pero no estaba firmado y no me acuerdo de dónde lo saqué).

Je, je... qué despiste... el script está sacado del Bash-Prompt-COMO que viene con el mismísimo Linux. El autor es Giles Orr y el traductor Iosu Santurtún. A ellos van las gracias, pues. :-)

Firestarter y los dichosos “hits”

Este fue uno de mis mayores quebraderos de cabeza. Si arrancas el cortafuegos "Firestarter", te encontrarás, cada vez que salgas a consola, con que ésta se te llena continuamente de basura, o sea, de salidas log procedentes del dichoso cortafuegos.

Por un lado, no quieres perder firestarter (es cómodo y útil), pero por el otro, la consola se vuelve una casa de locos por culpa de los hits. ¿Qué hacer?.

Pues los hits desaparecen de la consola simplemente tecleando como root el comando:

	[root@claudia lacofi]# dmesg -n1

Si no quieres tener que teclearlo cada vez que enciendes el ordenador, puedes hacer como yo y crear en /etc/rc.boot (o /etc/conf.d o el directorio equivalente en tu distribución) un fichero llamado 01-dmesg, con permisos de lectura y ejecución para root.root y que contenga:

	#! /bin/sh
	#       /etc/rc.boot/01-dmesg
	#       Ajustes para reducir mensajes en consola
	#

	dmesg -n1

Lo que hace esta orden (si consultas "man dmesg") es cancelar todos los mensajes del kernel en consola, excepto los de la clase "kernel panic". Ojo, lo que estás cancelando es la salida por consola, no el registro de los mensajes, que continuarán almacenandose normalmente en los archivos de /var/log. Si quieres eliminar también el registro de los hits en /var/log, tendrás que cambiar el fichero /etc/syslog.conf que está decentemente comentado. Eso sí, hacer esto último significará perder todos los mensajes del grupo warning, por lo que no te lo recomiendo.

Si no te interesa cancelar todos los mensajes del kernel en consola (con dmesg -n1), sino solo los del cortafuegos, puedes utilizar este otro truco: edita el fichero "/etc/firestarter/firewall.sh" y alrededor de la línea 86 encontrarás una entrada que dice así:

	$IPT -A LD -j LOG

Bueno, pues puedes cambiar esa línea y añadir lo que está en cian para dejarla así:

	$IPT -A LD -j LOG --log-level 6

Nuevamente, estás cancelando solo la salida por consola, pero no el almacenamiento de los hits en los ficheros de log. Naturalmente, con esto ya no debería ser necesario usar lo de "dmesg -n1".