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
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łaszafind (GNU findutils) 4.7.0-git
. Więc przynajmniej w mojej wersji GNUfind
wymaga flagi-L
. Nie jestem pewien, jak BSDfind
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 …
/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ę.