Quelque chose comme ceci:

PID = 3187: / home / morganc / test1.out

Comment utiliser la commande find pour quelle répertorie le numéro PID de mon fichier test1.out ainsi que le répertoire où il « est localisé?

Merci davance.

Commentaires

  • êtes-vous sûr de ne pas confondre find commande avec ps?
  • Si le processus qui a créé ou a ouvert le fichier est toujours en cours, la réponse de Gilles fonctionnera. Si le processus qui a créé le fichier nest plus en cours dexécution, alors aucun moyen de savoir ce qui sest passé dans le passé.
  • Comment votre fichier a-t-il obtenu un PID?

Réponse

Vous pouvez essayer 2 solutions:

fuser /path/to/opened/file 

ou

lsof /path/to/opened/file 

Réponse

Si vous êtes le propriétaire du processus qui a créé ou a ouvert le fichier, tu pouvez faire

ls -o /proc/*/fd 2> /dev/null 

qui listera tous les fichiers pour les PID pour votre ID utilisateur; si vous navez pas beaucoup de processus en cours dexécution, regardez simplement manuellement la sortie. Exemple: recherche dun processus qui a vmstat.out ouvert:

mark (/home/mark)> ls -l /proc/*/fd 2> /dev/null /proc/27669/fd: total 0 lrwx------. 1 mark mark 64 Feb 13 19:51 0 -> /dev/pts/0 lrwx------. 1 mark mark 64 Feb 13 19:51 1 -> /dev/pts/0 lrwx------. 1 mark mark 64 Feb 13 19:53 10 -> /dev/pts/0 lr-x------. 1 mark mark 64 Feb 13 19:53 12 -> /home/mark l-wx------. 1 mark mark 64 Feb 13 19:51 2 -> /dev/null lrwx------. 1 mark mark 64 Feb 13 19:53 4 -> /home/mark/.sh_history /proc/27737/fd: total 0 lrwx------. 1 mark mark 64 Feb 13 19:53 0 -> /dev/pts/0 lrwx------. 1 mark mark 64 Feb 13 19:53 1 -> /dev/pts/0 lrwx------. 1 mark mark 64 Feb 13 19:53 2 -> /dev/pts/0 lr-x------. 1 mark mark 64 Feb 13 19:53 3 -> /home/oracle/log/vmstat.out lr-x------. 1 mark mark 64 Feb 13 19:53 4 -> anon_inode:inotify 

Le PID 27737 a donc le fichier vmstat.out ouvert et le chemin complet est /home/oracle/log/vmstat.out

Si vous souhaitez filtrer la plupart des résultats, essayez ceci:

mark (/home/oracle/log)> ls -l /proc/*/fd 2> /dev/null | grep -E "(^/proc|vmstat.out)" /proc/27669/fd: /proc/27943/fd: lr-x------. 1 mark mark 64 Feb 13 20:00 3 -> /home/oracle/log/vmstat.out /proc/28047/fd: /proc/28048/fd: /proc/self/fd: mark (/home/oracle/log)> 

Et puis recherchez le PID juste au-dessus du fichier dintérêt.

Donc, pour ignorer les autres processus, jai redirigé vers awk, en sauvegardant la ligne précédente et en imprimant la ligne précédente lorsque jai trouvé la ligne actuelle commençant par un l:

ls -l /proc/*/fd 2> /dev/null | \ grep -E "(^/proc|vmstat.out)" | \ awk "BEGIN { prev = $0} /proc/ { prev = $0 } /^l/ { print prev $NF }" /proc/27943/fd:/home/oracle/log/vmstat.out 

Réponse

En fonction sur la façon dont jinterprète votre question (voir les commentaires), votre solution serait soit:

find $root_dir -name $file_name -exec pidof {} \; 

ou:

find $root_dir -name $file_name -exec fuser {} \; 

Où vous définissez la variable $root_dir comme répertoire de départ sous lequel vous voulez pour effectuer votre recherche, et $file_name comme nom du fichier que vous recherchez.

La première alternative si pour le cas de la recherche dun fichier exécutable en cours dexécution, et la deuxième alternative est dans le cas dun fichier de données exécuté par un exécutable.

Pour tester cela (pour la première alternative), jai ouvert un fichier en utilisant le less, appuyez sur C-z pour larrêter et le mettre en arrière-plan, puis exécutez find /usr/bin -name less -exec pidof {} \;. Pour le tester pour la deuxième alternative, jai créé un fichier de données ~/test.txt, exécuté less ~/test.txt, puis C-z, suivi de find ~ -name test.txt -exec fuser {} \;.

Commentaires

  • Et si 20 personnes exécutent less à lépoque? Je pense que lOP veut rechercher un nom de fichier de sortie.
  • Jai compris que la question était une recherche sur lutilisation dun exécutable, pas dun fichier de données, donc dans votre cas, il obtiendrait vingt pids et un seul chemin. Je vois, cependant, comment vous interprétez la question différemment, donc je ' ajouterai une deuxième solution dans ma réponse pour couvrir votre cas, merci.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *