首页 > 代码库 > Linux正确的关机方法

Linux正确的关机方法

对于Windows用户,如果遇到不爽的时候,往往可以按住电源键几秒钟之后进行强制关机。但是对于Linux,强烈不建议这么做。

因为Windows(非NT主机系统)系统是单用户、“假”多任务的,所以即使你的计算机关机,对于别人也没有什么影响。

而Linux是多用户、多任务的操作系统,每个程序(或者服务)都是在后台执行的。因此,在你看不到的屏幕背后其实可能有很多人同时在你的主机上面工作,例如浏览网页、收发email等,如果你直接按下电源来关机,那其他人的数据可能就此中断,绝对叫人无语凝噎啊。此外,最大的问题是非正常关机可能造成文件系统的损坏(因为系统来不及将数据写回到文件中,所以有些服务的文件会有问题)。所以正常情况下,关机需要注意下面几件事:

  • 查看系统的使用状态
  • 通知在线用户关机的时间
  • 正确的关机命令使用

1.查看系统的使用状态

执行 who 这个命令可以查看目前有谁在线;

执行 netstat -a 这个命令可以查看网络的联机状态;

执行 ps -aux 这个命令可以查看后台执行的程序。

2.通知在线用户关机的时间

我们可以使用 shutdown 这个命令给其他在线的用户一些时间来结束他们的工作。

3.正确的关机命令使用(sync、shutdown、reboot、halt、poweroff)

3.1 数据同步写入硬盘:sync

为了加快数据的读取速度,在Linux系统中,某些已经加载到内存中的数据将不会被直接写入硬盘。但是假如你的系统因为某些特殊情况没有正常关机(例如停电),由于数据尚未被写入硬盘,所以就会造成数据更新不正常。

sync 这个命令可以进行数据的写入操作,将内存中未被更新的数据写入硬盘。所以,这个命令在系统关机或重启前最好多执行几次。

目前的shutdown、reboot、halt等命令均已经在关机前进行了sync这个工具的调用,不过,多执行几次总是比较放心。

[root@localhost~]# sync; sync

注:一般账号所更新的硬盘数据仅有自己的数据,而root账号可以更新整个系统中的数据。

3.2 推荐的关机命令:shutdown

由于Linux系统的关机/重启是很重大的系统操作,因此只有root账号才能够进行。CentOS系统以tty7图形界面登陆时,允许一般账号关机或重启。

若使用远程管理工具,那就只有root账号有权限关机或重启。

关机我们经常使用的是 shutdown 这个命令,它会通知系统内的各个进程(Process),并且会通知系统中的运行等级(run level)内的一些服务来关闭。

shutdown 可以完成如下的工作:

  • 可以自由选择关机模式:重启、关机或者进入单用户操作模式均可;
  • 可以设置关机时间:可以设置成立刻关机,也可以设置某个特定的时间关机;
  • 可以自定义关机消息:在关机之前,可以将自己设置的消息传送给在线用户;
  • 可以仅发出警告信息:有时你可能要进行一些测试,而不想其他的用户干扰,或者是明白地告诉用户某段时间要注意一下,这个时候可以用 shutdown 来通知用户,但却不是真的要关机;
  • 可以选择是否要用fsck检查文件系统

 shutdown 的语法规则:

(这个是简单版的,更多的信息可以执行命令:[root@localhost~]# man shutdown 获取)

[root@localhost~]# shutdown [OPTION] ... TIME [MESSAGE]

OPTIONS:

-t       :-t后面加数字,即几秒后关机;

-k       :只是发送警告消息出去,不是真的关机;

-r        :将系统的服务停掉之后重启(常用);

-h       :将系统的服务停掉之后关机(常用);

-n       :不经过init程序,直接以 shutdown 功能来关机;

-c        :取消正在进行的 shutdown 命令;

TIME     :指定系统关机的时间,格式包括:‘now‘、‘+m‘、‘hh:mm‘,即立刻关机、几分钟后关机、hh:mm时刻关机;

需要注意的是,时间参数务必要加入命令中,否则 shutdown 命令会自动跳到 run level 1(单用户维护的登陆情况)。

下面给出几个例子:

[root@localhost~]# shutdown -h now                                                     

#常用关机命令,执行后系统会立刻关机,now 相当于时间为0的情况;

[root@localhost~]# shutdown -h 15:25                                                 

#系统在今天的15:25会关机,若当前时间超过15:25,则系统会在第二天15:25关机;

[root@localhost~]# shutdown -h +10                  

#系统在10分钟之后自动关机;

[root@localhost~]# shutdown -r now                  

#系统立刻重启;

[root@localhost~]# shutdown -r +30 ‘The system will reboot‘

#系统在30分钟之后会重启,并显示后面的消息‘The system will reboot‘给所有在线的用户;

[root@localhost~]# shutdown -k now ‘The system will reboot‘

#系统立刻发出后面的消息‘The system will reboot‘进行警告,但仅仅是警告,并不会关机;

3.3 重启、关机:reboot、halt、poweroff

其实这三个命令调用的函数库都差不多,所以当你使用 “man reboot” 命令时,会同时显示三个命令的用法。

既然这些命令都能够关机或重启,那它们有没有什么区别呢?

在默认的情况下,这几个命令都会完成一样的工作(因为 halt 会先调用 shutdown ,而 shutdown 最后会调用 halt )。

shutdown 会根据目前已启动的服务逐次关闭各服务后才关机;而 halt 能够在不理会目前系统运行状况的情况下,进行硬件关机。

我们通常只用记住 reboot 和 shutdown 这两个命令就好了。

 

 资料来源:《鸟哥的Linux私房菜》(第三版)、《Linux命令、编辑器与shell编程》(第3版)