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

文艺青年

二逼青年

你是属于哪一种呢?

实话说,

这三种良许都干过~

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

否则……

分分钟被打进 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」获取最新最全的技术资料,回复「入群」进入高手如云技术交流群。

良许 | 听说,有个同事因为关闭服务器被打进 ICU ……的更多相关文章

  1. 良许Linux | Linux学习方法及学习资料汇总

    很多人想学习Linux,却不知道怎么着手,甚至不知道Linux有哪些方向,非常迷茫.基于此,我特地写了篇文章介绍Linux方向性问题,没想到一不小心成了爆款: 到什么程度才叫精通 Linux?​ 看完 ...

  2. 良许被百万大V安排得服服帖帖,还跟美女小姐姐合影了……

    大家好,我是良许. 很多人问我说,良许,你在工作之余还花这么多时间精力去写公众号运营自媒体,到底是为了什么? 其实原因很简单,就是想做个副业,万一到了 35 岁真的失业了,我至少还有另外一份收入,不至 ...

  3. 良许 | 命令的输出不会保存?居然连 tee 命令都不会用!

    很多情况下,我们需要保存程序/命令的输出到本地,常用的一种方法是重定向,这也是一种很好的方法.但有个问题,如果你想要做后续操作,比如要统计输出的行数等,重定向就有困难了. 这时候,tee 命令就派上用 ...

  4. 良许 | 网络检测神器 ss 命令,你可能根本就不会用!

    今天我们来介绍一下 Linux ss 命令. ss 是 Socket Statistics 的缩写,用来统计 socket 连接的相关信息,它跟 netstat 差不多,但有着比 netstat 更强 ...

  5. Tomcat 用 startup.bat 启动时,加载信息之后又关闭服务器(差不多一闪而过)问题

    Tomcat 用 startup.bat 启动时,加载信息之后又关闭服务器(差不多一闪而过)问题 以前是正常的,后来在 server.xml 文件的 <Host> </Host> ...

  6. CentOS 7.0关闭服务器的防火墙服务命令

    1.直接关闭防火墙systemctl stop firewalld.service #停止firewallsystemctl disable firewalld.service #禁止firewall ...

  7. powershell 远程重启/关闭服务器

    powershell 远程重启/关闭服务器 #启动winrm PS C:\Windows\system32> winrm quickconfig -q #设置信任主机 PS C:\Windows ...

  8. commons-dbcp2 新版本2.6使用连接池在关闭服务器的时候会有内存溢出的BUG....

    这是异常信息.本人使用的mysql8.0数据库驱动版本mysql-connector-java Version 8.0.11,发生这种情况的原因主要是Dbcp2的XBasicDataSource在关闭 ...

  9. WCF 基础连接已经关闭: 服务器关闭了本应保持活动状态的连接。

    详细错误信息: System.ServiceModel.CommunicationException: 接收对 http://localhost:48655/XXXXXX.svc 的 HTTP 响应时 ...

随机推荐

  1. 一份新的lilypond谱子,能设置页边距和设置换页符了

    给学生做的一份乐谱,这回能设置页边距了,以及设置换页符了. 顺带能设置一些代码片段(snippet),可以用热键代替使用 设置页边距的snippet: \paper { %双引号里面填页面大小 #(s ...

  2. Spring入门编程问题集锦Top10

    我写的一篇文章,希望对spring初学者有所帮助: 1.如何学习Spring? 你可以通过下列途径学习spring: ①. spring下载包中doc目录下的MVC-step-by-step和samp ...

  3. Java中的时间二三事

    实习过程中对于时间的处理有很多,有的还涉及到从数据库取出时间,所以做一些总结,想到那先写到哪,慢慢补充.    首先最常见的是java.util中的Date类,这个类封装了当前的日期和时间,它实际是计 ...

  4. 理解Go协程与并发

    协程 Go语言里创建一个协程很简单,使用go关键字就可以让一个普通方法协程化: package main import ( "fmt" "time" ) fun ...

  5. gunicorn 基础配置使用

    flask 自带的 web 服务器稳定性较差,只能用于测试.最近做的 web 项目,每次启动,需要敲一堆参数文件,今天学习了官方文档里关于配置的说明,记录一下. 创建一个 gunicorn.conf ...

  6. Python 数据科学-Numpy

    NumPy Numpy :提供了一个在Python中做科学计算的基础库,重在数值计算,主要用于多维数组(矩阵)处理的库.用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多.本身是由C语 ...

  7. C#中appium自动化执行移动命令mobile:shell用法

    官网:https://appium.readthedocs.io/en/latest/en/commands/mobile-command/#android 1.执行ADB shell命令(需要设置服 ...

  8. var let及const

    es6已经发布很久了,之前只会用var定义变量,学习了let和const后,又学到了一些作用域.JavaScript编译和深拷贝浅拷贝的知识.这章主要来说说这三个定义量的方法: 1.var 在没学习e ...

  9. c排序

    #pragma once//如果写头文件 放置头文件重复包含 #include<stdio.h> //定义类型 结构体类型定义 //宏定义 #define //函数申明 void prin ...

  10. ajax前台数据到后台

    var username = $("#id").val(); var user={"userAccount":username,"userPasswo ...