Pojęcie demona jest dołączone do procesów , a nie plików . Z tego powodu nie ma sensu „znajdowanie demonów w systemie plików”. Po prostu, aby pojęcie było nieco jaśniejsze: program jest plikiem wykonywalnym (widocznym na wyjściu ls); proces jest instancją tego programu (widoczną na wyjściu ps).
Teraz, jeśli wykorzystamy informacje, które podałem w mojej odpowiedzi , moglibyśmy znaleźć uruchomione demony, wyszukując procesy, które działają bez podłączonego do nich terminala sterującego . Można to zrobić dość łatwo za pomocą ps:
$ ps -eo 'tty,pid,comm' | grep ^?
Pole ttywyjściowe zawiera „?” gdy proces nie ma terminala sterującego.
Duży problem pojawia się, gdy system działa w środowisku graficznym. Ponieważ programy GUI (tj. Chromium) nie są podłączone do terminala, pojawiają się również na wyjściu. W standardowym systemie, w którym root nie uruchamia programów graficznych, możesz po prostu ograniczyć poprzednią listę do procesów roota. Można to osiągnąć za pomocą ps" -Uprzełącznika.
$ ps -U0 -o 'tty,pid,comm' | grep ^?
Jednak pojawiają się tutaj dwa problemy:
- Jeśli root uruchamia programy graficzne, pojawią się.
- Demony działające bez uprawnień roota nie. Zauważ, że demony, które zaczynają się w czasie uruchamiania, zwykle działają jako root.
Zasadniczo chcielibyśmy wyświetlać wszystkie programy bez terminala sterującego, ale nie programy GUI . Na szczęście dla nas, istnieje program do procesów lista GUI: xlsclients! Ta odpowiedź od slm mówi nam, jak używać jej do wyświetlania listy wszystkich programów GUI, ale będziemy musieli ją cofnąć, ponieważ chcemy je wykluczyć. Można to zrobić za pomocą --deselectprzełącznika.
Najpierw zbudujemy listę wszystkich programów GUI, dla których mamy uruchomione procesy. Z odpowiedzi, którą właśnie podłączyłem, odbywa się to za pomocą ...
$ xlsclients | cut -d' ' -f3 | paste - -s -d ','
Teraz psma -Cprzełącznik, który pozwala nam wybierać według nazwy polecenia. Właśnie dostaliśmy naszą listę poleceń, więc wstawmy ją do pslinii poleceń. Zauważ, że --deselectpóźniej używam do cofnięcia wyboru.
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --deselect
Teraz mamy listę wszystkich procesów niezwiązanych z GUI. Nie zapominajmy o naszej zasadzie „bez dołączenia TTY”. W tym -o tty,argscelu dodam do poprzedniego wiersza, aby wyświetlić dane wyjściowe ttykażdego procesu (i jego pełnego wiersza poleceń):
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --deselect -o tty,args | grep ^?
Finał grepprzechwytuje wszystkie linie zaczynające się od „?”, To znaczy wszystkie procesy bez kontrolnego tty. I proszę bardzo! Ten ostatni wiersz zawiera wszystkie procesy inne niż GUI uruchomione bez terminala sterującego. Pamiętaj, że nadal możesz to ulepszyć, na przykład, wykluczając wątki jądra (które nie są procesami) ...
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --ppid 2 --pid 2 --deselect -o tty,args | grep ^?
... lub dodając kilka kolumn informacji do przeczytania:
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --ppid 2 --pid 2 --deselect -o tty,uid,pid,ppid,args | grep ^?
network-managernieNetworkManager.