在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日志文件中加入内容。
|