一、Linux 目录结构(类比示例,核心规则)
1. 目录结构类比理解
| 目录 / 标识 | 功能说明 | 类比对象 |
|---|---|---|
根目录/ |
所有文件和目录的起点,是整个文件系统的根节点 | 学校 |
/bin |
存放基础常用命令(如ls、cp、mkdir),所有用户均可使用 |
学校公共教室(所有学生可用) |
/etc |
存放系统全局配置文件,通常仅管理员有权限修改 | 学校行政办公室(仅老师可用) |
/sbin |
存放管理员专用命令(如shutdown、ifconfig),普通用户无法直接使用 |
学校设备控制室(仅管理员可用) |
/boot |
存放系统启动所需的核心文件(如内核、启动引导程序) | 学校大门门禁系统 |
/dev |
存放设备文件,将硬件设备(硬盘、键盘、串口等)抽象为文件进行管理 | 学校各类教学设备(电脑、投影仪等) |
/home |
普通用户家目录的根目录,为多用户系统提供独立存储空间 | 学校宿舍楼 |
/home/用户名(如/home/zhangsan) |
单个用户的专属目录,用户可在此创建、修改、保存个人文件 / 代码 | 学生个人宿舍 |
2. 核心操作规则
- 所有代码只能在用户自家目录(
/home/用户名)下创建、修改、保存,不可在其他目录随意存放个人文件 - 类比逻辑:Linux 是多用户共用系统,如同多个学生共用一所学校,个人物品(文件 / 代码)只能放在自己的宿舍(家目录),不可乱放在教学楼(
/bin、/etc等系统目录)等公共区域
二、文件与目录基础操作指令(复习)
1. 核心基础指令(含功能、格式、示例)
| 指令 | 功能说明 | 格式 / 示例 |
|---|---|---|
cd |
切换路径;支持特殊路径标识 | 格式:cd 目标路径;示例:- cd ~(切换到家目录)- cd -(在最近两个位置间切换)- cd .(当前目录,无实际切换效果)- cd ..(返回上一层目录) |
ls |
显示当前 / 指定目录下的文件 / 目录列表 | 格式:ls [选项] [目录];示例:ls -l(详细列出当前目录文件) |
pwd |
显示当前所在的绝对路径 | 格式:pwd;示例:pwd(输出:/home/stu) |
touch |
创建普通空文件;不进入文件编辑界面 | 格式:touch 文件名;示例:touch a.txt、touch main.c |
mkdir |
创建目录(文件夹) | 格式:mkdir [选项] 目录名;示例:mkdir testdir、mkdir -p a/b/c(多级目录) |
cp |
拷贝文件 / 目录;拷贝目录需加-r(递归)选项 |
格式:- 拷贝文件:cp 源文件 目标路径/新文件名- 拷贝目录:cp -r 源目录 目标路径示例:cp a.txt /home/stu/、cp -r testdir /home/stu/backup/ |
mv |
兼具移动文件 / 目录、重命名两种功能 | 格式 / 示例:- 重命名:mv test.txt new.txt- 移动文件:mv new.txt /home/stu/- 移动目录:mv testdir /home/stu/- 移动并改名:mv a.txt /home/stu/b.txt选项:-i(覆盖前询问)、-f(强制覆盖)、-v(显示详细操作) |
rm |
删除文件 / 目录;删除目录需加-r,强制删除加-f |
格式 / 示例:- 删除文件:rm a.txt- 删除目录:rm -r testdir- 强制删除目录:rm -rf testdir选项:-i(询问操作)、-v(显示详细操作) |
2. 文件内容操作指令(查看、合并、统计、搜索)
(1)文件内容查看指令
| 指令 | 功能说明 | 格式 / 示例 |
|---|---|---|
cat |
1. 打印文件内容;2. 合并多个文件;3. 配合重定向写入 / 追加文件 | 格式 / 示例:1. 打印文件:cat a.txt、cat a.txt b.txt2. 合并覆盖写入:cat a.txt b.txt > c.txt(c.txt 不存在则自动创建)3. 合并追加写入:cat a.txt b.txt >> c.txt4. 屏幕内容覆盖写入:cat > file1(输入内容后按Ctrl+d结束)5. 屏幕内容追加写入:cat >> file1(输入内容后按Ctrl+d结束) |
more |
分屏显示文本内容,按窗口分页,空格翻页,查看完毕自动退出;无需滑动鼠标 | 格式:more 文件名;示例:more test.txt(按空格翻页,按q退出) |
less |
单页显示文本内容,支持上下键滚动查看,不自动退出,可反复浏览 | 格式:less 文件名;示例:less test.txt(上下键翻行,按q退出) |
tail |
查看文件尾部内容,默认 10 行;-n指定行数 |
格式:tail -n 行数 文件名;示例:tail -n 5 test.txt(最后 5 行)、tail -n 20 test.txt(最后 20 行) |
head |
查看文件头部内容,默认 10 行;-n指定行数,-c指定字符数 |
格式 / 示例:- head -n 3 test.txt(前 3 行)- head -n 20 test.txt(前 20 行)- head -c 5 test.txt(前 5 个字符) |
(2)文件内容 / 文件搜索指令
| 指令 | 功能说明 | 格式 / 示例 | |||
|---|---|---|---|---|---|
find |
按路径、名称、大小等条件搜索文件;默认从当前目录查找 | 格式 / 示例:1. 按名称搜索:find 起始路径 -name "文件名"(示例:find /home/stu -name main.c)2. 按大小搜索:`find 起始路径 -size + |
-n[kMG](+大于/-小于,k=KB、M=MB、G=GB;示例:find /home -size +10M`) |
||
grep |
在文件内搜索匹配的文本信息;匹配内容需用双引号包裹 | 格式:grep [选项] "匹配信息" 文件名;示例:1. 精准匹配:grep "hello" test.c2. 忽略大小写:grep -i "HELLO" test.c3. 反向匹配(排除目标信息):grep -v "hello" test.c |
|||
| 管道 ` | ` | 在两个进程间传递数据,将左侧命令结果传递给右侧命令处理,实现复杂功能 | 格式:` 命令 1 | 命令 2;示例:ls -l |
grep "a.txt"`(先列出详细文件,再过滤出含 a.txt 的信息) |
(3)文件统计与对比指令
| 指令 | 功能说明 | 格式 / 示例 |
|---|---|---|
wc |
统计文件行数、单词数、字符数;-l行数、-w单词数、-c字符数 |
格式:wc [选项] 文件名;示例:wc -l test.txt(统计行数)、wc -w test.txt(统计单词数)、wc -c test.txt(统计字符数) |
cmp |
逐字节比较两个文件内容,效率高,适合二进制文件;无差异则无输出,有差异显示首个不同位置 | 格式 / 示例:1. 基础比较:cmp 文件1 文件22. 跳过 n 个字节后比较:cmp -s n 文件1 文件23. 仅比较前 n 个字节:cmp -n n 文件1 文件24. 查看退出状态:echo $?(0 = 相同、1 = 不同、2 = 错误) |
3. 文件压缩与解压指令(tar)
- 核心功能:打包 / 解包、压缩 / 解压文件 / 目录
- 核心选项:
c:创建压缩包(打包)x:释放包中内容(解包)z:使用 gzip 格式压缩 / 解压f:指定压缩包文件名
- 常用命令 / 示例:
- 压缩打包:
tar czf my.tar.gz test.c testdir(将 test.c 和 testdir 压缩为 my.tar.gz) - 解压解包(一次完成):
tar zxf my.tar.gz(将 my.tar.gz 解压到当前目录)
- 压缩打包:
4. 其他实用指令
| 指令 | 功能说明 | 格式 / 示例 |
|---|---|---|
echo |
在屏幕上输出指定内容 | 格式:echo 内容;示例:echo pwd(输出字符串 "pwd")、echo $?(输出上一个命令的退出状态) |
which |
查找外部命令对应的程序文件路径;无法查找内部命令 | 格式:which 命令;示例:which sleep、which gcc |
type |
查看命令的执行属性(内部命令 / 外部命令) | 格式:type 命令;示例:type cd(输出:cd is a shell builtin,内部命令)、type gcc(外部命令) |
history |
列出之前使用过的所有命令;按上下键可调用历史命令 | 格式:history |
shutdown |
关机 / 重启系统,需管理员权限 | 格式 / 示例:- 立刻关机:shutdown -h now- 立刻重启:shutdown -r now |
chmod |
修改文件 / 目录的权限(change mode);权限分为所有者(u)、组员(g)、其他人(o) | 格式 / 示例:1. 字符修改法:chmod u+r/g-w/o=x 文件名(+增加、-减少、=赋予)2. 数字修改法:chmod 777 文件名(7=rwx、6=rw-、5=r-x 等) |
5. 重定向指令(> / >>)
- 功能:将命令输出写入文件,而非显示在终端
- 分类 / 示例:
- 覆盖重定向
>:将左侧内容覆盖写入右侧文件,文件不存在则创建;示例:cat a.txt > b.txt(将 a.txt 内容覆盖到 b.txt)、cat > file1(屏幕内容覆盖写入 file1) - 追加重定向
>>:将左侧内容追加到右侧文件末尾,文件不存在则创建;示例:cat a.txt >> b.txt(将 a.txt 内容追加到 b.txt)、cat >> file1(屏幕内容追加写入 file1)
- 覆盖重定向
三、vim 编辑器操作
1. 基础模式与切换
- 核心模式:命令模式(默认打开模式)、插入模式、末行模式
- 模式切换:
- 命令模式 → 插入模式:按
i(光标前插入)、a(光标后插入)、o(新建行插入)、I(行首插入)、A(行尾插入)、O(上一行新建插入) - 插入模式 / 末行模式 → 命令模式:按
Esc键 - 命令模式 → 末行模式:输入
:、?或/
- 命令模式 → 插入模式:按
2. 命令模式操作(无需加:,直接执行)
| 操作功能 | 指令 | 补充说明 |
|---|---|---|
| 显示行号 | set nu |
- |
| 隐藏行号 | set nonu |
- |
| 复制内容 | yy(复制当前行)、nyy(复制 n 行) |
- |
| 粘贴内容 | p(粘贴到光标后) |
- |
| 删除 / 剪切 | dd(删除当前行)、ndd(删除 n 行) |
删除即剪切,可通过p粘贴 |
| 撤销操作 | u |
撤销上一次操作 |
| 恢复撤销 | ctrl r |
恢复被u撤销的操作 |
| 跳转行 | G(最后一行)、gg(第一行)、nG/:n(第 n 行) |
- |
| 清空内容 | cc(清空当前行)、C(从光标清空到行末) |
- |
| 查找内容 | /str(搜索字符串 str) |
n向下查找下一个,N向上查找 |
| 搜索高亮 | set hlsearch |
高亮显示匹配的搜索结果 |
| 取消搜索高亮 | set nohlsearch |
取消高亮显示 |
3. 末行模式操作(需先输入:进入)
| 操作功能 | 指令 | 补充说明 |
|---|---|---|
| 保存文件 | :w |
仅保存,不退出 vim |
| 退出 vim | :q |
文件未修改时可用 |
| 保存并退出 | :wq/:x |
- |
| 不保存强制退出 | :q! |
放弃所有修改 |
| 显示断点信息 | :info break |
调试时使用 |
| 删除断点 | :delete 断点编号 |
调试时使用 |
4. gdb 调试操作(针对 debug 版本可执行文件)
- 前提:编译时需添加
-g选项生成 debug 版本,Linux 默认是 release 版本 - 核心步骤 / 指令:
- 生成 debug 版本:
gcc -o main main.c -g - 进入 gdb 调试:
gdb main - 调试指令:
b 行号/函数名:设置断点(示例:b 5、b main)r:启动程序n:单步执行(不进入函数内部)s:单步执行(进入函数内部;s 函数名直接调用函数,不进入内部)c:继续运行,直到下一个断点(无断点则执行完毕)finish:跳出当前函数p 变量名:打印变量值bt:显示栈堆信息及当前调试位置q:退出 gdb 调试
- 生成 debug 版本:
四、进程管理
1. 进程基础概念
- 进程定义:计算机正在运行中的程序实例,是操作系统资源分配和调度的基本单位
- 进程控制块(PCB):本质是结构体,操作系统通过双向链表管理所有 PCB(创建进程 = 添加链表节点,关闭进程 = 删除节点)
- 进程 ID(PID):进程的唯一标识;进程关闭后 PID 会被回收,新进程创建时系统会从小到大分配空闲 PID

- 父子进程:相对概念,进程创建时会生成对应的父子关系
- 命令解释器:bash、shell 均为命令解释器,一个终端对应一个命令解释器
- 前台 / 后台进程(类比示例):
- 前台进程:像在餐厅门口打饭并原地就餐,需等自己吃完,后面的人才能打饭;占用终端,需等待进程完成后才能执行后续命令
- 后台进程:像打饭后去别处就餐,不影响后面的人打饭;不占用终端,进程是否完成不影响后续命令执行
2. 进程操作指令
| 指令 | 功能说明 | 格式 / 示例 |
|---|---|---|
ps |
显示当前运行的进程 | 格式 / 示例:- ps(显示当前终端进程)- ps -e/ps -el(列出系统所有进程) |
kill |
结束指定进程;-9强制结束(部分进程无法正常结束时使用) |
格式 / 示例:- 正常结束:kill 1234(1234 为 PID)- 强制结束:kill -9 1234 |
ctrl c |
快速结束当前前台运行的进程 | 直接在终端按下Ctrl+c组合键 |
ctrl z |
暂停当前前台运行的进程 | 直接在终端按下Ctrl+z组合键,可通过fg恢复前台运行 |
| 后台运行 | 将进程放到后台运行,不占用终端 | 格式:命令 &;示例:sleep 300 &(后台运行 300 秒睡眠进程) |
jobs |
查看后台进程的运行状态及相关指令 | 格式:jobs |
top |
实时监控系统进程和资源使用情况,按q退出 |
格式:top |
3. 进程权限说明
kill指令仅能杀死当前用户创建的进程,无法杀死同级别的其他用户进程- 管理员(root)有权限杀死所有用户的进程
五、用户管理
1. 用户操作指令(需管理员权限)
| 指令 | 功能说明 | 格式 / 示例 |
|---|---|---|
useradd/adduser |
添加新用户 | 格式:useradd 用户名(示例:useradd zhangsan) |
userdel/deluser |
删除已有用户 | 格式:userdel 用户名(示例:userdel zhangsan) |
passwd |
修改用户密码 | 格式:passwd 用户名;示例:- 普通用户改自己密码:passwd- 管理员改其他用户密码:passwd zhangsan |
六、编译链接与工程管理
1. 编译基础认知
- 文件名后缀:Linux 不以文件后缀名区分文件类型,但 C 语言编译器要求源代码必须以
.c结尾 - 可执行文件格式:
- Linux 系统:ELF 格式
- Windows 系统:PE 格式
- 编译目的:将高级语言转换为计算机可理解的机器指令(机器语言)
- 工程要求:一个工程中有且仅有一个
main()函数 - 编译版本:
- debug(开发调试版本):包含调试信息,需通过
-g选项生成(示例:gcc -o main main.c -g),支持 gdb 调试 - release(发行版本):无调试信息,运行速度更快;Linux 默认是 release 版本,Windows 默认是 debug 版本
- debug(开发调试版本):包含调试信息,需通过
2. C 语言编译链接四阶段(类比 "造车" 流程)
| 阶段 | 功能说明(类比造车) | 指令示例 | 生成文件格式 |
|---|---|---|---|
| 预编译 | 将头文件内容拷贝到源文件中(类比:准备所有造车材料,如矿石) | gcc -E main.c -o main.i |
.i |
| 编译 | 将高级语言转换为汇编语言(类比:将矿石加工为钢铁、塑料) | gcc -S main.c -o main.s |
.s |
| 汇编 | 将汇编语言转换为机器语言(二进制目标文件)(类比:将钢铁加工为车架、玻璃) | gcc -c main.c -o main.o |
.o/.obj |
| 链接 | 将多个目标文件和库文件组合为可执行文件(类比:将车架、玻璃组装为完整汽车) | gcc main.o add.o max.o -o main |
可执行文件(ELF 格式) |
3. 简化编译与多文件编译
- 简化编译(一次完成四阶段):
- 格式:
gcc -o 可执行文件名 源文件名 - 示例:
gcc -o main main.c、gcc -o hello hello.c
- 格式:
- 多文件编译:
- 格式:
gcc -o 可执行文件名 源文件1.c 源文件2.c ... - 示例:
gcc -o main main.c add.c max.c(将 main.c、add.c、max.c 编译并链接为 main)
- 格式:
4. 头文件引用
- 尖括号
<>:引用系统库头文件,库文件存放于/usr/include目录(示例:#include <stdio.h>) - 双引号
"":引用用户自定义头文件(示例:#include "add.h") - 注意:调用其他文件中的自定义函数时,主函数或 makefile 中需声明该函数,否则会报错 "函数无声明或定义"
5. makefile 工具
-
作用**:管理工程,实现自动化编译,无需手动逐个编译多个文件**
-
文件名:
makefile或MAKEFILE(首字母大写也可) -
核心操作:
- 执行编译:
make(按 makefile 中的规则编译工程) - 清理编译产物:
make clean(删除编译生成的.o文件和可执行文件)
- 执行编译:
-
格式要求:
-
核心规则:
目标: 依赖文件\n\t命令(注意:命令前必须加tab键,不可用空格替代)all: main # 最终生成的可执行文件是main
main: main.o add.o max.o # main依赖main.o、add.o、max.o
gcc main.o add.o max.o -o main # 链接命令
main.o: main.c # main.o依赖main.c
gcc -c main.c -o main.o # 汇编命令
add.o: add.c # add.o依赖add.c
gcc -c add.c -o add.o
max.o: max.c # max.o依赖max.c
gcc -c max.c -o max.o
clean: # 清理规则
rm -rf *.o main # 删除所有.o文件和main可执行文件
-
-
额外功能:可一次生成多个可执行文件,按需定义多个目标即可
七、系统基础与硬件交互
1. 硬件组成与交互
- 核心硬件:CPU、硬盘(持久存储)、内存(临时存储)、输入 / 输出设备
- 总线类型:
- 地址总线:用于硬件寻址
- 数据总线:用于传输数据
- 控制总线:用于传输控制信号
- 程序运行流程:
- 编译后的文件存储在硬盘中(持久存储,断电数据不丢失)
- 运行程序时,系统通过数据总线将文件拷贝到内存中
- CPU 从内存中读取机器指令并执行
- 内存特性:断电后数据消失,仅运行中的程序会存于内存,编译 / 未编译的文件默认存于硬盘
2. 基础概念
- 裸机:未安装操作系统的电脑
- 指令:让计算机完成特定操作的命令
- 命令解释器:负责解析用户输入的命令,bash、shell 均为命令解释器,一个终端对应一个命令解释器
- 内部命令与外部命令区别:
- 内部命令(如
cd):shell 内置,无需创建子进程,效率高;可修改当前 shell 进程环境(如切换目录) - 外部命令(如
gcc):独立程序文件,执行时需创建子进程,无法影响父进程环境
- 内部命令(如
八、帮助手册(man)
- 功能:查看命令、库函数、系统调用的帮助文档
- 分类使用:
man 1 命令:查看普通命令的帮助(示例:man 1 ls)man 2 库函数:查看库函数的帮助(示例:man 2 printf)man 3 系统调用:查看系统调用的帮助(示例:man 3 open)