如何知道你是否在 Linux 中使用 Systemd 或其他一些初始化

当你启动一个 Linux 系统时,它只启动一个进程,一个名为 init 的程序。

自推出以来 UNIX 版本五 (System V),SysV init 系统一直是最流行的,它在 1991 年被用于 Linux 系统。

它多年来一直是最流行的初始化系统,但逐渐地,许多 Linux 发行版开始使用 OpenRC、Runit、UpStart 等。

目前,systemd 被广泛使用,因此您很可能在您的系统上使用 systemd。

但是如何确认呢? 你运行这个命令:

ps -p 1 -o comm=

如果你在输出中得到 systemd,那么你正在使用 systemd。

运行 systemd 的 Ubuntu 系统

这适用于使用 systemd 的 Linux 发行版,但如果您使用其他一些 init 系统怎么办? 让我们也讨论一下那部分

检查 Linux 中的 init 系统

请记住,init 是在您的 Linux 系统中启动的第一个进程。

这意味着细节在于 PID 为 1 的进程。然后检查进程 1:

ps 1

但不幸的是,这还不够,因为该过程经常显示为 /sbin/init 并且不能提供准确的信息。

[email protected]:~$ ps 1
    PID TTY      STAT   TIME COMMAND
      1 ?        Ss     0:01 /sbin/init splash

/sbin/init 是指向实际 init 进程的符号链接。 您可以按照符号链接查看实际过程。

我正在使用 stat 命令,您可以看到 /sbin/init 链接到 Ubuntu 中的 /lib/systemd/systemd。

[email protected]:~$ stat /sbin/init
  File: /sbin/init -> /lib/systemd/systemd
  Size: 20        	Blocks: 0          IO Block: 4096   symbolic link
Device: 10306h/66310d	Inode: 30675721    Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2022-09-21 09:17:59.616364311 +0530
Modify: 2022-06-27 23:58:46.000000000 +0530
Change: 2022-07-12 18:24:23.667196373 +0530
 Birth: 2022-07-12 18:24:23.667196373 +0530

这表明 systemd 正在使用中。

再拿一个 example. 我正在使用 Alpine Linux 3.16 版。 这是初始化信息。

localhost:~# stat /sbin/init
  File: '/sbin/init' -> '/bin/busybox'
  Size: 12        	Blocks: 0          IO Block: 4096   symbolic link
Device: 800h/2048d	Inode: 169         Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2022-09-22 04:53:46.677137693 +0000
Modify: 2022-07-21 04:10:19.149395174 +0000
Change: 2022-07-21 04:10:19.149395174 +0000

如您所见,Alpine Linux 使用的是轻量级的 BusyBox 初始化系统。

Linux 中的 BusyBox 初始化系统

您还可以使用 pstree 命令,但这可能不适用于所有其他发行版来识别 init 系统。

pstree

对于 Ubuntu,它清楚地表明 Linux 发行版是否使用 systemd。

pstree 命令检查是否 systemd

如您所见,这可能并不简单,但要知道您的 Linux 系统是否使用 systemd 也没有那么复杂。