Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1332922
  • 博文数量: 436
  • 博客积分: 7854
  • 博客等级: 少将
  • 技术积分: 3225
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-18 16:30
文章分类

全部博文(436)

文章存档

2013年(2)

2012年(56)

2011年(70)

2010年(308)

分类: LINUX

2010-01-21 20:07:58

在系统中,其关机命令就多达六种。分别有shutdown、reboot、halt、poweroff、telinit、init等命令。虽然有些命令相互之间是父子的关系,但是至少可以说明系统关机也有一番学问。这些命令都可以达到关机或者重新启动系统的目的,但是他们每一个命令的工作流程都不一样,可以起到不同的目的。笔者接下去要介绍的就是这些关机命令的特点以及在什么情况下应该采用什么命令。

网管联盟

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

  在这六个命令中,有些命令之间是父子关系。如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这个形式来关机。如此的话,在关机的时候不会用老版本的超级块覆盖修补过的超级块。 中国网管联盟com

  如果在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用 户。如果是的话,则继续后面的关机动作;如果当前用户为普通用户,则直接退出这个命令。


阅读(683) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~