在linux下有很多关机的命令,在实际应用中它们还是有一点区别的,对系统也可能产生不同的影响,接下来主要是将下它们的具体用法和不同。

linux下一些比较常用的重启和关机命令有: shutdown 、halt、poweroff、init、reboot


  1. shutdown命令(需要root权限,普通用户可以通过sudo来获得权限)

    在这几个命令当中推荐使用shutdown命令,可以通过添加参数实现系统的关机和重启。

    shutdown执行关机,是送信号给init,要求它改变运行级别,以此来关机。关机或重启实际上是运行级别的调整,所以也可以用init直接调整运行级别来进行关机或重启。


 使用shutdown命令关机是安全的:

      linux系统是一个多用户的操作系统,并且后台也会运行多个进程。用户采用直接关闭电源的方式进行强制关机,是十分危险的,它可能会造成系统数据丢失,甚至损坏硬件设备。

    而在使用shutdown命令添加时间参数时,会通知每个已登录的用户系统将要关机,可以适当的给用户保存当前工作的时间,从而避免进程突然强制关闭可能造成的危险。

    shutdown工作过程,系统管理员执行shutdown命令后,会发送信号给init,请求其改变运行级别runlevel。

        runlevel 0  被用来停机〔halt〕

        runlevel 6  是用来重新激活〔reboot〕系统

      对于详细的runlevel问题,可以查看/etc/inittab文件,下边也会列出来。


shutdown 参数说明:

        -t     在改变到其它runlevel之前,告诉init多久以后关机。
        -r     重启计算器。
        -k     并不真正关机,只是送警告信号给每位登录者〔login〕。
        -h     关机后关闭电源〔halt〕。
        -n     不用init而是自己来关机。不鼓励使用这个选项,而且该选项所产生的后果往往不总是你所预期得到的。
        -c     cancel current process取消目前正在执行的关机程序。所以这个选项当然没有时间参数,但是可以输入一个用来解释的讯息,而这信息将会送到每位使用者。

         shutdown  -r  2/now          2分钟后或者立刻重启系统

         shutdown  -h  2/now         2分钟后或者立刻关闭系统


示例:系统管理员执行shutdown -h 2 ,2分钟后关机,系统会通知登录用户asd即将关机如下

wKioL1Xxddeh7sA-AAB37-FvK7Q511.jpg

     现在管理员又想取消关机,可以使用-c参数,并说明取消的原因

wKiom1Xxc6nj64qHAACLunWeHG4966.jpg

      用户asd收到关机取消的信息

wKioL1XxddfQG3FUAAC0QzvFuAw935.jpg

2.halt

    halt命令相当与shutdown -h now立刻关机,不通知任何用户。

    参数:
      -n     在关机前不做将记忆体资料写回硬盘的动作
      -w     并不会真的关机,只是把记录写到 /var/log/wtmp 档案里
      -d     不把记录写到 /var/log/wtmp 档案里(-n 这个参数包含了 -d) -f : 强迫关机,不呼叫 shutdown 这个指令
      -i     在关机之前先把所有网络相关的装置先停止
      -p     当关机的时候,顺便做关闭电源(poweroff)的动作

3.poweroff

     poweroff和halt命令都是reboot的软连接,用法一样

    

wKioL1Xxd8zj5TX3AACHhOt05TM548.jpg

4. init

 init是所有进程的祖先,是Linux系统操作中不可缺少的程序之一。它的进程号始终为1。

不同的运行级定义如下:(可以参考Red Hat Linux 里面的/etc/inittab)

      0     停机(千万不能把initdefault 设置为0 )

      1     单用户模式

      2     多用户,没有 NFS

      3     完全多用户模式(标准的运行级)

      4     没有用到

      5     X11 (xwindow)

      6     重新启动 (千万不要把initdefault 设置为6 )

shutdown 关机就是请求init切换到runlevel 0.