Supongamos que queremos listar los 10 directorios que más ocupan en nuestro Linux, nos posicionamos y lanzamos un "du -cs * | sort -rn | head -n11". Ojo, no se incluye el -h (human readable) porque no funcionaría la ordenación. Enjoy it!.
~ 2 Comentarios ~ 453 LecturasBash: variables de variables
Estaba creando un pequeño script en BASH en el que necesitaba variables a partir de los nombres de otras variables, en tres palabras, "variables de variables". Pensé que sería sencillo, cuestión de jugar un poco con los caracteres que definen las variables -$(){}- no debería complicarse demasiado.
Sin embargo el método chino de prueba/error no sirvió de mucho porque despues de un buen rato seguía como al principio pero con menos paciencia y nulas ganas de perder más tiempo navegando entre manuales, Google y otros recursos que no me hacían avanzar.
Las alternativas, preguntar al amigo Juanjo (en cierto modo el script tenía relación con él), desconectar durante un rato y/o matar a un gatito. Visto que la última no era ni justa ni real -ni lo admitiría aunque lo hubiese hecho-, las dos anteriores si consiguieron sus frutos:
Bash script: dormir a un bebé
Me acabo de encontrar en el twitter de @javier_fazouro con uno de los enlaces más interesantes y divertidos en mucho mucho tiempo. Se trata de cómo dormir a un bebé con un bash script de 5 lineas. Primero leed el script y luego podéis ver el vídeo:
while [ 1 = 1 ] do eject eject -t done
No tiene desperdicio, la imaginación de la gente es bestial. ¡Buenísimo!
%CPU, top y ps
El motivo es el siguiente, en ese script se monitoriza el %CPU de un ps y se compara con el valor homónimo en top, craso error, puesto que ni de lejos son lo mismo:
- %CPU top: Uso de CPU en porcentaje real.
- CPU ps: Porcentaje de uso de CPU durante todo el tiempo de vida del proceso (una media entre CPU y tiempo de vida).
Lección aprendida, a ver si Monit o cpulimit nos pueden ayudar con este desaguisado.
Bash: Script que controla a MySQL
#!/bin/bash
LOG_FILE='/var/log/compruebamysql.log'
MYSQL_PID=`pidof mysqld`
CPU_LOAD=`ps up $MYSQL_PID | tail -1 | awk '{ print $3 }'`
CPU_LOAD2=`echo $CPU_LOAD | sed "s/\./\,/g"`
CPU_INT=`printf "%.0f" $CPU_LOAD2`
if [ "$CPU_INT" -gt "80" ]; then
echo "[ `date +'%d-%B-%G %H:%M:%S'` ] - Se ha reiniciado MySQL por sobrecarga" >> $LOG_FILE
/etc/init.d/mysqld restart
fi
Tan simple como comprobar que la carga de CPU no excede un porcentaje concreto (el 80% en este caso) para hacer un restart y escurrir el problema. Sé que no es óptimo pero espero que me cubra algunos días.
Bash: contando líneas de código
# for i in `find trunk/ -name *php -type f`; do cat $i >> tmp.txt; done ; wc -l tmp.txt ; rm tmp.txt 83986 tmp2.txt #Seguro que hay formas más elegantes de obtener dicho número, pero -as ever- ha resultado curioso llegar a la solución del jeroglífico.
Por cierto, ya estamos cerca de las 90k, creo que hay libros que tienen menos así que otro objetivo vital cumplido (¡cáscaras!, no valen libros colaborativos, tendrá que ser algo propio).
Archivo .screenrc
Y cada vez encuentro tips que la hacen más imprescindible si cabe. Lo penúltimo -nunca pierdo la esperanza- ha sido el fichero .screenrc, donde además de definir las preferencias de la aplicación, puedes organizar las ventanas y lo que se va a abrir en ellas:
Screen dentro de screen
Para hacer que funcione uno dentro de otro tan solo tenemos que cambiar la forma de acceder a los comandos de control, por ejemplo en vez de hacerlo con ctrl+a usar ctrl+e.
Entonces, a la hora de lanzar/recuperar un screen dentro de otro podemos indicarle esto mismo en linea de comandos con la siguiente opción:
$ screen -DRU -e^EeAsí recuperaremos la última sesión detacheada del screen con soporte para utf-8 y comandos de control marcados por ctrl+e. Totalmente compatible con su predecesora.
Tip sacado de Unsec.
Script: gzip or not gzip
#!/bin/bash wget -q -O plano $1 wget -q -O gzip --header="Accept-Encoding: gzip" $1 du -h plano gzip rm plano gzipTotalmente basado en ésta anotación del amigo Juanjo. Poco más que un copy&paste en toda regla, espero que un trackback lo arregle ;). Thanks anyway.
Bash: Buscando un paquete apt
#!/bin/sh # Buscar un paquete apt (mysearch.sh) if [ "$1" == "" ] ; then echo "Has de especificar un paquete..." exit fi apt-cache search $1 | grep $1Otro de los mini ejercicios de aprenda bash como si estuviera en primero que propuse durante la docencia.
Buscar
Últimos comentarios
Moneting
Tagcloud
ubuntu juegos 2007 web twitt futbol cumpleaños ds django mundial apple rfilms conciertos alemania_2006 lugo macosx programación frases mercurial lucux php userlinux debian blog rsidenotes twitter felicidades cakephp meme ssh bsd barça sidenotes iphone bash vacaciones blogs opinion blogsfera seguridad linux champions humor freebsd personal mysql nintendo openbsd canción sysadmin bake games ps3 2008 cake deportes hack films mac league