Alex_McAvoy

想要成为渔夫的猎手

Linux 关机与重启

【概述】

Linux 系统的关机、重启是一个十分重要的系统操作,只有 root 用户才能进行 shutdownreboot 等命令,这是因为,Linux 是一个多用户系统,在看不到的屏幕背后,可能有许多人同时利用主机进行工作

如果不正常关机,则可能会造成文件系统的损毁,所以在正常情况下,关机要注意以下几件事:

  • 查看系统使用状态,以判断是否可以关机
    • who 命令:查看当前系统用户
    • netstat -a 命令:查看网络联机状态
    • ps -aux 命令:查看后台执行程序
  • 通知在线用户关机的时刻:利用 shutdown -k 向所有用户发出警告
  • 正确使用关机命令:syncshutdownreboothaltpoweroff

【sync 指令】

sync 命令被用于将数据同步写入磁盘

在默认情况下,某些已经加载到内存中的数据不会被直接写回硬盘,而是暂存在内存中,但万一系统因某些特殊情况造成不正常关机时,数据尚未被写入硬盘,就会造成数据的更新不正常

sync 命令会使得尚未被更新的数据写入硬盘中,因此该命令建议在系统关机或重启前多执行几次

1
sync

需要说明的是,sync 命令可以被被一般用户使用,但一般用户所更新的硬盘数据只有自己的数据,root 用户可以更新整个系统的数据

此外,目前的 shutdownreboothaltpoweroff 等命令均在关机前执行了 sync,但多执行几次没有坏处

【shutdown 指令】

shutdown 命令是最常用的关机命令,这个命令会通知系统内的各个进程,并且将通知关闭系统中的执行等级内的一些服务

其语法规则如下:shutdown [-t sec] [-arkhncfF] time [alarm]

参数:

  • -t sec:过几秒后关机
  • -k:不是真正的关机,只是发送警告
  • -r:将系统服务停掉后重启
  • -h:将系统服务停掉后关机
  • -n:不经过 init 程序,直接以 shutdown 的功能来关机
  • -f:关机并开机后,强制略过 fsck 的磁盘检查
  • -F:系统重启后,强制进行 fsck 的磁盘检查
  • -c:取消当前在进行的 shutdown 命令
  • time:指定系统关机时间,若不加入,会自动跳到 runlevel-1,即单用户维护的登录情况
  • alarm:要发送的警告内容

下面给出几个含有时间参数的例子:

1
2
3
4
5
6
7
8
9
10
11
# 立即关机
shutdown -h now

# 在今天的20:25关机,若在20:25之后执行该命令,会在隔天的20:25关机
shutdown -h 20:25

# 系统将在10分钟后关机,同时将'The system will reboot.'发送给所有在线用户
shutdown -h +10 'The system will reboot.'

# 系统将'The system will reboot.'发送给所有在线用户
shutdown -k now 'The system will reboot.'

【reboot 指令】

reboot 命令常用于重启计算机,若系统的 runlevel 为 0 或 6,那么会重新开机,否则,会以 shutdown -r 来进行取代

其具有多个参数,在终端中使用 man reboot 即可查看,此处不再赘述

在实际应用中,一般直接执行 reboot 命令即可

【halt 指令与 poweroff 指令】

haltpoweroff 指令都可以完成关机和重启工作,但在实际应用中很少使用,一般利用 shutdownreboot 即可完成工作

在默认情况下,halt 会先调用 shutdown,而 shutdown 会在最后调用 halt,其中 shutdown 可以依据目前已启动的服务来逐次关闭各服务后关机,halt 能在不理当前系统状况下直接进行硬件关机

对于 poweroff 来说,其会发送一个 ACPI 信号来通知系统关机

【init 指令】

Linux 系统启动过程 中,介绍了 init 进程和 runlevel

值得注意的是, runlevel-0 相当于关机,runlevel-6 相当于重启

那么,可以使用 init 来指定 runlevel 从而实现关机与重启

1
2
3
4
5
# 关机
init 0

# 重启
init 6
感谢您对我的支持,让我继续努力分享有用的技术与知识点!