Поняття демона приєднується до процесів , а не до файлів . З цієї причини "знайти демони у файловій системі" немає сенсу. Просто, щоб зробити поняття трохи зрозумілішим: програма - це виконуваний файл (видно на виході ls
); процес - це екземпляр цієї програми (видно на виході ps
).
Тепер, якщо ми будемо використовувати інформацію, яку я дав у своїй відповіді , ми могли б знайти запущені демони шляхом пошуку процесів, які запускаються без приєднаного до них контрольного терміналу . Це можна зробити досить легко за допомогою ps
:
$ ps -eo 'tty,pid,comm' | grep ^?
Поле tty
виводу містить "?" коли процес не має керуючого терміналу.
Велика проблема тут виникає, коли ваша система працює з графічним середовищем. Оскільки програми GUI (тобто Chromium) не приєднані до терміналу, вони також з'являються у висновку. У стандартній системі, де root не запускає графічні програми, ви можете просто обмежити попередній список процесами root. Це можна досягти за допомогою перемикача ps
' -U
.
$ ps -U0 -o 'tty,pid,comm' | grep ^?
Однак тут виникають дві проблеми:
- Якщо у root запущені графічні програми, вони з’являться.
- Демони, що працюють без привілеїв root, не будуть. Зауважте, що демони, які починаються під час завантаження, зазвичай працюють як root.
В основному, ми хотіли б відображати всі програми без керуючого терміналу, але не програми GUI . На щастя для нас, існує програма, яка містить список графічних процесів xlsclients
:! Ця відповідь від slm вказує нам, як за допомогою нього перелічити всі програми GUI, але нам доведеться його змінити, оскільки ми хочемо їх виключити. Це можна зробити за допомогою --deselect
перемикача.
Спочатку ми створимо список усіх програм GUI, для яких у нас запущені процеси. З відповіді, яку я щойно зв'язав, це робиться за допомогою ...
$ xlsclients | cut -d' ' -f3 | paste - -s -d ','
Тепер ps
є -C
перемикач, який дозволяє нам вибирати по імені команди. Ми щойно отримали наш список команд, тож давайте введемо його в ps
командний рядок. Зауважте, що я використовую --deselect
згодом, щоб змінити вибір.
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --deselect
Тепер у нас є список усіх процесів, що не стосуються GUI. Не будемо забувати наше правило "не додається TTY". Для цього я додам -o tty,args
до попереднього рядка для виведення результатів tty
кожного процесу (та його повного командного рядка):
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --deselect -o tty,args | grep ^?
Кінцевий grep
фіксує всі рядки, які починаються з "?", Тобто всі процеси без контрольного tty. І ось ти йдеш! Цей заключний рядок надає всі процеси, що не мають графічного інтерфейсу, що працюють без керуючого терміналу. Зауважте, що ви все ще можете вдосконалити його, наприклад, виключивши нитки ядра (які не є процесами) ...
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --ppid 2 --pid 2 --deselect -o tty,args | grep ^?
... або додавши кілька стовпців інформації для читання:
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --ppid 2 --pid 2 --deselect -o tty,uid,pid,ppid,args | grep ^?
network-manager
, ніNetworkManager
.