跳转到内容

LPI Linux 认证/更改运行级别和关闭或重启系统

来自维基教科书,开放的书籍,开放的世界

101.3 更改运行级别/启动目标和关闭或重启系统

[编辑 | 编辑源代码]

(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" 开头的服务,只留下最少的服务运行。

更改运行级别、关闭和重启系统

[编辑 | 编辑源代码]

inittelinit - 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


华夏公益教科书