On s’est tous posé un jour cette question lorsqu’on voulait connaître comment une application fonctionnait ou pour débugger un problème.
Pour savoir sur quels fichier un programme travaille, il y a deux possibilités (si vous en connaissez d’autres, utilisez les commentaires) : utiliser lsof ou find. Le premier n’est malheureusement pas toujours disponible sur tous les unix et n’est pas installé par défaut dans toutes les distributions. En plus, il faut être root pour le lancer, généralement. Mais il donne de sacré bon résultats et permet même d’en savoir un peu plus sur le fonctionnement interne des applications. Je vous renvoie à la page de manuel de lsof pour plus de détails ou cette page pour une petite intro sur les différentes manières d’utiliser lsof.
La seconde méthode avec find nécessite de connaître dans quel répertoire travaille l’application. Mais comment un outil aussi basique que “find” peut me dire sur quels fichier travaille une application ? Et bien on va utiliser la date de modification du fichier pour savoir si le fichier a été modifié très récemment, si c’est le cas, c’est qu’une application est en train d’écrire dedans (voilà pourquoi il faut connaître dans quel répertoire elle travaille). Bon, voilà pour la théorie (j’espère que c’était assez court
). Pour la pratique, il faut utiliser ces commandes-ci :
$ cd directory $ touch x $ sleep 1 $ find . -newer x
On obtiendra alors la liste des fichiers qui ont été modifiés dans la dernière seconde (si l’on veut augmenter le délai, il faut changer l’argument de la commande sleep). Vous pouvez bien évidemment cumuler ces différentes commandes avec des “&&” ou des “;”, (wordpress m’empêche de poster du shell script correctement).
C’est très basique comme méthode, mais l’avantage est que l’on se passe de lsof et que cela peut donner des résultats satisfaisant dans de nombreux cas. Bien sûr, l’inconvénient majeur est que si plusieurs applications écrivent dans le même répertoire, on ne saura pas laquelle a écrit quoi…