Chcę wyszukiwać pliki za pomocą polecenia grep w katalogu /var/run

/var/run przechowuje procesy uruchomione w systemie i zawiera pliki z pid rozszerzenie. Chcę uzyskać listę wszystkich plików z rozszerzeniem pid.

Polecenie, którego używam sudo grep -nr "*.pid" . (wykonuję to polecenie z katalogu /var/run)

Nie pokazuje żadnego wyjścia. Używam Ubuntu 14.04 LTS.

Komentarze

  • To nie jest poprawny opis /var/run. W najlepszym przypadku pracujesz pod wpływem błędnego zrozumienia, że pliki PID są konieczne, podczas gdy w rzeczywistości są niebezpiecznym i głęboko wadliwym mechanizmem , że świat jest w porządku -long last wreszcie ucząc się mądrości w pozbyciu się.

Odpowiedź

TL; DR : grep jest złym narzędziem, użyj find z poprawnymi opcjami

Jeśli zrobisz stat /var/run, „szybko zorientujesz się, że /var/run jest dowiązaniem symbolicznym do /run katalogu.

$ 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 

Dlatego naprawdę potrzebujesz katalogu /run. do wyszukiwania plików o określonej nazwie, potrzebujesz find polecenia:

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

Ponieważ niektóre pliki w tym katalogu należą do root lub inni użytkownicy systemu, może być konieczne użycie tego polecenia z sudo .

Alternatywnie możesz użyć flagi -L, aby zezwolić na następujące linki symboliczne i wywołać find na /var/run:

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

Należy również pamiętać, że grep jest nieodpowiednim narzędziem do pracy. grep służy do wyszukiwania wzorców tekstowych wewnątrz plików tekstowych, a nie w ich nazwach.

Wspomniałeś również o:

/ var / run przechowuje procesy działające w systemie i zawiera pliki z rozszerzeniem pid

To faktycznie jest niepoprawne. Informacje o procesach znajdują się w /proc. Pliki .pid są po prostu używane przez niektóre programy aby zapobiec uruchamianiu wielu kopii tego samego procesu (no cóż, jeden z możliwych sposobów wykorzystania tych plików). Zobacz ten post o przepływie stosu , aby uzyskać więcej informacji, a także ta wysoko oceniona odpowiedź na unix.se. Chociaż katalog należy do użytkownika root, proszę nie zakładać, że jest przeznaczony tylko dla aplikacji startowych i demonów; skrypty zainicjowane za pomocą uprawnienia roota użytkownika mogłyby równie łatwo zapisywać w katalogu.

Komentarze

  • Używanie /var/run/ pozwoli uniknąć -L. Pamiętaj również, że Ubuntu 14 LTS używa Upstart, a tym, co faktycznie zapobiega uruchamianiu wielu kopii tego samego programu, ponieważ wiele procesów jest uruchamianie wielu procesów, jest to, że Upstart nie wie, aby ich nie uruchamiać.
  • @JdeBP Przepraszamy, find /var/run nie ' nie działa w moim przypadku. find --version zgłasza find (GNU findutils) 4.7.0-git. Więc przynajmniej w mojej wersji GNU find wymaga flagi -L. Nie jestem pewien, jak BSD find radzi sobie ze wszystkim. Dobrze wiedzieć, że około 14.04 Ubuntu ' s Funkcja Upstart, chociaż nie ' t pomaga w skryptach, które chcą uniknąć wielokrotnych kopii własnych działa, więc przynajmniej na askubuntu sugerowaliśmy użycie do tego plików .pid.
  • Szybko czytaj to, co napisałem. Przeczytaj go powoli i zanotuj dokładną sekwencję znaków. (-:
  • @JdeBP Oh … Dodawanie ostatniego ukośnika działa …

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *