Je souhaite rechercher des fichiers en utilisant la commande grep dans le répertoire /var/run

/var/run stocke les processus en cours dexécution dans le système et contient des fichiers avec pid. Je veux obtenir une liste de tous les fichiers avec lextension pid.

Commande Jutilise sudo grep -nr "*.pid" . (Jexécute cette commande depuis le répertoire /var/run)

Il naffiche aucune sortie. Jutilise Ubuntu 14.04 LTS.

Commentaires

  • Ce nest pas une description correcte de /var/run. Au mieux, vous travaillez sous le sentiment erroné que les fichiers PID sont une nécessité, alors quen fait ils sont un mécanisme dangereux et profondément imparfait que le monde est oh-so -long dernier enfin apprendre la sagesse de se débarrasser de.

Réponse

TL; DR : grep est un mauvais outil, utilisez find avec des options correctes

Si vous faites stat /var/run vous « découvrirez rapidement que /var/run est un lien symbolique vers /run répertoire.

$ stat /var/run File: /var/run -> /run Size: 4 Blocks: 0 IO Block: 4096 symbolic link Device: 801h/2049d Inode: 696874 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-02-07 13:17:01.225178554 +0800 Modify: 2017-12-18 20:44:12.898113636 +0800 Change: 2017-12-18 20:44:12.898113636 +0800 

Vous avez donc vraiment besoin du répertoire /run à la place. Comme pour rechercher des fichiers avec un nom de fichier spécifique, vous avez besoin de la commande find:

$ find /run -name "*.pid" /run/charon.pid /run/starter.charon.pid /run/dhclient-wlp2s0.pid 

Parce que certains fichiers de ce répertoire appartiennent à root ou dautres utilisateurs système, vous devrez peut-être utiliser cette commande avec sudo .

Alternativement , vous pouvez utiliser lindicateur -L pour autoriser les liens symboliques suivants et appeler find sur /var/run:

$ find -L /var/run -name "*.pid" /var/run/charon.pid /var/run/starter.charon.pid /var/run/dhclient-wlp2s0.pid 

Veuillez noter également que grep nest pas le bon outil pour le travail. grep permet de rechercher des modèles de texte à lintérieur de fichiers texte, pas dans leurs noms de fichiers.

Vous avez également mentionné:

/ var / run stocke les processus en cours dexécution dans le système et contient des fichiers avec lextension pid

Cest en fait incorrect. Les informations de processus appartiennent à /proc. Les fichiers .pid sont simplement utilisés par certains programmes pour empêcher lexécution de plusieurs copies du même processus (enfin, une des façons possibles dutiliser ces fichiers). Voir cet article de stackoverflow pour référence, ainsi que cette réponse hautement votée sur unix.se. Bien que le répertoire appartient à lutilisateur root, veuillez ne pas supposer quil est uniquement destiné aux applications de démarrage et de démon; scripts lancés avec les autorisations root par utilisateur peuvent écrire dans le répertoire tout aussi facilement.

Commentaires

  • Utilisation de /var/run/ évitera le besoin de -L. Gardez également à lesprit quUbuntu 14 LTS utilise Upstart, et que ce qui empêche en fait plusieurs copies du même programme de sexécuter sous plusieurs processus, cest que Upstart sache ne pas les démarrer.
  • @JdeBP Désolé, find /var/run seul ne fonctionne pas ' dans mon cas. find --version rapports find (GNU findutils) 4.7.0-git. Donc au moins avec ma version de GNU find il a besoin du drapeau -L. Je ne sais pas comment BSD find gère les choses. Cest bien de savoir quenviron 14.04 Ubuntu ' s fonctionnalité Upstart, bien que cela naide ' t avec les scripts qui veulent éviter de multiples copies de soi en cours dexécution, donc au moins sur askubuntu, nous avons suggéré dutiliser des fichiers .pid pour cela.
  • Vous lisez rapidement ce que jai écrit. Relisez-le lentement et notez la séquence exacte des caractères. (-:
  • @JdeBP Oh … Lajout de la barre oblique finale fonctionne …

Laisser un commentaire

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