Linux系统学习笔记:运行系统
引导
引导就是启动计算机。在启动计算机时操作系统还不能够使用,必须由引导程序将其启动起来。在引导过程中,内核被加载到内存中并开始执行,进行各种初始化,之后系统就可以使用了。
引导包括自动引导和手工引导。自动引导时,系统会自己执行全部引导过程。手工引导则会在某一时刻将控制权交给用户,这时计算机处于单用户模式,其他用户还不能登录系统。
引导的过程可以分成:
加载并初始化内核。
检测和配置设备。
创建内核进程。
操作员干预(手工引导时)。
执行系统启动脚本。
多用户模式运行。
Linux的内核通常是 /vmlinuz ,在Debian [1] 上它链接到 /boot/vmlinuz-2.6.32-5-686 。系统引导时首先将它载入内存。内核执行内存检测来确定可用的RAM,然后会按静态方式分配内存量。
接下来内核会查找并初始化内核中给出的设备。
在基本的初始化完成后,内核会在用户空间创建一些自发进程,这么说是因为它们不通过 fork 机制创建。可以使用 ps -Af 命令进行查看,它们被中括号括了起来。创建完自发进程后,内核的工作就完成了,接下来的任务由 init 进程来完成。
如果以单用户模式引导,系统会进入一个特殊的登录模式。输入 root 的密码会进入到一个root shell,也可以按 ^D 跳过单用户模式继续引导。
接下来就是按一定的顺序执行系统启动脚本,如果安装了图形界面并设置了图形登录系统,会进入它等待用户登录。
计算机启动时首先加载磁盘开头的MBR,它是一个512字节的段,它告诉计算机从哪里引导,并加载引导加载程序,然后由引导加载程序负责加载内核。现在Linux系统最常用的引导加载程序是GRUB,以前还有LILO,但它没有GRUB强大,现在已经很少使用它了。
启动脚本
启动脚本是一些shell脚本,不同的Linux系统对它们的组织方式有很大区别。一般来说,启动脚本会:
设置计算机名称。
设置时区。
采用 fsck 检查磁盘。
安装系统的磁盘。
从 /tmp 删除旧文件。
配置网络。
启动守护进程和网络服务。
如果文件系统是正常卸载的,一般会自动跳过 fsck 检查。
init 定义了7个运行级:
0级为关闭系统级别。
1级为单用户模式级别。
2-5级为多用户模式级别。
6级为重新引导级别。
0级和6级比较特殊,系统不能留在这两个级别里,大多数系统运行在2级或3级。
/etc/inittab 定义了 init 在每个运行级上要做的事情,也就是进入每个级别要运行的命令。Debian的默认运行级是2,可以修改它。
id:2:initdefault:
可以使用 telinit 命令进入特定的运行级。
启动脚本放在 /etc/init.d/ 下,这些脚本都可以使用参数 start 和 stop 来运行,有些还支持 restart 。系统启动脚本时,并不直接在该路径下找,而是查找 /etc/rcN.d/ (N为0-6的级别)。 /etc/rcN.d/ 包含到启动脚本的符号链接,它们都以 S 或 K 开头, init 按运行级别由低到高过渡时,运行各级别以 S 开头的带有 start 参数的脚本,由高到低过渡时,运行各级别以 K 开头的带有 stop 参数的脚本。
Debian的配置信息放置比较分散。系统的主机名在 /etc/hostname 里,网络接口和默认网关在/etc/network/interfaces 里。Debian有一个启动脚本管理程序 update-rc.d 。
关机
停止或重新引导系统的最完善的方式是 shutdown 。可以给 shutdown 指定时间和可选的消息通知。用 -h 和-r 指定是停机还是重新引导,用 -F 或 -f 来强制或跳过 fsck 检查。
shutdown -h 调用 halt 命令,它也可以单独使用,执行关闭系统的基本任务。 halt 会执行 sync 系统调用,可以使用 -n 选项不执行 sync ,这主要用在 fsck 修复后的情况。
shutdown -r 调用 reboot 命令,和 halt 类似,区别是它重启机器,它也支持 -n 选项。
poweroff 命令等价于 halt ,但它还请求关闭主电源(有这种功能的系统上)。