`

ubuntu 的启动过程

阅读更多

一. Ubuntu的启动流程

  ubuntu的启动流程和我们熟知的RedHat的启动方式有所区别。

  RedHat的启动过程如下图:

  这是我们熟知的linux启动流程,但是ubuntu的启动流程和这个有些区别,我在ubuntu的/etc/目录下面找不到inittab这个文件,一开始很纳闷ubuntu是怎么启动的?一查资料发现ubuntu并没有采用init的方法,所以在/etc/目录下面找不到inittab,这主要是因为init采用串行的方式,引导很费时,RedHat9启动时串行执行大量脚本以及启动各种需要的服务,因此从ubuntu6.10开始逐步采用upstart来代替init,进行服务进程的管理。为了对原有的init实现向后兼容,upSTART可以说是在表象上保留了大部分原来init的特性,因此目前ubuntu初始化进程名仍然叫init,而改变的核心,则是Event机制。

  Event机制就是将进程的触发、停止都看成是Event。Ubuntu的/etc/下有一个event.d,这个目录是upstart的核心。/etc/event.d/下面存放了目前upstart需要识别的各种event。这其中主要有三种:rc-default,rcX(X = 0,1,2,3,4,5,6,S),ttyX(X = 0,1,2,3,4,5,6,S)。

  其中rc-default就类似与inittab文件,用来设置默认运行级别的。cat rc-default,我们可以看到:

  # rc - runlevel compatibility

  #

  # This task guesses what the "default runlevel" should be and starts the

  # appropriate script.

  start on stopped rcS

  script

  runlevel --reboot || true

  if grep -q -w -- "-s\|single\|S" /proc/cmdline; then

  telinit S

  elif [ -r /etc/inittab ]; then

  RL="$(sed -n -e "/^id:[0-9]*:initdefault:/{s/^id://;s/:.*//;p}" /etc/inittab || true)"

  if [ -n "$RL" ]; then

  telinit $RL

  else

  telinit 2

  fi

  else

  telinit 2

  fi

  end script

  默认的运行级别是2。

  rcX是发生相应运行级别事件时需要运行程序的脚本,我们再cat一下rc2:

  # rc2 - runlevel 2 compatibility

  #

  # This task runs the old sysv-rc runlevel 2 ("multi-user") scripts. It

  # is usually started by the telinit compatibility wrapper.

  start on runlevel 2

  stop on runlevel [!2]

  console output

  script

  set $(runlevel --set 2 || true)

  if [ "$1" != "unknown" ]; then

  PREVLEVEL=$1

  RUNLEVEL=$2

  export PREVLEVEL RUNLEVEL

  fi

  exec /etc/init.d/rc 2

  end script

  不去考虑细节,只要注意到前两行和倒数第二行就可以了。可以看到,rc2文件是定义在发生运行级别2的时候所要执行的东西,核心就是这句:exec /etc/init.d/rc 2。这样,我们就可以自然地过渡到下一个重要的目录,/etc/init.d/了。

  /etc/init.d/中存放的都是服务或者任务的执行脚本。可以这么说,只要你安装了一个程序(特别是服务程序daemon),它可以在系统启动的时候运行,那么它必定会在/etc/init.d/中有一个脚本文件。回到上面的rc2,它执行了exec /etc/init.d/rc 2,也就是给/etc/init.d/rc传递了一个参数”2”,让它执行。Rc脚本里面有这样一段:

  # Now run the START scripts for this runlevel.

  # Run all scripts with the same level in parallel

  .......

  for s in /etc/rc$runlevel.d/S*

  .......

  这说明,当给rc脚本传递一个数字参数"X"的时候,它在经过一系列的设置后,将会开始执行/etc/rcX.d/下S开头的脚本。这就过渡到下一个目录/etc/rcX.d/了。

  ls一下/etc/rcX.d/,发现里面全是一堆到/etc/init.d/中的脚本符号链接,不同的是它们的开头加上了S和一个数字。熟悉原本init的人应该知道,S表示在启动时运行,数字则表示执行的先后顺序。其中有一个链接叫做S30gdm,gdm的意思是gnome display management,也就是用来启动gnome桌面的。

  综上所述,upstart管理的ubuntu启动过程如下图所示:

  二. x-window启动过程解析

  从控制台进入X一般用startx命令,故启动X应该从startx这个脚本开始分析。以下是startx脚本的一部分:

  #!/bin/sh

  userclientrc=$HOME/.xinitrc #用户的client定义文件

  userserverrc=$HOME/.xserverrc #用户的server定义文件

  sysclientrc=/usr/X11R6/lib/X11/xinit/xinitrc #系统的client

  sysserverrc=/usr/X11R6/lib/X11/xinit/xserverrc #系统的server

  defaultclient=/usr/X11R6/bin/xterm #默认的client程序

  defaultserver=/usr/X11R6/bin/X #默认的server程序

  defaultclientargs="" #下面定义了client和server的参数变量

  defaultserverargs=""

  clientargs=""

  serverargs=""

  ……

  可以看到,startx主要是置X client和X server所在的位置,并处理相关参数,最后交给xinit处理。可以看出startx 设置X client的位置是先搜寻$HOME/.xinitrc,然后是/etc/X11/xinit/xinitrc;设置X server的位置是先搜寻$HOME/.xserverrc,然后是/etc/X11/xinit/xserverrc。在ubuntu8.10的$HOME下面没有.xinitrc和.xerverrc,所以startx直接去/etc/下面找x-client和x-server,完成启动x的工作。

  总结一下x-window的启动流程图:


分享到:
评论

相关推荐

    ubuntu启动到字符界面的配置

    Ubuntu启动到字符界面的配置 Ubuntu 默认情况下会启动到图形用户界面,而不是字符界面。要让 Ubuntu 启动时直接进入字符界面,需要进行一些配置。下面将详细介绍如何配置 Ubuntu 启动到字符界面。 首先,需要了解 ...

    Ubuntu启动盘制作工具

    描述中提到的“安装Ubuntu启动盘的制作很重要”,强调了制作可引导的Ubuntu启动盘对于Ubuntu的安装过程至关重要。特别是“这款软件专业制作UEFI启动模式的ISO”,意味着该工具不仅能够创建传统的BIOS启动模式的启动...

    grub修改ubuntu启动项

    **Grub修改Ubuntu启动项详解** 在早期的Ubuntu版本中,Grub(GRand Unified Bootloader)作为系统启动引导程序,用户可以通过简单的编辑 `/boot/grub/menu.lst` 文件来定制启动选项。然而,随着Grub的升级到Grub 2...

    修改ubuntu启动顺序

    ### 修改Ubuntu启动顺序详解 #### 一、背景介绍 在多系统共存的情况下,Ubuntu用户可能会遇到需要调整启动顺序的情况。比如,默认启动的是Ubuntu而非Windows或其他操作系统。本文将详细介绍如何在不同版本的Ubuntu...

    最简洁方便制作ubuntu启动盘的方法

    为了使安装过程更加顺畅高效,本文将详细介绍如何使用简单便捷的方式制作 Ubuntu 启动盘,特别是针对 UEFI 模式的启动盘制作流程。 #### 1. 制作 UEFI 启动模式的启动盘 ##### 制作前的准备工作: - **硬件需求**...

    从硬盘启动引导ISO映像物理安装Ubuntu的全过程

    ### 从硬盘启动引导ISO映像物理安装Ubuntu的全过程 #### 重要知识点解析: ##### 1. 安装背景与目的 - **安装背景**:本文介绍了一个典型的上网本安装Ubuntu Linux的操作流程。该上网本配置如下:硬盘分为C、D两个...

    windows和Ubuntu启动引导工具

    标题中的“Windows和Ubuntu启动引导工具”主要涉及的是在多操作系统环境下如何管理和配置电脑的启动过程,特别是如何在安装了Windows和Ubuntu双系统后正确设置引导加载器。启动引导工具通常用于解决启动项问题,例如...

    制作ubuntu U盘启动

    ### 制作Ubuntu U盘启动盘详解 #### 一、前言 随着Linux系统的普及,越来越多的人开始尝试安装和使用Linux作为日常操作系统。其中,Ubuntu因其友好的用户界面和丰富的社区支持而备受青睐。为了方便地安装Ubuntu...

    美化Ubuntu桌面

    USPLASH是Ubuntu启动过程中显示的启动画面,通常包含进度条等元素。 1. **设置USPLASH主题** - 在Startup Manager的“外观”选项卡中,选择“Usplash主题”。 - 下载合适的USPLASH主题文件(.so格式),添加至...

    ubuntu U盘启动制作工具.rar

    使用Rufus创建Ubuntu启动盘的步骤大致如下: 1. **下载Rufus**:从官方网站或者在这个压缩包中找到rufus-3.5.exe并运行。 2. **连接U盘**:将空白的USB驱动器插入电脑的USB接口。 3. **选择设备**:在Rufus程序中,...

    Win10与Ubuntu双系统开机不能进入Ubuntu的问题

    1. 获取Ubuntu启动盘:你可以使用Ubuntu官方提供的工具制作启动盘,或者在Windows环境下使用工具刻录启动U盘。 2. 使用U盘启动计算机:将计算机启动顺序设置为从U盘启动,并选择“试用Ubuntu”选项。 3. 更新系统...

    Ubuntu U盘启动盘工具

    **Ubuntu U盘启动盘工具详解** 在Linux世界中,Ubuntu是一个非常流行的开源操作系统,它以其用户友好、功能强大和自由开放的理念吸引了众多爱好者。当需要在计算机上安装Ubuntu或者进行系统恢复时,一个U盘启动盘是...

    安装win7,Vista,XP后Ubuntu启动项恢复

    恢复Ubuntu启动项的方法有多种: 1. **使用Ubuntu安装盘修复GRUB2**:如果你有Ubuntu的安装盘或USB启动器,可以在BIOS中设置从安装介质启动,然后进入“试用Ubuntu”模式。在终端中运行以下命令: - `sudo mount /...

    rufus-3.9/3.10制作 ubuntu启动盘专用 syslinux-6.03

    当`Rufus`在制作Ubuntu启动盘时,如果自动下载这些组件失败,用户可能需要手动提供`syslinux-6.03`的文件来确保过程顺利完成。 **4. 制作流程** 1. 首先,确保你有一个可用的Ubuntu ISO镜像文件。 2. 下载`Rufus`...

    Ubuntu从硬盘启动安装LiveCD

    ### Ubuntu从硬盘启动安装LiveCD #### 知识点概览 - **Ubuntu LiveCD介绍** - **硬盘启动ISO文件的必要性** - **硬盘引导ISO文件安装步骤** - 准备工作 - 配置启动菜单 - 安装所需的工具与文件 - 安装过程中的...

    恢复ubuntu启动 grub安装出错, 导致windows7无法启动

    标题 "恢复Ubuntu启动 Grub安装出错,导致Windows7无法启动" 描述的是一个常见的操作系统双启动问题。在Ubuntu和Windows7共存的系统中,如果Grub(Grand Unified Bootloader)安装过程中出现错误,可能会破坏Windows...

    启动Ubuntu时进入BusyBox界面的处理方法

    在安装了新的Ubuntu系统后,部分用户可能会遇到一个较为特殊的情况:在系统启动过程中未能正常进入Ubuntu图形界面,而是直接进入了BusyBox命令行界面。这种情况通常表明系统在启动过程中遇到了一些问题,可能是硬件...

    ubuntu linux USB启动盘烧录工具.rar

    7. **启动计算机**:将制作好的USB驱动器插入目标电脑,修改BIOS设置,将启动顺序设为从USB设备启动,然后重启电脑,即可开始Ubuntu的安装过程。 8. **安装Ubuntu**:按照屏幕提示,逐步进行Ubuntu的安装,选择合适...

Global site tag (gtag.js) - Google Analytics