如果我使用“telinit 6”而不是“rebo​​ot”命令重新启动计算机,会有什么不同?

如果我使用“telinit 6”而不是“rebo​​ot”命令重新启动计算机,会有什么不同?

我试图了解 Unix 中的运行级别,我发现运行级别 6 是重新启动的状态。所以我尝试使用该命令切换到运行级别 6 ,它的工作方式与我的计算机上telinit 6相同。reboot我使用的是 Kali Linux,所以不需要 sudo。

更改/切换符文级别只是调用某些进程的命令吗?当我们启动或重新启动或关闭电源时,我们是否只是更改运行级别?

答案1

init基于操作系统中/sbin/telinit链接到/sbin/init,在systemed基于操作系统中链接到。因此,这是一种与或类似软件/sbin/systemed进行通信的方式。initsystemed

telinit 6和的结果reboot是一样的,但是他们实现的想法不同。

引用自http://www.tutorialspoint.com/unix_commands/init.htm

运行级别是系统的软件配置,仅允许选定的一组进程存在。

所以,改变runlevel不等于rebootingpower 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 单元。大多数发行版都会安装兼容性脚本,以便类似reboottelinit通过 systemd 运行。

相关内容