系统启动流程

  • BIOS
  • MBR: Boot Code
  • 执行引导程序 - GRUB
  • 加载内核
  • 执行init
  • runlevel

BIOS

  • Basic Input Output System,一般保存在主板的BIOS芯片中
  • 计算机启动时首先运行BIOS,负责检查硬件并且查找可启动设备
  • 可启动设备在BIOS设置中进行定义,如USB, CDROM, HD

MBR

不同的系统有不同的MBR

  • BIOS找到可启动设备后执行其引导代码
  • 引导代码为MBR的前446字节

GRUB

MBR一般会作为跳转,启动一个更复杂的引导程序,比如GRUB

  • Grub是现在Linux使用的主流引导程序
  • 可以用来引导现在几乎所有的操作系统,pe也是grub引导的
  • Grub的相关文件保存在/boot/grub目录中

    stage1(MBR) -> xxx_stage1_5(file system driver) -> stage2
  • Grub配置文件为/boot/grub/grub.conf
  • 配置格式:
default=0 # 第一个引导程序
timeout=5 # 停留时间
splashimage=(hd0,1)/boot/grub/splash.xpm.gz # 引导界面背景
hiddenmenu # 默认隐藏菜单
title CentOS # 操作系统名称
root (hd0,1) # 操作系统所在分区,第一块硬盘第二个分区
# 内核以及传递给内核的参数(ro root=...),用空格分开
kernel /boot/vmlinuz-2.6.32-431.el6.x86_64 ro root=...
# initial ram file system,内核模块打包文件
initrd /boot/initramfs-2.6.32-431.el6.x86_64.img

KERNEL

  • MBR的引导代码将负责找到并加载Linux内核
  • Linux内核保存在/boot/vmlinuz-2.6.32-431.el6.x86_64
  • 一般还会加载内核模块打包文件/boot/initramfs-2.6.32-431.el6.x86_64.img
  • Linux为保持kernel的精简将一些不常用的驱动、功能编译成为模块,在需要的时候动态加载,而这些模块被打包保存为一个initramfs文件
  • 早期版本Linux使用initrd文件,initramfs是initrd的替代优化版本,比initrd更加节省空间、更加灵活
  • 命令dmesg或者/var/log/dmesg文件可以查看本次启动时内核的输出信息

INIT

  • init(/sbin/init)是Linux系统中运行的第一个进程,所有进程的父进程。
  • 调用/etc/rc.d/rc.sysinit负责对系统进行初始化,挂载文件系统,并且根据运行级别启动相应服务
  • Linux运行级别(runlevel):
    • - 0 关机
    • - 1 单用户模式
    • - 2 不带网络的多用户模式
    • - 3 多用户模式
    • - 4 未使用
    • - 5 X11图形化模式
    • - 6 重启
  • 可以通过/etc/inittab配置文件修改默认的运行级别
  • etc/init/下的文件是其他配置信息
  • 每个级别对应的启动服务保存在/etc/rc.d/rc[0-6].d/
  • runlevel可显示当前及上一个运行级别
  • init可用以改变当前运行级别

单用户修改root密码

  • 为内核传递参数1single可进入单用户模式
  • 单用户模式下不启动任何服务
  • 单用户模式直接以root用户登录,并且需要密码
  • 可以使用passwd修改root密码

GRUB加密

  • 通过在grub.conf中的启动配置中加入如下参数即可

    password --md5 $1$aoWpTe$/MWUUYbBIF.2RUZK8nbWU0
  • 加密后的密码可以通过grub-md5-crypt生成

另外,可以参考阮一峰的博客:

  1. 计算机是如何启动的
  2. Linux的启动流程

Linux入门-8 Linux系统启动详解的更多相关文章

  1. Linux学习笔记17--Linux系统启动详解

    多数操作系统的启动流程: BIOS启动自检 ->MBR引导->执行引导程序GRUB->加载内核->执行init->runlevel   BIOS(Basic Input ...

  2. linux入门--类UNIX系统详解

    有人说,这个世界上只有两种操作系统: UNIX 和类 UNIX 操作系统: 其它操作系统. 类 UNIX 系统(英文 Unix-like)既包括各种传统的 UNIX 系统,比如 FreeBSD.Ope ...

  3. Linux下的文件目录结构详解

    Linux下的文件目录结构详解 / Linux文件系统的上层根目录 /bin 存放用户可执行的程序 /boot 操作系统启动时所需要的文件 /dev 接口设备文件目录,例如:had表示硬盘 /etc ...

  4. Linux文件系统的目录结构详解

    Linux文件系统的目录结构详解   一.前 言 文章对Linux下所有目录一一说明,对比较重要的目录加以重点解说,以帮助初学者熟练掌握Linux的目录结构. 二.目 录 1.什么是文件系统 2.文件 ...

  5. Linux驱动开发必看详解神秘内核(完全转载)

    Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html   IT168 技术文档]在开始步入L ...

  6. Linux中mpstat命令参数详解

    Linux中mpstat命令参数详解 mpstat 是 Multiprocessor Statistics的缩写,是实时系统监控工具.其报告与CPU的一些统计信息,这些信息存放在 /proc/stat ...

  7. Linux 三剑客之 awk 实战详解教程

    我们知道 Linux 三剑客,它们分别是:grep.sed.awk.在前边已经讲过 grep 和 sed,没看过的同学可以直接点击阅读,今天要分享的是更为强大的 awk. sed 可以实现非交互式的字 ...

  8. Linux上的free命令详解、swap机制

    Linux上的free命令详解   解释一下Linux上free命令的输出. 下面是free的运行结果,一共有4行.为了方便说明,我加上了列号.这样可以把free的输出看成一个二维数组FO(Free ...

  9. linux PHP 编译安装参数详解

    linux PHP 编译安装参数详解 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -- ...

  10. Linux Shell数组常用操作详解

    Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...

随机推荐

  1. CentOS 7 下 MySql5.7 主从配置

    演示用两台全新MySql服务器: mysql1:10.10.1.55 (主) mysql2:10.10.1.56 (从) 配置主从,步骤如下:   STEP 1:在mysql1上创建复制账号 repl ...

  2. java线程状态 以及 sheep()、wait()、yield() 区别

    前言 最近看到很多人都在讨论多线程的问题,于是写出了这篇博客,希望可以帮到正在学习和使用这块的朋友们,首先我们先看看两个图(两个图都来自其他码农的分享)   这两个图是一样的逻辑,这里一起罗列出来,下 ...

  3. 剑指offer(41-45)编程题

    41.入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. class Solution { public: vector&l ...

  4. 10种jquery选择器操作详解(转)

    jquery选择器大体上可分为4 类: 1.基本选择器2.层次选择器3.过滤选择器4.表单选择器 其中过滤选择器可以分为:1.简单过滤选择器2.内容过滤选择器3.可见性过滤选择器4.属性过滤选择器5. ...

  5. P2P 行业解决方案

    P2P指个人与个人之间的借贷,而P2P理财是指以公司为中介机构,把这借贷双方对接起来实现各自的借贷需求.借款方可以是无抵押贷款或是有抵押贷款.而中介一般是收取双方或单方的手续费为盈利目的或者是赚取一定 ...

  6. cordova程序加载pdf文件的2种方法(ios/android)

    前言 公司目前的前端架构是微信端由vue全家桶负责h5网站的单页应用,android端和ios端则选择cordova打包成apk和app.其中,有一个业务逻辑是点击某个链接进入pdf的展示,h5的方案 ...

  7. SQL Serever学习10——T-SQL语句

    在sqlserver2018中使用的是Transact-SQL语言,简称T-SQL. 数据库的创建和管理 数据定义语言DDL DDL功能包括数据库,表,索引,视图,存储过程 数据库:CREATE DA ...

  8. SQL Serever学习7——数据表2

    修改数据表的属性 保存数据表的修改的时候,总会弹出阻止修改的警告. 解决方法2种: 1.可以使用T-sql语句强行修改 2.工具>选项>设计器>表设计器和数据库设计器>阻止保存 ...

  9. C#中使用Log4Net记录日志

    https://www.cnblogs.com/W--Jing/p/8125652.html 实例参考 https://www.cnblogs.com/soundcode/p/4866078.html ...

  10. [javaSE] 多线程(守护线程)

    我们一般使用多线程,都是while的死循环,想要结束线程,只需退出死循环即可 当线程中调用了sleep()方法或者wait()方法,当前的线程就会进入冻结状态,这个线程就结束不了 调用Thread对象 ...