为什么一级进程init放在/sbin中?

Why is the first level process init placed in /sbin?

在 Linux 中,必须在单用户模式下可用的基本可执行文件必须放在 /bin 下。但是 'init' 放在 /sbin 中。 这是正确的吗?

Why is the first level process init placed in /sbin?

Filesystem Hierarchy Standard (FHS) and fhs-3.0 说:

Utilities used for system administration (and other root-only commands) are stored in /sbin, /usr/sbin, and /usr/local/sbin. /sbin contains binaries essential for booting, restoring, recovering,and/or repairing the system in addition to the binaries in /bin.

由于init进程是启动系统必不可少的二进制文件,所以将其放在/sbin目录中是理所当然的(如果符合标准的话)。

In Linux essential executables that must be available in single user mode must be placed under /bin.

是的,标准是这么说的。仍然没有 "must",没有执行。是的,大多数分发包都将基本的可执行文件放在 /bin 目录中,因为这是标准规定它们应该放在那里,所以把它们放在那里是很自然的。你可以用你的系统做任何你想做的事,并拥有你自己想要的目录结构。

However 'init' is placed in /sbin. Is this correct?

一般来说,作为惯例,是的。尽管如此,您仍然可以传递 init= 内核命令行参数,基本上 init=/place/your/init/binary/anywhere/you/wantThe first place the kernel searches for a startup process is /sbin/init.

是的,/sbin 具有 启动 系统所需的二进制文件,而在没有文件系统时 管理 系统则不一定已安装。

Could it be that init (systemd) is not running in single user mode?

在没有 systemd 的系统上,它永远不会 运行。