Shell scripting

(Des)activar el automount en Ubuntu 10.04

Tengo una memoria USB de la que quiero hacer un volcado en disco sin que se haga ninguna modificación sobre el original. Para ello, lo mejor es evitar que la unidad se monte automáticamente.

Gnome, desde hace ya unos cuantos años, por defecto monta las unidades que se añaden al sistema (CDs, memorias, discos externos, etc.): Cuando se inserta una memoria USB, el kernel detecta el nuevo dispositivo e informa a udev. Udev retransmite el mensaje mediante DBus. Mediante DBus se entera Gnome-VirtualFS (gvfs), que revisa su configuración y obra en consecuencia, montando la unidad.

kernel > udev > dbus > gvfs/nautilus

En versiones anteriores de Ubuntu esto era ligeramente diferente, ya que HALd estaba de por medio en lugar de udev.

El caso, es que si queremos que gnome no monte la unidad, lo que hay que hacer es cambiar la configuración del gvfs. Para ello, Gnome tiene un registro, a imagen y semejanza del de Windows. En tal registro hay una clave (/apps/nautilus/preferences/media_automount), de tipo bool, que por defecto está a true, indicando que sí se deben montar las unidades automáticamente.

¿Cómo se cambia el valor?

  • Mediante interfaz gráfica: se ejecuta el programa gconf-editor y encuentra uno la clave mediante el árbol de la derecha de la interfaz.
  • Mediante línea de comandos:
    • Con esto leemos el valor actual:
      gconftool –get /apps/nautilus/preferences/media_automount
    • y con esto:
      gconftool –type bool –set /apps/nautilus/preferences/media_automount false

      activamos o desactivamos el automount.

Y por automatizar, podemos añadir un alias a la configuración de la shell:

echo “alias automount=’gconftool –type bool –set /apps/nautilus/preferences/media_automount ‘”>> .bash_aliases

Por ejemplo:

$ automount false #Desactivar automount
$ automount true  #Reactivar el automontaje

Sources:

Shell scripting

Comments (0)

Permalink

Google Chrome… el cómic

Descubrí hace unas semanas que la gente de Google había publicado documentación acerca de su navegador Chrome… en forma de cómic.

El cómic se puede leer directamente por la web, o bien descargarse el PDF que he creado compilando todas las imágenes. Para crearlo, lo hice desde la línea de comandos con un poco de ayuda del paquete ImageMagick (para instalar en Debian o Ubuntu: sudo apt-get install imagemagick) y el wget.

Con esto nos descargamos cada una de las 39 páginas del cómic a un directorio:

mkdir gccomic
cd gccomic/
for i in {1..39}; do wget -O pagina`printf %02u $i`.jpg http://www.google.com/googlebooks/chrome/images/big/$i.jpg; done;

La expresión `printf %02u $i` sirve para que el número de página siempre tenga dos dígitos, siendo el primero de ellos 0 para números entre 0 y 9: pagina09.pdf, pagina10.pdf, etc. De esta forma, al ordenarlos alfabéticamente, los 10 ficheros con las respectivas 10 primeras páginas apareceran los primeros.

Y con esto juntamos todas las imágenes (en shell se encargará de que sea en orden alfabético) en un único PDF:

convert *.jpg Google\ Chrome\ Comic.pdf

A continuación, nos quedamos con el PDF resultante, lo difundimos bajo licencia Creative Commons Attribution-Noncommercial-No Derivative Works 2.5 License, y borramos todo el directorio gccomic/.

El cómic merece leerlo porque ilustra muy bien el funcionamiento de Chrome y la gran cantidad de ideas innovadoras que hay en ese navegador.

Pero además, opino que es un gran logro divulgativo presentar un producto y/o su documentación en forma de cómic, ya que simplifica enormemente su lectura y con ello acerca el producto al usuario final.Creo que puede ser un ejemplo a seguir para otros proyectos.

Shell scripting

Comments (0)

Permalink

Comparando utilidades de compresión

Hoy ha tocado colocar un poco el disco duro, y en estas que me da por mirar cuánto ocupa el directorio

.thunderbird/

donde guardo todo el correo que recibo (desde hace años, incluído spam). 1.8G suman todos los correos. Casi nada, teniendo en cuenta que es texto plano.

Buceando en ese directorio llego al fichero

Inbox

de una de mis cuentas de correo. Todo lo que almacena está en formato mbox, que es lo que habitualmente usan los lectores de correo (o MUAs, Mail User Agent). Los MTAs (Mail Transport Agent) suelen usar el formato Maildir ya que evita el cuello de botella que impone mbox ante la concurrencia.

El caso es que me da por mirar a ver qué tal comprimen los diferentes algoritmos de compresión que tengo en Linux, que son básicamente cuatro: bzip2, LZMA (7zip y versiones nuevas del tar), el tradicional Zip (herramientas zip y gzip) y RAR.

Me he centrado sólo en el ratio de compresión de cada programa, no me he preocupado por cuánto tardan en comprimir, ni cuánto se tarda en listar el contenido de un fichero, o en descomprimir un sólo fichero. De hecho es que no he diferenciado entre formatos que comprimen y archivan a la vez, y los que sólo comprimen (p.ej.

bzip2

). He comprimido un sólo fichero, y era un fichero de texto (en formato

mbox

).

Los resultados para un solo fichero

mbox

de 118M:

Programa Algoritmo Tamaño ¿Libre?
gzip -9 LZ77 modificado 65M
zip -v9 LZ77 modificado 65M
bzip2 Burrous-Wheeler/Huffman 63M
rar LZSS 56M No
7-zip LZMA 54M
tar –lzma LZMA 54M

Con ¿Libre? me refiero a si yo conozco implementaciones libres del algoritmo tanto para comprimir como para descomprimir.

El LZ77 modificado también se conoce como DEFLATE.

Se concluye lo que más o menos ya habíamos observado a base bajarnos discos:

LZMA

es el que más comprime (y es libre),

RAR

no se queda muy lejos (pero no es libre, aunque es bastante multiplataforma),

bzip2

mejora un poco lo del tradicional

Zip

, pero éstos dos ya van teniendo que jubilarse.

Las únicas ventajas que tienen

zip/gzip/bzip2

son a) que aparentemente tardan menos en comprimir (lógico) y b) que están mucho más difundidos: es difícil encontrar un sistema que no tenga alguno de los tres.

LZMA

en cambio, es más difícil de encontrar.

Update (2009-02-17): Hoy en barrapunto.com han publicado Comparación entre diferentes algoritmos de compresión en Linux . Una noticia que enlaza a tres sitios donde han hecho comparativas similares, pero mucho más extensas:

Algoritmia
Estructuras de datos
Linux
Shell scripting

Comments (0)

Permalink

Un cd mejorado

A menudo echaba en falta poder hacer

pablo@golgi:~$ cd dir1/dir2/

sin preocuparme de si

dir1/

y/o

dir2/

estaban creados, confiando en que

cd

los crearía.

Si bien se puede hacerle un hack al fuente de bash, es más laborioso que crear una función para la shell y añadirla a

.bashrc

:

ccd () {
if [ $# == 1 ]; then
if [ -d $1 ]; then
cd $1;
else
mkdir -p $1 && cd $1;
fi;
else
if [ $# == 0 ]; then
cd $HOME;
else
printf “Too many arguments\n”;
fi;
fi;
}

Por ejemplo:

pablo@golgi:~/md$ ccd d1/d2

(no existen ni d1/ ni d2/, así que los crea)

pablo@golgi:~/md/d1/d2$ cd ../..
pablo@golgi:~/md$ ccd d1/d2

(ya existen d1/ y d2/, así que no los crea)

pablo@golgi:~/md/d1/d2$ cd ../..
pablo@golgi:~/md$ ccd d1 d2
Too many arguments
pablo@golgi:~/md$ ccd
pablo@golgi:~$

Y ahora lo que hecho en falta es un plugin para wordpress que represente código adecuadamente.

Shell scripting

Comments (0)

Permalink

Añadiendo una firma a los correos que envíe

Una de las cosas que se pueden hacer por la tarde:

#!/bin/bash

ruta=/home/fulano/firmas-correo

firmar()
{

echo -n “” > $1;
#echo “–” >> $1; Esto ya lo pone el thunderbird él solo
#Sacar la frase aqui
cat $1.0 >> $1;

}

for fichero in $ruta/*@*[^0];

do firmar $fichero ;

done;

Mozilla Thunderbird, por cada correo que envía se puede configurar para incluya al final del mismo, él sólo, el contenido de un fichero, precediendo el contenido por dos guiones ‘–’ .

Al abrir el cuadro de escribir mensaje, ya directamente aparece en el widget para escribir el cuerpo del mensaje:

< contenido del fichero>

Bien, mi idea es que cada una de las direcciones de correo que uso tenga su propio fichero con su contenido, llamado $ruta/, p.ej.: /home/fulano/firmas-correo/perki_pat3@yahoo.es. Ese fichero será el que usará Thunderbird.

Lo que me interesa es que el contenido de ese fichero cambie. Para empezar el script de arriba lo que hace es, por cada fichero del directorio /home/fulano/firmas-correo/ cuyo nombre no acabe en 0, escribe en él el contenido de un fichero de igual nombre, pero acabado en .0, y contenido en el mismo directorio. La intención es que justo antes de incluir lo de este último fichero, se incluya una cita, o alguna frase ingeniosa o algo de ascii-art. Una posibilidad es tirar de fortunes. Para que el fichero que incluye Thunderbird cambie, o bien se ejecuta manualmente, o bien, con un cron: 07 * * * * ruta_al_script (en el minuto 07 de cada hora de cada día lo ejecuta, cambiando una vez a la hora).

Pero lo que me gustaría de verdad es montar (o encontrar) una base de datos, que vía web me supla de frases, de forma que un `wget < ...> -O -` arregle el asunto. Bash.org no me hace la faena, y wikiquotes tampoco. Así que tendré que hacer una base de datos que guarde las quotes clasificadas de alguna forma, y un CGI que las lea y las devuelva en distintos formatos (para esto me interesaría texto plano, pero en una aplicación web a lo mejor interesa XML). Y además que permita incluir nuevas quotes. Si sacara algo de tiempo para leer y practicar algo de desarrollo web pues… estaría bien.

Output
Shell scripting

Comments (0)

Permalink