linux 下的init 0,1,2,3,4,5,6知识介绍


一. init是Linux系统操作中不可缺少的程序之一。

  所谓的init进程,它是一个由内核启动的用户级进程。

  内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。

  内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。

二. init一共分为7个级别,这7个级别的所代表的含义如下

0:停机或者关机(千万不能将initdefault设置为0)

1:单用户模式,只root用户进行维护

2:多用户模式,不能使用NFS(Net File System)

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

4:安全模式

5:图形化(即图形界面)

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

其实,可以通过查看/etc/rc.d/中的rc*.d的文件来对比理解。。
init 0,对应的系统会运行,/etc/rc.d/rc0.d里指定的程序。我们来看下名称
[root@localhost  ~]# ls /etc/rc.d/rc0.d 
K01dnsmasq    K15ksmtuned  K35nmb         K60crond       K74lm_sensors  K83portreserve     K85rpcgssd    K88iscsi     K90network       <span style="padding: 0px; margin: 0px; color: rgb(255, 0, 0);">S00killall</span>
K10cups       K16ksm       K35smb         K66gpsd        K75netfs       K84NetworkManager  K85rpcidmapd  K88rsyslog   K92ip6tables     <span style="padding: 0px; margin: 0px; color: rgb(255, 0, 0);">S01halt</span>
K10saslauthd  K20nfs       K36mysqld      K69rpcsvcgssd  K75udev-post   K84wpa_supplicant  K86nfslock    K89iscsid    K92iptables
K10xfs        K25sshd      K50haldaemon   K70vboxdrv     K76openvpn     K85mdmonitor       K87alsasound  K89netplugd  K98qemu
K15gpm        K30sendmail  K50netconsole  K74acpid       K83bluetooth   K85messagebus      K87rpcbind    K89rdisc     K99lvm2-monitor

依照上述红色字体,开机会执行的两个进程是killall和halt,这两个都表示为终止进程。故init 0是用于表示关机的。

init 1,对应的系统会运行,/etc/rc.d/rc1.d里指定的程序。

[root@localhost ~] # ls /etc/rc.d/rc1.d
K01dnsmasq    K15ksmtuned  K35nmb         K60crond       K74lm_sensors   K84NetworkManager  K85rpcidmapd  K88rsyslog   K92ip6tables     <span style="padding: 0px; margin: 0px; color: rgb(255, 0, 0);">S99single</span>
K10cups       K16ksm       K35smb         K66gpsd        K75netfs        K84wpa_supplicant  K86nfslock    K89iscsid    K92iptables
K10saslauthd  K20nfs       K36mysqld      K69rpcsvcgssd  K76openvpn      K85mdmonitor       K87alsasound  K89netplugd  K98qemu
K10xfs        K25sshd      K50haldaemon   K70vboxdrv     K83bluetooth    K85messagebus      K87rpcbind    K89rdisc    <span style="padding: 0px; margin: 0px; color: rgb(255, 0, 0);"> S02lvm2-monitor</span>
K15gpm        K30sendmail  K50netconsole  K74acpid       K83portreserve  K85rpcgssd         K88iscsi      K90network   <span style="padding: 0px; margin: 0px; color: rgb(255, 0, 0);">S26udev-post</span>

这个级别启动的服务有三个,udev、lvm相关的和single(单用户模式的服务)。故此级别是单用户模式,只有root能用,不支持其他用户。

init 2,对应的系统会运行,/etc/rc.d/rc2.d里指定的程序。

[root@localhost ~ ]# ls /etc/rc.d/rc2.d/
K01dnsmasq    K20nfs       K36mysqld      K74lm_sensors      K85rpcgssd    K89netplugd      <span style="padding: 0px; margin: 0px; color: rgb(255, 0, 0);">S08iptables</span>    <span style="padding: 0px; margin: 0px; color: rgb(255, 0, 0);">S23NetworkManager  S30vboxdrv    S99local</span>
K10saslauthd  K25sshd      K50haldaemon   K75netfs           K85rpcidmapd  K89rdisc         S12rsyslog     S24portreserve     S35qemu
K10xfs        K30sendmail  K50netconsole  K76openvpn         K86nfslock    K90network       S13rpcbind     S25cups            S85gpm
K15ksmtuned   K35nmb       K66gpsd        K83bluetooth       K88iscsi      S02lvm2-monitor  S15mdmonitor   S26acpid           S90crond
K16ksm        K35smb       K69rpcsvcgssd  K84wpa_supplicant  K89iscsid     S08ip6tables     S22messagebus  S26udev-post       S99alsasound

这个级别启动的服务多了,NetworkManager/iptables/acpid/alsa都已经开启,但是nfs,smb,openvpn相关服务没有开启,这个级别不支持nfs。

init 3 , 对应的系统运行/etc/rc.d/rc3.d

[root@localhost ~] # ls /etc/rc.d/rc3.d/
K01dnsmasq    K30sendmail    K74lm_sensors      K89rdisc         S08iptables  S18rpcidmapd       S25cups       S35qemu       S85ksmtuned   S99local
K10saslauthd  K36mysqld      K76openvpn         K90network       S12rsyslog   S19rpcgssd         S25netfs      S50bluetooth  S90crond
K10xfs        K50netconsole  K84wpa_supplicant  K99lvm2-monitor  S13iscsi     S22messagebus      S26acpid      S50haldaemon  S91nmb
K20nfs        K66gpsd        K85mdmonitor       S07iscsid        S13rpcbind   S23NetworkManager  S26udev-post  S84ksm        S91smb
K25sshd       K69rpcsvcgssd  K89netplugd        S08ip6tables     S14nfslock   S24portreserve     S30vboxdrv    S85gpm        S99alsasound

这个级别nfs服务是开启的,被成为完全多用户模式。

init 4

[root@localhost ~ ]# ls /etc/rc.d/rc4.d/
K01dnsmasq    K30sendmail    K66gpsd            K85mdmonitor     S07iscsid     S13rpcbind     S23NetworkManager  S26udev-post  S84ksm        S99local
K10saslauthd  K35nmb         K69rpcsvcgssd      K89netplugd      S08ip6tables  S14nfslock     S24portreserve     S30vboxdrv    S85gpm
K10xfs        K35smb         K74lm_sensors      K89rdisc         S08iptables   S18rpcidmapd   S25cups            S35qemu       S85ksmtuned
K20nfs        K36mysqld      K76openvpn         K90network       S12rsyslog    S19rpcgssd     S25netfs           S50bluetooth  S90crond
K25sshd       K50netconsole  K84wpa_supplicant  K99lvm2-monitor  S13iscsi      S22messagebus  S26acpid           S50haldaemon  S99alsasound

此模式被称为安全模式。

init 5

[root@localhost ~ ]# ls /etc/rc.d/rc5.d/
K01dnsmasq    K25sshd        K66gpsd         K84wpa_supplicant  K87rpcbind   K90network       S22messagebus      S26udev-post  S84ksm        S99local
K10saslauthd  K30sendmail    K69rpcsvcgssd   K85mdmonitor       K88iscsi     K99lvm2-monitor  S23NetworkManager  S30vboxdrv    S85ksmtuned
K10xfs        K36mysqld      K74lm_sensors   K85rpcgssd         K89iscsid    S08ip6tables     S25cups            S35qemu       S91nmb
K15gpm        K50netconsole  K76openvpn      K85rpcidmapd       K89netplugd  S08iptables      S25netfs           S50bluetooth  S91smb
K20nfs        K60crond       K83portreserve  K86nfslock         K89rdisc     S12rsyslog       S26acpid           S50haldaemon  S99alsasound

完全的图形化界面模式

 init 6

[root@localhost ~ ]# ls /etc/rc.d/rc6.d/
K01dnsmasq    K15ksmtuned  K35nmb         K60crond       K74lm_sensors  K83portreserve     K85rpcgssd    K88iscsi     K90network       <span style="padding: 0px; margin: 0px; color: rgb(255, 0, 0);">S00killall</span>
K10cups       K16ksm       K35smb         K66gpsd        K75netfs       K84NetworkManager  K85rpcidmapd  K88rsyslog   K92ip6tables     <span style="padding: 0px; margin: 0px; color: rgb(255, 0, 0);">S01reboot</span>
K10saslauthd  K20nfs       K36mysqld      K69rpcsvcgssd  K75udev-post   K84wpa_supplicant  K86nfslock    K89iscsid    K92iptables
K10xfs        K25sshd      K50haldaemon   K70vboxdrv     K76openvpn     K85mdmonitor       K87alsasound  K89netplugd  K98qemu
K15gpm        K30sendmail  K50netconsole  K74acpid       K83bluetooth   K85messagebus      K87rpcbind    K89rdisc     K99lvm2-monitor

这个级别里,只有两个服务,一个为killall,一个是reboot,即,关闭现在的系统,重启。故此级别是重启。

不同的系统版本,可能里面的文件会不同,如果要查看,可以通过ll来看,其实他们都是软连接。


原文地址:http://m.blog.youkuaiyun.com/blog/woshizyq/9798191


<think>好的,我现在需要回答用户关于Linux系统中init 0命令的作用和使用场景的问题。首先,我得回忆一下init命令的基本知识。记得init是系统初始化进程,负责启动和管理其他进程。不同的运行级别对应不同的系统状态,比如运行级别0是关机,6是重启。 用户问的是init 0,所以我需要明确说明这个命令的作用是关机。同时,可能还需要对比其他关机命令,比如shutdown、halt、poweroff,以及它们之间的区别。根据用户提供的引用内容,引用[1]提到halt是立即关机,而引用[2]提到Systemd作为init系统,可能影响运行级别的处理方式。不过用户现在的问题是关于传统的init命令,可能需要指出在Systemd系统中是否还适用。 接下来,需要解释运行级别的概念。传统的SysVinit使用运行级别0-6,其中0是关机,6是重启。但在使用Systemd的系统里,运行级别可能被转换为对应的target。比如,init 0可能对应poweroff.target。不过用户可能更关心传统用法,所以需要明确说明init 0在两种环境下的行为是否一致。 使用场景方面,用户可能需要知道何时使用init 0而不是其他命令。比如,在脚本中需要关机,或者从命令行快速关机。同时,需要提醒权限问题,通常需要root权限才能执行。 另外,要注意安全性和数据保存。使用init 0会直接关机,可能不会给其他程序保存数据的时间,所以建议先同步数据,或者使用shutdown命令更安全。比如,shutdown -h now会更友好地关闭服务。 可能还需要比较不同命令的底层行为,比如halt和poweroff的区别。根据引用[1],halt只是停止CPU,而poweroff还会切断电源,但现代系统可能两者效果相同。init 0应该等同于poweroff。 最后,生成相关问题时,可以考虑运行级别的其他值、Systemd下的替代命令、如何切换运行级别,以及不同发行版中的差异。确保问题覆盖用户可能感兴趣的扩展内容。</think>### Linux系统中`init 0`命令的作用及使用场景 `init 0`是Linux系统中用于**关机**的命令,属于传统的SysVinit初始化系统的一部分。以下是详细解析: --- #### 一、`init 0`的作用 1. **核心功能** `init 0`会将系统切换到**运行级别0(Runlevel 0)**,即关闭所有正在运行的程序和服务,并安全终止系统进程,最终关闭计算机电源[^1]。 2. **与传统关机命令的对比** - `halt`:仅停止CPU,不切断电源(现代系统中通常等同于关机)[^1]。 - `poweroff`:直接关机并切断电源。 - `init 0`:通过切换运行级别实现关机,与`poweroff`效果相同,但实现逻辑基于运行级别机制。 --- #### 二、使用场景 1. **脚本或自动化任务** 在需要脚本化关机的场景中,`init 0`可以与其他命令结合使用,例如: ```bash sync; init 0 # 先同步数据再关机 ``` 2. **兼容性需求** 适用于仍在使用SysVinit初始化系统的旧版本Linux发行版(如CentOS 6或更早版本)。 3. **快速关机操作** 通过命令行直接执行`init 0`可快速触发关机流程,无需额外参数。 --- #### 三、注意事项 1. **权限要求** 执行`init 0`需要**root权限**或通过`sudo`授权: ```bash sudo init 0 ``` 2. **Systemd系统的兼容性** 在采用Systemd的现代发行版(如Ubuntu 18.04+、CentOS 7+)中,`init 0`会被映射到`systemctl poweroff`,最终效果相同,但底层实现依赖Systemd的`poweroff.target`[^2]。 3. **数据安全风险** `init 0`会直接终止所有进程,可能未预留服务保存数据的时间。建议优先使用更友好的命令: ```bash shutdown -h now # 更安全的关机方式 ``` --- #### 四、运行级别扩展 传统SysVinit的运行级别定义: - `0`:关机 - `1`:单用户模式(救援模式) - `3`:多用户文本模式 - `5`:图形界面模式 - `6`:重启 在Systemd中,运行级别被替换为`target`(如`graphical.target`对应运行级别5)[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值