halt,shutdown,reboot,init的差异

在linux下一些常用的关机/重启命令有shutdown、halt、reboot、及init


1.shutdown

  shutdown命令安全地将系统关机。有些用户会使用直接断掉电源的方式来关闭linux,这是十分危险的。因为linux与windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失﹐使系统处于不稳定的状态﹐甚至在有的系统中会损坏硬件设备。

  而在系统关机前使用shutdown命令﹐系统管理员会通知所有登录的用户系统将要关闭。并且login指令会被冻结﹐即新的用户不能再登录。直接关机或者延迟一定的时间才关机都是可能的﹐还可能重启。这是由所有进程〔process〕都会收到系统所送达的信号〔signal〕决定的。这让像vi之类的程序有时间储存目前正在编辑的文档﹐而像处理邮件〔mail〕和新闻〔news〕的程序则可以正常地离开等等。

  shutdown执行它的工作是送信号〔signal〕给init程序﹐要求它改变runlevel。Runlevel 0被用来停机〔halt〕﹐runlevel 6是用来重新激活〔reboot〕系统﹐而runlevel 1则是被用来让系统进入管理工作可以进行的状态﹔这是预设的﹐假定没有-h也没有-r参数给shutdown。要想了解在停机〔halt〕或者重新开机〔reboot〕过程中做了哪些动作﹐你可以在这个文件/etc/inittab里看到这些runlevels相关的资料。

  shutdown 参数说明:

  [-t] 在改变到其它runlevel之前﹐告诉init多久以后关机。

  [-r] 重启计算器。

  [-k] 并不真正关机﹐只是送警告信号给每位登录者〔login〕。

  [-h] 关机后关闭电源〔halt〕。

  [-n] 不用init﹐而是自己来关机。不鼓励使用这个选项﹐而且该选项所产生的后果往往不总是你所预期得到的。

  [-c] cancel current process取消目前正在执行的关机程序。所以这个选项当然没有时间参数﹐但是可以输入一个用来解释的讯息﹐而这信息将会送到每位使用者。

  [-f] 在重启计算器〔reboot〕时忽略fsck。

  [-F] 在重启计算器〔reboot〕时强迫fsck。

  [-time] 设定关机〔shutdown〕前的时间。

   

Shutdown -h 2 命令执行后每个终端(用户都会收到如下信息)

[wang@wang root]$

Broadcast message from root (pts/0) (Sun Jul 5 20:17:57 2009):

The system is going DOWN for system halt in 2 minutes!

[root@wang ~]# shutdown -h 1 –r 非命令执行终端是可以执行别的操作

Broadcast message from root (pts/0) (Sun Jul 5 20:19:49 2009):

The system is going DOWN for reboot in 1 minute!

[root@wang ~]# shutdown -h 3 "yao down" 输入了此命令后,显示如以下三行 。在本终端不能进行别的操作,可以另开终端输入 shutdown –c 在本终端显示的结果是第四行

 

Broadcast message from root (pts/1) (Sun Jul 5 20:24:46 2009):

yao down

The system is going DOWN for system halt in 3 minutes!

Shutdown cancelled.
2.halt----最简单的关机命令

  其实halt就是调用shutdown -h。halt执行时﹐杀死应用进程﹐执行sync系统调用﹐文件系统写操作完成后就会停止内核。

  参数说明:

  [-n] 防止sync系统调用﹐它用在用fsck修补根分区之后﹐以阻止内核用老版本的超级块〔superblock〕覆盖修补过的超级块。

  [-w] 并不是真正的重启或关机﹐只是写wtmp〔/var/log/wtmp〕纪录。

  [-d] 不写wtmp纪录〔已包含在选项[-n]中〕。

  [-f] 没有调用shutdown而强制关机或重启。

  [-i] 关机〔或重启〕前﹐关掉所有的网络接口。

  [-p] 该选项为缺省选项。就是关机时调用poweroff。

  3.reboot

  reboot的工作过程差不多跟halt一样﹐不过它是引发主机重启﹐而halt是关机。它的参数与halt相差不多。

[root@wang ~]# reboot

Broadcast message from root (pts/1) (Sun Jul 5 20:30:24 2009):

The system is going down for reboot NOW!

  4.init

  init是所有进程的祖先﹐它的进程号始终为1﹐所以发送TERM信号给init会终止所有的用户进程﹑守护进程等。shutdown 就是使用这种机制。init定义了8个运行级别(runlevel),init 0为关机﹐init 6为重启。另外还有init命令可以改变init的运行级别﹐比如﹐init -1可使系统进入单用户模式。

 

<think>根据用户的问题,用户想要将shutdown操作改为reboot操作的方法。我们需要参考提供的引用内容,并给出相应的解决方案。 引用中提及shutdownreboot命令的区别以及它们的用法: - 引用[1]提到:在单用户模式下一般使用reboot,在多用户模式下一般采用shutdown。同时,`reboot -h`用于停机状态(仅在单用户模式下使用)。 - 引用[2]提供了sudoers文件的配置,允许用户使用sudo执行shutdownreboot命令。 - 引用[3]指出:在Linux系统中,`/sbin/halt``/sbin/poweroff`实际上是链接到`/sbin/reboot`的符号链接。 - 引用[4][5]则介绍了shutdownreboot命令的基本用法。 用户的需求是:将原本的shutdown操作改为reboot操作。这里可能有两种情况: 1. 用户希望修改某个脚本或配置,将原本执行关机的操作改为重启。 2. 用户希望知道如何直接使用reboot命令替换shutdown命令。 根据引用[2],我们可以通过修改sudoers文件来赋予用户执行reboot的权限。但是,用户的问题并不是关于权限,而是关于如何将shutdown操作改为reboot操作。 因此,我们主要考虑命令的替换: - 关机命令:`shutdown -h now` 或 `poweroff` - 重启命令:`reboot` 或 `shutdown -r now` 所以,如果用户原本使用`shutdown -h now`来关机,现在想改为重启,只需要将命令替换为`reboot`或`shutdown -r now`。 另外,引用[5]提到,可以使用init命令:`init 0`用于关机,`init 6`用于重启。所以也可以将`init 0`替换为`init 6`。 总结方法: - 如果是命令行操作,直接使用`reboot`或`shutdown -r now`代替原来的关机命令。 - 如果是脚本中需要修改,找到执行关机的命令(可能是`shutdown -h now`、`poweroff`、`init 0`等)并替换为相应的重启命令(`reboot`、`shutdown -r now`、`init 6`)。 具体步骤: 1. 确定当前使用的关机命令:查看脚本或配置文件中使用的关机命令是什么。 2. 替换命令: - 将`shutdown -h now`替换为`shutdown -r now`或`reboot` - 将`poweroff`替换为`reboot`(因为poweroff是reboot的符号链接,但行为不同,所以直接换为reboot命令) - 将`init 0`替换为`init 6` 3. 保存修改并测试。 注意:修改系统命令需要root权限。 例如,在脚本中找到: ```bash shutdown -h now ``` 改为: ```bash reboot ``` 或者 ```bash shutdown -r now ``` 如果用户是想要修改系统默认行为(比如当按下电源按钮时执行重启而不是关机),那么可能需要修改系统的acpid配置或其他相关配置,但用户的问题中没有提到这种需求,所以先提供命令替换的方法。 </think>### 将shutdown操作改为reboot操作的方法 根据引用内容,将关机(shutdown)操作改为重启(reboot)操作的方法如下: 1. **命令直接替换** 在命令行中将 `shutdown -h now`(立即关机)替换为以下任一重启命令: - `reboot`(立即重启) - `shutdown -r now`(立即重启) - `init 6`(通过运行级别切换实现重启)[^5] 2. **脚本或配置修改** 若需在脚本中修改: ```bash # 原关机命令 /sbin/shutdown -h now # 改为重启命令 /sbin/reboot # 或 /sbin/shutdown -r now ``` 3. **sudo权限配置** 赋予用户reboot权限(引用[2]): 在 `/etc/sudoers` 中添加: ```bash username ALL=(ALL) NOPASSWD: /sbin/reboot ``` 此后用户可通过 `sudo reboot` 执行重启。 4. **注意事项** - `reboot` 直接发送SIG_KILL信号终止进程,可能影响应用文件系统[^1] - 多用户模式建议用 `shutdown -r`(有60秒缓冲期),单用户模式可用直接 `reboot`[^1] - `halt` `poweroff` 本质是 `reboot` 的符号链接(引用[3]),但行为不同: ```bash reboot # 重启 poweroff # 关机(虽链接到reboot,但执行关机) ``` > **关键区别**(引用[1][5]): > - `shutdown`:渐进终止进程→卸载系统→关机 > - `reboot`:直接SIG_KILL终止进程→重启 > 修改时需评估对运行中服务的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值