Linux:运行级别与重新启动(1)


学习关闭或重启您的 Linux 系统,警告用户系统正在关闭,切换到一个多少有点限制性的运行级别。这一流程对于许多Linux 爱好者来说,还很陌生。下面请IBM的高级程序员Ian Shields具体介绍下Linux的运行级别、关机和重新启动。

概述

在本文中,学习关闭或重启您的 Linux 系统,警告用户系统正在关闭,请切换到单用户模式或者一个多少有点限制性的运行级别。学习:

•设置默认运行级别

•运行级别间的变化

•改为单用户模式

•从命令行关闭或重启系统

•警告用户主要系统事件,包括切换到另一个运行级别

•适当地终止进程

除非特殊说明,本文中的示例使用带有 2.6.26 内核的 Fedora 8。upstar 示例使用的是带有 2.6.34 内核的 Fedora 13,或者是带有 2.6.35 内核的 Ubuntu 10.10。您的结果在其他系统上可能有所不同。

先决条件

为了最有效地利用本系列中的文章,您应该具有基本的 Linux 知识,并需要准备一个 Linux 系统,用于练习本文介绍的命令。有时候不同版本的程序输出格式不同,因此您所得到的结果未必总是与这里所示的清单和图相同。特别是,最近出现的系统已经改变了很多传统 System V init 进程用户所熟悉的内容(更多细节见 Init vs. Upstart)。本文是针对传统 System V init 进程的,只对 upstar 的区别进行了粗略的概述。

运行级别

运行级别 定义了在 Linux 系统的当前状态(或运行级别)可以完成的任务。每个 Linux 系统支持 3 个基本运行级别,外加一个或多个用于正常操作的运行级别。基本运行级别如 表 1 所示。

表 1. Linux 基本运行级别
级别

目的

0 关闭(或终止)系统
1 单用户模式:通常又称为 s 或 S
6 重启系统

除了这些基本的运行级别之外,各个发行版之间的运行级别使用也有所不同。一个命令使用集合如 表 2 所示。

表 2. 其他命令 linux 运行级别

级别

目的
2

没有网络的多用户模式

3

有网络的多用户模式

5

有网络和 X Window System 的多用户模式

Slackware 发布版使用运行级别 4 而不是 5,因为整个系统正运行 X Window 系统。Debian 及其衍生产品,比如 Ubuntu,对于任何多用户模式都使用单个运行级别,通常是运行级别 2。务必查阅您版本的文档。

默认运行级别

当一个 Linux 系统启动时,默认运行级别由 /etc/inittab 下的 id: 条目确定。 清单 1 说明了一个系统(比如 Fedora 8 或 openSUSE 11.2)典型条目,这两个系统都是为 X Window System 使用运行级别 5。

清单 1.  /etc/inittab 中的默认运行级别

[root@pinguino ~]# grep "^id:" /etc/inittab
id:5:initdefault:

如果您想要您的系统以不同的运行级别启动,比如说运行级别 3,编辑该值。

改变运行级别

有好几种方法可以改变运行级别。为了进行一个永久的改变,您可以编辑 /etc/inittab 并改变默认运行级别,正如您刚才在上面看到的。

如果您只需要在一次引导中将您的系统提升到一个不同的运行级别,您可以这样做。例如,假设您刚刚安装了一个新内核,在使用新内核重启系统后需要建立一些内核模块,但是应该在启动 X Window System 之前。您可能想要将您的运行级别提升为级别 3 来完成这一任务。您可以通过编辑内核线(GRUB)或在选择的系统名后(LILO)添加一个参数来在引导时进行这一操作。使用一个一位数来指出期望的运行级别(在这里是 3)。我们将通过一个 GRUB 实例来介绍具体过程。假设您的 /boot/grub/menu.lst 文件含有 清单 2 所示的片段。

清单 2.  启动 Fedora 8 的典型 GRUB 片段

title Fedora (2.6.26.8-57.fc8)
root (hd0,5)
kernel /boot/vmlinuz-2.6.26.8-57.fc8 ro root=LABEL=FEDORA8 rhgb quiet
initrd /boot/initrd-2.6.26.8-57.fc8.img

要想让系统升级到运行级别 3,等待直至引导项出现,选择这个条目然后输入 ‘e’ 来编辑这个条目。根据您的 GRUB 选项,您可能需要按下一个键来显示引导项,然后也输入一个 ‘p’ 和一个密码来解锁编辑。Fedora 8 系统上 GRUB 屏幕看起来像 图 1 这样。

图 1.  在 GRUB 中选择一个引导选项

在 GRUB 中选择一个引导选项

在这个示例中,您现在应该可以看到以 root、kernel、initrd 开始的行出现。将光标移动到以 “kernel” 开始的行,然后输入 ‘e’ 来编辑这一行。Fedora 8 系统上的 GRUB 屏幕现在如 图 2 所示。

图 2. 选择内核项进行编辑

选择内核项进行编辑

最后将光标移动到这一行的末尾,然后添加一个空格和数字 ‘3’。如果需要的话您可以删除 ‘quiet’,或者根据需要修改任何其他参数。Fedora 8 系统上的 GRUB 屏幕现在如 图 3 所示。

图 3.  设置启动运行级别为 3

设置启动运行级别为 3

最后,按下 Enter 键来保存修改,然后输入 ‘b’ 来引导系统。

注意: 使用 LILO 或 GRUB2 和使用 GRUB 的步骤有所不同,但是编辑内核启动方法的基本原理是一样的,即使其他系统或其他版本上的 GRUB 界面和这里所显示的界面大不相同。提示信息通常会对您有所帮助。

当您在运行级别 3 下完成了您的安装工作时,您可能想要切换到运行级别 5。幸运的是,您不需要重启系统。您可以使用 telinit 命令来切换到另一个运行级别。使用 runlevel 命令可以显示之前和目前的运行级别。如果输出的一个字符是 ‘N’,运行级别还不能改变,因为系统正在被引导。 清单 3 显示了验证和更改运行级别。

清单 3. 验证和更改运行级别

[root@pinguino ~]# runlevel
N 3
[root@pinguino ~]# telinit 5

输入 telinit 5 之后您将看到几个消息一闪而过,您的界面将切换到已配置的图形化登录界面。打开一个终端窗口,然后验证运行级别是否已经修改,如 清单 4 所示。

清单 4.确认新的运行级别

[root@pinguino ~]# runlevel
3 5

如果您使用 ls 命令来显示一个很长的 telinit 命令清单,您将看到它实际上是一个链接到 init 命令的符号链接。我们将在 清单 5 中对此作一说明。

清单 5.  telinit 只是一个链接到 init 的符号链接

[root@pinguino ~]# ls -l $(which telinit)
lrwxrwxrwx 1 root root 4 2008-04-01 07:50 /sbin/telinit -> init

可执行文件 init 知道它是否称为 init 或 telinit,然后进行相应调整。因为 init 作为 PID 1 在引导时运行,它也非常智能,知道您随后什么时候会使用 init 调用它,而不是使用 telinit。如果您这样做了,它就会假设您希望它表现得像已经调用了 telinit。例如,您可能会使用 init 5 而不是 telinit 5 来切换到运行级别 5。

单用户模式

相比个人电脑操作系统,比如 DOS 或 Windows,Linux 本身是一个多用户系统。然而,有时候这可能会成为一个问题,比如,当您需要恢复一个重要文件系统或者数据库时,或者安装和测试某个新软件时。运行级别 1,单用户模式 是您在这些情况下的最佳答案。实际实现根据不同版本有所变化,但是您通常只使用一个很小的系统简单地启动。通常这里没有联网,没有(或者非常少)守护进程运行。在一些系统上,您必须通过登录来进行认证,但在其他系统上您可以直接以根用户开始操作 shell 提示符。单用户模式可能是一个救生圈,也可能是毁坏您的系统,因此,不管任何时候,当您使用根用户权限时都应该小心注意。完成后立即重新启动到一个正常多用户模式。

和切换到正常多用户运行级别一样,您也可以使用 telinit 1 切换到单用户模式。正如 表 1 所述,‘s’ 和 ‘S’ 是运行级别 1 的别名,因此您可以使用 telinit s 来代替。


相关内容