diff - compare files line by line

diff命令用于比较文件的差异。

diff以逐行的方式,比较文本文件的异同处。

如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。

语法:

diff [OPTION]... FILES

diff [-abBcdefHilnNpPqrstTuvwy][-<行数>][-C <行数>][-D <巨集名称>][-I <字符或字符串>][-S <文件>][-W <宽度>][-x <文件或目录>][-X <文件>][--help][--left-column][--suppress-common-line][文件或目录1][文件或目录2]

参数:

  • -<行数>  指定要显示多少行的文本。此参数必须与-c或-u参数一并使用。
  • -a或--text  diff预设只会逐行比较文本文件。
  • -b或--ignore-space-change  不检查空格字符的不同。
  • -B或--ignore-blank-lines  不检查空白行。
  • -c  显示全部内文,并标出不同之处。
  • -C<行数>或--context<行数>  与执行"-c-<行数>"指令相同。
  • -d或--minimal  使用不同的演算法,以较小的单位来做比较。
  • -D<巨集名称>或ifdef<巨集名称>  此参数的输出格式可用于前置处理器巨集。
  • -e或--ed  此参数的输出格式可用于ed的script文件。
  • -f或-forward-ed  输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处。
  • -H或--speed-large-files  比较大文件时,可加快速度。
  • -l<字符或字符串>或--ignore-matching-lines<字符或字符串>  若两个文件在某几行有所不同,而这几行同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异。
  • -i或--ignore-case  不检查大小写的不同。
  • -l或--paginate  将结果交由pr程序来分页。
  • -n或--rcs  将比较结果以RCS的格式来显示。
  • -N或--new-file  在比较目录时,若文件A仅出现在某个目录中,预设会显示:
  • Only in目录:文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。
  • -p  若比较的文件为C语言的程序码文件时,显示差异所在的函数名称。
  • -P或--unidirectional-new-file  与-N类似,但只有当第二个目录包含了一个第一个目录所没有的文件时,才会将这个文件与空白的文件做比较。
  • -q或--brief  仅显示有无差异,不显示详细的信息。
  • -r或--recursive  比较子目录中的文件。
  • -s或--report-identical-files  若没有发现任何差异,仍然显示信息。
  • -S<文件>或--starting-file<文件>  在比较目录时,从指定的文件开始比较。
  • -t或--expand-tabs  在输出时,将tab字符展开。
  • -T或--initial-tab  在每行前面加上tab字符以便对齐。
  • -u,-U<列数>或--unified=<列数>  以合并的方式来显示文件内容的不同。
  • -v或--version  显示版本信息。
  • -w或--ignore-all-space  忽略全部的空格字符。
  • -W<宽度>或--width<宽度>  在使用-y参数时,指定栏宽。
  • -x<文件名或目录>或--exclude<文件名或目录>  不比较选项中所指定的文件或目录。
  • -X<文件>或--exclude-from<文件>  您可以将文件或目录类型存成文本文件,然后在=<文件>中指定此文本文件。
  • -y或--side-by-side  以并列的方式显示文件的异同之处。
  • --help  显示帮助。
  • --left-column  在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容。
  • --suppress-common-lines  在使用-y参数时,仅显示不同之处。

示例:

# 准备两个完全相同的文件
[root@oldboy new]# ls
passwd_file_1.txt passwd_file_2.txt
[root@oldboy new]# diff passwd_file_1.txt passwd_file_2.txt # 在2文件中添加一行内容,再比较
[root@oldboy new]# echo "new line">>passwd_file_2.txt
[root@oldboy new]# diff passwd_file_1.txt passwd_file_2.txt
72a73
> new line

说明:上面的“72a73”表示password_file_1.txt和password_file_2.txt文件,passwd_file_2.txt文件比第一个文件多了一行,符号>表示的是第二个文件的内容,显示的是比第一个文件多一行的行内容。

字母acd的意思:

  • c就是 change改变 的意思
  • a是 add添加 的意思
  • d是 delete删除 的意思

符号<, >, ---的意思:

  • < 开头的行,表示来自第一个文件
  • >  开头的行,表示来自第二个文件
  • ---  三个横杠,仅仅表示分隔开文件1和文件2的这些行。

更多的示例说明:

[root@oldboy new]# echo aaa>>passwd_file_1.txt
[root@oldboy new]# diff passwd_file_1.txt passwd_file_2.txt
73c73
< aaa
---
> new line

说明:表示第一个文件和第二个文件的第73行不同,分别为aaa和new line。

[root@oldboy new]# echo "add more lines to file1">>passwd_file_1.txt
[root@oldboy new]# diff passwd_file_1.txt passwd_file_2.txt
73,74c73
< aaa
< add more lines to file1
---
> new line

说明:表示第一个文件和第二个文件的73行都不同,且分别显示了其内容;一个文件比第二个文件多了第74行,并未用74a73的方式显示,而是用输出内容的方式显示。

# 手动删除第二个文件的第一行,再比较
[root@oldboy new]# ls
passwd_file_1.txt passwd_file_2.txt
[root@oldboy new]# diff passwd_file_1.txt passwd_file_2.txt
1d0
< root:x:0:0:root:/root:/bin/bash
73,74c72
< aaa
< add more lines to file1
---
> new line

说明:1d0,说明第一个文件的第一行和第二个文件的第0行,第0行的内容仅在第一个文件中存在。即表示第一个文件需要删除第一行,然后再和第二个文件进行比较。

比较目录内的文件:

[root@oldboy new]# diff /etc/rc3.d /etc/rc1.d
Only in /etc/rc1.d: K25sshd
Only in /etc/rc1.d: K36mysqld
Only in /etc/rc1.d: K60crond
Only in /etc/rc3.d: K75blk-availability
Only in /etc/rc3.d: K75udev-post
Only in /etc/rc1.d: K88rsyslog
Only in /etc/rc1.d: K90network
Only in /etc/rc3.d: K99cpuspeed
Only in /etc/rc3.d: K99lvm2-monitor
Only in /etc/rc1.d: S02lvm2-monitor
Only in /etc/rc3.d: S10network
Only in /etc/rc3.d: S12rsyslog
Only in /etc/rc1.d: S13cpuspeed
Only in /etc/rc1.d: S25blk-availability
Only in /etc/rc1.d: S26udev-post
Only in /etc/rc3.d: S55sshd
Only in /etc/rc3.d: S64mysqld
Only in /etc/rc3.d: S90crond
Only in /etc/rc3.d: S99local
Only in /etc/rc1.d: S99single
[root@oldboy new]# diff /etc/rc3.d /etc/rc5.d
Only in /etc/rc5.d: K36mysqld
Only in /etc/rc3.d: S64mysqld

【Linux常见命令】diff命令的更多相关文章

  1. Linux 文本对比 diff 命令详解(整理)

    diff 命令详解 1.概述 windows系统下面就有不错的文本对比工具可以使用,例如常用的Beyond Compare,WinMerge都是图形界面的比较工具而且使用非常方便,如果你仅仅是在win ...

  2. Linux常见的Shell命令

    1.具体的shell命令用法可以通过help或man命令进入手册来查询其具体的用法.2.终端本质上对应着linux上的/dev/tty设备,linux的多用户登录就是通过不同的/dev/tty设备完成 ...

  3. Linux常见目录及命令介绍

    一.Linux中常用的目录介绍:     /        -根目录     /bin    -命令保存目录(普通用户亦可读取的命令)     /boot    -启动目录,启动相关文件     /d ...

  4. linux 常见名词及命令(三)

    tar 用于对文件打包压缩或解压. 示例: 打包并压缩文件:tar -czvf 压缩包名.tar.gz 文件名 解压并展开压缩包:tar -zxvf 压缩包名.tar.gz -c 创建压缩文件 -x ...

  5. linux中的diff命令

    今天在公司的代码中看到了一个用的不是很多的命令diff,一开始以为不是,后来一查发现还真有这个命令,有关它的详细资料在这个网址中查看[http://blog.chinaunix.net/uid-253 ...

  6. 性能工具之linux常见日志统计分析命令

    引言 我前几天写过的性能工具之linux三剑客awk.grep.sed详解,我们已经详细介绍 linux 三剑客的基本使用,接下来我们看看具体在性能测试领域的运用,本文主要介绍的是在 Tomcat 和 ...

  7. linux 常见名词及命令(一)

    linux  PK  wondows 稳定且有效率.免费或少许费用.漏洞少且修补快.多任务多用户. 安全的用户及文件权限策略.适合小内核程序的嵌入系统.相对不耗资源. 热门的开源系统 红帽企业系统(R ...

  8. linux 常见名词及命令(五)

    计划任务服务之一次性任务: at <时间> 安排一次性任务 atq 或at -l 查看任务列表 at -c 序号 预览任务与设置环境 atrm 序号 删除任务 安排任务示例: 在23:30 ...

  9. linux 常见名词及命令(二)

    pwd 用于显示当前的工作目录. cd 用于切换工作路径 cd - 切换到上一次的目录 cd ~ 切换到家目录 cd ~username 切换到其他用户的家目录 cd .. 切换到上级目录 ls 用于 ...

  10. linux 常见名词及命令(六)

    查看软件安装位置 : dpkg -L 软件包名字 ubuntu环境的apache相关命令: 查看是否启动:ps -aux | grep httpd  或者 netstat -an | grep :80 ...

随机推荐

  1. EEPROM存储芯片24C02

    1.24C02简介 24C02是一个2Kbit的串行EEPROM存储芯片,可存储256个字节数据.工作电压范围为1.8V到6.0V,具有低功耗CMOS技术,自定时擦写周期,1000000次编程/擦除周 ...

  2. 将本地项目关联到git上面

    1.github上面创建新项目 2.初始化项目-------------可忽略 首先加入git提交忽略的文件.gitignore文件 .idea 忽略以.idea文件logs/  忽略logs文件夹* ...

  3. PTA数据结构与算法题目集(中文) 7-37 模拟EXCEL排序 (25 分)

    PTA数据结构与算法题目集(中文)  7-37 模拟EXCEL排序 (25 分) 7-37 模拟EXCEL排序 (25 分)   Excel可以对一组纪录按任意指定列排序.现请编写程序实现类似功能. ...

  4. 052.Kubernetes集群管理-故障排错指南

    一 故障指南 1.1 常见问题排障 为了跟踪和发现在Kubernetes集群中运行的容器应用出现的问题,常用如下查错方法: 查看Kubernetes对象的当前运行时信息,特别是与对象关联的Event事 ...

  5. Vulnhub DC-7靶机渗透

    信息搜集 nmap -sP 192.168.146.0/24 #主机发现 nmap -A 192.168.146.144 #端口扫描 查看robots.txt,看看admin,403,其他没有什么可利 ...

  6. javascript入门 之 bind() (二)

    <!DOCTYPE html> <HTML> <HEAD> <script type="text/javascript" src=&quo ...

  7. DNS是个什么东东

    工作中经常用到或者听到DNS,什么内网服务器,DNS服务器,啥也别想,你问下自己,你知道什么是DNS吗? 如果你非常清楚,OK,那你肯定是鼠标点错了,赶紧关了这个页面吧,如果你不是很清楚,知道一点,那 ...

  8. json格式的文件操作

    1.字典转换为字符串(json.dumps) jsongeshi={"name":"yajuan","age":"10" ...

  9. TP3快速入门

    一.查询 D方法实例化模型类的时候通常是实例化某个具体的模型类,如果你仅仅是对数据表进行基本的CURD操作的话,使用M方法实例化的话,由于不需要加载具体的模型类,所以性能会更高. $map = arr ...

  10. C语言实现链栈以及基本操作

    链栈,即用链表实现栈存储结构.链栈的实现思路同顺序栈类似,顺序栈是将数顺序表(数组)的一端作为栈底,另一端为栈顶:链栈也如此,通常我们将链表的头部作为栈顶,尾部作为栈底,如下下图所示: 将链表头部作为 ...