计算机是一堆硬件组成的,为了控制这些硬件资源,于是就有了操作系统。
操作系统是计算机中最核心的系统软件,位于硬件和应用程序之间,负责管理硬件资源并为用户和应用程序提供运行环境。
操作系统的典型组成结构
应用程序
────────────
系统调用接口
────────────
内核(Kernel)
────────────
硬件(CPU / 内存 / 磁盘)
结论:Linux是一个操作系统最底层的核心及其提供的核心工具,它是GNU GPL授权模式,任何人均可取得源代码,并且可以修改,它参考POSIX设计规范。
Linux是Torvalds先生1991年针对386开发的,核心仅能“驱动386所有的硬件”而已,当时能在Linux上面跑的软件很少。如果想要在其他硬件平台运行,就需要修改Linux才行。
GNU GPL 是一种自由软件许可证(开源许可证) 由 自由软件基金会(FSF) 发布,用来保证软件“永远自由”。
只要你分发了GPL软件或者其个性版本,必须:开放源代码、继续使用使用GPL协议
四大自由:
自由发行软件
自由查看和修改源码
自由分发副本
自由分发修改后的版本
代表项目:
Linux Kernel
BusyBox
Git
GNU (https://www.gnu.org/gnu/about-gnu.html)于1983年由Richard Stallman(rms)发起,意在为所有软件用户能够自由控制自己的计算而构建一款由大家共同努力开发而成的操作系统。rms今天仍然是GNU的首席。
GNU所开发的几个重要的软件:
Emacs
GNU C (GCC)
GNU C Library (glibc)
Bash shell
POSIX(Portable Operating System Interface)是一套操作系统接口标准,由IEEE制定,用来保证:同一套程序,在不同 Unix 类系统上都能跑
系统调用接口(C API), glibc 实现 POSIX API
| 类别 | 示例 |
|---|---|
| 进程 | fork()exec()wait() |
| 文件 | open()read()write() |
| 权限 | chmod()chown() |
| 信号 | signal()kill() |
| 线程 | pthread_* |
文件系统模型
POSIX定义:一切皆文件、路径用 /、文件描述符fd(0/1/2)
| FD | 含义 |
|---|---|
| 0 | stdin |
| 1 | stdout |
| 2 | stderr |
Shell & 命令行行为
POSIX定义了:标准Shell(sh)语法、命令行为(如cp、mv、ls)
Bash 是 POSIX sh 的超集
文本与字符规则
行结束符:\n
文本编码概念
LC_* / LANG 规范
工具与命令集(POSIX Utilities),如:awk\sed\grep\find\vi
内核结构
GUI
包管理器
systemd / init
文件系统实现(ext4、xfs)
Linux核心网站:http://www.kernel.org
Linux核心版本号举例如下:
3.10.0-123.el7.x86_64版本号解释:
主版本号.次版本号.修订号-扩展版本号.架构标识
扩展版本号(el7):
123:发行版特定的构建号,表示这是Red Hat/CentOS编译的第123次构建
.el7:Enterprise Linux 7的标识,表示这是为RHEL 7/CentOS 7定制的内核
举例:
我的虚拟机安装的是CentOS8,内核版本号为4.18.0-240.el8.x86_64,内核版本为:4.18.0 ;el8表示CentOS8版本。通过命令cat /etc/os-release查看操作系统版本,确认是CentOS8
[root@server12 ~]# uname -r
4.18.0-240.el8.x86_64
[root@server12 ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
主、次版本为奇数:发展中版本(development)
主、次版本为偶数:稳定版本(stable)
在3.0版本之后,这种奇数、偶数的编号格式就失效了。从3.0版开始,核心主要依据主线版本(MainLine)来开发,开发完毕后会往下一个主线版本进行。 例如3.10就是在3.9的架构下继续开发出来的新的主线版本。
查看Linux内核版本命令:
uname -r而旧的版本在新的主线版本出现之后,会有两种机制来处理,一种机制为结束开发(End of Live,EOL),亦即该代码已经结束,不会有继续维护的状态。 另外一种机制为保持该版本的持续维护,亦即为长期维护版本 (longterm)。
查询长期维护内核版本号有哪些的网址:
https://www.kernel.org/category/releases.html
通过上面的学习,我们知道,Linux是系统最底层的核心 及核心工具,基于GNU GPL授权,任何人可以取得源代码和可执行核心程序,并且可以修改。很多商业公司或者非营利团体,将Linux Kernel(含tools)与可发行的软件整合起来,加上自己开发的工具程序,这个“Kernel+Softwares+Tools+可完整安装程序”,我们称之为Linux distribution。
每个Linux distributions使用的kernel都是来自 http://www.kernel.org,所以不同的distribution差别不大。、
distribution主要分为两大系统,一种是使用RPM方式安装软件的系统,一种是dpkg方式安装软件的系统,总结如下:

如下列出几个主要的Linux distributions发布者网址:
Red Hat: http://www.redhat.com
SuSE: https://www.suse.com
Fedora: https://getfedora.org/
CentOS: http://www.centos.org/
Debian: http://www.debian.org/
Ubuntu: http://www.ubuntu.com/
Gentoo: http://www.gentoo.org/
先要理解基础概念:
一切皆文件
权限模型(rwx / 用户 / 组)
目录结构意义(/etc / /var / /proc)
进程 ≠ 程序
前台 / 后台 / 信号
建议按以下顺序学习:
计算机概论与硬件相关知识
安装一个Linux
必会命令
ls cp mv rm mkdir lncat less tail grep findchmod chown umaskps top kill uptimevi编辑器
shell与shell脚本
软件包管理,rpm、dpkg、yum、apt
网络基础
上电
↓
BIOS / UEFI
↓
Bootloader(GRUB)
↓
Linux Kernel
↓
initramfs
↓
systemd(PID 1)
↓
Target(运行级别)
↓
登录界面 / 服务就绪
1️⃣ 按下电源键后发生了什么
硬件自检:CPU、内存、显卡、键盘、主板控制器
失败现象:蜂鸣器报警、黑屏、卜在厂商LOGO
2️⃣ BIOS与UEFI的区别:
| 项目 | BIOS(传统) | UEFI(新标准) |
|---|---|---|
| 启动方式 | MBR | GPT(是UEFI规范的一部分) |
| 启动速度 | 慢 | 快 |
| 分区限制 | 2TB 限制 | 8ZB |
| 启动程序 | 磁盘前466字节 | EFI文件 |
3️⃣ 启动盘选择
固件(BIOS/UEFI)会按顺序(配置的顺序)查找启动盘,可以作为启动的设备有:硬盘、做RAID后的硬盘、PXE(网络启动),光盘、U盘。找到启动设备后,控制权交出去。

4️⃣ GRUB 的核心作用
加载 Linux 内核
提供启动菜单
加载initramfs
5️⃣ GRUB的关键文件
BIOS模式
/boot/grub2/grub.cfgUEFI模式
/boot/efi/EFI/redhat/grub.cfg
说明:redhat为对应Linux发行版本名称,如redhat、centos、hce(华为操作系统)等等
6️⃣ GRUB 菜单里做了什么

vmlinuz → Linux 内核,内核文件在/boot目录下
initramfs → 临时根文件系统,对应的文件在/boot目录下
root=/dev/cpsVG/rootfs → 真正的根分区,cpsVG对应vg名称,rootfs对应lv名称


7️⃣ 运维常用 GRUB 救援操作
启动菜单按e,进入编辑模式。
常用操作,忘记root密码,进入单用户,重置root密码
8️⃣ 内核开始接管系统
初始化 CPU
初始化内存管理
初始化驱动
初始化中断
9️⃣ 内核挂载 initramfs(关键)
问:initramfs是什么?
答:initramfs是一个临时的内存文件系统,里面有:必要的驱动、LVM、RAID、根分区识别逻辑
问:initramfs做了什么?
答:加载磁盘驱动、识别LVM、RAID,找到真正的根"/",切换根文件系统
🔟 systemd (PID=1)
当内核完成初始化后:
内核 → 启动 /sbin/init → systemdsystemd的PID永远是1
验证,执行命令:ps -p 1
[root@server12 ~]# ps -p 1
PID TTY TIME CMD
1 ? 00:00:02 systemd
systemd 的启动顺序
basic.target
↓
sysinit.target
↓
multi-user.target
↓
graphical.target(如有 GUI)
Target 对照表
| 旧runlevel | systemd |
|---|---|
| 0 | poweroff.target |
| 1 | rescue.target |
| 3 | multi-user.target |
| 5 | graphical.target |
| 6 | reboot.target |
查看当前runlevel(target)命令:
[root@server12 ~]# systemctl get-default
multi-user.target
1️⃣1️⃣ systemd拉起哪些东西
udev(设备管理)
网络
日志(journald)
crond
sshd
数据库
你自定义的服务
登录提示符
ssh可连
服务端口监听
看到以上之一,说明启动完成。
┌──────────────────────────┐
│ 上电 Power On │
└────────────┬─────────────┘
│
▼
┌──────────────────────────┐
│ BIOS / UEFI 固件 │
│ - POST 硬件自检 │
│ - 选择启动设备 │
└────────────┬─────────────┘
│
▼
┌──────────────────────────┐
│ Bootloader (GRUB) │
│ - 显示启动菜单 │
│ - 加载 vmlinuz │
│ - 加载 initramfs │
│ - 传递内核参数 │
└────────────┬─────────────┘
│
▼
┌──────────────────────────┐
│ Linux Kernel │
│ - 初始化 CPU / 内存 │
│ - 初始化驱动 │
│ - 挂载 initramfs │
└────────────┬─────────────┘
│
▼
┌──────────────────────────┐
│ initramfs │
│ (临时根文件系统) │
│ - 加载磁盘驱动 │
│ - 识别 LVM / RAID │
│ - 查找真正的 / │
│ - pivot_root │
└────────────┬─────────────┘
│
▼
┌──────────────────────────┐
│ systemd (PID 1) │
│ - 读取 unit 文件 │
│ - 并行启动服务 │
│ - 管理依赖关系 │
└────────────┬─────────────┘
│
▼
┌──────────────────────────┐
│ Target │
│ - multi-user.target │
│ - graphical.target │
└────────────┬─────────────┘
│
▼
┌──────────────────────────┐
│ 登录界面 / SSH 就绪 │
│ - getty / gdm │
│ - 服务可用 │
└──────────────────────────┘
每一层一句话理解版:
| 阶段 | 一句话 |
|---|---|
| BIOS / UEFI | 找到启动盘 |
| GRUB | 把内核拉进内存 |
| Kernel | 操作系统本体启动 |
| initramfs | 帮内核找到真正的根 |
| systemd | 启动并管理所有服务 |
| Target | 决定系统跑到什么模式 |
| Login | 系统可用了 |
dmesg -T 命令可以查看内核启动日志信息
[root@server12 grub2]# dmesg -T | more
[Fri Dec 2611:19:31 2025] Linux version 4.18.0-240.el8.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC)) #1
SMP Fri Sep 2519:48:47 UTC 2020
[Fri Dec 2611:19:31 2025] Command line: BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-240.el8.x86_64 root=/dev/mapper/cl-root ro crashkernel=auto resume=/dev/map
per/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap
[root@server12 ~]# find / -name vmlinuz-4.18.0-240.el8.x86_64
/boot/vmlinuz-4.18.0-240.el8.x86_64
[root@server12 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root cl -wi-ao---- <17.00g
swap cl -wi-ao----2.00g
[root@server12 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
cl 120 wz--n- <19.00g 0
[root@server12 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─cl-root 253:0 0 17G 0 lvm /
└─cl-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
sr0 11:0 1 1024M 0 rom
日志详解
BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-240.el8.x86_64作用:指定从哪个设备加载内核镜像
解析:
hd0:第一块硬盘(0-based计数)
msdos1:第一个MBR分区(确认了你的磁盘是MBR分区表)
(hd0,msdos1):GRUB的设备命名方式
/vmlinuz-4.18.0-240.el8.x86_64:内核镜像文件的路径(位于 /boot 分区)
root=/dev/mapper/cl-root作用:指定根文件系统(/)的位置
解析:
/dev/mapper/cl-root:这是一个 LVM逻辑卷
cl:卷组名称(自定义名称)
root:逻辑卷名称
表示你的根分区在LVM中
ro作用:以只读模式挂载根文件系统
原因:系统启动初期,根文件系统先以只读模式挂载,完成文件系统检查和挂载其他分区后,再重新以读写模式挂载
crashkernel=auto作用:自动为kdump预留内存
解释:当内核崩溃时,kdump会捕获崩溃信息,这个参数自动计算预留多少内存给第二个内核(崩溃内核)
resume=/dev/mapper/cl-swap作用:指定休眠(hibernate)的交换分区
解析:
/dev/mapper/cl-swap:另一个LVM逻辑卷
cl:卷组名称(与root相同)
swap:逻辑卷名称
系统休眠时,内存内容会保存到这个交换分区
rd.lvm.lv=cl/root 和 rd.lvm.lv=cl/swap作用:告诉初始RAM磁盘(initrd) 需要激活哪些LVM卷
解析:
rd:ramdisk(初始内存磁盘)
lvm.lv=cl/root:激活卷组cl中的root逻辑卷
lvm.lv=cl/swap:激活卷组cl中的swap逻辑卷
这些参数在initrd阶段执行,以便能挂载根文件系统
分区表类型:MBR(msdos1确认了这一点)
引导位置:第一块硬盘的第一个分区(hd0,msdos1)
磁盘布局:使用了 LVM(逻辑卷管理)
系统版本:RHEL/CentOS 8(el8)
内核版本:4.18.0-240.el8.x86_64
启动设备:/dev/sda1(GRUB的(hd0,msdos1)对应这个设备)
BIOS/UEFI → 加载硬盘MBR
GRUB → 从(hd0,msdos1)读取配置文件
加载内核 → /vmlinuz-4.18.0-240.el8.x86_64
加载initrd → 包含LVM等驱动
initrd阶段 → 激活LVM卷cl/root和cl/swap
挂载根分区 → /dev/mapper/cl-root(以只读模式)
切换根 → 从initrd切换到真正的根文件系统
systemd启动 → 重新以读写模式挂载根分区,启动服务
方法一:执行命令:ls /sys/firmware/efi
如何有输出说明UEFI模式,如果报错,说明使用BIOS启动。

方法二:查看磁盘分区,命令:lsblk -f
UEFI的标志,有一个FATxx的文件系统挂载在/boot/efi
BIOS没有/boot/efi
下图是UEFI启动,有/boot/efi

方法三:用efibootmgr命令(UEFI专用)
能正常输出

问:lsblk是干什么的?
答:只读模式列出系统中的块设备结构(磁盘/分区/LVM/挂载点)
常用选项:
-f :显示文件系统类型、UUID
-p :显示完整路径
[root@server12 ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 95d5d004-c68a-4550-83ee-0a709cb70889 /boot
└─sda2 LVM2_member UfLXDg-B6Ih-QMiG-Lh6P-RP6e-H8Nq-JT5MNb
├─cl-root xfs 093ee88f-ac42-4b0f-9291-a75ef70e659f /
└─cl-swap swap f191370e-a0cf-4bb8-8505-247815479ba9 [SWAP]
sdb
sr0
[root@server12 ~]# lsblk -p
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
/dev/sda 8:0 0 20G 0 disk
├─/dev/sda1 8:1 0 1G 0 part /boot
└─/dev/sda2 8:2 0 19G 0 part
├─/dev/mapper/cl-root 253:0 0 17G 0 lvm /
└─/dev/mapper/cl-swap 253:1 0 2G 0 lvm [SWAP]
/dev/sdb 8:16 0 10G 0 disk
/dev/sr0 11:0 1 1024M 0 rom
[root@server12 ~]# lsblk -d
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
sdb 8:16 0 10G 0 disk
sr0 11:0 1 1024M 0 rom
[root@server12 ~]#
查看“已挂载文件系统”的磁盘使用情况
常用选项:
-h:人类可读h表示human
-T:显示文件系统
-i:查看inode
[root@server12 ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 876M 0 876M 0% /dev
tmpfs tmpfs 896M 0 896M 0% /dev/shm
tmpfs tmpfs 896M 8.8M 887M 1% /run
tmpfs tmpfs 896M 0 896M 0% /sys/fs/cgroup
/dev/mapper/cl-root xfs 17G 9.5G 7.6G 56% /
/dev/sda1 xfs 1014M 177M 838M 18% /boot
tmpfs tmpfs 180M 0 180M 0% /run/user/0
[root@server12 ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 2242383902238481% /dev
tmpfs 22912512291241% /dev/shm
tmpfs 2291256152285101% /run
tmpfs 229125172291081% /sys/fs/cgroup
/dev/mapper/cl-root 891084813676687740822% /
/dev/sda1 5242883025239861% /boot
tmpfs 22912552291201% /run/user/0
[root@server12 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 876M 0 876M 0% /dev
tmpfs 896M 0 896M 0% /dev/shm
tmpfs 896M 8.8M 887M 1% /run
tmpfs 896M 0 896M 0% /sys/fs/cgroup
/dev/mapper/cl-root 17G 9.5G 7.6G 56% /
/dev/sda1 1014M 177M 838M 18% /boot
tmpfs 180M 0 180M 0% /run/user/0
du命令是disk usage的缩写,用于查看文件和目录的磁盘使用量。常用于找大目录/大文件。
常用选项:
-h : 以人类可读格式显示
-s:显示总用量(-s 汇总),一般组合使用 -sh
-h --max-depth=2 :查看当前目录下各子目录,及子目录的子目录大小
[root@server12 apache-tomcat-8.5.72]# du -h --max-depth=1 .
224K ./conf
880K ./bin
8.6M ./lib
0 ./logs
0 ./temp
5.8M ./webapps
0 ./work
16M .
[root@server12 apache-tomcat-8.5.72]# du -h --max-depth=2 .
224K ./conf
880K ./bin
8.6M ./lib
0 ./logs
0 ./temp
168K ./webapps/ROOT
3.3M ./webapps/docs
2.1M ./webapps/examples
128K ./webapps/host-manager
176K ./webapps/manager
5.8M ./webapps
0 ./work
16M .
[root@server12 apache-tomcat-8.5.72]# du -sh *
880K bin
20K BUILDING.txt
224K conf
8.0K CONTRIBUTING.md
8.6M lib
56K LICENSE
0 logs
4.0K NOTICE
4.0K README.md
8.0K RELEASE-NOTES
20K RUNNING.txt
0 temp
5.8M webapps
0 work
[root@server12 apache-tomcat-8.5.72]# ls
bin BUILDING.txt conf CONTRIBUTING.md lib LICENSE logs NOTICE README.md RELEASE-NOTES RUNNING.txt temp webapps work
[root@server12 apache-tomcat-8.5.72]# ll
total 128
drwxr-x---. 2 root root 4096 Nov 102021 bin
-rw-r-----. 1 root root 19481 Oct 12021 BUILDING.txt
drwx------. 2 root root 238 Oct 12021 conf
-rw-r-----. 1 root root 6210 Oct 12021 CONTRIBUTING.md
drwxr-x---. 2 root root 4096 Nov 102021 lib
-rw-r-----. 1 root root 57011 Oct 12021 LICENSE
drwxr-x---. 2 root root 6 Oct 12021 logs
-rw-r-----. 1 root root 1726 Oct 12021 NOTICE
-rw-r-----. 1 root root 3372 Oct 12021 README.md
-rw-r-----. 1 root root 7136 Oct 12021 RELEASE-NOTES
-rw-r-----. 1 root root 16507 Oct 12021 RUNNING.txt
drwxr-x---. 2 root root 30 Nov 102021 temp
drwxr-x---. 7 root root 81 Oct 12021 webapps
drwxr-x---. 2 root root 6 Oct 12021 work