zoukankan      html  css  js  c++  java
  • linux 启动流程

    linux启动过程有5个阶段

    1)内核的引导。

    2)运行 init。

    3)系统初始化。

    4)建立终端 。

    5)用户登录系统

    1.内核的引导

    操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。

    2.启动初始化进程

    内核文件加载以后,就开始运行第一个程序 /sbin/init,它的作用是初始化系统环境。由于init是第一个运行的程序,它的进程编号(pid)就是1。其他所有进程都从它衍生,都是它的子进程。

    3.确定运行级别

    init进程的一大任务,就是去运行这些开机启动的程序。但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。Linux允许为不同的场合,分配不同的开机启动程序,这就叫做“运行级别”(runlevel)。也就是说,启动时根据"运行级别",确定要运行哪些程序。

    Linux预置七种运行级别(0-6)。一般来说,0是关机,1是单用户模式(也就是维护模式),6是重启。运行级别2-5,各个发行版不太一样,

    init进程首先读取文件 /etc/inittab,它是运行级别的设置文件。在其文件里有一个initdefault,它就代表系统启动时的运行级别。我的3就是默认的运行级别。如果需要指定其他级别,可以手动修改这个值。

    这时系统通过/etc/rc.d下的子目录指定要加载的程序

    上面目录名中的"rc",表示run command(运行程序),最后的d表示directory(目录)。下面让我们看看 /etc/rc.d/rc3.d 目录中到底指定了哪些程序。

    可以看到文件名都是"字母S+两位数字+程序名"的形式。字母S表示Start,也就是启动的意思(启动脚本的运行参数为start),如果这个位置是字母K,就代表Kill(关闭),即如果从其他运行级别切换过来,需要关闭的程序(启动脚本的运行参数为stop)。后面的两位数字表示处理顺序,数字越小越早处理,所以第一个启动的程序是motd,然后是rpcbing、nfs......数字相同时,则按照程序名的字母顺序启动,所以rsyslog会先于sudo启动。

    这个目录里的所有文件是启动时要加载的程序。如果想增加或删除某些程序,不建议手动修改 /etc/rc.d/rcN.d 目录,最好是用一些专门命令进行管理。

    4.加载开机启动程序

    前面提到,七种预设的"运行级别"各自有一个目录,存放需要开机启动的程序。不难想到,如果多个"运行级别"需要启动同一个程序,那么这个程序的启动脚本,就会在每一个目录里都有一个拷贝。这样会造成管理上的困扰:如果要修改启动脚本,岂不是每个目录都要改一遍。

    Linux的解决办法,就是七个 /etc/rc.d/rcN.d 目录里列出的程序,都设为链接文件,指向另外一个目录 /etc/init.d ,真正的启动脚本都统一放在这个目录中。init进程逐一加载开机启动程序,其实就是运行这个目录里的启动脚本。

    这样做的另一个好处,就是如果你要手动关闭或重启某个进程,直接到目录 /etc/init.d 中寻找启动脚本即可。

    5.用户登录

    一般来说,用户的登录方式有三种:(1)命令行登录(2)ssh登录(3)图形界面登录

    这三种情况,都有自己的方式对用户进行认证。

    (1)命令行登录:init进程调用getty程序(意为get teletype),让用户输入用户名和密码。输入完成后,再调用login程序,核对密码(Debian还会再多运行一个身份核对程序/etc/pam.d/login)。如果密码正确,就从文件 /etc/passwd 读取该用户指定的shell,然后启动这个shell。

    (2)ssh登录:这时系统调用sshd程序(Debian还会再运行/etc/pam.d/ssh ),取代getty和login,然后启动shell。

    (3)图形界面登录:init进程调用显示管理器,Gnome图形界面对应的显示管理器为gdm(GNOME Display Manager),然后用户输入用户名和密码。如果密码正确,就读取/etc/gdm3/Xsession,启动用户的会话。

    图形模式与文字模式的切换方式:

    Linux预设提供了六个命令窗口终端机让我们来登录。

    默认我们登录的就是第一个窗口,也就是tty1,这个六个窗口分别为tty1,tty2 … tty6,你可以按下Ctrl + Alt + F1 ~ F6 来切换它们。

    如果你安装了图形界面,默认情况下是进入图形界面的,此时你就可以按Ctrl + Alt + F1 ~ F6来进入其中一个命令窗口界面。

    当你进入命令窗口界面后再返回图形界面只要按下Ctrl + Alt + F7 就回来了。

    如果你用的vmware 虚拟机,命令窗口切换的快捷键为 Alt + Space + F1~F6. 如果你在图形界面下请按Alt + Shift + Ctrl + F1~F6 切换至命令窗口。

    参考:http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html

  • 相关阅读:
    WPF之感触
    C# WinForm 给DataTable中指定位置添加列
    MyEclipse 8.6 download 官方下载地址
    将博客搬至CSDN
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
  • 原文地址:https://www.cnblogs.com/ninicwang/p/9081505.html
Copyright © 2011-2022 走看看