linux启动流程

  1. BIOS自检
  2. 启动GRUB 2
  3. 加载内核
  4. 执行systemd进程
  5. 初始化系统环境
  6. 执行/bin/login程序
(一)BIOS自检
  1. 加电POST自检(对硬件进行检测)
  2. 进行本地设备的枚举和初始化。

BIOS由两部分组成:POST代码和运行时的服务。当POST完成之后,它被从内存中清理出来,但是BIOS运行时服务依然保留在内存中,目标操作系统可以使用这些服务。

linux系统通常都是从硬盘上引导的,其中主引导记录(MBR)中包含主引导加载程序。MBR是一个512字节大小的扇区,位于磁盘上的第一个扇区中(0道0柱面1扇区)。当MBR被加载道RAM中之后,BIOS就会将控制权交给MBR.

(二)启动GRUB 2

它是linux系统中默认使用的引导加载程序,用于引导操作系统启动。当计算机引导操作系统时,BIOS会读取引导介质上最前面的512字节(主引导记录)

(三)加载内核

加载内核映像到内存中,内核映像并不是一个可执行的内核,而是一个压缩过的内核映像。在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包括的内核进行解压,任何将其放入高端内存中。如果有初始RAM磁盘映像,系统就会将他移动到内存中,并标明以后使用。然后该例程会调用内核,并开始启动内核引导的过程。

(四)执行systemd进程

该进程是linux系统所有进程的起点,在完成内核引导以后,即在本进程空间内加载systemd程序。systemd进程是所有进程的发起者和控制者。因为在任何linux系统中,它都是第一个运行的进程,所有systemd进程的进程号PID永远是1

(五)初始化系统环境

linux系统使用systemd作为引导管理程序,之后的引导过程将由systemd完成。system使用目标(target)来处理引导和服务管理过程。这些systemd里的目标文件被用于分组不同的引导单元以及启动同步进程。

  1. systemd执行的第一个目标是default.target,但实际上default.target目标是指向graphical.target目标的软链接。graphical.targe目标单元文件的实际位置是/user/lib/systemd/system/graphical.target.
  2. 在执行graphical.target目标阶段,会启动multi-user.target目标,而这个目标将字节的字单元存放在/etc/systemd/system/multi-user.target.wants目录中。非root用户和防火墙相关服务绘制这个阶段启动。
  3. multi-user.target目标会将控制权交给basic.target目标。basic.target目标用于启动普通服务特别是图像管理服务。它通过/etc/systemd/system/basic.target.wants目录来决定那些服务会被启动,basic.target目标之后将控制权交给sysinit.target目标。
  4. sysinit.target目标会启动主要的系统服务,比如系统挂载、内存交换空间和设备、内核补充选项等。sysinit.target目标在启动过程中会传递给local-fs.target和swap.target目标。
  5. locat-fs.target和swap.target不会启动用户的相关服务,它只处理底层核心服务。这两个目标会根据/etc/fstab和/etc/inittab文件执行相关操作。
(六)执行/bin/login程序

login会接收mingetty传来的用户名并将其作为用户名参数,然后login会对用户名进行分析。如果用户名不是root,且存在/etc/nologin文件,login将输出nologin文件的内容,然后退出。这通常用来在系统维护时防止非root用户登录。只有在/etc/securetty中登记的终端才允许root用户登录,如果不存在这个文件,则root可以在任何终端上登录。/etc/usertty文件用户对用户做出附加访问限制,如果不存在这个文件,则没有其他限制。

在分析完用户名后,login将搜索/etc/passwd以及/etc/shadow来验证密码以及设置账户的其他信息,比如主目录是什么?使用何种shell?如果没有指定主目标,则将主目录默认设置为根目录;如果没有指定shell,则将shell类型默认设置为/bin/bash.

login程序成功后,会向对应的终端在输出最近一次登录的信息(在/var/log/lastlog文件中有记录),并检查用户是否有新邮件(在/var/spool/mail/的对应用户名目录里下),然后开始设置各种环境变量。对应bash来说,系统首先寻找/etc/profile脚本并执行它;然后,如果用户的主目录中存在.bash_profile文件,就执行它,在这些文件中又可能调用了其他配置文件,所有的配置文件执行后,各种环境变量也设好了,这时会出现大家熟悉的命令提示符,到此整个启动过程就结束了。

摘自:《Linux实用教程》人民邮电出版社出版发行 於岳编著

linux日常维护(二)的更多相关文章

  1. LINUX日常操作二

    参见:Linux日常操作一  selinux 开启和关闭 一.查看SELinux状态:1./usr/sbin/sestatus -v      ##如果SELinux status参数为enabled ...

  2. 10 程序员必备:Linux日常维护命令

    一.服务器硬件配置 1.查看硬盘及分区情况 # fdisk -l 2.查看分区空间使用情况 可以查看各分区大小.已使用.可用.已使用百分比.挂载情况 1)默认单位为K # df 2)可读性更好的显示, ...

  3. Linux日常维护命令

    对于程序员来说,掌握一些基本的Linux命令是必不可少的,即使现在用不到,在不久的将来也应该会用到.由于Linux有很多命令,每个命令基本可以用一篇文章介绍,所以本文仅总结一些常用命令的常用用法,如有 ...

  4. Linux 日常维护命令

    1   防火墙配置 1)重启后生效  开启: chkconfig iptables on  关闭: chkconfig iptables off 或者 /sbin/chkconfig --level  ...

  5. ORACLE分区表梳理系列(二)- 分区表日常维护及注意事项(红字需要留意)

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  6. MS SQL 日常维护管理常用脚本(二)

    监控数据库运行 下面是整理.收集监控数据库运行的一些常用脚本,也是MS SQL 日常维护管理常用脚本(一)的续集,欢迎大家补充.提意见. 查看数据库登录名信息   Code Snippet SELEC ...

  7. 【CentOS】Linux日常管理

    /////////////////////////目录///////////////////////////////////////// 一.日常监控指标相关 1.监控系统状态命令 2.查看系统进程 ...

  8. db2日常维护

    一. DB2日常维护操作 1.数据库的启动.停止.激活 db2 list active databases db2 active db 数据库名 db2start --启动 db2stop [forc ...

  9. svn服务配置和日常维护命令

    Subversion独立服务和与apache整合服务. 一 .Svn独立服务安装 操作系统: Redhat Linux AS3  AS 4   ContOS AS 4 安装包获取: 下载[url]ht ...

  10. 程序员必备:Oracle日常维护命令

        上一篇讲了Linux的日常维护命令,这篇讲讲Oracle的日常维护命令.工作中需要使用Oracle数据库的童鞋们,相信或多或少都需要对Oracle做一些基本的维护操作,例如导入导出总该有吧?( ...

随机推荐

  1. 快速上手kettle(四)壶中可以倒出些啥?

    目录 前言 一 .kettle 这壶里能倒出啥? 二 .Access输出 2.1 Access输出设置 2.2 启动转换,查看输出 三 .Excel输出 3.1 选择excel扩展名 3.2 1 将表 ...

  2. Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.8 提供带注解的限定符元数据

    6.1.1 提供带注解的限定符元数据 在第6.9.4节"使用@Qualifier微调基于注解的自动装配"中讨论了@Qualifier注解.该部分中的示例阐释了,在解析自动装配候选者 ...

  3. @Deprecated注解的使用

    被注解@Deprecated标记的程序元素是不鼓励使用的程序元素,通常是因为它很危险,或者是因为存在更好的替代方案. 除了对象自身引用自己用@Deprecated标记的方法外,其他情况使用@Depre ...

  4. Pinot2的无人机创新和发展

    目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.2 技术原理介绍 2.3 相关技术比较 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.2 核心模块实现 3.3 集成 ...

  5. maven从远程仓库下载依赖包失败(因权限问题导致)

    背景 在学习rocketMq时,编译官方提供的可视化项目:rocketmq-dashboard,频频失败,报以下错误 Could not transfer artifact org.apache.ro ...

  6. PostgreSQL 12 文档: 前言

    前言 目录 1. 何为PostgreSQL? 2. PostgreSQL简史 2.1. 伯克利的POSTGRES项目 2.2. Postgres95 2.3. PostgreSQL 3. 约定 4. ...

  7. 在Linux环境下通过命令行执行JMeter脚本后查看响应结果的配置

    在Linux环境中进行性能测试时,我们可能会遇到一定程度的报错.如果无法打开JMeter的GUI界面,但又需要查看响应结果,可以按照以下步骤进行配置: 1. 打开JMeter的安装目录,在`bin/` ...

  8. Git存储

    Git还提供了一个贮藏的功能.如果你某个分支开发过程中,这个分支的内容是要在本月月底上线的,但是生产上已经出现了一个重大bug,需要你立马去修复.你在分支开发的内容已经开发一部分了,工作区有内容是不能 ...

  9. 如何将训练好的Python模型给JavaScript使用?

    前言 从前面的Tensorflow环境搭建到目标检测模型迁移学习,已经完成了一个简答的扑克牌检测器,不管是从图片还是视频都能从画面中识别出有扑克的目标,并标识出扑克点数.但是,我想在想让他放在浏览器上 ...

  10. sqli笔记

    MySQL数据库自带的数据库information_schema 里面有三个比较重要的表  SCHEMATA .TABLES . COLUMNS  保存数据库所有的数据库名 表名  字段名 SCHEM ...