Je veux créer un script bash pour déterminer si mon fichier est déjà ouvert par un autre utilisateur.
J'ai déjà essayé avec lsof
mais cela n'a pas fonctionné comme je le voulais. Les fichiers peuvent avoir différents types d'extension, par exemple txt, pl, conf, cfg etc. Quelqu'un peut-il m'aider?
J'ai un serveur avec de nombreux fichiers .conf. Si j'écris dans un fichier, je ne peux pas savoir si un autre utilisateur écrit aussi dans le même fichier. Je voudrais donc construire un script qui me le fasse savoir.
J'ai essayé quelque chose comme ça lsof | grep MyFile
ou lsof /root/blabla/myfolder/myfile
etc. Peut-être que je ne comprends pas l'utilisation de cet outil.
je vais essayer de mieux expliquer mon problème. De nombreux utilisateurs peuvent modifier le fichier .conf. Si deux utilisateurs travaillent sur le même fichier, la dernière sauvegarde écrase la modification effectuée par l'autre utilisateur. Mon script veut avertir les utilisateurs que le fichier est déjà ouvert par un autre utilisateur et peut-être ouvrir le fichier en mode lecture seule. J'ai déjà essayé avec ps aux
(merci pour l'astuce) mais je ne peux pas estimer si mon dossier a été récemment fermé.
lsof répertorie avec précision tous les fichiers ouverts.
Le "problème" est que la plupart des éditeurs ouvrent le fichier, lisent le contenu (dans la mémoire RAM), puis ferment le fichier.
Les éditeurs ouvriront ensuite le fichier lors de l'écriture des modifications.
Pour voir si des éditeurs utilisent le fichier, pour tous les utilisateurs, exécutez
ps aux | grep file name
Exemple
Ouvrez un fichier test.file avec nano dans un terminal.
Dans un autre terminal, exécutez les commandes suivantes:
bodhi@daemon:~$Sudo lsof | grep test.file
[Sudo] password for bodhi:
lsof: WARNING: can't stat() Fuse.gvfsd-Fuse file system /run/user/1000/gvfs
Output information may be incomplete.
Remarque: pas de sortie;)
Maintenant, lancez ps aux
bodhi@daemon:~$Sudo ps aux | grep test.file
bodhi 4736 0.0 0.0 121096 3404 pts/3 S+ 17:49 0:00 nano test.file
Maintenant, nous voyons les informations que nous voulons;)
nano apparaît et nous éditons test.file
@ bodhi.zazen a montré avec précision la raison pour laquelle vos fichiers ne sont pas affichés dans la sortie de lsof.
Eh bien, comme il nous manque une description de votre cas d'utilisation, je suppose que votre script
Si tel est le cas, vous pouvez notamment:
sha1sum <file>
Ce n'est pas idéal et c'est juste un coup dans le noir car il nous manque le contexte mais peut-être que cela vous sera utile d'une manière ou d'une autre.