菜鸟科技网

Linux常用比对命令有哪些?

在Linux系统中,文件和内容的比对是日常运维、开发和数据处理中常见的操作,Linux提供了多种强大的命令工具,用于比较文本文件、二进制文件、目录内容等,帮助用户快速定位差异、验证数据一致性或合并变更,以下将详细介绍几种常用的Linux比对命令,包括其基本用法、参数选项及实际应用场景。

Linux常用比对命令有哪些?-图1
(图片来源网络,侵删)

diff命令:文本文件差异比对

diff是最基础的文本比对工具,用于逐行比较两个文件的内容,并以标准格式输出差异,其核心功能是识别文件的添加、删除和修改行,适用于版本控制、代码审查等场景。

基本语法

diff [选项] 文件1 文件2

常用选项及示例

  • 默认输出:显示差异的行号和修改内容。

    diff file1.txt file2.txt

    输出示例:

    3c3  < This is line 3 in file1.  ---  > This is line 3 in file2 (modified).  

    其中3c3表示第3行需要修改(change),<>分别标识文件1和文件2的内容。

    Linux常用比对命令有哪些?-图2
    (图片来源网络,侵删)
  • 统一输出格式(-u:以更易读的上下文格式显示差异,常用于补丁文件生成。

    diff -u file1.txt file2.txt > patch.patch

    输出包含差异前后的上下文行,便于理解变更范围。

  • 忽略大小写(-i:忽略字母大小写差异。

    diff -i file1.txt file2.txt
  • 递归比较目录(-r:比较两个目录下的所有文件。

    Linux常用比对命令有哪些?-图3
    (图片来源网络,侵删)
    diff -r dir1 dir2
  • 只输出不同文件名(-q:快速检查目录差异,不显示具体内容。

    diff -q dir1 dir2

cmp命令:二进制文件比对

cmp用于逐字节比较两个文件,适用于二进制文件(如可执行程序、镜像文件)的精确比对,若文件完全相同,则无输出;否则输出第一个差异的字节位置和值。

基本语法

cmp [选项] 文件1 文件2

示例

cmp file1.bin file2.bin

若文件不同,输出类似:

file1.bin file2.bin differ: byte 10, line 1  

常用选项

  • 显示差异字节数(-b:以八进制格式显示差异字节。
  • 静默模式(-s:仅通过退出码判断是否相同(0表示相同,1表示不同)。

comm命令:有序文件行比对

comm用于比较两个已排序的文本文件,输出三列:仅文件1独有的行、仅文件2独有的行、两文件共有的行。

基本语法

comm [选项] 文件1 文件2

示例

comm file1.txt file2.txt

输出示例:

        apple    # 仅文件1的行  
    banana        # 仅文件2的行  
    cherry        # 共有行  

常用选项

  • 隐藏某列:通过参数1、2、3分别控制是否显示第一、二、三列。
    comm -12 file1.txt file2.txt  # 仅显示共有行

wdiff命令:单词级比对

wdiffdiff的增强版,以单词为单位比较文本,更适合长句或段落差异的展示。

安装与使用

sudo apt install wdiff  # Debian/Ubuntu系统
wdiff file1.txt file2.txt

输出中,[-删除的单词-]{+新增的单词+}会高亮显示差异。

vimdiff命令:可视化比对

vimdiff基于Vim编辑器,以分屏方式展示两个或三个文件的差异,支持直接在编辑器中修改内容。

基本语法

vimdiff 文件1 文件2

打开后,左右分屏显示文件,差异行会以不同颜色高亮,用户可通过Vim命令跳转或合并差异。

delta命令:现代化比对工具

delta(基于gitdiff算法)提供更美观的终端比对界面,支持语法高亮和分块显示。

安装与使用

cargo install git-delta  # 需安装Rust
delta file1.txt file2.txt

实际应用场景对比

命令 适用场景 输出特点
diff 文本文件行级差异,生成补丁 标准化差异标记,适合脚本处理
cmp 二进制文件精确比对 字节级差异,无上下文信息
comm 已排序文件的交集/差集分析 三列表格形式,需输入文件有序
wdiff 单词级文本差异 高亮显示增删的单词
vimdiff 可视化编辑与合并 交互式分屏,支持实时修改
delta 终端美化展示 语法高亮,分块对比

相关问答FAQs

Q1: 如何快速判断两个目录是否完全相同?
A1: 使用diff -r dir1 dir2会递归比较所有文件和子目录,若仅需检查文件名和大小是否一致,可结合find命令:

find dir1 -type f -exec sha256sum {} + | sort > list1.txt  
find dir2 -type f -exec sha256sum {} + | sort > list2.txt  
diff list1.txt list2.txt  

若输出为空,则两目录完全相同。

Q2: 如何合并两个文本文件的差异?
A2: 若使用diff -u生成了补丁文件,可通过patch命令合并:

diff -u file1.txt file2.txt > patch.patch  
patch file1.txt < patch.patch  # 将file1.txt更新为file2.txt的内容  

若需手动合并,推荐使用vimdiffmeld(图形化工具),通过分屏界面直观选择保留哪些差异部分。

分享:
扫描分享到社交APP
上一篇
下一篇