Как узнать, использую ли я systemd на моем Linux?

7835
Lucho

Как я могу узнать, начинается ли мой linux с какого- systemdлибо пакета?

5
в дистрибутивах rpm, `rpm --quiet --query systemd`. это позволяет избежать платка, вовлеченного в поиск процесса, pid или символической ссылки. Trevor Boyd Smith 6 лет назад 0
также https://unix.stackexchange.com/questions/18209/detect-init-system-using-the-shell Trevor Boyd Smith 6 лет назад 1

2 ответа на вопрос

11
ecube

Проверьте, какой процесс выполняется как PID 1. Вы можете сделать это, запустив ps aux | lessи прокрутив до самого верха. Если у вас есть какой-то systemd, работающий под PID 1, значит, systemd запущен.

В качестве альтернативы, запустите systemctlсписок работающих модулей systemd.

Вы также можете проверить, что такое / sbin / init; file /sbin/initскажет вам, является ли это настоящим исполняемым файлом или символической ссылкой на исполняемый файл какого-либо другого пакета. Например, в окне systemd:

root@boxy / # file /sbin/init /sbin/init: symbolic link to ../lib/systemd/systemd 

Для получения дополнительной информации, проверьте это: https://en.wikipedia.org/wiki/Linux_startup_process

РЕДАКТИРОВАТЬ: Как отмечается в комментарии Deltab, вместо того, чтобы использовать ps aux | less, ps 1это лучший способ сделать это. Спасибо за разъяснение этого!

РЕДАКТИРОВАТЬ 2: Другой способ точно увидеть, что у вас есть в вашей системе, - это набрать текст man initи посмотреть справочную страницу программы, на которой вы оказались .

Более простой способ увидеть, что работает с pid 1 - это `ps 1` (число 1). deltab 8 лет назад 2
@deltab Спасибо за разъяснение! Я отредактирую это в ответе. ecube 8 лет назад 0
Прекрасные ребята (@ deltab, @ dma1324) !!! Мой `ps 1` показывает` / sbin / init`, а мой `file / sbin / init` показывает двоичный файл, поэтому я думаю, что это не systemd. Затем я попытался запустить команду `systemctl` и получить ошибку« команда не найдена », так что теперь я уверен, что я не использовал systemd в моем Linux. Lucho 8 лет назад 0
3
sborsky

Я знаю, что это старый вопрос, но так как я просто задавал себе тот же вопрос - вот мой 2ct.

Лучшее решение, которое я придумал

ps --no-headers -o comm 1 

Это возвращает либо systemdили initи кажется надежным во всех дистрибутивах и выпусках Linux.

file /sbin/initбудет работать, с помощью сопоставления с образцом. Вывод команды ps 1не выглядит полезным, так как в некоторых дистрибутивах Linux он печатает 'init' (символическая ссылка), несмотря на использование systemd.

Debian 8

$ ps 1 PID TTY STAT TIME COMMAND 1 ? Ss 0:02 /sbin/init $ file /sbin/init /sbin/init: symbolic link to /lib/systemd/systemd 

РЕЛ 7

$ ps 1 PID TTY STAT TIME COMMAND 1 ? Ss 7:46 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 $ file /sbin/init /sbin/init: symbolic link to `../lib/systemd/systemd' 

SLES 12

$ ps 1 PID TTY STAT TIME COMMAND 1 ? Ss 0:24 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 $ file /sbin/init /sbin/init: symbolic link to `../usr/lib/systemd/systemd' 

openSUSE 13.1

$ ps 1 PID TTY STAT TIME COMMAND 1 ? Ss 0:33 /sbin/init showopts $ /sbin/init: symbolic link to `../usr/lib/systemd/systemd'