如何知道我是否在 Linux 上使用 systemd?

如何知道我是否在 Linux 上使用 systemd?

我怎么知道我的 Linux 是否以systemd什么包启动?

答案1

我知道这是一个老问题,但因为我刚刚问了自己同样的问题——这是我的 2ct。

我想到的最佳解决方案

ps --no-headers -o comm 1

这将返回systemd或,init并且在 Linux 发行版和版本中看起来可靠。

file /sbin/init借助模式匹配,可以正常工作。输出ps 1似乎没有什么帮助,因为在某些 Linux 发行版中,尽管使用了 systemd,它仍会打印“init”(符号链接)。

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

RHEL 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'

答案2

检查哪个进程以 PID 1 运行。您可以通过运行ps 1并滚动到顶部来执行此操作。如果您有某个 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

查看系统中具体内容的另一种方法是输入man init并查看最终进入哪个程序的手册页。

答案3

正确的解决方案是检查/run/systemd/system目录是否存在。

[[ -d /run/systemd/system ]] && echo "using systemd" 

此方法是使用systemd自己的库函数sd_booted()https://www.freedesktop.org/software/systemd/man/sd_booted.html

答案4

到目前为止,我发现的最佳答案是询问发行版的包管理器哪个包安装了 /sbin/init 文件。例如,在基于 debian 的发行版中,这将是

dpkg -S /sbin/init

如果/sbin/init您的系统上不存在该程序,您可以使用 来查找 pid 1 的程序ps 1

相关内容