我试图了解 Unix 中的运行级别,我发现运行级别 6 是重新启动的状态。所以我尝试使用该命令切换到运行级别 6 ,它的工作方式与我的计算机上telinit 6
相同。reboot
我使用的是 Kali Linux,所以不需要 sudo。
更改/切换符文级别只是调用某些进程的命令吗?当我们启动或重新启动或关闭电源时,我们是否只是更改运行级别?
答案1
在init
基于操作系统中/sbin/telinit
链接到/sbin/init
,在systemed
基于操作系统中链接到。因此,这是一种与或类似软件/sbin/systemed
进行通信的方式。init
systemed
telinit 6
和的结果reboot
是一样的,但是他们实现的想法不同。
引用自http://www.tutorialspoint.com/unix_commands/init.htm
运行级别是系统的软件配置,仅允许选定的一组进程存在。
所以,改变runlevel
不等于rebooting
或power off
。
在init
基于操作系统中runlevel
永久由/etc/inittab
.启动系统时init
读取该文件来决定启动哪些进程组。运行级别 6 表示不启动任何进程并重新启动。
改变/etc/inittab
是永久性的。如果文件被修改,init
则会在重新启动时更改运行级别并坚持下去,直到进一步修改文件。
效果telinit
是一次性的,无需重启。重新启动后,init
再次读取/etc/inittab
并相应地启动运行级别。
现在,运行级别 6 表示init
终止所有子进程并重新启动。杀死telinit 6
init
所有子进程并重新启动。在发出reboot
命令时,init 会做同样的事情。但是,这并不意味着更改运行级别相当于重新启动。因为如果您将系统的运行级别永久更改为 6,/etc/inittab
它将继续重新启动。
如果您使用telinit 6
重新启动系统而不是reboot
命令,则不会有任何区别。
答案2
Linux 中有一个名为 SysVinit 的 init 系统,它是仿照 UNIX System V 的 init 系统而设计的。某些版本的 Linux 实际上仍然使用这个系统,保持与它的兼容性,例如 Systemd 的 SysVcompat 或部分替换它(没有 sysvcompat,但他们仍然使用 sysv 脚本,例如 Debian)或全部替换它,例如“纯”Systemd 系统。
SysV 本质上实现了运行级别的概念。脚本放置在 /etc/rc{runlevel}.d/ 中,其中 runlevel 是运行级别。 SysV 还定义了运行级别的默认排序行为,包括默认转到哪一个。每个运行级别中的每个脚本都以其启动或关闭功能运行,具体取决于该运行级别是上升还是下降。因此,在 sysvinit 系统中,是的,当您启动其第一次运行的 /sbin/init 时,该程序将随后运行每个运行级别中每个脚本的启动功能。我还应该指出,您可以安装比 /etc/rc* 中链接的脚本更多的脚本,这就是您启用和禁用脚本以及它们控制的服务的方式。
不使用 sysv 的系统根本不需要像 systemd 那样这样做。简而言之,systemd 有定义其依赖关系的单元,例如其他服务、挂载点、计时器或“network.target”等目标。我不会详细介绍 systemd,只是说 systemd 保持与 sysv 脚本的完全兼容性,但不一定保持其运行级别。另外 init 可以先运行,或者 systemd 可以运行,然后运行所有 sysv 的脚本。或者您的发行版可能已将所有 sysv 脚本替换为 systemd 单元。大多数发行版都会安装兼容性脚本,以便类似reboot
或telinit
通过 systemd 运行。