简介
初始化英文简称:init(initialization)是 Unix 和 类Unix 系统启动过程中的第一道程序,用来产生其它所有进程的程序。
它以守护进程的方式存在,其进程号为1,它将继续运行直到系统关闭。它是所有其他进程的直接或间接的始源,并会接管孤儿进程。Init由使用硬编码的文件名的内核来启动,如果内核无法启动它,将导致内核崩溃(或“内核恐慌”)。
init的设计,在Unix系统,如System III和System V中,已经偏离了在Research Unix和它的BSD衍生(版)的init所提供的功能。大多数Linux发行版上的用法是与System V有些兼容,但也有一些发行版使用非BSD风格:
Gentoo 是自己定制的
deepin,ubuntu等大部分发行版都采用systemd
BSD风格
BSD init 运行存放于/etc/rc的初始化 shell 脚本,然后启动基于文本模式的终端(getty)或者基于图形界面的终端(窗口系统,如 X)。 这里没有运行模式的问题,因为文件 'rc' 决定了 init 如何执行。
优点: 简单且易于手动编辑。
缺点: 如果第三方软件需要在启动过程执行它自身的初始化脚本,它必须修改已经存在的启动脚本,一旦这种过程中有一个小错误,都将导致系统无法正常启动。
值得注意的是,现代的 BSD 派生系统一直支持使用 rc.local文件的方式,它将在正常启动过程接近最后的时间以子脚本的方式来执行。这样做减少了整个系统无法启动的风险。然后,第三方软件包可以将它们独立的 start/stop 脚本安装到一个本地的 rc.d目录中(通常这是由 ports collection/pkgsrc 完成的)。
FreeBSD 和 NetBSD 现在默认使用 rc.d ,该目录中所有的用户启动脚本,都被分成更小的子脚本,和 SysV 类似。rcorder 通常根据在 rc.d目录中脚本之间的依赖关系来决定脚本的执行顺序。
SysV风格
System V init 检查 /etc/inittab文件中是否含有 initdefault项。 这告诉 init 系统是否有一个默认运行模式。如果没有默认的运行模式,那么用户将进入系统控制台,手动决定进入何种运行模式。
优点: 灵活性强
缺陷: 比较复杂
运行模式(Runlevel)指的是Unix或者Linux等类Unix操作系统下不同的运行模式。
运行级别通常分为7等,分别是从0到6,但如果必要的话也可以更多。
在深度操作系统中,下列路径对应不同的运行级别。当系统启动时,通过其中的脚本文件来启动相应的服务。
/etc/rc0.d Run__level 0
/etc/rc1.d Run__level 1
/etc/rc2.d Run__level 2
/etc/rc3.d Run__level 3
/etc/rc4.d Run__level 4
/etc/rc5.d Run__level 5
/etc/rc6.d Run__level 6
运行模式分类
深度操作系统的系统运行级别:
0 所有进程将被终止,机器将有序的停止,关机时系统处于这个运行级别
1 单用户模式。用于系统维护,只有少数进程运行,同时所有服务也不启动
2 多用户模式。和运行级别3一样,只是网络文件系统(NFS)服务没被启动
3 多用户模式。允许多用户登录系统,是系统默认的启动级别
4 留给用户自定义的运行级别
5 多用户模式,并且在系统启动后运行 X-Window, 给出一个图形化的登录窗口
6 所有进程被终止,系统重新启动
管理运行模式
查看当前的运行级别
深度操作系统默认运行级别为5.使用runlevel命令可以查看当前的运行模式,终端执行:
runlevel
更改当前运行级别
切换运行级别,执行命令:
init [0123456Ss]
即在 init 命令后跟一个参数,此参数是要切换到的运行级的运行级代号,
注意:init 0 为关机,init 6 为重新启动。
更改默认运行模式
我们需要编辑 /etc/init/rc-sysinit.conf,终端执行:
sudo gedit /etc/init/rc-sysinit.conf
找到下面一行:
env DEFAULT_RUNLEVEL=2
更改最后面的数字为你想要更改到的运行级别。
注意:为了系统的正常使用,请不要更改默认运行模式为0、4和6
删除运行模式
如果有需要删除特定的运行模式,直接特定运行模式对应的配置文件即可。
但是如果你不明白这样做的后果,请不要这么做!
单用户模式
Linux系统中,现代的系统引导程序(如 LILO 或者 GRUB),用户可以在初始化过程中最后启动的进程来取代默认的 /sbin/init。 通常是在系统引导程序环境中通过执行 init=/foo/bar 命令。例如,如果执行 init=/bin/bash,启动单用户 root 的 shell 环境,无需用户密码。
正常用户进入单用户模式一般为了重置用户密码。
初始化程序
很多人一直努力地从某些方面改进传统的 init 守护进程,使它变得更完善。下面列出的是一些改进:
Upstart:ubuntu主导开发的初始化软件。
Systemd:完全替代init,可并行启动服务,并能减少在shell上的系统开销,为Fedora所使用
SystemStarter:用来替代 launchd — Apple Mac OS X开启进程
Initng:完全代替 init ,可以异步开启进程
Service Management Facility:完全代替/重新设计 Solaris 启动 Solaris 10
runit:跨平台的完全代替 init 可以并行启动服务
Mudur:用 Python 写成的 init 替代品, 可以异步开启进程,Pardus Linux 发行版
eINIT:完全代替 init ,可以异步开启进程,但是完成这个过程可以不使用 shell 脚本
相关链接