2026/5/14 0:53:13
网站建设
项目流程
商城网站建设建议,中国做跨境电商出口的网站,数据分析师培训需要多少钱,网页版浏览器在线使用概述
diff 命令是文本文件的详细差异对比工具#xff0c;核心作用是逐行分析两个文件的内容差异#xff0c;精准识别出新增行、删除行、修改行#xff0c;并以标准化格式输出差异位置和具体内容。
资料合集#xff1a;https://pan.quark.cn/s/6fe3007c3e95、https://pan.…概述diff命令是文本文件的详细差异对比工具核心作用是逐行分析两个文件的内容差异精准识别出新增行、删除行、修改行并以标准化格式输出差异位置和具体内容。资料合集https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.cn/s/561de99256a5、https://pan.quark.cn/s/985f55b13d94、https://pan.quark.cn/s/d0fb20abd19a一、核心特点无需提前排序与comm/join不同diff对输入文件无排序要求直接按原始行序对比支持多格式输出默认精简格式还支持易读的上下文格式、统一格式Git默认使用、合并格式便于补丁制作支持目录对比可直接对比两个目录下的文件差异识别新增/删除/修改的文件逐行精准分析不仅能识别整行增删还能识别行内的部分修改部分格式下。二、基本语法# 对比两个文件diff[选项]文件1 文件2# 对比两个目录递归对比所有子文件/子目录diff[选项]目录1 目录2无选项时默认输出精简格式的差异以行号和符号标识增删改支持-作为文件参数代表读取标准输入如cat file1 | diff - file2。三、核心输出符号精简格式默认diff精简格式通过行号范围和操作符号标识差异是最基础的输出格式核心符号含义如下符号含义示例aadd新增行文件2相对文件1新增3a4→ 文件1第3行后文件2新增了第4行ddelete删除行文件1相对文件2删除5d4→ 文件1第5行在文件2中被删除对应文件2第4行后cchange修改行文件1的行与文件2的行内容不同2c2→ 文件1第2行与文件2第2行内容不一致标识文件1的行内容配合a/d/c使用标识文件2的行内容配合a/d/c使用四、常用选项按功能分类高频必记diff选项丰富核心围绕输出格式、对比规则、目录对比设计重点掌握易读格式和实用规则类选项即可覆盖90%场景 输出格式核心推荐使用易读格式选项作用实用场景-c输出上下文格式显示差异行前后N行默认3行上下文标注/-/!标识差异人工阅读快速定位差异及周边内容-u输出统一格式合并上下文用-表示删除、表示新增Git默认差异格式最易读的格式推荐日常使用-e输出编辑脚本格式可直接作为ed编辑器的脚本将文件1修改为文件2批量文件修改制作简单补丁-y输出并排格式左右两列分别显示文件1/文件2内容直观对比短行文本对比一眼看出差异-W N配合-y使用指定并排输出的总宽度默认130字符适配窄终端避免横向滚动 对比规则忽略无关差异选项作用实用场景-i忽略大小写差异如A和a、Hello和hello视为相同对比配置文件/代码忽略大小写笔误-b忽略空格数量差异如多个空格/制表符视为一个行尾空格忽略对比代码忽略缩进/空格的无意义修改-B忽略空行的增删差异对比文本/日志忽略空行的无关变更-w忽略所有空白字符空格、制表符、换行符仅对比纯内容忽略所有格式差异 目录对比递归/精准选项作用实用场景-r递归对比子目录下的所有文件/子目录目录对比默认不递归完整对比两个项目/配置目录的所有差异-q精简目录对比仅显示「文件是否不同」不输出具体差异内容快速排查目录中哪些文件发生了修改-s显示两个文件完全相同的提示默认不显示确认目录中哪些文件未发生任何变更五、基础示例文件对比从简到易读先准备两个测试文件模拟增删改三种差异# file1.txt原始文件 1. 苹果 2. 香蕉 3. 橙子 4. 葡萄 5. 芒果 # file2.txt修改后文件 1. 苹果 2. 香蕉 3. 柚子 # 修改橙子→柚子 4. 葡萄 # 新增空行 5. 榴莲 # 修改芒果→榴莲 6. 草莓 # 新增最后一行场景1默认精简格式快速看差异位置difffile1.txt file2.txt输出结果解读见注释3c3 # 文件1第3行 被修改为 文件2第3行 3. 橙子 # 代表file1的内容 --- # 分隔符 3. 柚子 # 代表file2的内容 5a6,7 # 文件1第5行后file2新增了第6、7行空行草莓 6. 草莓 5c6 # 文件1第5行 被修改为 文件2第6行 5. 芒果 --- 5. 榴莲场景2推荐统一格式-uGit风格最易读diff-u file1.txt file2.txt输出结果解读见注释--- file1.txt 2026-02-02 10:00:00 # 源文件标识 file2.txt 2026-02-02 10:05:00 # 目标文件标识 -1,5 1,7 # 差异范围file1第1-5行 → file2第1-7行 1. 苹果 2. 香蕉 -3. 橙子 # - 代表file1删除的行 3. 柚子 # 代表file2新增的行 4. 葡萄 -5. 芒果 # - 代表file1删除的行 # 代表file2新增的空行 5. 榴莲 # 代表file2新增的行 6. 草莓 # 代表file2新增的行核心优势合并了差异行的上下文用-/直接标识增删一眼看懂修改逻辑。场景3上下文格式-c显示差异周边内容diff-c file1.txt file2.txt输出会标注!修改行、新增行、-删除行并显示差异行前后3行默认上下文适合需要参考周边内容的场景。场景4并排格式-y直观左右对比diff-y -W40file1.txt file2.txt# -W 40 指定总宽度40输出结果|标识修改行标识新增行标识删除行1. 苹果 1. 苹果 2. 香蕉 2. 香蕉 3. 橙子 |3. 柚子 4. 葡萄 4. 葡萄 5. 芒果 |5. 榴莲 6. 草莓六、进阶示例目录对比实用组合场景1递归对比两个目录-r核心对比dir1和dir2的所有文件/子目录识别新增、删除、修改的文件diff-r dir1 dir2输出示例# 标识文件内容不同 diff -r dir1/test.txt dir2/test.txt 1c1 原始内容 --- 修改后内容 # 标识dir2新增文件 Only in dir2: newfile.txt # 标识dir1删除文件dir2无 Only in dir1: oldfile.txt # 标识子目录差异 diff -r dir1/subdir/file.csv dir2/subdir/file.csv 3a3 新增行场景2精简目录对比-rq仅看哪些文件不同只排查目录中发生变更/新增/删除的文件不输出具体内容差异快速定位变更文件diff-rq dir1 dir2输出示例Files dir1/test.txt and dir2/test.txt differ Only in dir2: newfile.txt Only in dir1: oldfile.txt场景3忽略空格/大小写对比代码/配置文件对比代码时缩进、空格、大小写的无意义变更会干扰判断组合选项忽略无关差异# -i 忽略大小写 -b 忽略空格数量 -B 忽略空行diff-u -ibB code1.py code2.py场景4制作补丁文件-u 批量同步修改将file1到file2的修改制作成补丁文件.patch可通过patch命令将其他相同的file1快速修改为file2适合批量部署变更# 制作补丁file1→file2的差异保存为file.patchdiff-u file1.txt file2.txtfile.patch# 应用补丁将file1.txt按补丁修改为file2.txt-p0 表示补丁中的路径层级为0patch -p0 file1.txtfile.patch核心价值无需传输整个文件仅传输小体积的补丁文件即可同步修改适合服务器配置变更、代码小版本更新。场景5对比标准输入与文件将命令输出与现有文件对比快速排查差异如对比当前配置与默认配置# 生成当前系统时间配置与默认配置文件对比timedatectl show|diff-u /etc/chrony.conf -七、与comm的核心区别易混淆必分清diff和comm均为文本对比工具但设计目标和使用场景完全不同无优劣之分按需选择是关键命令核心目标输入要求差异标识方式核心适用场景diff分析内容的具体修改细节增/删/改无需排序行号a/d/c、-/、等精准到行内容comm判断行的归属关系仅文件1/仅文件2/共有必须排序三列输出仅标识行的归属快速找两个文件的交集共有行、差集独有行通俗对比想知道「文件A改了哪几行、改了什么内容」→ 用diff想知道「文件A和文件B哪些行一样、哪些行只在其中一个文件里」→ 用comm。八、关键注意事项二进制文件diff会直接提示「Binary files … differ」不输出具体差异如需对比二进制文件需用专用工具如cmp换行符兼容Windows文件的换行符是\r\nLinux是\n直接对比会出现无意义差异需先用dos2unix转换Windows文件超大文件diff对超大文件GB级处理效率较低若仅需判断是否相同可用cmp命令更快逐字节对比发现差异立即退出补丁文件路径制作补丁时若文件带路径应用补丁时需用-pN指定路径层级N为忽略的路径层数如patch -p1 file.patch空文件对比空文件与非空文件对比diff会标识为整行新增/删除。九、高频组合用法实战直接复用日常代码/配置对比最推荐diff -u -ibB 源文件 目标文件快速定位目录变更文件diff -rq 目录1 目录2制作补丁文件diff -u 源文件 目标文件 补丁.patch应用补丁文件patch -p0 源文件 补丁.patch直观左右对比短文本diff -y -W 60 源文件 目标文件对比命令输出与文件命令 | diff -u 目标文件 -总结diff是Linux文本差异分析的核心工具核心价值是精准识别文件内容的增删改细节并支持多种易读格式和补丁制作。日常使用的核心口诀人工阅读、制作补丁 → 用统一格式-uGit同款最易读快速定位目录变更文件 → 用diff -rq忽略无意义差异空格/大小写/空行→ 组合-ibB仅需行级归属交集/差集→ 用comm而非diff。