LPI Linux 认证/更改运行级别和关闭或重启系统
(LPIC-1 版本 5.0)
权重:3
描述
考生应能够管理系统的 SysVinit 运行级别或 systemd 启动目标。此目标包括更改为单用户模式、关闭或重启系统。考生应能够在切换运行级别/启动目标之前提醒用户并正确终止进程。此目标还包括设置默认的 SysVinit 运行级别或 systemd 启动目标。它还包括对 Upstart 作为 SysVinit 或 systemd 的替代方案的认识。
关键知识领域
- 设置默认运行级别或启动目标。
- 在运行级别/启动目标之间切换,包括单用户模式。
- 从命令行关闭和重启。
- 在切换运行级别/启动目标或其他主要系统事件之前提醒用户。
- 正确终止进程。
- 了解 acpid。
以下是使用文件、术语和实用程序的部分列表
/etc/inittab
shutdown
init
/etc/init.d/
telinit
systemd
systemctl
/etc/systemd/
/usr/lib/systemd/
wall
运行级别用于 Linux 中定制操作系统初始化的方式。运行级别定义了在初始化期间哪些服务会自动启动。每个运行级别都有一个数字(以及可能存在别名)来定义它。可以在下面的表格中找到常见的运行级别数字,不幸的是,一些运行级别数字在 RedHat 和 Debian 发行版之间存在差异。
运行级别 | RedHat | Debian |
---|---|---|
0 | 停止系统。此运行级别不应设置为默认值 | 与 RedHat 相同 |
1(单用户模式) | 单用户模式。在此运行级别中,Linux 只启动基本服务,并且在大多数发行版中会启动 root shell,该 shell 不需要密码即可登录。不会启动网络或 NFS 服务。此运行级别可用于重置 root 密码或执行一些基本系统维护。 | 与 RedHat 相同 |
2 | 没有 NFS 支持的多用户模式 | 完全多用户模式,通常为默认值 |
3 | 完全多用户模式,通常为默认值 | 通常未被使用 |
4 | 通常未被使用 | 通常未被使用 |
5 | 具有 X11 的完全多用户模式。此运行级别通常允许图形登录 | 通常未被使用 |
6 | 重启系统。此运行级别不应设置为默认值,因为它会导致系统进入重启循环 | 与 RedHat 相同 |
默认运行级别在大多数发行版的 /etc/inttab 文件中控制,但是目前正在发生改变,因为一些新的 Linux 发行版开始使用更先进的事件驱动的upstart 替换传统的 init 程序。在 /etc/inittab 中,以下行控制默认运行级别(例如 Debian,设置运行级别 2 为默认值)
id:2:initdefault:
当操作系统加载 /sbin/init 程序时,它会读取上面的行并确定它应该使用运行级别 2(除非另一个运行级别数字作为内核参数传递)。在此之后,init 将运行 /etc/rcX.d/ 目录中的所有脚本,其中 X 是运行级别数字。该目录的示例内容可能类似于
-rw-r--r-- 1 root root 556 2008-08-12 15:09 README lrwxrwxrwx 1 root root 17 2010-01-07 22:08 S10rsyslog -> ../init.d/rsyslog lrwxrwxrwx 1 root root 15 2010-01-07 22:10 S12acpid -> ../init.d/acpid lrwxrwxrwx 1 root root 15 2010-05-09 11:39 S15bind9 -> ../init.d/bind9 lrwxrwxrwx 1 root root 13 2010-01-07 22:40 S16ssh -> ../init.d/ssh lrwxrwxrwx 1 root root 15 2010-01-07 22:15 S20exim4 -> ../init.d/exim4 lrwxrwxrwx 1 root root 20 2010-01-07 22:15 S20nfs-common -> ../init.d/nfs-common lrwxrwxrwx 1 root root 27 2010-01-07 23:10 S20nfs-kernel-server -> ../init.d/nfs-kernel-server lrwxrwxrwx 1 root root 23 2010-01-07 22:15 S20openbsd-inetd -> ../init.d/openbsd-inetd lrwxrwxrwx 1 root root 13 2010-01-07 22:15 S89atd -> ../init.d/atd lrwxrwxrwx 1 root root 14 2010-01-07 22:08 S89cron -> ../init.d/cron lrwxrwxrwx 1 root root 17 2010-01-07 22:59 S91apache2 -> ../init.d/apache2 lrwxrwxrwx 1 root root 18 2010-01-07 22:08 S99rc.local -> ../init.d/rc.local lrwxrwxrwx 1 root root 19 2010-01-07 22:08 S99rmnologin -> ../init.d/rmnologin lrwxrwxrwx 1 root root 23 2010-01-07 22:08 S99stop-bootlogd -> ../init.d/stop-bootlogd
目录中的所有服务将按顺序运行,从最低数字开始到最高数字结束。正如您可能注意到的,/etc/rcX.d/ 目录中的所有文件都是指向 /etc/init.d/ 中启动脚本的符号链接。当操作系统进入运行级别时,init 程序会将 "start" 参数传递给以 "S" 字符为前缀的所有脚本,并将 "stop" 参数传递给以 "K" 字符为前缀的所有脚本。在上面的示例中,第一个运行的程序之一是 rsyslog
S10rsyslog -> ../init.d/rsyslog
这会导致 init 执行以下命令
/etc/init.d/rsyslog start
上面的示例是 Debian 的运行级别 2,它是完全多用户模式,因此不需要终止任何服务,但是如果我们查看同一系统上的运行级别 1,它看起来大不相同
lrwxrwxrwx 1 root root 17 2010-01-07 22:59 K09apache2 -> ../init.d/apache2 lrwxrwxrwx 1 root root 13 2010-01-07 22:15 K11atd -> ../init.d/atd lrwxrwxrwx 1 root root 14 2010-01-07 22:08 K11cron -> ../init.d/cron lrwxrwxrwx 1 root root 15 2010-01-07 22:15 K20exim4 -> ../init.d/exim4 lrwxrwxrwx 1 root root 20 2010-01-07 22:15 K20nfs-common -> ../init.d/nfs-common lrwxrwxrwx 1 root root 23 2010-01-07 22:15 K20openbsd-inetd -> ../init.d/openbsd-inetd lrwxrwxrwx 1 root root 27 2010-01-07 23:10 K80nfs-kernel-server -> ../init.d/nfs-kernel-server lrwxrwxrwx 1 root root 17 2010-01-07 22:15 K81portmap -> ../init.d/portmap lrwxrwxrwx 1 root root 13 2010-01-07 22:40 K84ssh -> ../init.d/ssh lrwxrwxrwx 1 root root 15 2010-05-09 11:39 K85bind9 -> ../init.d/bind9 lrwxrwxrwx 1 root root 15 2010-01-07 22:10 K88acpid -> ../init.d/acpid lrwxrwxrwx 1 root root 17 2010-01-07 22:08 K90rsyslog -> ../init.d/rsyslog -rw-r--r-- 1 root root 369 2007-12-23 11:04 README lrwxrwxrwx 1 root root 19 2010-01-07 22:08 S30killprocs -> ../init.d/killprocs lrwxrwxrwx 1 root root 16 2010-01-07 22:08 S90single -> ../init.d/single
当系统进入运行级别 1 时,它将终止所有以 "K" 开头的服务,只留下最少的服务运行。
init 和 telinit - telinit 命令只是指向 init 的链接,两个命令的功能相同。它们可以用来更改当前的运行级别。它们只接受一个参数,即新的运行级别数字。示例用法
更改运行级别为单用户模式
init 1
运行级别 6 是重启。init 可以用来重启系统
telinit 6
要关闭系统,我们进入运行级别 0
init 0
shutdown - shutdown 命令可以用来重启、关闭并向所有登录用户发送警告消息。
/sbin/shutdown [-t sec] [-arkhncfFHP] time [warning-message]
常用选项
- -h - 关闭后停止或断电
- -r - 关闭后重启
- -k - 不要真正关闭;只向所有人发送警告消息
示例
5 分钟后关闭并发送警告消息
shutdown -h +5 System is going down for maintenance
立即重启
shutdown -r now
不重启或关闭,只向用户发送消息
shutdown -k Make sure you keep your password safe
在 23:59 关闭系统
shutdown -h 23:59 This system is going down for maintenance at 23:59