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 tty
wyjś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
" -U
przełą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ą --deselect
przełą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 ps
ma -C
przełącznik, który pozwala nam wybierać według nazwy polecenia. Właśnie dostaliśmy naszą listę poleceń, więc wstawmy ją do ps
linii poleceń. Zauważ, że --deselect
póź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,args
celu dodam do poprzedniego wiersza, aby wyświetlić dane wyjściowe tty
każdego procesu (i jego pełnego wiersza poleceń):
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --deselect -o tty,args | grep ^?
Finał grep
przechwytuje 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-manager
nieNetworkManager
.