【Linux】 阶段性复习(linux vim gcc makefile gdb)
·
Linux 常用命令分类整理
分类 命令 核心功能 常用参数/速记要点 目录导航 pwd打印当前工作目录完整路径 无核心参数,用于确认当前位置 目录导航 ls列出目录下的文件与子目录 -l显示详细信息;-a显示隐藏文件;-h人性化大小单位目录导航 cd切换工作目录 cd ~回个人主目录;cd ..返回上一级;cd -回到上一次目录目录导航 mkdir创建新目录 -p递归创建多级目录目录导航 rmdir删除空目录 仅能删除空文件夹,非空目录用 rm -r文件操作 touch创建空文件 / 更新文件时间戳 后跟文件名即可,无核心参数 文件操作 rm删除文件或目录(高危命令) -r递归删除目录;-f强制删除不提示文件操作 cp复制文件或目录 -r递归复制目录;-p保留文件原属性文件操作 mv移动文件 / 重命名文件 同目录下执行即为重命名 内容查看 cat输出文件全部内容 适合小文件,大文件会刷屏 内容查看 more分页查看文件(仅向下翻) 空格翻页,回车翻行,q 退出 内容查看 less分页查看文件(上下均可翻) 支持上下翻页、 /关键词搜索,比 more 更常用内容查看 head查看文件开头内容 默认显示10行; -n 20指定显示20行内容查看 tail查看文件结尾内容 默认显示10行; -f实时追踪文件新增内容搜索查找 find按条件搜索文件 -name按文件名;-type按文件类型;-size按大小搜索查找 grep在文件内容中匹配字符串 -n显示行号;-i忽略大小写;支持正则表达式搜索查找 which查找命令的可执行文件路径 只检索环境变量 PATH 内的命令 搜索查找 whereis查找命令的程序、源码、手册路径 查找范围比 which 更广 压缩传输 zip / unzipzip 格式压缩与解压 zip 包名 文件压缩;unzip 包名解压压缩传输 rz / sz本地与服务器文件互传 rz本地上传到服务器;sz 文件名服务器下载到本地压缩传输 tar打包/解包(重点) czvf打包并压缩;xzvf解压并解包系统信息 date查看/设置系统日期时间 无参数时显示当前系统时间 系统信息 cal显示日历 默认显示当月; cal 年份显示全年日历系统信息 bc命令行计算器 支持整数、浮点运算,输入表达式直接出结果 系统信息 uname -r查看 Linux 内核版本 -r仅输出内核版本号进程性能 top实时查看系统进程与资源占用 动态显示 CPU、内存、进程状态,q 退出 帮助与别名 man查看命令官方帮助手册 man 命令名,最权威的用法说明帮助与别名 alias给命令设置自定义别名 alias 别名='原命令',简化长命令输入必备热键 Tab自动补全命令/文件名/路径 按1次补全,按2次列出所有候选 必备热键 Ctrl + c强制终止当前运行的程序 中断前台进程,通用停止键 必备热键 Ctrl + d退出当前终端 / 结束输入 等价于输入 exit 关机操作 关机命令 安全关闭/重启系统 shutdown now立即关机;reboot重启;poweroff关机
Vim 核心操作速查表
一、模式切换(基础必背)
操作 功能说明 使用场景 i光标当前位置前进入插入模式 最常用的进入编辑方式 a光标当前位置后进入插入模式 光标后追加内容 o光标下方新建一行并进入插入模式 换行快速续写 I跳到行首并进入插入模式 快速在行首插入 A跳到行尾并进入插入模式 快速在行尾追加 O光标上方新建一行并进入插入模式 向上插行编辑 Esc退出插入/可视化模式,回到普通模式 按错、操作完必按 :进入末行模式 执行保存、退出、替换等命令 二、普通模式 - 光标移动(纯键盘高效操作)
操作 功能说明 速记 h / j / k / l左 / 下 / 上 / 右 移动光标 替代方向键,手不用离开主键盘区 0跳到当前行的行首 $跳到当前行的行尾 gg跳到文件第一行开头 G跳到文件最后一行 nG/:n跳到第 n 行 例: 10G直接跳到第10行w跳到下一个单词的开头 word,按单词跳转 b跳到上一个单词的开头 back Ctrl + f向下翻一整页 forward Ctrl + b向上翻一整页 backward
三、普通模式 - 编辑操作(删/复制/粘贴/撤销)
操作 功能说明 备注 x删除光标所在的单个字符 dd删除(剪切)光标所在整行 删行最高频命令 ndd删除(剪切)光标开始的 n 行 例: 3dd连续删除3行dw删除光标到当前单词结尾 删单个单词 D/d$删除光标到行尾的所有内容 d0删除光标到行首的所有内容 yy复制光标所在整行 yank nyy复制光标开始的 n 行 例: 5yy复制5行p在光标下方粘贴复制/剪切的内容 P在光标上方粘贴复制/剪切的内容 u撤销上一步操作 等价于通用的 Ctrl+Z Ctrl + r重做(撤销之前的撤销) 等价于通用的 Ctrl+Y r替换光标处的单个字符 按r再按新字符,不用进插入模式 R进入逐字符替换模式 类似「改写」模式,按Esc退出
四、搜索与替换
操作 功能说明 备注 /关键词从光标处向下搜索关键词 回车后按 n跳下一个,N跳上一个?关键词从光标处向上搜索关键词 :%s/旧内容/新内容/g全文批量替换所有匹配内容 最常用全局替换, %=全文,g=全局匹配:%s/旧内容/新内容/gc全文替换,每次替换前手动确认 c=confirm,适合谨慎修改:n1,n2s/旧内容/新内容/g指定行号范围替换 例: :10,20s/abc/def/g
五、末行模式常用命令
命令 功能说明 备注 :w保存文件,不退出 write :q退出Vim 文件未修改时可用,修改未保存会报错 :wq保存并退出 最常用退出方式 :q!强制退出,不保存修改 改坏了直接放弃所有改动 :wq!强制保存并退出 针对只读文件,需对应权限 ZZ普通模式下直接保存退出 快捷键,不用进末行模式 :set nu显示行号 写代码、定位行非常实用 :set nonu取消显示行号 :noh取消搜索结果的高亮 搜完清掉高亮标记 :sp 文件名水平分屏打开另一个文件 上下分屏 :vs 文件名垂直分屏打开另一个文件 左右分屏
六、可视化模式(批量选中文本)
操作 功能说明 备注 v进入字符可视化模式 按光标移动自由选字符 V进入行可视化模式 整行选中,批量删/复制行 Ctrl + v进入块可视化模式 矩形选块,批量注释、批量插入神器 选中后 d删除选中的内容 选中后 y复制选中的内容 选中后 >选中内容整体向右缩进 选中后 <选中内容整体向左缩进
GCC 编译操作速查
一、基础语法与最简用法
语法格式:
gcc [编译选项] 源文件1 源文件2 ... [-o 输出文件名]最基础用法:
gcc test.c -o test # 将 test.c 编译链接生成名为 test 的可执行文件 # 运行程序:./test若省略
-o,默认生成名为a.out的可执行文件。二、核心编译选项速查表
按功能分类,方便记忆:
分类 选项 功能说明 常用场景 输出控制 -o <文件名>指定输出文件的名称 所有编译场景必用,避免默认生成 a.out -E仅执行预处理,不进行后续编译 查看宏展开、头文件包含结果 -S编译生成汇编代码(.s 文件),不汇编 查看 C 语言对应的汇编指令 -c编译生成二进制目标文件(.o 文件),不链接 多文件分开编译,最后统一链接 警告提示 -Wall开启大部分常用警告提示 日常编码必加,提前发现语法隐患 -Werror将所有警告视为错误,强制终止编译 严格代码规范,禁止带警告通过 -w关闭所有警告提示 不推荐日常使用 代码优化 -O0关闭所有优化(默认级别) 调试代码时使用,保证代码原貌 -O1 / -O2 / -O3一级/二级/三级代码优化 发布程序用, -O2是最常用的平衡选项-Os针对程序体积优化 嵌入式、存储空间受限场景 调试信息 -g生成可被 gdb 调试的调试信息 需要调试程序时必加 -ggdb生成 gdb 专用的更丰富调试信息 深度调试场景 链接相关 -l<库名>链接指定的第三方库 例: -lm链接数学库,-lpthread链接线程库-L<库路径>指定库文件的搜索目录 链接自定义路径下的库文件 -static强制静态链接,生成静态可执行文件 不依赖系统库,文件体积更大 -shared生成动态链接库(.so 文件) 制作共享库 标准指定 -std=c89 / -std=c99 / -std=c11指定 C 语言标准版本 兼容不同语法标准 -std=c++98 / -std=c++11指定 C++ 语言标准(g++) C++ 编译时使用 其他常用 -D<宏名>编译时定义宏 条件编译、传参控制代码逻辑 -I<头文件路径>指定头文件的搜索目录 引用自定义路径的头文件 三、编译四阶段(分步执行,理解原理)
GCC 完整编译分为 4 步,可通过选项单独执行每一步,便于排查问题:
- 预处理阶段(处理宏、头文件、注释)
gcc -E test.c -o test.i # 生成 .i 预处理后的文本文件
- 编译阶段(C 代码转换为汇编代码)
gcc -S test.i -o test.s # 生成 .s 汇编语言文件
- 汇编阶段(汇编代码转换为二进制目标文件)
gcc -c test.s -o test.o # 生成 .o 二进制目标文件
- 链接阶段(目标文件+系统库拼接成可执行文件)
gcc test.o -o test # 生成最终可执行程序 test四、高频使用场景示例
- 单文件带警告+调试信息编译
gcc -Wall -g test.c -o test
- 多文件联合编译
# 方式1:一步编译 gcc main.c func.c -o app # 方式2:分开编译再链接(修改单个文件无需全量重编译) gcc -c main.c -o main.o gcc -c func.c -o func.o gcc main.o func.o -o app
- 编译并链接数学库
gcc calc.c -o calc -lm # 代码中使用 sin/sqrt 等数学函数时,需链接 libm 数学库
- O2 优化发布编译
gcc -Wall -O2 main.c -o release_app
Makefile 基础入门
一、基础语法规则
Makefile 的核心是「目标-依赖-命令」的规则:
目标文件: 依赖文件1 依赖文件2 ... 执行的编译命令⚠️ 硬性规则:命令行前面必须是一个 Tab 键,不能是空格,否则会直接报错。
执行逻辑:执行
make 目标名时,会检查依赖文件是否比目标文件更新,若有更新才重新执行命令,实现增量编译。二、核心概念速记
1. 自定义变量
用变量替代重复内容,修改时只改一处,格式:
# 定义变量 变量名 = 变量值 # 引用变量 $(变量名)行业约定的常用变量:
CC:指定编译器,如CC = gccCFLAGS:编译选项,如CFLAGS = -Wall -g -O2LDFLAGS:链接选项,如LDFLAGS = -lmOBJS:所有目标文件列表,如OBJS = main.o func.oTARGET:最终可执行文件名,如TARGET = app2. 自动变量(高频必背)
无需手动定义,在规则中自动代表对应文件:
自动变量 含义 $@代表当前规则的目标文件 $<代表第一个依赖文件 $^代表所有依赖文件 3. 伪目标 .PHONY
如果目标不是真实生成的文件(比如清理命令
clean),需要声明为伪目标,避免和同名文件冲突,导致命令不执行。.PHONY: clean all三、从简到繁示例
假设项目文件:
main.c、func.c、func.h,最终生成可执行文件app。版本1:最简原始版
app: main.o func.o gcc main.o func.o -o app main.o: main.c func.h gcc -c main.c -o main.o func.o: func.c func.h gcc -c func.c -o func.o clean: rm -f *.o app执行方式:
make或make app:编译生成可执行文件make clean:清除所有 .o 文件和可执行文件版本2:变量优化版
用变量统一管理编译器、编译选项,修改维护更方便:
CC = gcc CFLAGS = -Wall -g LDFLAGS = TARGET = app OBJS = main.o func.o $(TARGET): $(OBJS) $(CC) $(OBJS) -o $(TARGET) $(LDFLAGS) main.o: main.c func.h $(CC) $(CFLAGS) -c main.c -o main.o func.o: func.c func.h $(CC) $(CFLAGS) -c func.c -o func.o .PHONY: clean clean: rm -f $(OBJS) $(TARGET)版本3:自动变量通用版(最常用写法)
用自动变量和模式规则简化重复命令,新增 .c 文件只需在 OBJS 里加对应 .o 即可:
CC = gcc CFLAGS = -Wall -g -O2 LDFLAGS = -lm TARGET = app OBJS = main.o func.o $(TARGET): $(OBJS) $(CC) $^ -o $@ $(LDFLAGS) %.o: %.c func.h $(CC) $(CFLAGS) -c $< -o $@ .PHONY: clean clean: rm -f $(OBJS) $(TARGET)说明:
%.o: %.c是模式规则,表示所有 .o 文件都由对应的同名 .c 文件编译生成。四、完整通用模板(可直接套用)
适用于单目录下所有 .c 文件的项目,新增源文件无需修改 Makefile:
# 编译器与编译选项 CC = gcc CFLAGS = -Wall -g -std=c99 LDFLAGS = -lm -lpthread # 最终生成的可执行文件名 TARGET = myapp # 自动获取当前目录所有 .c 文件,替换为 .o 列表 SRCS = $(wildcard *.c) OBJS = $(SRCS:.c=.o) # 最终链接生成可执行文件 $(TARGET): $(OBJS) $(CC) $^ -o $@ $(LDFLAGS) # 模式规则:所有 .c 编译为对应 .o %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ # 伪目标声明 .PHONY: clean rebuild # 清理所有编译产物 clean: rm -f $(OBJS) $(TARGET) # 完全重新编译 rebuild: clean $(TARGET)五、常用命令与注意事项
- 直接执行
make:默认执行第一个目标(通常是最终可执行文件)make clean:执行清理目标make -j4:开启4线程并行编译,加快大项目编译速度- 新手易错点:
- 命令前必须是 Tab,空格会报
missing separator错误- 头文件修改后,所有包含它的源文件都需要重编译,要把头文件写进依赖里
GDB 调试操作速查表
一、启动与退出
完整命令 简写 功能说明 gdb 可执行文件- 启动 GDB 并加载目标程序 gdb 可执行文件 core文件- 调试 core 转储文件,定位程序崩溃位置 quitq退出 GDB 二、断点管理(核心操作)
完整命令 简写 功能说明 break 行号b 行号在当前文件的指定行设置断点 break 函数名b 函数名在指定函数的入口处设置断点 break 文件名:行号b 文件名:行号多文件项目中,指定文件的指定行打断点 info breakpointsi b查看所有断点的编号、位置、状态 delete 断点编号d 编号删除指定编号的断点 deleted删除所有断点 disable 断点编号- 临时禁用指定断点(不删除) enable 断点编号- 重新启用被禁用的断点 condition 断点编号 条件- 设置条件断点,满足条件时才停下
示例:condition 1 i == 10三、程序运行控制
完整命令 简写 功能说明 runr启动程序运行,直到遇到断点或程序结束 run 参数1 参数2r 参数运行程序并传入命令行参数 continuec从断点处继续运行,直到下一个断点 nextn单步执行,不进入函数内部(逐过程) steps单步执行,会进入函数内部(逐语句) finishfin运行到当前函数返回,直接跳出函数 until 行号u 行号直接运行到指定行后停下 Ctrl + c- 中断正在运行的程序,回到 GDB 命令行 四、信息查看(排查核心)
完整命令 简写 功能说明 print 变量名/表达式p 变量名打印变量或表达式的当前值 ptype 变量名- 查看变量的数据类型定义 listl查看当前位置附近的源代码 list 行号l 行号查看指定行号附近的代码 list 函数名l 函数名查看指定函数的完整代码 info localsi locals打印当前函数所有局部变量的值 backtracebt查看函数调用栈,崩溃时定位调用路径 frame 栈帧编号f 编号切换到指定栈帧,查看对应函数的变量 display 变量名- 设置自动监控变量,每次停下都自动打印 info display- 查看所有自动监控的变量 undisplay 编号- 取消指定变量的自动监控 五、高级调试技巧
完整命令 简写 功能说明 set var 变量名 = 值- 手动修改变量的值,改变程序运行逻辑 call 函数名(参数)- 手动调用并执行函数 watch 变量名- 设置观察点,变量值被修改时自动停下 info watchpoints- 查看所有观察点 set args 参数列表- 设置程序的命令行参数 新手标准调试流程
- 编译生成调试版本:
gcc -g -Wall test.c -o test- 启动 GDB:
gdb ./test- 主函数入口打断点:
b main- 运行程序:
r- 单步调试:
n(不进函数)/s(进函数)- 查看变量:
p 变量名- 继续运行:
c- 调试结束退出:
q推荐博主
更多推荐





所有评论(0)