linux ----系统下各个文件夹的作用及系统启动顺序

wKiom1NPU4mC-_xxAAQoW8etwSQ186.gif

大家熟悉的掌握了Linux下的基本命令后,但是我们还不能知道Linux系统原理知识,为了了解一下Linux系统原理以及内部结构,我们就从最初的Linux系统文件与启动顺序开始了解吧:

================================================================================

linux下的文件结构


1
2
3
4
5
6
7
8
9
10
11
12
13
14
/bin 二进制可执行命令
/dev 设备特殊文件
/etc 系统管理和配置文件
/etc/rc.d 启动的配置文件和脚本
/home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件
/sbin 系统管理命令,这里存放的是系统管理员使用的管理程序  /tmp 公用的临时文件存储点
/root 系统管理员的主目录(呵呵,特权阶级)
/mnt 系统提供这个目录是让用户临时挂载其他的文件系统。
/lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里
/proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。
/ var 某些大文件的溢出区,比方说各种服务的日志文件
/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包含:  /usr/x11r6 存放x window的目录  /usr/bin 众多的应用程序
/usr/sbin 超级用户的一些管理程序

=====================================================================================

linux的启动过程详解

一 启动概要

1
2
3
4
5
6
7
8
9
10
1 BIOS自检
2 读取MBR的信息(MBR可以是lilo,grub,spfdisk等)
3 加载内核
4 内核执行init程序,并取得run-level信息
5 init执行/etc/rc.d/rc.sysinit
6 执行/etc/rc.d/rc.X.d/[KS]
7 init执行相应的run-level的脚本
8 init执行/etc/rc.d/rc.local脚本
9 执行/bin/login程序,并等待使用者登陆
10 登陆之后开始以shell掌控主机

=====================================================================================

启动顺序图

wKioL1NPWPSRU5ZUAABnzx0sqe0036.jpg

文件加载顺序图

wKioL1NPWdfCjIILAABrla9caeo024.jpg


===================================================================================

二 启动详解

1 BIOS自检

计算机在接通电源之后首先进行BIOS自检,即我们通常所说的POST(Power On Self Test)。自检完成后,然后根据BIOS中设置的引导顺序从硬盘、软盘、光盘引导,通常我们使用硬盘来引导系统。在硬盘的第一个扇区(0磁道0柱面1扇区)有一段代码叫做MBR(即主引导记录),当MBR被加载到内存中后,BIOS将控制权交给MBR。

2 读取MBR的信息(MBR可能是lilo、grub、spfdisk等)

MBR是一段可执行代码,大小为512个字节,该代码的作用是告诉我们的系统如何引导linux,例如“kernel /boot/vmlinuz-2.6.9.-5.EL ro root=LABEL=/”,这是一段grub,vmliunz的是可引导的压缩内核,grub将告诉系统如何加载vmliunz。通常RedHat使用grub来作为MBR。这是因为grub具有命令交互界面,并能过支持网络引导。(注意,最好为你的机器设置BIOS密码和grub密码,这样会提高系统的安全性)

3 加载内核

当内核映像被加载到内存之后,内核阶段就开始了,内核映像并不是一个可执行的内核,而是一个经过压缩的内核映像。通常它是一个zImage(较小的内核,小于512K)或bzImage(较大的内核,大于512K)。之后要对内核进行解压,并放入到高端内存当中。

4 执行init进程,并取得run-level信息

当内核完成引导之后,接下来加载init进程。init进程是系统所有进程的起点,它的进程号为1,init进程是所有进程的发起者和控制者。如果init进程出现了问题,那么系统将不可用。init的进程的作用有两个,一是扮演进程之父,系统中任何进程都作为它的子进程并以它作为参照;二是通过inittab文件管理run-level运行级别。

5 执行/etc/rc.d/rc.sysinit

/etc/rc.d/rc.sysinit是init执行的第一个脚本,它的作用是初始化linux系统,包括初始化变量、配置网络、检查并修复文件系统等操作。为什么第一个执行的是这个脚本呢?因为在/etc/inittab文件中定义了。

6 执行/etc/rc.d/rcX.d/[KS]

init进程根据inittab文件确定了系统的启动级别,事实上,每个级别都有每个级别命令脚本,这些脚本保存在/etc/rc.d这个目录下,在这个目录下,你会发现有诸如rc3.d、rc5.d等这些文件夹,这些文件夹存放着该级别所需要运行的命令脚本。

7 init执行相应的run-level的脚本

rcx.d中的脚本有的是以S开头,有的是以K开头,脚本执行的顺序是从小到大首先终止以K开头的服务,然后启动以S开头的服务。

8 执行rc.lcoal脚本

一般情况下,/etc/rc.d/rc.local是作为初始化脚本的最后一个文件,我们可以在这个文件中添加一些执行的脚本命令,比如说crond服务、httpd服务随机器启动时而启动等。

9 执行/bin/login程序

login程序会提示用户输入用户名和密码,并会检查输入的正确与否,正确将为使用者初始化环境,并将控制权交给shell。

=====================================================================================

三、总结


系统初始化的大致内容总结如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
硬件的初始化,图像界面启动的初始化(如果设置了默认启动基本)
主机RAID的设置初始化,device mapper 及相关的初始化,
检测根文件系统,以只读方式挂载
激活udev和selinux
设置内核参数 /etc/sysctl.conf
设置系统时钟
启用交换分区,设置主机名
加载键盘映射
激活RAID和LVM逻辑卷
挂载额外的文件系统 /etc/fstab
最后根据mingetty程序调用login让用户登录->用户登录(完成系统启动)
在系统启动过程中主要的脚本和目录有:
boot
/grub
/boot/grub/grub.conf
/boot/initrd+内核版本
/initrd文件中的/proc/  /sys/    /dev/ 目录的挂载 及根的切换
/etc/inittab  脚本
/etc/rc.d/rc.sysinit  脚本 等

=============================================================================

wKiom1NPXXjBJrIRAABzmt4veuU094.jpg