文章目录
-
- Linux系统结构
- [v1 硬件层](#v1 硬件层)
-
- [v1.1 是什么?](#v1.1 是什么?)
- [v1.2 在 Linux 眼里,它们只是"文件"](#v1.2 在 Linux 眼里,它们只是“文件”)
- [v2内核层 ------ Linux 的"大脑和心脏"](#v2内核层 —— Linux 的“大脑和心脏”)
-
- [v2.1 内核是什么?](#v2.1 内核是什么?)
- [v2.2 内核的五大核心功能(分模块说明)](#v2.2 内核的五大核心功能(分模块说明))
-
- [① 进程管理部(CPU 管家)](#① 进程管理部(CPU 管家))
- [② 内存管理部(空间管家)](#② 内存管理部(空间管家))
- [③ 文件系统部(文档管家)](#③ 文件系统部(文档管家))
- [④ 设备驱动部(硬件翻译官)](#④ 设备驱动部(硬件翻译官))
- [⑤ 网络协议栈(通信部长)](#⑤ 网络协议栈(通信部长))
- [v2.3 内核的形态](#v2.3 内核的形态)
- [v3 系统调用接口 ------ 内核的"服务窗口"](#v3 系统调用接口 —— 内核的“服务窗口”)
-
- [v3.1 是什么?](#v3.1 是什么?)
- [v3.2 调用过程](#v3.2 调用过程)
- [v3-2 系统库 ------ 程序员的好帮手](#v3-2 系统库 —— 程序员的好帮手)
-
- [v3-2.1 为什么需要库?](#v3-2.1 为什么需要库?)
- [v3-2.2 动态库和静态库](#v3-2.2 动态库和静态库)
- [v4 用户层---Shell](#v4 用户层—Shell)
-
- [v4.1 Shell 是什么?](#v4.1 Shell 是什么?)
- [v4.2 常见 Shell](#v4.2 常见 Shell)
- [v4.3 Shell 能做什么?](#v4.3 Shell 能做什么?)
- [v4.4 图形界面下的终端模拟器](#v4.4 图形界面下的终端模拟器)
- [v4-2 用户与权限体系](#v4-2 用户与权限体系)
-
- [v4-2.1 用户和组](#v4-2.1 用户和组)
- [v4-2.2 文件权限](#v4-2.2 文件权限)
- [v4-2.3 sudo 机制](#v4-2.3 sudo 机制)
- [v4-3 进程与作业管理](#v4-3 进程与作业管理)
- [v4-4 图形界面](#v4-4 图形界面)
-
- [v4-4.1 显示服务器(X Window System / Wayland)](#v4-4.1 显示服务器(X Window System / Wayland))
- [v4-4.2 桌面环境(DE)](#v4-4.2 桌面环境(DE))
- [v4-4.3 应用程序](#v4-4.3 应用程序)
- [v5 系统启动过程](#v5 系统启动过程)
- [v6 Linux 体系图示(小白视角)](#v6 Linux 体系图示(小白视角))
- [v7 常见问题速答](#v7 常见问题速答)
- [v8 文件系统层次结构标准(FHS)速查](#v8 文件系统层次结构标准(FHS)速查)
Linux系统结构
由下往上大致分为四层:
| 层次 | 名称 | 功能一句话 |
|---|---|---|
| v1 | 硬件层 | 提供真实的物理设备:CPU、内存、硬盘、网卡等 |
| v2 | 内核层 | 管理硬件资源,为程序提供统一的服务 |
| v3 | 系统调用 & 库层 | 让程序通过固定方式让内核干活 |
| v4 | 用户层(Shell、应用、图形界面) | 你直接打交道的各种工具和软件 |
v1 硬件层
v1.1 是什么?
指服务器的物理组件或虚拟机的虚拟硬件,包括:
- CPU:执行指令的大脑
- 内存(RAM):临时存放正在运行的程序和数据
- 硬盘/SSD:永久保存文件
- 网卡:上网用的接口
- 其他设备:显卡、键盘、鼠标等
v1.2 在 Linux 眼里,它们只是"文件"
Linux 信奉"一切皆文件"。对内核来说,这些硬件都会被抽象成设备文件 ,通常放在 /dev 目录下。比如:
/dev/sda表示第一块硬盘/dev/tty表示终端
注:操作系统将真实的硬件"封装"成一个个可以读写的东西,这样程序就不用知道硬件具体长什么样了。
v2内核层 ------ Linux 的"大脑和心脏"
v2.1 内核是什么?
内核(Kernel) 是操作系统的核心,它直接"趴"在硬件上,掌管一切。我们常说的"Linux",严格来说就是指这个内核。你用的 Ubuntu、CentOS 等发行版,都是"内核 + 一堆工具"的组合。
v2.2 内核的五大核心功能(分模块说明)
内核内部像一个高效的公司,有五个核心部门:
① 进程管理部(CPU 管家)
- 任务:决定哪个程序在什么时候使用 CPU,让大家感觉都在同时运行。
- 名词:进程 = 运行中的程序;线程 = 进程里的"小分身"。
- 调度:Linux 内核像一位非常快速的"交警",通过调度器(CFS 等)分配时间片。
- 小白视角:你同时听歌、写文档、后台下载,其实是 CPU 快速来回切换任务。
② 内存管理部(空间管家)
- 任务:分配内存给程序,用完后回收;保护每个进程的空间互不干扰。
- 虚拟内存:每个程序都以为自己拥有全部内存,实际上是内核通过页表把虚拟地址映射到物理内存。
- 交换空间(Swap):当物理内存不够时,内核会把暂时不用的数据移到硬盘上的 swap 分区,腾出内存给活跃程序。
- 记忆技巧:内存部门像图书馆管理员,负责发放和回收"书架",还能把不常用的书暂存到仓库(磁盘)。
③ 文件系统部(文档管家)
- 任务:管理磁盘上的文件、目录,提供读写接口。
- Linux 支持的文件系统:ext4、XFS、Btrfs 等。
- 虚拟文件系统(VFS):内核提供统一的抽象层,无论底层是 ext4 还是 NFS 网络文件系统,上层的操作看起来都一样。
- 设备即文件 :连硬件也挂载在这个统一的文件树下,根目录
/是所有文件的祖先。 - 目录结构标准(FHS) :
/bin-- 基本命令/etc-- 配置文件/home-- 用户家目录/var-- 可变数据(日志等)/tmp-- 临时文件- 详见附录 FHS 速查表。
④ 设备驱动部(硬件翻译官)
- 任务:每种硬件需要专门的驱动程序,才能和内核沟通。
- 驱动在内核里 :Linux 把大部分驱动直接编入内核或作为可加载模块(
.ko文件)。 - 模块管理 :用
lsmod查看已加载模块,modprobe加载新模块。 - 效果:插上一个 USB 设备,内核自动识别并加载对应驱动,创建设备文件,应用程序就可以访问了。
⑤ 网络协议栈(通信部长)
- 任务:实现 TCP/IP 等网络协议,处理网络数据包的收发。
- 位置:位于内核,应用程序通过 socket 接口使用网络。
- 关键组件:路由表、iptables/netfilter 防火墙、网卡驱动。
- 小白理解:内核里内置了一个"邮局",负责所有网络通信,应用程序只需要用 socket 寄信即可。
v2.3 内核的形态
- 单片内核 :Linux 所有核心功能都在一个大的内核镜像文件中(
vmlinuz),但模块化设计让它也能动态加载驱动。 - 内核空间 vs 用户空间:内核运行在高特权级别(内核态),可以直接访问硬件;普通程序运行在用户态,想用硬件必须通过"系统调用"。
v3 系统调用接口 ------ 内核的"服务窗口"
v3.1 是什么?
当普通程序(用户空间)想做任何"大事",比如读文件、创建进程、连接网络,都必须向内核发起请求。这个请求入口就叫系统调用(syscall)。
常用系统调用举例:
open(),read(),write(),close()-- 文件操作fork(),exec()-- 创建新进程socket(),connect()-- 网络通信mmap()-- 内存映射
v3.2 调用过程
应用程序 → C 库(如 glibc)封装 → 陷入内核 → 内核服务 → 返回结果。
小白记法:程序不能直接伸手拿硬件,必须通过"系统调用"这个柜台向内核说:"请帮我打开 file.txt"。
v3-2 系统库 ------ 程序员的好帮手
v3-2.1 为什么需要库?
直接写系统调用很繁琐,而且不同系统可能不一样。C 库(libc) 把系统调用包装成方便的函数,还提供了大量的标准功能(字符串处理、数学计算等)。
- GNU C 库(glibc):绝大多数 Linux 系统使用的标准 C 库。
- 其他库:图形库(GTK、Qt)、加密库(OpenSSL)、线程库(pthread)等。
v3-2.2 动态库和静态库
- 动态库(.so):程序运行时才加载,节省内存,可以共享。就像一个小区的住户共用同一个健身房。
- 静态库(.a):编译时直接打包进程序,程序变大,但移植性更好。
小白记住:库就是封装好的"工具包",让你的程序不用自己造轮子。
v4 用户层---Shell
v4.1 Shell 是什么?
Shell 是一个命令行解释器,你输入命令,它负责解释并让内核执行。它本身就是用户空间的程序。
v4.2 常见 Shell
- Bash:最流行,大多数发行版默认。
- Zsh:功能强大,插件多。
- Fish:对用户更友好,自动补全惊艳。
v4.3 Shell 能做什么?
- 执行命令:
ls -l /home - 管道和重定向:
cat file.txt | grep "error" > result.log - 脚本编程:自动化处理重复任务
- 管理作业:前后台切换,
&、fg、jobs
v4.4 图形界面下的终端模拟器
像 GNOME Terminal、Konsole 这样的程序,打开后里面跑着一个 Shell,你看到的黑窗口就是它。
v4-2 用户与权限体系
v4-2.1 用户和组
Linux 是多用户系统。
- root 用户:超级管理员,拥有最高权限(UID 0)。
- 普通用户:日常使用,权限受限。
- 组:一组用户的集合,方便统一授权。
v4-2.2 文件权限
每个文件都有三个权限位:读®、写(w)、执行(x),分别对拥有者、同组用户、其他人 设置。
用 ls -l 查看,例如:-rw-r--r--。
v4-2.3 sudo 机制
普通用户通过 sudo 临时获得管理员权限,前提是在 /etc/sudoers 中被授权。
安全原则:尽量少用 root,日常操作使用普通账户。
v4-3 进程与作业管理
- 进程的创建 :通过
fork()复制自身,然后用exec()变身成新程序。 - 进程状态:运行(R)、睡眠(S)、停止(T)、僵尸(Z)等。
- 守护进程(daemon):后台运行的服务,通常在系统启动时由 systemd 或 init 拉起。
- 信号 :传递简单通知,如
kill -9发送 SIGKILL 强制结束进程。
v4-4 图形界面
很多人以为图形界面就是 Linux 的一部分,其实它也是上层的应用软件集合。
v4-4.1 显示服务器(X Window System / Wayland)
- X.Org(X11):传统显示服务器,负责在屏幕上绘制窗口、处理鼠标键盘事件。基于客户端-服务器模型。
- Wayland:更现代、更简洁的替代品,逐步取代 X11。
- 作用:为图形程序提供画图、输入的基础支持。
v4-4.2 桌面环境(DE)
在显示服务器之上,提供完整的桌面体验,包括:
- 窗口管理器(控制窗口边框、布局、虚拟桌面)
- 面板、菜单、系统托盘
- 文件管理器、终端、文本编辑器等全套应用
主流桌面环境:
- GNOME:现代、简洁,使用 GTK 工具包,大发行版如 Ubuntu 默认。
- KDE Plasma:华丽、可定制性强,使用 Qt 工具包。
- Xfce:轻量、快速,适合旧电脑。
- LXQt:更轻量。
v4-4.3 应用程序
一切你日常使用的软件:浏览器(Firefox、Chrome)、办公套件(LibreOffice)、图像处理(GIMP)、开发工具(VSCode)等。
小白视角:图形环境就像手机上的启动器+桌面主题+预装应用,它依赖内核和底层库,但不是 Linux 本身,你可以完全不用图形界面,只用命令行。
v5 系统启动过程
- BIOS/UEFI:硬件自检,找到启动设备。
- 引导加载程序(GRUB2):加载内核到内存。
- 内核初始化:挂载根文件系统,启动 init 进程(systemd 等)。
- init/systemd:作为 1 号进程,启动所有系统服务,进入目标运行级别(图形界面或命令行)。
- 登录提示:显示登录界面,等待用户。
v6 Linux 体系图示(小白视角)
硬件层
├─ CPU、内存、硬盘、网卡 ...
└─ 设备文件 (/dev)
内核层 (Linux Kernel)
├─ 进程管理 (调度器、多任务)
├─ 内存管理 (虚拟内存、Swap)
├─ 文件系统 (VFS, ext4/XFS)
├─ 设备驱动 (模块)
└─ 网络协议栈 (TCP/IP, netfilter)
系统调用接口 (syscalls)
库层 (glibc 等动态/静态库)
用户层
├─ Shell (bash/zsh) + 终端模拟器
├─ 图形服务器 (X11/Wayland) + 桌面环境 (GNOME/KDE)
├─ 应用程序 (浏览器、编辑器、数据库)
└─ 管理工具 (systemctl, apt/yum)
v7 常见问题速答
Q1:Linux 和 Ubuntu 是什么关系?
Ubuntu 是 Linux 的一个"发行版",等于 Linux 内核 + GNU 工具 + 包管理器 + 桌面环境 + 社区的完整操作系统。其他发行版还有 Debian、Fedora、Arch 等。
Q2:内核可以替换吗?
可以,你可以自己编译新内核或安装更新,但通常由包管理器升级。
Q3:我如何知道我的内核版本?
打开终端,输入 uname -r。
v8 文件系统层次结构标准(FHS)速查
| 目录 | 全称/含义 | 存放内容 |
|---|---|---|
/ |
根目录 | 一切文件的起点 |
/bin |
binaries | 基础用户命令(ls, cp, cat) |
/boot |
boot loader files | 内核、引导文件 |
/dev |
devices | 设备文件 |
/etc |
etcetera | 系统配置文件 |
/home |
home directories | 各用户的个人文件夹 |
/lib |
libraries | 基本共享库和内核模块 |
/media / /mnt |
mount points | 临时挂载点(U盘等) |
/opt |
optional | 第三方大型软件包 |
/proc |
process info | 虚拟文件系统,展示进程和系统信息 |
/root |
root home | root 用户的家目录 |
/run |
runtime data | 自系统启动以来的运行时数据 |
/sbin |
system binaries | 系统管理命令 |
/srv |
service data | 服务提供的数据 |
/sys |
system | 内核和设备信息(类似 /proc) |
/tmp |
temporary | 临时文件,重启可能清空 |
/usr |
Unix System Resources | 大部分用户程序和数据,如 /usr/bin, /usr/lib |
/var |
variable | 可变数据:日志、邮件、打印队列等 |