1、Linux 操作系统关机有技巧发布时间: 2009-3-19 11:21 作者: spike_zheng 来源: IT 专家网 字体: 小 中 大 | 上一篇 下一篇 | 打印 | 我要投稿 | 推荐标签: Linux 在 Linux 系统中,其关机命令就多达六种。分别有 shutdown、reboot、halt、poweroff、telinit、init 等命令。虽然有些命令相互之间是父子的关系,但是至少可以说明 Linux 系统关机也有一番学问。这些命令都可以达到关机或者重新启动系统的目的,但是他们每一个命令的工作流程都不一样,可以起到不同的目的。笔者接下去要介绍的就是这些关机命令的特点以
2、及在什么情况下应该采用什么命令。一、这六个关机命令之间的关系。在这六个命令中,有些命令之间是父子关系。如 halt 与 poweroff 两个之间就是父子关系。在 halt 命令中,如果加入-p 参数的话,则其起到的作用就跟 poweroff 是相同的。如果系统管理员要知道某个关机命令是否是其他关键命令的连接(即与其它关机命令是否有父子关系),可以利用下图所示的命令进行查询。插图一:上面第一条记录,表示 poweroff 命令是 halt 命令的连接。即 poweroff 命令是 halt 命令的子程序。而第二条记录则表示 halt 命令不是其他命令的连接。即 halt 关机命令是最顶级的命令
3、。所以系统管理员如果不了解这些关机命令的相互关系,则可以利用如上的命令进行查询。以上这六个关机命令它们都是由软件包 sysvinit 产生,系统管理员可以从网上下载它的源码来分析各个命令的流程。作为系统管理员,有必要了解这些命令的相同点以及差异,并根据自己的需要选择合适的关机命令。而不是一味的采用 poweroff 命令来进行关机。二、Halt 关机命令解析。Halt 关机命令可以说是这六个关机命令中的老大。在这个命令中跟上不同的参数,可以实现不同的目的。在这个关机命令中,主要有如下七个参数。插图二:如-n 参数,它主要用来防止 sync 系统调用。Linux 系统中有的时候会了提高效率,会把
4、欲写入硬盘的资料先写到 filesystem buffer 中。这个 buffer 是一块内存中的空间。如果欲写入硬盘的资料存于这个 buffer 中,而系统又突然断电的话,那么资料就会丢失。sync指令会将存于 buffer 中的资料强制写入硬盘中。这个功能就好像数据库中的高速缓存一样。可以先把更改的数据写入到内存的一个高速缓存中。然后等到某个特定的时候再把它写入到硬盘中。这种方式可以提高系统性能。不过有的时候管理员需要禁止系统采取 sync 指令。如系统管理员用 fsck 命令修补分区之后,为了防止内核用老版本的超级块覆盖修补过的超级块,在关机时就要采用 halt n 这个形式来关机。如此
5、的话,在关机的时候不会用老版本的超级块覆盖修补过的超级块。如果在 halt 命令中带了 -w 参数的话,则并不是真正的重启或者关机。而只是把这个事件记入到 wtmp 日志文件中。大家都知道,在系统登录时,login 登录程序会将一些内容写入到 utmp 文件中,同时也将其添写到 wtmp 日志文件中。注销时,init 进程将 utmp 文件中相应的记录擦除,每个字节都填以 0。并将一个新的记录添写到 wtmp 文件中。在系统重新启动时,以及更改系统时间和日期的前后,都在 wtmp 文件中添写特殊的记录项。也就是说,wtmp 日志文件跟踪各个登录和注销事件,以及其他一些特殊的更改。如果系统管理员
6、并不是要真正的关机,而只是想把某个标记写入到 wtmp 日志文件中,则可以利用这个 halt w 命令来完成这个需求。另外,-d 是跟-w 相反的参数。如果在关机时加入这个参数的话,则关机时不会往 wtmp 日志文件中加入内容。利用这个命令,有时候还可以实现节电功能。如在笔记本电脑中,节电模式通常有四种。一是 Doze 模式,当设定时间一到,CPU 时钟变慢,其他设备照常运作。二是 Standby 模式,当设定时间一到,硬盘和显示将停止工作,其他设备照常运作。三是 Suspend 模式,当设定时间一到,除 CPU 以外的所有设备都将停止工作。四是 HDD Power Down 模式:当设定时间
7、一到,硬盘停止工作,其他设备照常运作。而在 Linux 操作系统下,他支持的时第二种模式,即 Standby 模式。如果系统管理员运行 halt -h 命令,则就是高速 Linux 操作系统的硬盘处于 Standby 模式,以节省电。另外参数-p 是这个命令的缺省选项。如果采用这个参数,则这个命令同 poweroff 命令就完全相同了。其他相关参数大家可以参考系统的帮助文件来了解,这里不多说了。需要注意的是,使用 halt 命令的话,有用户的限制。也就是说,系统在解析命令行参数后,会调用 geteuid 系统进程判断当前用户是否为 root 用户。如果是的话进行后续的操作;如果为普通用户,ha
8、lt 退出,并且会向用户提示错误信息。可见 halt 命令是一个很强大的关机命令。但在某种程度上说其又不是一个关机命令。因为它可以起到很多关机以外的作用。作为系统管理员要根据自己的需要,选择合适的参数。只有如此,才能够把这个关机命令的作用发挥到极致。三、Shutdown 命令分析。因为 Linux 系统是一个多用户系统。在同一个时间内可能有多个用户登录在这个系统上。如通过 SSH 命令进行远程登录等等。那么系统管理员可能希望在关闭 Linux 系统之前给当前所有的登录用户发出警告。或者说在十分钟后关闭系统等等。如果系统管理员要实现这个功能,就需要采用 shutdown 这个关机命令。shutd
9、own 命令可以安全地关闭或重启 Linux 系统。这个命令会在系统关闭之前给系统上的所有登录用户(包括远程登录的用户)提示一条警告信息。该命令还允许系统管理员指定一个时间参数,在规定的时间后关闭系统。如可以是一个精确的时间(几时几分),也可以是从现在开始的一个时间段(十分钟后)。利用这个命令系统所有进程都将接收到 SIGTERM 信号。这有一个好处。它可以使 vi 等文本编辑程序有时间将处于编辑状态的文件进行存储。邮件和新闻等应用程序进程则可以将所有缓冲池内的数据进行适当的清除等等。故这是一个十分人性化的关机命令。系统管理员运行 shutdown 命令后,系统会通知 init 进程,要求它改
10、换运行级别来实现特定的功能。运行级别 0 用来关闭系统,运行级别 6 用来重启系统,运行级别 1 用来使系统进入执行系统管理任务状态。如果没有给出 -h 或 -r 参数时,这是 shutdown 命令的默认工作状态。系统执行该命令后,会自动进行数据同步的工作。故这个命令的所花费的时间可能要久一点。不过如果考虑数据同步的话,那么管理员等这么一段时间也是值得的。这里提到了一个运行级别的概念,它也是 Linux 系统与 Windows 系统差异比较大的一个点。所谓运行级别是一种系统软件环境配置。在某个特定的环境中只允许某一组选定的进程存在。init 给不同的运行级别派生的进程。Init 可以启动到
11、8 个不同的运行级别上,包括 0-6 运行级别和 S 或 s 运行级别。运行级别可以由超级用户通过 telinit 命令来转换。此命令可以将转换信号传递给 init,告诉它切换到哪个运行级别。运行级别 0,1 ,和 6 为系统保留的专用运行级别。运行级别 0 用来关机,运行级别 6 用来重启,运行级别 1 用来使计算机进入单用户模式。运行级别 S 不是给我们直接使用的,更多是为进入运行级别 1 时运行某些可执行脚本时被调用。在这个命令中,加入不同的参数可以实现不同的目的。如 shutdown k 命令,并不是真正关机 而只是发送警告信号给每位登录者(包括远程登录的用户)。系统管理员在关机系统之前,先利用这个命令告知其他登录的用户,是一个不错的做法。另外,有时候 Linux系统也会像 Windows 系统一样,在系统关闭后并没有主动关闭电源。此时可以采用这个命令 shutdown h,明确指示系统在关机后同时关闭电源。需要注意的是,这个命令与 halt 关机命令一样,会调用 getuid 系统进程来判断当前用户是否为 root 用户。如果是的话,则继续后面的关机动作;如果当前用户为普通用户,则直接退出这个命令。