Linux发行版简介

  • 严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核的操作系统。

  • Linux 的发行版简单说就是将 Linux 内核与应用软件做一个打包。知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux

  • Linux发行版主要有DebianRedhat两大系列

DebianRedhat
发行版代表Debian,Ubuntu,Linux MintRedhat,CentOS,Fedora
软件包管理方式dpkg(管理本地的软件包,无法处理依赖关系)、 apt(联网下载软件包,自动处理依赖关系)rpm(管理本地的软件包,无法处理依赖关系)、 yum(联网下载软件包,自动处理依赖关系)
安装包格式debrpm

学习Linux的必备硬件知识

关键硬件器件——CPU

CPU是计算机的运算核心和控制核心,部分CPU内置核芯显卡

  • x86架构:Intel、AMD、海光、兆芯等芯片
  • ARM架构:飞腾、鲲鹏等

查看CPU的信息

  • lscpu
  • 在这里插入图片描述
  • cat /proc/cpuinfo
  • 在这里插入图片描述

关键硬件器件——存储

类型

  • 固态硬盘(SSD):读写速度快,价格较高
  • 机械硬盘(HDD):读写速度慢,价格便宜,容量大
  • EMMC:多用于低端嵌入式设备,容量较小,云终端的EMMC有4GB、8GB、32GB几种规格

查看存储设备信息的命令

  • fdisk
  • 在这里插入图片描述
  • blkid
  • 在这里插入图片描述
  • smartctl
  • parted
  • lsblk
  • 在这里插入图片描述

关键硬件器件——内存

目前最新是DDR4技术,速率可达3.2GHz

分为板载和插槽两种接口

云桌面的瘦终端采用1-2GB内存,胖终端标配4G或8GB内存,服务器一般是16GB*N的内存

查看内存的命令

  • free
  • cat /proc/meminfo

其他一些查看硬件信息的命令

查看PCI设备信息:lspci
查看USB设备信息: lsusb
查看网卡信息:ifconfigethtoolip

Linux开机过程(以Ubuntu16.04为例)

  • 命令行中输入systemd-analyze plot > boot.svg,用浏览器查看boot.svg
  • 在这里插入图片描述
  • 从上图可看出开机过程包含了BIOS(firmware)、boot loaderkernelsystemd这4个阶段,再加上启动应用软件,共5个阶段
  • 在这里插入图片描述
  • 虚拟中运行的Ubuntu则没有BIOS(firmware)和boot loader这两个阶段。

阶段1:BIOS

BIOS是(Basic Input Output System),是一组固化到计算机内主板上一个ROM芯片上的程序。它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。X86架构才有BIOS,ARM架构没有BIOS

DMI

  • DMI (Desktop Management Interface)是帮助收集电脑系统信息的管理系统。通过DMI可以在Linux中查询到包括CPU、内存、I/O扩展槽等在内的系统配置信息。DMI通常将上述信息存储在BIOS中一个4KB大小的DMI数据区中

  • 云终端的产品ID、产品型号、硬件版本、SN都存储在DMI中,可通过dmidecode命令查看。

BIOS与boot loader

  • MBR与GPT
    MBR:Master Boot Record,主引导扇区,它在硬盘上的三维地址为**(柱面,磁头,扇区)=(0,0,1)**。MBR中存放着boot loader(446字节)、分区表(64字节)和硬盘有效标志(55AA) 。MBR最多只能支持4个主分区,无法支持超过2T的硬盘。
    GPT: GUID Partition Table ,是一个实体硬盘的分区结构。最多支持 128 个分区,允许大于 2 TB 的卷容量

Legacy BIOS 与UEFI BIOS

Legacy BIOS:传统BIOS。Legecy BIOS从MBR中寻找boot loader。目前云桌面的服务器大多还是用Legacy BIOS。

UEFI BIOS:只支持64位系统且磁盘分区必须为GPT模式,可引导大于2T的硬盘,更快的启动速度。 UEFI BIOS会自动搜索硬盘根目录的EFI目录,而boot loader就在EFI文件夹中。目前云终端都采用UEFI BIOS。

**总结:**BIOS从硬盘的特定位置寻找boot loader

阶段2:boot Loader

主要功能

  • 提供选择菜单,让使用者选择不同的开机项
  • 加载内核,启动操作系统
  • 将开机管理功能转交其他boot loader负责

常见的boot loader有GRUB(GRand Unified Bootloader )ubootLILO,云桌面的终端和服务器都使用GRUB

为什么平时一般见不到BootLoader的界面?因为超时时间被设为0了,直接从默认的启动项启动

  • 修改终端的grub超时时间:vim.tiny /boot/grub/custom.cfg,将第一行的set timeout=0改为set timeout=3

  • 查看grub.cfg:vi /boot/grub/grub.cfg

修改grub配置以及grub配置文件的各种设置选项:

https://help.ubuntu.com/community/Grub2/Setup

https://www.jianshu.com/p/a24d51276a82

https://blog.csdn.net/mr_zing/article/details/41055617

https://blog.csdn.net/dc_show/article/details/47396649

https://blog.csdn.net/shana_8/article/details/81455657

gurb.cfg

grub.cfg中,会用到/boot/vmlinuz/boot/initrd.img两个文件

vmlinuz是可引导的、压缩的内核。“vm”代表 “Virtual Memory”,z代表用gzip压缩
initrd.img是个RAM Disk(通过软件将一部分RAM模拟为硬盘的技术)的映像文件,里面包含了linux启动时需要的目录、可执行文件、内核驱动模块等。

阶段3:kernel

在这里插入图片描述
当前流行的Linux版本一般都采用模块化的内核,这种方式可以在不重新编译构建内核的情形下增加功能模块(ko)。但考虑一种场景,如果磁盘是EMMC的,但相应驱动没有编译进kernel,kernel就无法访问磁盘了,更谈不上加载ko了。这时候就需要用到RAM Disk技术了。

  1. boot loader载入kernelinitrd.img到内存中

  2. kernel启动后自解压,initrd.img的内容挂载为init根文件系统

  3. kernel从init根文件系统中加载所需功能模块

  4. kernel会根据grub.cfg中“root=XXX”部分所指定的内容创建一个根设备,然后将根文件系统以只读的方式挂载,并切换到真正的根文件系统上

  5. 调用systemd程序,进入系统初始化阶段。

​ 详细流程可以参考man initrd

Bootloader引导内核后,进入第三个阶段:内核。这边并不打算介绍内核的函数调用流程,因为目前我自己在工作中还没遇到需要解决的问题。今天想要介绍的是内核阶段可能存在两个根文件系统。

阶段4:systemd

systemdLinux 系统中最新的初始化系统,它主要的设计目标是克服 sysv init 固有的缺点,提高系统的启动速度。

在硬件驱动成功后,kernel 会主动呼叫 systemd 。从右图可以看出,graphical.targetmulti-user.tartgetbasic.targetsysinit.target存在依次依赖的关系,systemd按照依赖关系并发启动target包含的服务后,完成图形界面的启动

rc-local.service会执行/etc/rc.local,自研脚本可以从/etc/rc.local中进行启动

在这里插入图片描述

阶段5:应用软件

使用pstree可以查看进程树。可以看到systemd的PID为1,所有应用软件都是从systemd派生出来的

学习完linux开机的5个阶段,请大家思考下,我们学习这部分知识的目的是什么,能解决什么问题?

1 开机速度的优化

2 定位BUG在哪个阶段发生

3 调试,例如grub选择内核,编辑启动参数

4 功能开发,例如自研脚本的加入,systemd服务的编写
在这里插入图片描述

Logo

快速构建 Web 应用程序

更多推荐