Ya sabemos que todos los sistemas UNIX-like, como GNU/Linux, tienen muchas ventajas, una de ellas es la facilidad de ver qué está pasando en el sistema mediante la consulta de los respectivos registros o logs. Ya sea el acceso al sistema, los correos que el sistema operativo envía o recibe, el estado de los servicios o el estado del núcleo o kernel, lo podemos controlar todo. La herramienta de la que hablaré hoy está relacionada con este tema. Se trata de ‘inotify-tools’, un conjunto de herramientas que utilizan el subsistema del kernel de Linux llamado “Inotify”.

Seguramente no os sonará, pero este subsistema del kernel Linux actúa para extender los sistemas de ficheros, a fin de detectar los cambios en éstos. Es un reemplazo para ‘dnotify’, que tenía un objetivo similar.

Un poco de historia sobre Inotify

Este subsistema fue creado por John McCutchan y se incorporó al kernel de Linux en agosto del año 2005. A partir de entonces se han ido incorporando mejoras.

Tiene múltiples usos, como permitir reindexar los archivos modificados sin escanear el sistema de ficheros, una de las virtudes que hacen que sea utilizado por una herramienta como Beagle. También se puede utilizar para actualizar vistas de directorios, volver a cargar archivos de configuración, registrar cambios (en el artículo veremos cómo) o incluso realizar copias de seguridad.

Instalación de Inotify-tools sobre GNU Linux

En muchas distribuciones estas herramientas ya vienen instaladas por defecto. Si en tu caso no fue así, a continuación te explico cómo solucionarlo.

En esta ocasión yo estoy utilizando un sistema operativo CentOS 7, por lo que esta explicación también serviría para RHEL 7. También os voy a explicar cómo instalarlo en otras distros, no os preocupéis.

Para empezar tenemos que tener habilitado el repositorio EPEL. Su instalación sería así:

yum install epel-release
yum install inotify-tools

Para versiones anteriores, como las 5 y 6, tenemos que descargarlo desde el repositorio EPEL de Fedora:

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/inotify-tools-3.14-1.el6.x86_64.rpm
rpm -ivh inotify-tools-3.14-1.el6.x86_64.rpm

En sistemas basados en Debian, ya sea Linux Mint o Ubuntu, está disponible en los repositorios oficiales:

apt-get install inotify-tools

En Fedora debemos utilizar los repositorios ‘extras’ e instalar:

yum install inotify-tools

En el amigable sistema operativo Gentoo (modo ironía on), las herramientas también están disponibles en los repositorios oficiales:

emerge inotify-tools

En lo que respecta a Arch y derivadas, sería de la siguiente manera:

pacman -S inotify-tools

Está disponible para muchas más distribuciones, podéis consultar la página oficial del proyecto en GitHub.

Trabajar con la herramienta

Una vez que ya lo tenemos instalado podemos empezar a trabajar. Una herramienta que nos puede ser de gran utilidad es ‘inotifywait’, que nos permite monitorizar un recurso en concreto, por ejemplo:

inotifywait –m /home/test

Esto lo haría “en directo”, veríamos todos los cambios:

[root@centos7 home]# Setting up watches.
Watches established.
/home/test/ CREATE,ISDIR prueba1
/home/test/ CREATE,ISDIR prueba2
/home/test/ MOVED_FROM,ISDIR prueba1
/home/test/ MOVED_TO,ISDIR prueba3
/home/test/ OPEN,ISDIR
/home/test/ CLOSE_NOWRITE,CLOSE,ISDIR
/home/test/ OPEN,ISDIR prueba2
/home/test/ CLOSE_NOWRITE,CLOSE,ISDIR prueba2
/home/test/ DELETE,ISDIR prueba2
/home/test/ OPEN,ISDIR prueba3
/home/test/ CLOSE_NOWRITE,CLOSE,ISDIR prueba3
/home/test/ DELETE,ISDIR prueba3

Si queremos que nos muestre unos eventos en concreto, lo podemos indicar utilizando el parámetro ‘e’ :

inotifywait -e create,delete,modify,move,attrib /home/test

Si nos interesa, podemos crear un pequeño script para que nos envíe por correo cualquier modificación de un recurso en concreto de nuestro servidor:

#!/bin/sh

/usr/bin/inotifywait -e create,delete,modify,move,attrib -mrq /dir | while read line; do
path=`echo $line | /usr/bin/awk '{print $1}'`
echo $line | /bin/mail -s "[inotify info] $path" $USER
done

Por último, pero no menos importante, vamos a ver cómo crear un fichero de log, con todos los cambios en un directorio que nosotros le indiquemos:

inotifywait -m -r /home/test --timefmt %d-%m-%Y --format '%T%w%f%e' >> /var/log/log-test.txt

Para ejecutarlo en segundo plano podemos utilizar tanto el comando ‘screen’ como el comando ‘nohup’, creando un script previo con la línea en cuestión, por ejemplo:

vi script-test.sh
#!/bin/bash
inotifywait -m -r /home/test --timefmt %d-%m-%Y --format '%T%w%f%e' >> /var/log/log-test.txt

Una vez hemos guardado y salido del editor, podemos escribir:

nohup bash script-test.sh </dev/null >/dev/null 2>&1 &

O bien:

screen –dm bash script-test.sh </dev/null >/dev/null 2>&1 &

O directamente:

bash script-test.sh </dev/null >/dev/null 2>&1 & disown

Otra opción muy interesante es añadirlo como servicio en versiones que no utilicen systemd:

#!/bin/bash

# chkconfig: 2345 90 60

case "$1" in
start)
   nohup script-test.sh > /dev/null 2>&1 &
   echo $!>/var/run/script-test.sh.pid
   ;;
stop)
   pkill -P `cat /var/run/script-test.sh.pid`
   rm /var/run/script-test.sh.pid
   ;;
restart)
   $0 stop
   $0 start
   ;;
status)
   if [ -e /var/run/script-test.sh.pid ]; then
      echo script-test.sh is running, pid=`cat /var/run/script-test.sh.pid`
   else
      echo script-test.sh is not running
      exit 1
   fi
   ;;
*)
   echo "Usage: $0 {start|stop|status|restart}"
esac

exit 0

Espero que este artículo, en algún momento, os pueda ser de utilidad. Nos vamos leyendo.


Para elaborar el artículo he utilizado las siguientes fuentes:

Artículo en Wikipedia sobre Inotify (en inglés)
Solución en el foro de Red Hat
Wiki en GitHub sobre inotify-tools
Artículo sobre inotify en la web Askubuntu.com
Entrada sobre inotify en la web Agix.com.au
Cómo trabajar con inotify en segundo plano by Stackoverflow

Sobre los derechos de la imagen de portada | Flickr

avatar
2 Comment threads
1 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
davidochobitsfrontierRegistro de cambios en el sistema de ficheros con inotify | PlanetaLibre Recent comment authors

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

  Subscribe  
más nuevo más antiguo más votado
Notificarme de
trackback

[…] Visitar la fuente original […]

frontier
Suscriptor
frontier

Herramienta muy útil que desconocía. Seguro que le podré sacar muchos usos en mi raspberry. Gracias!