提问:你是如何关闭电脑的?
普通青年

文艺青年

二逼青年

你是属于哪一种呢?

实话说,

这三种良许都干过~

还好我没有对服务器这么做,

否则……

分分钟被打进 ICU ……

1. 关机命令知多少

对于 Linux 电脑,正常情况下你是如何关机的?想必大家应该都是类似这样操作:

但是,对于很多服务器,它们并没有 GUI 界面,或者很多服务器我们是通过 SSH 来远程操作,那么我们只能通过命令行来进行关机。Linux 和类Unix 系统(如macOS)都为大家提供了几个命令来从命令行关闭或重启系统,一般有下几个命令:

  • shutdown
  • halt
  • reboot
  • poweroff

这些命令从汉语字面意义来看,多少有些相似,可能会让人觉得困惑。但是如果使用一些相应的选项,所有这些命令都可以执行关机、重启和挂起等操作。但实际上,你用 man 命令来查看这几个命令的用法,出来的结果都是一样的,如下图所示。

为什么会是这样的情况呢?我们要从这几个命令的渊源说起。

2. 深挖关机命令历史

为什么那几个关机命令的 man page 都一样?其实原因很简单,就是因为 Systemd 系统取代了古老的 system v init 系统。在 Linux 世界中,Fedora 在 2011 年开始使用 init 引导程序,从那以后许多发行版开始纷纷效仿。

但是,Debian 和 Ubuntu 于 2015 年开始切换到 Systemd 引导程序。

在基于 Systemd 的发行版上,shutdown、reboot、halt 和 poweroff 命令实际上都是指向 systemctl 命令的快捷方式。为了保持与基于 system v init 的发行版的兼容性,Systemd 系统保留了这些命令。

3. 关机命令使用详解

一台服务器通常会有多人一起使用,所以如果需要关闭或重启的话,我们需要提前做好计划,否则擅自关机的话会分分钟被同事打进 ICU 。

接下来,我们来重点讲解 shutdown 命令的用法。

所以,为了避免被揍,我们需要在关机之前告知所有已经登录的用户,提醒他们做好保存的工作。比如,我们打算从现在开始 15 分钟后关闭系统,需要键入如下命令:

$ shutdown +15 Shutting down in 15 minutes!

其中,+15 表示从现在起 15 分钟后,这里 + 号是可选的。而在 +15 之后跟的那串信息就是会通知到所有已经登录系统的用户的信息。

所以,当以上命令执行之后,所有已经登录系统的用户都会收到 Shutting down in 15 minutes! 这条信息,并且 15 分钟后系统将关闭。

如果我们要取消关闭,可以使用 -c 选项。

$ shutdown -c

同样地,所有已登录的用户都会收到一条 The system shutdown has been cancelled 的通知。

如果我们在 shutdown 命令之后不跟任何参数,那么默认就是在 1 分钟后关机。同时,这样操作不会通知在线的用户。所以,这样做很危险,一定要慎重。

$ shutdown

如果我们甚至连一分钟都等不了,那么我们可以在 shutdown 后面跟上 now,代表关闭立即生效。使用 now 就等同于使用了 +0 参数。

另外,时间参数也可以是我们期望关机的具体时间,例如 23:00 。但它必须遵循 HH:MM 的格式,并且必须是 24 小时式。执行这条命令后,在系统关闭的前 5 分钟,新的登录将被阻止。

默认情况下 shutdown 命令会使计算机进入挂起状态,然后进入关机状态。但是,我们可以使用其它选项来改变这个默认操作:

  • -H (停止),将我们的计算机进入挂起状态,但不会要求硬件断电。
  • -P (关机)是默认操作,将计算机切换到挂起状态,然后关闭电源。
  • -r (重新启动),将我们的计算机进入挂起状态,然后重新启动。
  • -h (挂起并关机)与 -P 一样,如果同时使用-h和-H,则优先使用-H选项
  • -c (取消)该选项将取消任何定时关机,挂起或重启。

比如下面这个重启的例子:

$ shutdown -r 08:20 System rebooting at 08:20

-----------------

我是良许,世界500强外企 Linux 开发工程师,专业生产 Linux 干货。欢迎关注我的公众号「良许Linux」,回复「1024」获取最新最全的技术资料,回复「入群」进入高手如云技术交流群。

最新文章

  1. js url.slice(star,end) url.lastIndexOf('/') + 1, -4
  2. October 28th Week 44th Friday 2016
  3. jbox用法
  4. Redhat7.2 如何修改主机名(hostname)?
  5. -bash: sudo: command not found Error and Solution
  6. codeforces 659 G. Fence Divercity 组合数学 dp
  7. tty相关内容
  8. HDU2841 Visible Trees(容斥原理)
  9. SQL多表联合分页.....
  10. IOS键盘收起
  11. jxse2.6连接外网rdv一直连接不上,而相同的代码用jxse2.7却能连上
  12. Vijos P1740聪明的质检员
  13. html的map自适应
  14. 记JavaScript的入门学习(一)
  15. mybatis 详解(一)------JDBC
  16. Springboot整合Kfka
  17. Mybatis中#{}和${}传参的区别及#和$的区别小结
  18. VNC错误修复⽅方法
  19. csp20160904解题报告
  20. 电信10兆指的是多少Mbps

热门文章

  1. Python 之父再发文:构建一个 PEG 解析器
  2. css3加js做一个简单的3D行星运转效果
  3. 用CSS来定义<p>标签,要求实现以下效果:字体颜色再IE6下为黑色,IE7下为红色,IE8下为绿色,其他浏览器下为黄色。
  4. Danjgo学习笔记(一)
  5. LeetCode刷题总结之双指针法
  6. cookie session sessionStorage localStorage
  7. MTFlexbox自动化埋点探索
  8. 某团面试题:JVM 堆内存溢出后,其他线程是否可继续工作?
  9. 缓冲区溢出实例(一)--Windows
  10. react native https