Linux系统启动过程
- 内核的引导
- 运行init
- 系统初始化
- 建立终端
- 用户登录系统
内核的引导
计算机接通电源,BIOS开机自检,启动操作系统,操作系统接管硬件后,首先读入/boot
目录下的内核文件
运行init
init进程是所有进程的起点,没有它任何进程都不会启动。init程序首先需要读取配置文件/etc/inittab
运行级别
Linux允许为不同的场合,分配不同的开机启动程序,即“运行级别”(runlevel)。启动时根据运行级别,确定要运行哪些程序
Linux共7种运行级别:
- 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
- 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
- 运行级别2:多用户状态(没有NFS)
- 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
- 运行级别4:系统未使用,保留
- 运行级别5:X11控制台,登陆后进入图形GUI模式
- 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
系统初始化
init配置文件中有一行:si::sysinit:/etc/rc.d/rc.sysinit
,它调用执行了/etc/rc.d/rc.sysinit
,而rc.sysinit
是一个bash shell的脚本,主要完成一些系统初始化的工作,rc.sysinit
是每个运行级别都要首先运行的重要脚本。
主要完成的工作:激活交换分区,检查磁盘,加载硬件模块及其他一些需要优先执行的任务
另外一行:15:5:wait:/etc/rc.d/rc 5
,表示以5为参数运行/etc/rc.d/rc
,/etc/rc.d/rc
是一个Shell脚本,接受5作为参数,执行/etc/rc.d/rc5.d/
目录下所有rc启动脚本,/etc/rc.d/rc5.d/
目录中的这些启动脚本实际上都是一些连接文件,而不是真正的rc启动脚本,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/
目录下。而这些rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、status等参数。/etc/rc.d/rc5.d/
中的rc启动脚本通常是K或S开头的连接文件,对于以 S 开头的启动脚本,将以start参数来运行。
而如果发现存在相应的脚本也存在K打头的连接,而且已经处于运行态了(以/var/lock/subsys/下的文件作为标志),则将首先以stop为参数停止这些已经启动了的守护进程,然后再重新运行。
这样做是为了保证是当init改变运行级别时,所有相关的守护进程都将重启。
至于在每个运行级中将运行哪些守护进程,用户可以通过chkconfig或setup中的"System Services"来自行设定。
建立终端
rc执行完毕,返回init。此时基本系统环境已设置好,各种守护进程已启动。
init接下来会打开6个终端,以便用户登录系统,即inittab中以下6行就是定义了6个终端:
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
2、3、4、5的运行级别中都将以respawn方式运行mingetty程序,mingetty程序能打开终端、设置模式,同时显示文本登陆界面
用户登录系统
常用三种登陆方式:
- 命令行登陆
- ssh登陆
- 图形界面登陆
命令行登陆
Linux的账号验证程序是login,login会接手mingetty传来的用户名作为用户名参数, 之后login对用户名进行分析:如果用户名不是 root,且存在/etc/nologin
文件,login 将输出 nologin 文件的内容,然后退出。
这通常用来系统维护时防止非root用户登录。只有/etc/securetty
中登记了的终端才允许 root 用户登录,如果不存在这个文件,则 root 用户可以在任何终端上登录。
/etc/usertty
文件用于对用户作出附加访问限制,如果不存在这个文件,则没有其他限制。
流程图
Linux系统目录结构
Linux中,所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构
/bin
bin是Binary的缩写,该目录存放最常使用的命令
/boot
存放启动Linux时使用的一些核心文件,包括链接文件及镜像文件
/dev
dev是Device的缩写,该目录存放Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的
/etc
存放所有的系统管理所需要的配置文件和子目录
/home
用户的主目录,Linux中,每个用户有一个自己的目录,一般该目录以用户的账号命名
/lib
存放系统最基本的动态连接共享库,作用类似Windows中的DLL文件,几乎所有应用程序都需要用到这些共享库
/lost+found
一般为空,当系统非法关机后,会存放一些文件
/media
Linux系统自动识别一些设备,如U盘、光驱等,识别的设备挂载到这个目录下
/mnt
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
/opt
给主机安装额外软件所摆放的目录,默认为空
/proc
这是一个虚拟目录,是系统内存的映射,可以通过直接访问该目录来获取系统信息。 该目录的内容不再硬盘而是在内存里,可以直接修改里面的某些文件
/root
该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin
s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
/selinux
Redhat/CentOS
特有目录,Selinux类似于Windows中防火墙。该目录即存放selinux相关文件
/srv
存放一些服务启动后需要提取的数据
/sys
这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。 该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
/tmp
存放临时文件
/usr
用户的很多应用程序和文件都放在该目录下,类似Windows中的program files目录
/usr/bin
系统用户使用的应用程序
/usr/sbin
超级用户使用的比较高级的管理程序和系统守护程序。
/usr/src
内核源代码默认的放置位置
/var
存放不断扩充的文件,习惯将经常被修改的目录放在这个目录下。包括各种日志文件
/run
临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
Linux系统中有几个目录比较重要,不能误删或随意更改
- /etc
- /bin, /sbin, /usr/bin, /usr/sbin 此外,/bin, /usr/bin是给系统用户使用的指令(除root外的),而/sbin, /usr/sbin是给root使用的指令
- /var
Linux中有两个特殊的目录,一个当前目录,可使用一个点.
表示;另一个是当前目录的上一级目录,可使用两个点..
表示
若一个目录或文件名以一个点.开始,表示这个目录或文件是一个隐藏目录或文件。即以默认方式查找时,不显示该目录或文件