Ich möchte Dateien mit dem Befehl grep durchsuchen Im Verzeichnis /var/run

/var/run werden die im System ausgeführten Prozesse gespeichert und es werden Dateien mit pid. Ich möchte eine Liste aller Dateien mit der Erweiterung pid erhalten.

Befehl Ich verwende sudo grep -nr "*.pid" . (Ich führe diesen Befehl aus dem Verzeichnis /var/run)

Es wird keine Ausgabe angezeigt. Ich verwende Ubuntu 14.04 LTS.

Kommentare

  • Dies ist keine korrekte Beschreibung von /var/run. Bestenfalls arbeiten Sie unter dem Missverständnis, dass PID-Dateien eine Notwendigkeit sind, obwohl sie tatsächlich ein gefährlicher und zutiefst fehlerhafter Mechanismus sind , den die Welt ach so hat -lang lang endlich lernen, die Weisheit loszuwerden.

Antwort

TL; DR : grep ist falsches Werkzeug. Verwenden Sie find mit den richtigen Optionen

Wenn Sie stat /var/run ausführen, werden Sie schnell feststellen, dass /var/run ein Symlink zu /run Verzeichnis.

$ 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 

Sie benötigen also wirklich das Verzeichnis /run Zum Durchsuchen von Dateien mit einem bestimmten Dateinamen benötigen Sie den Befehl find:

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

Da einige Dateien in diesem Verzeichnis zu gehören Root- oder andere Systembenutzer müssen diesen Befehl möglicherweise mit sudo verwenden .

Alternativ können Sie das Flag -L verwenden, um folgende Symlinks zuzulassen und find on /var/run:

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

Bitte beachten Sie auch, dass grep ist falsches Werkzeug für den Job. grep dient zum Suchen von Textmustern in Textdateien, nicht in ihren Dateinamen.

Sie haben auch Folgendes erwähnt:

/ var / run speichert die im System ausgeführten Prozesse und enthält Dateien mit der PID-Erweiterung

Das ist eigentlich falsch. Prozessinformationen gehören in /proc. Die .pid -Dateien werden einfach von einigen Programmen verwendet um zu verhindern, dass mehrere Kopien desselben Prozesses ausgeführt werden (eine der möglichen Möglichkeiten, wie diese Dateien verwendet werden können). Siehe diesen Stapelüberlauf-Beitrag als Referenz sowie diese hoch bewertete Antwort auf unix.se. Während das Verzeichnis dem Root-Benutzer gehört, gehen Sie bitte nicht davon aus, dass es nur für Start- und Daemon-Apps gilt Root-Berechtigungen des Benutzers können genauso einfach in das Verzeichnis geschrieben werden.

Kommentare

  • Verwenden von /var/run/ vermeidet die Notwendigkeit von -L. Denken Sie auch daran, dass Ubuntu 14 LTS Upstart verwendet und dass Upstart tatsächlich verhindert, dass mehrere Kopien desselben Programms als mehrere Prozesse ausgeführt werden.
  • @JdeBP Sorry, find /var/run allein funktioniert in meinem Fall nicht '. find --version meldet find (GNU findutils) 4.7.0-git. Zumindest mit meiner Version von GNU find benötigt es das Flag -L. Ich bin mir nicht sicher, wie BSD find mit Dingen umgeht. Gut zu wissen, dass etwa 14.04 Ubuntu ' die Upstart-Funktion ist, obwohl dies ' nicht bei Skripten hilft, die mehrere Kopien von self vermeiden möchten Zumindest auf askubuntu haben wir vorgeschlagen, dafür .pid -Dateien zu verwenden.
  • Sie lesen schnell, was ich geschrieben habe. Lesen Sie es langsam noch einmal und notieren Sie die genaue Zeichenfolge. (-:
  • @JdeBP Oh … Das Hinzufügen eines endgültigen Schrägstrichs funktioniert …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.