# 正确关机的方法

在 linux 下由于支持多终端机,还有就是程序或服务都是后台运行,如果直接采取按下电源来关机时, 则其他的人的数据可能就此中断。

另外,若不正常关机,则可能造成文件系统的损坏(因为来不及将数据回写到文件中,所以有些服务的文件就会有问题)

所以正常情况下,要关机时需要注意:

  • 观察系统的使用状态

    • who:查看目前有谁在线
    • netstat -a:查看网络的联机状态
    • ps -aux:查看后台运行的程序

    这些指令可以让你稍微了解主机目前使用状态,可以判定是否可以关机了,后续会继续讲解这些指令

  • 通知在线使用者关机的时刻

    可以使用 shutdown 指令来达到:给在线的使用者一些时间来结束他们的工作

    [mrcode@study ~]$ sudo shutdown
    [sudo] password for mrcode:
    Shutdown scheduled for Sat 2019-10-05 03:43:32 CST, use 'shutdown -c' to cancel.
    [mrcode@study ~]$
    Broadcast message from root@study.centos.mrcode (Sat 2019-10-05 03:42:32 CST):
    
    The system is going down for power-off at Sat 2019-10-05 03:43:32 CST!
    
    1
    2
    3
    4
    5
    6
    7

    指令命令之后,进行了一个广播消息,并告知在某个具体的时间进行关机

  • 正确的关机指令使用

    例如 shutdown 与 reboot 两个指令

# 关机重启相关指令

  • 将数据同步写入硬盘:sync
  • 惯用的关机指令:shutdown
  • 重启,关机:reboot、halt、poweroff

# 数据同步写入磁盘:sync

利用缓存来加快数据的读取速度,所以有将内存中的数据强制写入磁盘这么一说, reboot、halt、poweroff 指令会自动调用 sync 指令

# 惯用的关机指令 shutdown

该指令必须使用 root 身份才能执行。

该命令会通知系统内的各个程序(processes)、服务等进行关闭,shutdown 可以达成以下工作:

  • 可以自由选择关机模式:关机或重启
  • 可以设定关机时间:立刻、未来的一个时间
  • 可以自定义关机信息:在关机前,将设置的信息广播给在线的 user
  • 可以仅发出警告信息:有时候可能需要测试、或则明确告知使用者的场景下,就可以使用该功能,但是可以不关机

语法如下

/sbin/shutdown [-krhc] [时间 [警告信息]]
1
  • k:不要真的关机,只发送警告信息
  • r:在将系统的服务停掉之后就重新启动(常用)
  • h:将系统的服务停掉之后,立即关机(常用)
  • c:取消已经在进行的 shutdown 指令内容
  • 时间:指定系统关机的时间,若没有时间,则默认 1 分钟后自动进行

注意:老版本系统时间是必须加的,而新版本没有时间则默认了一个时间

下面来测试下

# 立刻关机,now 相当于 0 的状态
shutdown -h now
# 系统在今天的 20:25 分关机,若在 20:27 分才下单此指令,则隔天关机
shutdown -h 20:25
# 十分钟后关机
shutdown -h +10
# 立刻重启
shutdown -r now
# 30 分钟后重启,并显示后面信息给所有在线的使用者
shutdown -r +30 '要关机了'
# 只发送信息,而不关机,笔者实测这个没有看到效果,上面的都有效果
shutdown -k noew '吓唬你的'
1
2
3
4
5
6
7
8
9
10
11
12

# reboot、halt、poweroff

这三个指令可以进行重新启动与关机的任务,这三个指令调用的函数库都差不多(都是调用 systemctl 这个重要的管理命令), 使用 man reboot,会同时显示着三个指令给你看

一般只用记住 reboot、poweroff 指令就行了,而鸟哥一般重启时会使用以下的指令

sync; sync; sync; reboot
1
  • reboot:重启
  • halt:系统停止,屏幕可能会保留系统已经停止的信息;实测就是只显示一句话,像卡死了一样
  • poweroff:系统关机

更多的选项功能,请务必使用 man 去查询

# 实际使用管理工具 systemctl 关机

该工具很复杂,目前只需要了解有关关机的部分即可,后续章节会讲到

halt、poweroff、reboot、shutdown 等等都是调用 systemctl 指令的。下面是有关关机的语法

systemctl [指令]

halt :系统停止,屏幕显示一句话,假死的样子
poweroff:进入关机模式
reboot:直接重新启动
suspend:进入休眠模式
1
2
3
4
5
6