Linux核心知识点全解01
Linux 核心知识点全解:从 Shell 到内核,一篇带你彻底搞懂
本文基于运维实战中的高频问题清单整理而成,覆盖 Shell、Linux 服务、用户管理、命令体系、文件权限、内核机制六大板块。每个核心概念都配有 图解,语言通俗,适合入门和进阶复盘。
目录
- [一、Shell 核心知识点](#一、Shell 核心知识点 "#%E4%B8%80shell-%E6%A0%B8%E5%BF%83%E7%9F%A5%E8%AF%86%E7%82%B9")
- [1.1 什么是 Shell](#1.1 什么是 Shell "#11-%E4%BB%80%E4%B9%88%E6%98%AF-shell")
- [1.2 Shell 的种类与选择](#1.2 Shell 的种类与选择 "#12-shell-%E7%9A%84%E7%A7%8D%E7%B1%BB%E4%B8%8E%E9%80%89%E6%8B%A9")
- [1.3 Shell 脚本详解](#1.3 Shell 脚本详解 "#13-shell-%E8%84%9A%E6%9C%AC%E8%AF%A6%E8%A7%A3")
- [二、Linux 服务核心知识点](#二、Linux 服务核心知识点 "#%E4%BA%8Clinux-%E6%9C%8D%E5%8A%A1%E6%A0%B8%E5%BF%83%E7%9F%A5%E8%AF%86%E7%82%B9")
- [三、Linux 用户管理知识点](#三、Linux 用户管理知识点 "#%E4%B8%89linux-%E7%94%A8%E6%88%B7%E7%AE%A1%E7%90%86%E7%9F%A5%E8%AF%86%E7%82%B9")
- [四、Linux 命令与核心设计理念](#四、Linux 命令与核心设计理念 "#%E5%9B%9Blinux-%E5%91%BD%E4%BB%A4%E4%B8%8E%E6%A0%B8%E5%BF%83%E8%AE%BE%E8%AE%A1%E7%90%86%E5%BF%B5")
- [五、Linux 文件权限知识点](#五、Linux 文件权限知识点 "#%E4%BA%94linux-%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90%E7%9F%A5%E8%AF%86%E7%82%B9")
- [六、Linux 内核核心知识点](#六、Linux 内核核心知识点 "#%E5%85%ADlinux-%E5%86%85%E6%A0%B8%E6%A0%B8%E5%BF%83%E7%9F%A5%E8%AF%86%E7%82%B9")
一、Shell 核心知识点
1.1 什么是 Shell
通俗来说 ,Shell 就是你跟操作系统之间的"翻译官"。你在黑乎乎的终端里敲下的每一条命令,都不是直接发给操作系统内核的------内核根本看不懂人类写的 ls、cd 这种文字。Shell 负责把你说的话翻译成内核能懂的语言,再把内核的回应翻译回来给你看。
Shell 在操作系统中的角色可以总结为三点:
| 角色 | 说明 |
|---|---|
| 命令解释器 | 接收用户输入的命令文本,解析语法,翻译成系统调用 |
| 编程环境 | 提供变量、循环、分支、函数等编程能力,可编写脚本批量执行 |
| 进程调度器 | 管理前台/后台进程,处理进程间的通信与信号 |
Shell 命令解释器的工作原理
当你敲下 ls -l /home 并按下回车时,Shell 内部经历了下面这些步骤:
简单说,Shell 做四件事:读 → 拆 → 找 → 跑 ,然后循环往复,这就是所谓的 REPL(Read-Eval-Print Loop)。
1.2 Shell 的种类与选择
Shell 不是只有一种,就像一个操作系统上可以有多种浏览器一样。以下是四种最常见的 Shell:
| Shell | 特点 | 适合人群 |
|---|---|---|
| bash | Linux 标配,兼容性最好,脚本生态最强 | 运维工程师、后端开发 |
| zsh | 自动补全强大,主题丰富,Oh My Zsh 生态 | 前端/全栈开发者、追求效率的人 |
| fish | 开箱即用,智能提示,语法现代化 | 新手、不想折腾配置的人 |
| tcsh | C 语言风格语法,历史悠久的 BSD 默认 Shell | 老派 Unix 用户 |
日常如何选择?
- 写脚本 → 用 bash(兼容性第一)
- 日常敲命令 → 用 zsh 或 fish(体验好)
- 服务器运维 → 用 bash(所有服务器都有)
1.3 Shell 脚本详解
什么是 Shell 脚本?核心作用是什么?
Shell 脚本就是把一堆 Shell 命令写进一个文件里,让它按顺序自动执行。与其每次手动敲 20 条命令,不如写一个脚本一次跑完。
核心作用: 自动化------把重复的人工操作变成一段可复用的程序。
主要使用场景
分支、循环、函数的作用
bash
# 分支:根据不同条件执行不同操作
if [ -f "/etc/nginx/nginx.conf" ]; then
echo "nginx 已安装"
else
echo "nginx 未安装,开始安装..."
apt install nginx -y
fi
# 循环:对一组数据重复执行相同操作
for user in alice bob charlie; do
useradd $user # 批量创建用户
echo "用户 $user 创建完成"
done
# 函数:封装可复用的代码块
function check_service() {
local svc=$1
if systemctl is-active --quiet $svc; then
echo "$svc 运行中 ✅"
else
echo "$svc 已停止 ❌"
fi
}
check_service nginx
check_service mysql
| 结构 | 核心作用 |
|---|---|
| 分支 (if/case) | 根据条件决定执行哪段代码,实现"按需执行" |
| 循环 (for/while) | 对批量数据逐一遍历,实现"批量操作" |
| 函数 (function) | 封装可复用逻辑,避免重复代码,便于维护 |
Shell 脚本的优缺点
| 优点 | 缺点 |
|---|---|
| 编写快,一行命令就是一个功能 | 没有完善的调试工具,排错靠 echo 和 set -x |
| 几乎任何 Linux 环境都能跑,零依赖 | 复杂逻辑写起来很痛苦,代码可读性差 |
| 调用系统命令极其方便 | 性能差,不适合计算密集型任务 |
| 非常适合"胶水"任务(串联各种工具) | 缺乏现代语言特性(类型检查、面向对象等) |
适合的场景: 系统运维、日志处理、环境部署、定时任务、CI/CD 脚本 不适合的场景: 大型项目开发、复杂算法、网络服务、需跨平台的应用
二、Linux 服务核心知识点
2.1 什么是 Linux 服务?服务的本质是什么?
服务 = 一个在后台长期运行的进程,专门对外提供某种功能。比如 Web 服务器 Nginx 就是一个服务,它一直在后台等着处理 HTTP 请求。
服务的本质: 其实就是一个被特别管理的进程 。被谁管?被服务管理器(如 systemd)管------它负责服务的启动、停止、重启、开机自启等。
2.2 什么是守护进程(Daemon)?
守护进程是运行在后台、不与任何终端关联的进程。名字来源于希腊神话中的"守护精灵",默默地在背后干活。
服务和守护进程的关系: 大多数 Linux 服务的运行形态就是守护进程。可以说:服务是概念层,Daemon 是实现层 。比如 sshd 既是一个守护进程,也是 SSH 服务的运行实例。
2.3 服务管理机制对比:systemd vs init vs upstart
| 特性 | SysV init | Upstart | systemd |
|---|---|---|---|
| 启动方式 | 串行(一个接一个) | 事件驱动 | 并行启动 |
| 配置文件 | Shell 脚本 /etc/init.d/ |
/etc/init/*.conf |
单元文件 /etc/systemd/system/ |
| 依赖管理 | 靠编号顺序,手动控制 | 支持事件依赖 | 强大的依赖关系定义 |
| 启动速度 | 慢 | 较快 | 快 |
| 当前状态 | 已被淘汰 | 基本被淘汰 | 主流标准 |
2.4 服务与进程的关系
- 进程是操作系统层面的概念------一段正在运行的程序,有 PID、内存空间、CPU 时间片
- 服务 是管理层面的概念------systemd 把某个进程(或进程组)包装成一个可管理的单元,可以
start/stop/restart/enable - 一个服务不一定只对应一个进程(如 Nginx 会 fork 出多个 worker 进程)
- 一个进程中也可以承载多个服务的功能(较少见)
三、Linux 用户管理知识点
3.1 用户分类
| 用户类型 | UID 范围 | 用途 | 能否登录 |
|---|---|---|---|
| root | 0 | 系统超级管理员 | 一般禁止 |
| 系统用户 | 1 ~ 999(CentOS 7 之前)/ 1 ~ 999 | 运行特定服务 | 否 |
| 普通用户 | 1000 ~ 60000+ | 日常使用 | 是 |
3.2 UID 和 GID
在 Linux 眼里,它不认识"张三""李四"这种用户名,它只认数字。 UID(User ID)就是用户的数字身份证,GID(Group ID)是用户组的数字身份证。用户名只是给人类看的别名。
用户和用户组的管理逻辑:
- 每个用户必须属于一个主组(Primary Group)
- 一个用户可以属于多个附加组(Supplementary Groups)
- 文件归属同时记录
UID和GID,权限检查时先匹配 UID,再匹配 GID
3.3 用户管理核心命令
| 命令 | 功能 | 示例 |
|---|---|---|
useradd |
创建用户 | useradd -m -s /bin/bash alice |
usermod |
修改用户属性 | usermod -aG docker alice |
userdel |
删除用户 | userdel -r alice |
passwd |
设置/修改密码 | passwd alice |
groupadd |
创建用户组 | groupadd developers |
groupmod |
修改用户组 | groupmod -n newname oldname |
groupdel |
删除用户组 | groupdel developers |
id |
查看用户 UID/GID | id alice |
su |
切换用户 | su - alice |
sudo |
以 root 身份执行命令 | sudo apt update |
四、Linux 命令与核心设计理念
4.1 什么是 Linux 命令?命令的本质是什么?
一条 Linux 命令,本质上就是一个可执行程序文件 ,存放在文件系统的某个目录里。当你敲下 ls,Shell 会在 /bin、/usr/bin 等路径下找到一个叫 ls 的二进制文件然后运行它。
4.2 命令的完整解析过程
关键机制: 管道(|)、重定向(>、<、>>、2>&1)、变量替换($VAR)、命令替换($(cmd))、通配符展开(*、?)------这些都是在命令真正执行之前由 Shell 先处理的。
4.3 「一切皆文件」核心理念
这是 Linux 最灵魂的设计思想。通俗地说:Linux 把几乎所有东西都抽象成了"文件" 。不管你是读一块硬盘,还是读一个键盘输入,还是读一个网络数据包,在 Linux 看来,你都是在"读文件"。
一个直观的例子:
bash
# 读硬盘和读普通文件用的是同一个系统调用
cat /home/user/hello.txt # 读普通文件
cat /dev/sda # 读整块硬盘!看作"文件"
# 读系统信息也是"读文件"
cat /proc/cpuinfo # 查看 CPU 信息
cat /proc/meminfo # 查看内存信息
# 写设备也是"写文件"
echo "hello" > /dev/tty1 # 在第一个终端上显示 "hello"
这样设计的目的和优势
| 优势 | 说明 |
|---|---|
| 统一的编程接口 | 无论操作什么,都用 open()、read()、write()、close() 这个套路 |
| 简化开发 | 写程序的不用区分"这是硬盘还是网卡",统一按文件处理 |
| 强大的组合能力 | 不同"文件"之间可以通过管道串联,实现复杂的处理流程 |
| 权限统一管理 | 万物皆文件→万物都有 rwx 权限,安全模型统一 |
五、Linux 文件权限知识点
5.1 权限基础概念
Linux 权限 = 这道门的钥匙,控制谁能对这个文件做什么操作。权限机制是 Linux 安全体系的第一道防线。
5.2 rwx 权限对文件和目录的区别
这是 Linux 权限中最容易搞混的地方,也是面试最爱问的。
| 权限 | 作用于普通文件 | 作用于目录文件 |
|---|---|---|
| r (读) | 可以查看文件内容(cat、less) |
可以列出目录中的文件名(ls) |
| w (写) | 可以修改文件内容(vim、echo >>) |
可以在目录中创建/删除/重命名文件 |
| x (执行) | 可以作为程序运行(./script.sh) |
可以进入该目录(cd),可以访问目录内文件 |
关键结论: 对一个目录来说,x(执行)权限是访问目录的"通行证" 。没有 x 权限,连门都进不去,更别提读里面的文件了。
5.3 看懂 ls -l 输出
bash
$ ls -l /etc/passwd
-rw-r--r-- 1 root root 2860 May 22 10:30 /etc/passwd
d 目录 / l 软链接 / c 字符设备 / b 块设备"] A --> A2["Owner 权限: rw-"] A --> A3["Group 权限: r--"] A --> A4["Others 权限: r--"] B["1"] --> B1["硬链接数"] C["root"] --> C1["文件所有者"] D["root"] --> D1["所属组"] E["2860"] --> E1["文件大小(字节)"] F["May 22 10:30"] --> F1["最后修改时间"] G["/etc/passwd"] --> G1["文件名"]
5.4 修改权限的常用方式
| 方式 | 格式 | 示例 | 说明 |
|---|---|---|---|
| 符号法 | chmod [ugoa][+-=][rwx] |
chmod u+x script.sh |
给 owner 加执行权限 |
chmod g-w file.txt |
去掉 group 的写权限 | ||
chmod o=r file.txt |
设置 others 仅有读权限 | ||
chmod a+r file.txt |
所有人加读权限 | ||
| 数字法 | chmod [0-7][0-7][0-7] |
chmod 755 script.sh |
rwxr-xr-x |
chmod 644 file.txt |
rw-r--r-- | ||
chmod 600 secret.key |
rw------- | ||
| 改归属 | chown / chgrp |
chown alice file.txt |
改所有者 |
chown alice:dev file.txt |
同时改所有者和组 |
数字法速记表:
| 数字 | 二进制 | 权限 |
|---|---|---|
| 0 | 000 | --- |
| 1 | 001 | --x |
| 2 | 010 | -w- |
| 3 | 011 | -wx |
| 4 | 100 | r-- |
| 5 | 101 | r-x |
| 6 | 110 | rw- |
| 7 | 111 | rwx |
六、Linux 内核核心知识点
6.1 什么是 Linux 内核?它在操作系统中的核心地位是什么?
内核就是操作系统的"大脑" ------它直接跟硬件打交道,管理 CPU、内存、硬盘、网络等一切物理资源,为上层应用程序提供一个安全、稳定的运行环境。
一句话总结: 用户程序不能直接碰硬件,必须通过内核中转。内核是唯一的"硬件管家"。
6.2 内核的核心功能
| 功能模块 | 做什么 |
|---|---|
| 进程管理 | 创建/销毁进程,CPU 时间片调度,多任务管理 |
| 内存管理 | 分配/回收内存,虚拟内存,内存映射 |
| 文件系统 | 管理磁盘数据,提供统一的 VFS(虚拟文件系统) |
| 网络协议栈 | 实现 TCP/IP 协议,管理网络连接 |
| 设备驱动 | 和各类硬件设备通信,提供统一的操作接口 |
| 安全机制 | 权限检查、访问控制、SELinux/AppArmor |
6.3 内核空间与用户空间
为什么要隔离?------ 两个字:安全。
- 内核空间(Ring 0) :拥有最高权限(内核态),可以访问所有内存和硬件
- 用户空间(Ring 3) :权限受限(用户态),只能访问自己被分配的内存区域
- 应用程序想操作硬件 → 必须通过系统调用(syscall)向内核"申请"
- 内核检查请求是否合法 → 合法才执行 → 把结果返回给应用程序
这样就保证了:即使应用程序崩溃或恶意操作,也不会搞崩整个系统,更不会偷窥其他进程的数据。
扩展: 内核态和用户态的切换是有成本的(上下文切换),这就是为什么高性能应用要尽量减少系统调用次数。
6.4 常见内核类型
| 内核类型 | 特征 | 代表系统 |
|---|---|---|
| 单内核(Monolithic) | 所有功能都在一大块内核里,效率高但耦合度高 | Linux、Unix |
| 微内核(Microkernel) | 内核只保留最核心的功能,其他放用户空间,更安全但性能较低 | Minix、QNX |
| 混合内核(Hybrid) | 单内核 + 微内核的折中方案 | Windows NT、macOS |
Linux 是典型的单内核 ,但它支持动态加载/卸载内核模块(insmod / rmmod),走了一条兼顾扩展性的路线。
6.5 日常运维中如何查看内核信息
bash
# 查看内核版本
uname -r # 输出示例: 5.15.0-91-generic
uname -a # 完整系统信息
# 查看内核详细信息
cat /proc/version # 内核版本 + 编译信息
# 查看已加载的内核模块
lsmod # 列表形式
# 查看某个模块的详细信息
modinfo ext4 # 查看 ext4 模块信息
# 查看内核启动参数
cat /proc/cmdline
# 查看内核编译配置(如果存在)
cat /boot/config-$(uname -r)
# 查看内核日志(dmesg)
dmesg | tail -50 # 最近50条内核消息
dmesg | grep -i error # 查找错误信息
dmesg | grep -i memory # 查找内存相关信息
总结
本文围绕六组核心知识点,从概念到原理、从图表到实操,系统地梳理了 Linux 基础知识的骨架:
- Shell ------ 用户与系统的"翻译官",既是命令解释器也是编程环境
- 服务 ------ 由 systemd 管理的后台进程,系统功能的运行载体
- 用户管理 ------ UID/GID 是核心,三类用户各司其职
- 命令体系 ------ 本质是可执行文件,管道和重定向是灵魂
- 文件权限 ------ rwx 三权分立,文件和目录权限含义大不同
- 内核 ------ 操作系统的大脑,用户空间与内核空间隔离保证安全
希望能帮助你建立对 Linux 系统完整、清晰的理解框架。
本文基于运维实战知识清单整理编写,持续更新中。--- 小黑蛋