在 Linux 启动顺序中,内核将执行/sbin/init
,但是,我可以看到/init
我的 Linux(CentOS 8 WSL2、Ubuntu 20 WSL2)上的文件系统中存在另一个文件。
它们是不同的二进制文件:
$ diff /init /sbin/init
Binary files /init and /sbin/init differ
/sbin/init
和之间有什么区别/init
?
答案1
/usr/sbin/init
或者/sbin/init
是可执行文件启动系统安全初始化系统。出于兼容性原因,当systemd
已安装,它是世界的可执行文件的别名systemd
。
在 Linux 系统中,可执行文件/init
是不寻常的。我建议调查它存在的原因。它可能是恶意软件的一部分。
答案2
你提到了 WSL 2。微软仍然在 VM 内部运行特殊的 Linux 内核,并且由于目标不是严格模拟,因此他们引入了自己的定制init
流程:就像在您安装的每个发行版中启动 cron/cups/X/etc 有什么意义一样。
微软改变了init
流程以避免无用的资源消耗(根据 WSL 2 的预期用例)。
当您导入 Linux 发行版映像时,Microsoft 会添加/init
在所有发行版之间共享的自己的文件!
甚至:根据如果没有 systemd,WSL/WSL2/WSLg 如何工作?WSL 2 使用单个 VM 来运行所有发行版。因此,内核是相同的,并且内存中的内核实例是共享的,分离是通过 Linux 命名空间完成的。