25 octubre 2008

Reboot seguro de un sistema colgado

No suele pasar, pero en ocasiones se te puede colgar el sistema. ¿Qué hacer en un caso así? Afortunadamente es posible enviar al sistema comandos de bajo nivel directamente al kernel que permiten un rearranque seguro.

Solución

Presiona la siguiente secuencia de teclas: Alt-Gr + Print, r, e, i, s, u, b.

Explicación

La combinación Alt-Gr + Print es conocida como la Tecla Mágica SysRq y es la combinación de teclas que activa la posibilidad de enviar los mencionados comandos de bajo nivel al kernel. Este es el resultado de cada tecla presionada después de la Tecla Mágica SysRq:
  • r: tomar el control del teclado
  • e: enviar la señal SIGTERM a todos los procesos, permitiéndoles que se terminen adecuadamente
  • i: enviar la señal SIGKILL a todos aquellos procesos que no se terminaron al recibir la señal SIGTERM, esto los matará
  • s: excribir los datos de los buffers en los discos
  • u: remontar todos los sistemas de archivos en modo sólo lectura
  • b: rearrancar
Si has presionado la secuencia de teclas correctamente, tu sistema arrancará correctamente sin causar una inconsistencia en los sistemas de archivos :-)

Para tener más información sobre la Tecla Mágica SysRq en la página correspondiente de Wikipedia.

09 octubre 2008

Eliminación de ficheros recuperable

Todo usuario de Linux ha eliminado alguna vez algún fichero con rm que no quería eliminar, para luego darse cuenta de que no puede recuperarlo. Algunos de ellos han aprendido con la experiencia (tal vez no a la primera, pero a base de repetir se acaba quedando grabado) y se han acostumbrado a ello, hay otros que desearían que exista esa opción. Este post es para estos últimos :-)

Solución
  1. Abre el script the inicio (en el ejemplo para la shell bash) con tu editor preferido (vi es mi favorito para cosas tan rápidas):
  2. vi ~/.bashrc
  3. Añade el siguiente alias al fichero (junto a los otros alias que probablemente contenga ya el script):
  4. alias del 'mv -i \!* ~/.Trash'
    Perdon, este alias es para csh, no se como se haría para bash :-S
  5. Guarda el fichero.
¡Y listo! Ya puedes recuperar todos aquellos ficheros que borres con el comando del, el comando rm seguirá funcionando como siempre (irrecuperable.

Explicación

Nunca se debería crear un alias de rm por las siguientes razones:
  • se puede dañar scripts/programas que dependen de dicho comando
  • probablemente usarías el comando rm en otras máquinas que no tienen el alias sin darte cuenta de que no podrás recuperar los ficheros
  • aunque los argumentos de rm y mv se parecen mucho, ¡la man page correspondiente al alias de rm sería la man page correspondiente a mv y no la correspondiente a rm!
La opción -i usada en el alias propuesto hace que no se sobreescriban ficheros existentes en la papelera con el mismo nombre sin pedir confirmación antes.

Purgar paquetes deinstalados

¿Tienes dudas de si los paquetes deinstalados con apt-get autoremove o manualmente han sido correctamente purgados (no tengo muy claro si es la palabra correcta en español para 'purge', pero me refiero a eliminar los archivos de configuración viejos)?

Solución

Simplemente ejecuta
dpkg --get-selections | awk '/deinstall$/ {print $1}' | xargs sudo dpkg --purge
y puedes estar seguro de que no quedará en tu sistema ningún archivo de configuración viejo de paquetes desintalados.

Explicación

dpkg --get-selections devuelve una lista de paquetes instalados en el sistema, pero también de paquetes que han sido desinstalados y no purgados. Este comando devuelve una lista en la que cada línea es 'nombre_paquete install' o 'nombre_paquete deinstall'.

awk '/deinstall$/ {print $1}' simplemente extrae package_name de cada línea marcada como deinstall, resultando una lista de paquetes deinstalados, pero no purgados.

xargs sudo dpkg --purge finalmente purga todos esos paquetes desinstalados, pero no purgados

01 octubre 2008

Shell auto-logout

¿Te gustaría que ciertas sesiones shell se cierren automáticamente después de un tiempo? Las sesiones root que se quedan abiertas en un ordenador ajeno o las sesiones SSH abiertas a un servidor importante pueden resultar un grave agujero de seguridad, especialmente si permanecen abiertas largo tiempo. Aunque su cierre automático no elimina el agujero de seguridad, sí minimiza su impacto.

Solución


La solución es muy sencilla, pero la implementación depende del tipo de shell usado.

bash, zsh, ksh:
  1. Edita el script de inicio (para una shell bash en este ejemplo) con tu editor favorito (vi en el ejemplo):
  2. vim ~/.bashrc
  3. Al añadir la siguiente linea al final del fichero se configuran 1800s (30min) como tiempo de espera antes de cerrar la sesión automáticamente:
  4. export TMOUT=1800
tcsh:
  1. Edita el script de inicio (lo siento, pero no sé cual es el fichero correspondiente en este caso) con tu editor favorito.
  2. Al añadir la siguiente linea al final del fichero se configuran 30min como tiempo de espera antes de cerrar la sesión automáticamente:
  3. set autologout=30
¡Y listo!

Explicación

Todas las shells mencionadas tienen soporte para cierre automático de sesión después de un tiempo de espera, simplemente hay que configurar el tiempo de espera activando la variable de entorno correspondiente. Échale un vistazo a la documentación de tu shell (man bash, por ejemplo) para ver más información al respecto.

Créditos: Descubrí esta configuración al dar con esta página