jueves, 31 de marzo de 2011

Detectando intrusos en tu WiFi (y II)

Hace unos meses publicaba un shell script para vigilar tu red inalámbrica y avisarte de cambios en el número de PCs conectados (y por tanto de posibles intrusiones). Lo he modificado para que, además de avisar mediante ventanas emergentes al usuario del PC donde se ejecute, también sea capaz de enviar los avisos por correo electrónico, por si no estamos en casa. La idea básica del envío de e-mails de forma automatizada en Linux la comentaba recientemente y lo único que he hecho ha sido añadir al script las variables, comprobaciones e instrucciones necesarias para hacer uso de la misma. El archivo deberá editarse para adaptarlo a nuestra situación, incluyendo los datos de la cuenta de Gmail que el programa mailx usará para hacer el envío. Si este cliente de correo no está instalado, o la dirección de e-mail del destinatario no ha sido especificada, las notificaciones se harán como hasta ahora, en pantalla del PC local.

Antes de poderse ejecutar, el script deberá copiarse a /usr/local/bin con el nombre vigila-wifi (sustituyendo, si procede, a la versión anterior) y tener permisos de ejecución. Además requerirá el uso de sudo para que pueda comprobar la red correctamente. Por lo demás, espero haber hecho más útil este sencillo sistema de detección de intrusiones, que puede descargarse desde este enlace.

domingo, 27 de marzo de 2011

La épica de King Crimson

Puede decirse, sin riesgo de caer en el tópico, que King Crimson es un grupo musical bastante peculiar. Desde 1969 hasta nuestros días ha existido de forma intermitente, encarnado en diversas formaciones de talentosos músicos aglutinadas en torno a Robert Fripp, su alma mater. Cada nueva versión de King Crimson ha intentado experimentar y lograr una evolución, una progresión que otras bandas del llamado género progresivo traicionan tarde o temprano para anclarse en su sonido característico. Eso hace que escuchar y apreciar la obra de King Crimson no sea tarea fácil. Sus múltiples influencias musicales, su nada tímida experimentación y su determinación a no estancarse en un sonido y tratar de adaptarse a los nuevos tiempos (lo cual no quiere decir a las modas) ponen a prueba al oyente. Puede gustarte mucho una canción o incluso un disco completo y dejarte indiferente o hasta producirte cierto desagrado otro o buena parte de otro. Y todo ello sin dejar de reconocerle mérito a la música y de intuir su procedencia, una entidad propia que trasciende los músicos que integren la banda en cada momento.

La recopilación que ha motivado el post recoge una docena de canciones extraídas de cinco de los seis primeros LPs de la banda, publicados entre 1969 y 1974. Lo que tienen en común todas ellas es cierto aire épico o al menos clásico, resultado de una combinación de factores: estructura, instrumentación, melodía, armonía, letra, etc. Creo que, en general, todas son relativamente fáciles de escuchar, al menos en comparación con una gran parte de la producción musical del grupo. Mi intención era aportar en un CD las suficientes pruebas sonoras de que King Crimson, además de componer, interpretar y producir música destacable por su originalidad, intelectualidad y virtuosismo, también fueron capaces de crear música bonita, emotiva, e incluso épica, lo cual me parece (cada vez más) lo verdaderamente importante. Espero haberlo conseguido...

Los títulos de las canciones seleccionadas:
  1. "The court of the Crimson King"
  2. "I talk to the wind"
  3. "Epitaph"
  4. "Moonchild"
  5. "Cadence and cascade"
  6. "In the wake of Poseidon"
  7. "Cirkus"
  8. "Lady of the dancing water"
  9. "Prelude: song of the gulls"
  10. "The night watch"
  11. "Fallen angel"
  12. "Starless"
  13. "Moonchild"
Como (casi) siempre, un enlace a la recopilación en formato MP3 por cuestiones de compatibilidad y otro a la versión en Ogg Vorbis, formato abierto de calidad algo mayor a igual tamaño y más recomendable para conseguir una reproducción sin saltos entre pistas (para esto ayuda usar reproductores como foobar2000). Que aproveche ;-)

miércoles, 9 de marzo de 2011

El manual de Linux

Con Linux, como digno descendiente (libre) de UNIX que es, viene incluido un manual. Es un manual electrónico, al alcance del usuario con tan solo pulsar algunas teclas desde cualquier terminal. No es simplemente una variante más extensa y mejor presentada de la ayuda básica que los propios programas proporcionan al pasarle el parámetro --help. Es algo más, una fuente actualizada, completa y autorizada sobre el funcionamiento del sistema; no sólo de sus programas de usuario, también de sus herramientas de administración, de sus archivos de configuración e incluso de funciones y llamadas al sistema de interés para el programador.

El acceso al manual se consigue utilizando el comando:

$ man <nombre_del_programa_o_elemento>

Para aprender sobre el propio comando man teclearíamos:

$ man man

En esas páginas podemos leer algunas cosas muy útiles sobre el propio uso de este manual electrónico. Por ejemplo que el manual se divide en distintas secciones o categorías de información:
  1. Programas ejecutables y guiones del intérprete de órdenes (shellscripts)
  2. Llamadas del sistema (funciones ofrecidas por el núcleo)
  3. Llamadas de la biblioteca (funciones contenidas en las bibliotecas del sistema)
  4. Ficheros especiales (se encuentran generalmente en /dev)
  5. Formatos de ficheros y convenios (por ejemplo /etc/passwd)
  6. Juegos
  7. Paquetes de macros y convenios (por ejemplo man, groff)
  8. Órdenes de administración del sistema (generalmente solo son para root)
Cada página de manual presenta la información organizada en una serie de apartados:
  • NAME - El nombre del comando o elemento seguido por una breve descripción.
  • SYNOPSIS - Un resumen de cómo usarlo y de las opciones que permite.
  • DESCRIPTION - Una descripción más detallada del funcionamiento.
  • EXAMPLES - Algun ejemplo de uso típico.
  • SEE ALSO - Referencia a otros programas o elementos relacionados.
Cuando solicitamos la página de manual de un elemento sin especificar nada más, se nos mostrará la primera página que se encuentre para dicho elemento buscando, por orden numérico, en las distintas secciones del manual. Este funcionamiento podría hacer que dejáramos de ver cierta información de interés por existir distintos elementos con el mismo nombre clasificados en distintas secciones del manual. Por ejemplo, para acceder al manual del comando passwd, basta con teclear:

$ man passwd

Pero si lo que buscamos es información sobre el archivo de configuración estándar passwd (almacenado en /etc) deberíamos indicar la sección del manual donde se encuentran esas páginas -en este caso la quinta-, ya que de lo contrario nos mostraría la primera que encuentre:

$ man 5 passwd

Como a priori no tenemos por qué saber si existen elementos con el mismo nombre en distintas secciones del manual, para que el sistema nos permita ver todas las páginas usaríamos:

$ man -a passwd

Así cuando cerremos la página pulsando la tecla q el programa man nos permitirá navegar por las siguientes páginas encontradas (si las hubiera).

Otro parámetro muy útil del programa man, es el que nos permite buscar aquellas páginas de manual que contengan en su descripción (apartado NAME) cierta palabra. Por ejemplo, para buscar todos los programas relacionados con comparación de datos usaría:

$ man -k compare

Hay que tener en cuenta que si se usan dos o más palabras clave se realiza un OR lógico entre ellas. Si lo que queremos es hacer un AND para "refinar" una búsqueda, por ejemplo buscando compare files, podríamos hacerlo filtrando con grep así:

$ man -k compare | grep files

Cuando estemos consultando páginas de manual en pantalla, podremos, además de movernos por el documento electrónico usando las teclas correspondientes (flechas arriba y abajo, avanza página y retrocede página, etc.) buscar texto en las mismas usando la funcionalidad correspondiente del paginador que use el programa man. En el caso de less (el más habitual) lo haríamos tecleando /palabra_a_buscar y pulsando Enter. Cada ocurrencia de la cadena buscada quedará resaltada y si además queremos ir posicionándonos sobre las mismas iremos pulsando la tecla n (de next) .

Si lo único que queremos saber es para qué sirve cierto programa, por ejemplo porque hemos visto su archivo ejecutable al listar el contenido de un directorio como /bin, podemos usar man con la opción -f, o mejor, el programa whatis que hace lo mismo y es más fácil de recordar:

$ whatis nc

Para ver la descripción de cada programa contenido en un directorio de ejecutables como /bin podemos combinar los siguientes comandos:

$ whatis $(ls -1 /bin)

O mejor aún, si queremos ver la descripción de todos los programas que podemos ejecutar podemos pasarle a bash el siguiente bucle en una sola línea:

$ for d in $(echo $PATH|tr : ' ');do whatis $(ls -1 $d);done|less

Y estirando un poco más el asunto podemos generar un listado con la descripción de todos los programas ordenados alfabéticamente así:

for d in $(echo $PATH|tr : ' ');do whatis $(ls -1 $d);done|sort > lista_programas.txt

Otra forma interesante de acceder a la información del manual puede ser ojear los elementos para los que existen páginas en éste, una buena forma para descubrir cosas nuevas (de las cuales podríamos desconocer incluso su existencia). En el caso de los programas y comandos nos podrían servir los dos trucos anteriores, pero si lo que nos interesan son los archivos de configuración y formatos estándares (sección 5) podríamos asomarnos al directorio donde se guardan de la siguiente forma:

$ ls /usr/share/man/man5

Para ver la descripción que el manual proporciona para cada elemento podríamos usar:

$ whatis $(ls -1 /usr/share/man/man5 | sed 's/.5.gz//')

Cambiando el número 5 por el de la sección que nos interese ojearíamos los elementos para los que existen páginas en esa sección del manual. Algunos ejemplos de información útil en la sección 7 son los siguientes:
  • Sobre la jerarquía del sistema de archivos: man hier
  • Sobre la codificación ASCII: man ascii
  • Sobre la codificación ISO 8859-1 (o Latin-1): man latin1
  • Sobre la codificación UTF-8 (Unicode): man utf8
Por último, una de las formas en que podríamos convertir páginas de manual especialmente densas o extensas (como la de bash) a formato PDF para su posterior impresión:

$ man -t bash | ps2pdf - bash_manual.pdf