对于这个知识点,自己以前一直不了解,今天特意总结下,作为自己的一个学习记录


一. 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       S00killallK10cups       K16ksm       K35smb         K66gpsd        K75netfs       K84NetworkManager  K85rpcidmapd  K88rsyslog   K92ip6tables     S01haltK10saslauthd  K20nfs       K36mysqld      K69rpcsvcgssd  K75udev-post   K84wpa_supplicant  K86nfslock    K89iscsid    K92iptablesK10xfs        K25sshd      K50haldaemon   K70vboxdrv     K76openvpn     K85mdmonitor       K87alsasound  K89netplugd  K98qemuK15gpm        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.dK01dnsmasq    K15ksmtuned  K35nmb         K60crond       K74lm_sensors   K84NetworkManager  K85rpcidmapd  K88rsyslog   K92ip6tables     S99singleK10cups       K16ksm       K35smb         K66gpsd        K75netfs        K84wpa_supplicant  K86nfslock    K89iscsid    K92iptablesK10saslauthd  K20nfs       K36mysqld      K69rpcsvcgssd  K76openvpn      K85mdmonitor       K87alsasound  K89netplugd  K98qemuK10xfs        K25sshd      K50haldaemon   K70vboxdrv     K83bluetooth    K85messagebus      K87rpcbind    K89rdisc     S02lvm2-monitorK15gpm        K30sendmail  K50netconsole  K74acpid       K83portreserve  K85rpcgssd         K88iscsi      K90network   S26udev-post

这个级别启动的服务有三个,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      S08iptables    S23NetworkManager  S30vboxdrv    S99localK10saslauthd  K25sshd      K50haldaemon   K75netfs           K85rpcidmapd  K89rdisc         S12rsyslog     S24portreserve     S35qemuK10xfs        K30sendmail  K50netconsole  K76openvpn         K86nfslock    K90network       S13rpcbind     S25cups            S85gpmK15ksmtuned   K35nmb       K66gpsd        K83bluetooth       K88iscsi      S02lvm2-monitor  S15mdmonitor   S26acpid           S90crondK16ksm        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   S99localK10saslauthd  K36mysqld      K76openvpn         K90network       S12rsyslog   S19rpcgssd         S25netfs      S50bluetooth  S90crondK10xfs        K50netconsole  K84wpa_supplicant  K99lvm2-monitor  S13iscsi     S22messagebus      S26acpid      S50haldaemon  S91nmbK20nfs        K66gpsd        K85mdmonitor       S07iscsid        S13rpcbind   S23NetworkManager  S26udev-post  S84ksm        S91smbK25sshd       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        S99localK10saslauthd  K35nmb         K69rpcsvcgssd      K89netplugd      S08ip6tables  S14nfslock     S24portreserve     S30vboxdrv    S85gpmK10xfs        K35smb         K74lm_sensors      K89rdisc         S08iptables   S18rpcidmapd   S25cups            S35qemu       S85ksmtunedK20nfs        K36mysqld      K76openvpn         K90network       S12rsyslog    S19rpcgssd     S25netfs           S50bluetooth  S90crondK25sshd       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        S99localK10saslauthd  K30sendmail    K69rpcsvcgssd   K85mdmonitor       K88iscsi     K99lvm2-monitor  S23NetworkManager  S30vboxdrv    S85ksmtunedK10xfs        K36mysqld      K74lm_sensors   K85rpcgssd         K89iscsid    S08ip6tables     S25cups            S35qemu       S91nmbK15gpm        K50netconsole  K76openvpn      K85rpcidmapd       K89netplugd  S08iptables      S25netfs           S50bluetooth  S91smbK20nfs        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       S00killallK10cups       K16ksm       K35smb         K66gpsd        K75netfs       K84NetworkManager  K85rpcidmapd  K88rsyslog   K92ip6tables     S01rebootK10saslauthd  K20nfs       K36mysqld      K69rpcsvcgssd  K75udev-post   K84wpa_supplicant  K86nfslock    K89iscsid    K92iptablesK10xfs        K25sshd      K50haldaemon   K70vboxdrv     K76openvpn     K85mdmonitor       K87alsasound  K89netplugd  K98qemuK15gpm        K30sendmail  K50netconsole  K74acpid       K83bluetooth   K85messagebus      K87rpcbind    K89rdisc     K99lvm2-monitor


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


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