admin 管理员组

文章数量: 1086019


2024年12月25日发(作者:表单大师boss)

Linux操作系统关机有技巧

在Linux系统中,其关机命令就多达六种。分别有shutdown、reboot、halt、poweroff、telinit、init

等命令。虽然有些命令相互之间是父子的关系,但是至少可以说明Linux系统关

在Linux系统中,其关机命令就多达六种。分别有shutdown、reboot、halt、poweroff、

telinit、init等命令。虽然有些命令相互之间是父子的关系,但是至少可以说明Linux系

统关机也有一番学问。这些命令都可以达到关机或者重新启动系统的目的,但是他们每一个

命令的工作流程都不一样,可以起到不同的目的。笔者接下去要介绍的就是这些关机命令的

特点以及在什么情况下应该采用什么命令。

一、这六个关机命令之间的关系。

在这六个命令中,有些命令之间是父子关系。如halt与poweroff两个之间就是父

子关系。在halt命令中,如果加入-p参数的话,则其起到的作用就跟poweroff是相同的。

如果系统管理员要知道某个关机命令是否是其他关键命令的连接(即与其它关机命令是否有

父子关系),可以利用下图所示的命令进行查询。

插图一:

上面第一条记录,表示poweroff命令是halt命令的连接。即poweroff命令是halt命令的

子程序。而第二条记录则表示halt命令不是其他命令的连接。即halt关机命令是最顶级的

命令。所以系统管理员如果不了解这些关机命令的相互关系,则可以利用如上的命令进行查

询。以上这六个关机命令它们都是由软件包sysvinit产生,系统管理员可以从网上下载它

的源码来分析各个命令的流程。作为系统管理员,有必要了解这些命令的相同点以及差异,

并根据自己的需要选择合适的关机命令。而不是一味的采用poweroff命令来进行关机。

二、Halt关机命令解析。

Halt关机命令可以说是这六个关机命令中的老大。在这个命令中跟上不同的参数,

可以实现不同的目的。在这个关机命令中,主要有如下七个参数。

插图二:

如-n参数,它主要用来防止sync系统调用。Linux系统中有的时候会了提高效率,会把欲

写入硬盘的资料先写到 filesystem buffer 中。这个 buffer 是一块内存中的空间。如果

欲写入硬盘的资料存于这个buffer中,而系统又突然断电的话,那么资料就会丢失。sync

指令会将存于buffer 中的资料强制写入硬盘中。这个功能就好像数据库中的高速缓存一

样。可以先把更改的数据写入到内存的一个高速缓存中。然后等到某个特定的时候再把它写

入到硬盘中。这种方式可以提高系统性能。不过有的时候管理员需要禁止系统采取sync指

令。如系统管理员用fsck命令修补分区之后,为了防止内核用老版本的超级块覆盖修补过

的超级块,在关机时就要采用halt –n这个形式来关机。如此的话,在关机的时候不会用

老版本的超级块覆盖修补过的超级块。

如果在halt命令中带了-w参数的话,则并不是真正的重启或者关机。而只是把这个事

件记入到wtmp日志文件中。大家都知道,在系统登录时,login登录程序会将一些内容写

入到utmp文件中,同时也将其添写到wtmp日志文件中。注销时,init进程将utmp文件中

相应的记录擦除,每个字节都填以0。并将一个新的记录添写到wtmp文件中。在系统重新

启动时,以及更改系统时间和日期的前后,都在wtmp文件中添写特殊的记录项。也就是说,

wtmp日志文件跟踪各个登录和注销事件,以及其他一些特殊的更改。如果系统管理员并不

是要真正的关机,而只是想把某个标记写入到wtmp日志文件中,则可以利用这个halt –w

命令来完成这个需求。另外,-d是跟-w相反的参数。如果在关机时加入这个参数的话,则

关机时不会往wtmp日志文件中加入内容。

利用这个命令,有时候还可以实现节电功能。如在笔记本电脑中,节电模式通常有四种。

一是Doze模式,当设定时间一到,CPU时钟变慢,其他设备照常运作。二是Standby模式,

当设定时间一到,硬盘和显示将停止工作,其他设备照常运作。三是Suspend模式,当设定

时间一到,除CPU以外的所有设备都将停止工作。四是HDD Power Down模式:当设定时间

一到,硬盘停止工作,其他设备照常运作。而在Linux操作系统下,他支持的时第二种模式,

即Standby模式。如果系统管理员运行halt -h命令,则就是高速Linux操作系统的硬盘处

于Standby模式,以节省电。

另外参数-p是这个命令的缺省选项。如果采用这个参数,则这个命令同poweroff

命令就完全相同了。其他相关参数大家可以参考系统的帮助文件来了解,这里不多说了。

需要注意的是,使用halt命令的话,有用户的限制。也就是说,系统在解析命令

行参数后,会调用geteuid系统进程判断当前用户是否为root用户。如果是的话进行后续

的操作;如果为普通用户,halt退出,并且会向用户提示错误信息。

可见halt命令是一个很强大的关机命令。但在某种程度上说其又不是一个关机命

令。因为它可以起到很多关机以外的作用。作为系统管理员要根据自己的需要,选择合适的

参数。只有如此,才能够把这个关机命令的作用发挥到极致。

三、Shutdown命令分析。

因为Linux系统是一个多用户系统。在同一个时间内可能有多个用户登录在这个系

统上。如通过SSH命令进行远程登录等等。那么系统管理员可能希望在关闭Linux系统之前

给当前所有的登录用户发出警告。或者说在十分钟后关闭系统等等。如果系统管理员要实现

这个功能,就需要采用shutdown这个关机命令。

shutdown 命令可以安全地关闭或重启Linux系统。这个命令会在系统关闭之前给

系统上的所有登录用户(包括远程登录的用户)提示一条警告信息。该命令还允许系统管理员

指定一个时间参数,在规定的时间后关闭系统。如可以是一个精确的时间(几时几分),也可

以是从现在开始的一个时间段(十分钟后)。利用这个命令系统所有进程都将接收到 SIGTERM

信号。这有一个好处。它可以使vi等文本编辑程序有时间将处于编辑状态的文件进行存储。

邮件和新闻等应用程序进程则可以将所有缓冲池内的数据进行适当的清除等等。故这是一个

十分人性化的关机命令。系统管理员运行shutdown命令后,系统会通知init进程,要求它

改换运行级别来实现特定的功能。运行级别0用来关闭系统,运行级别6用来重启系统,运

行级别1用来使系统进入执行系统管理任务状态。如果没有给出 -h 或 -r 参数时,这是

shutdown命令的默认工作状态。系统执行该命令后,会自动进行数据同步的工作。故这个

命令的所花费的时间可能要久一点。不过如果考虑数据同步的话,那么管理员等这么一段时

间也是值得的。

这里提到了一个运行级别的概念,它也是Linux系统与Windows系统差异比较大的

一个点。所谓运行级别是一种系统软件环境配置。在某个特定的环境中只允许某一组选定的

进程存在。init 给不同的运行级别派生的进程。Init可以启动到8个不同的运行级别上,

包括0-6运行级别和S或s运行级别。运行级别可以由超级用户通过telinit命令来转换。

此命令可以将转换信号传递给init,告诉它切换到哪个运行级别。运行级别0,1,和 6为

系统保留的专用运行级别。运行级别0用来关机,运行级别6用来重启,运行级别1用来使

计算机进入单用户模式。运行级别S不是给我们直接使用的,更多是为进入运行级别1时运

行某些可执行脚本时被调用。

在这个命令中,加入不同的参数可以实现不同的目的。如shutdown –k命令,并不是真正关

机﹐而只是发送警告信号给每位登录者(包括远程登录的用户)。系统管理员在关机系统之

前,先利用这个命令告知其他登录的用户,是一个不错的做法。另外,有时候Linux系统也

会像Windows系统一样,在系统关闭后并没有主动关闭电源。此时可以采用这个命令

shutdown –h,明确指示系统在关机后同时关闭电源。需要注意的是,这个命令与halt关机

命令一样,会调用getuid系统进程来判断当前用户是否为root用户。如果是的话,则继续

后面的关机动作;如果当前用户为普通用户,则直接退出这个命令。


本文标签: 命令 系统 关机 运行