Linux 系统运行级别
Linux 使用的是基于运行级(run-levels
)概念的称为 SysVinit
的专用启动工具。 它在不同的系统上可能是完全不一样的, 所以不能认为一个脚本在某个 Linux 发行版上工作正常。
SysVinit
以运行级的模式来工作,一般有 7 (从 0 到 6)个运行级 (实际上可以有更多的运行级,但都是用于特殊情况而且一般使用不到。 参见 init(8)以获得更多信息),每个运行级对应于一套设定好的任务, 当启动一个运行级的时候, 计算机就需要执行相应的任务。
默认的运行级是 3,下面是对不同运行级的描述:
可以使用 runlevel
命令查看:
$ runlevel
N 3
也可以在 /etc/inittab
文件中看到以下:
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
也就是说我们系统的运行级别目前是3,那么需要看的就是 /etc/rc3.d
下的内容,其实里面都是软连接,所有的软链指向 /etc/init.d/
中的脚本文件,命名规范如下:
- S 表示系统启动时需要启动的脚本
- K 表示系统关闭时要关闭的脚本
- [number] 表示的是该脚本的运行优先级,number 越小,脚本的运行优先级就越高
- [service name] 表示的是服务的名称。
因此我们如果需要定义一个服务启动的优先级(顺序),则需指定脚本的 number 即可。
Linux 开机顺序
- 加载内核
- 启动 init(/etc/inittab)
- 执行
/etc/rc.d/rc.sysinit
- 执行
/etc/rc.d/rc*.d
(rc0.d、rc1.d、rc2.d…rc6.d)
- 执行
/etc/rc.d/rc.local
(就是 /etc/rc.local)
-
/sbin/mingetty
,等待用户登录
自启动脚本实践
- 开机以 root 权限执行脚本,修改
/etc/rc.d/rc.local
文件。 - 用户登录时执行脚本,如设置一些环境变量,修改
/etc/profile
文件。 - 特定用户登录时执行特定脚本,如设置该用户特定的环境变量,修改
~/.bash_profile
文件。
文件 | 说明 |
---|---|
/etc/profile |
此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从 /etc/profile.d 目录的配置文件中搜集 shell 的设置。 |
/etc/bashrc |
为每一个运行bash shell的用户执行此文件。当bash shell被打开时,该文件被读取。 |
~/.bash_profile |
用户专用于自己使用的 shell 信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的 .bashrc 文件。 |
~/.bashrc |
该文件包含专用于你的 bash shell 的 bash 信息,当登录时以及每次打开新的 shell 时,该文件被读取。 |
~/.profile |
在 Debian 中使用 .profile 文件代替 .bash_profile 文件 .profile (由Bourne Shell和Korn Shell使用)和 .login (由C Shell使用)两个文件是 .bash_profile 的同义词,目的是为了兼容其它 Shell。 |
~/.bash_logout |
当每次退出系统(退出bash shell)时,执行该文件。 |