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. 使用错误代码对象进行C++错误处理

    原文发表于codeproject,由本人翻译整理分享于此. 前言 我已经使用了本文描述的代码和机制近20年了,到目前为止,我还没有找到更好的方法来处理大型C++项目中的错误.最初的想法是从一篇文章(D ...

  2. PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分)

    PTA数据结构与算法题目集(中文)  7-35 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市 ...

  3. MES Auto Logout

    如果您在车间使用MES,可能存在这种情况有人在仍然登录的情况下偶尔离开终端.如果一段时间不使用终端,我们是否可以让用户自动注销. 1 首先,我们有一条using语句: using System.Run ...

  4. MySQL学习之路8-关联子查询

    参考文章https://zhuanlan.zhihu.com/p/41844742 成绩表如下Score: 问题:查询科目中成绩大于平均成绩的记录? SELECT * FROM Score WHERE ...

  5. 写日志 使用nnlog

    import nnlog log=nnlog.Logger(r"/学习/接口自动化/BestTest/10.26/book_server.log",backCount=5,leve ...

  6. String 对象-->replace() 方法

    1.定义和用法 replace() 方法用于字符串替换 语法: string.replace(searchvalue,newvalue) 参数: searchvalue:被替换的字符串 newvalu ...

  7. GitHub 热点速览 Vol.16:化身蒙娜丽莎和乔布斯对话

    摘要:妙趣横生,上周的 GitHub 热点的关键词.无论是让你化身为爱因斯坦开启会议脑暴模式 avatarify,还是和上周人人都是抠图师项目的同门项目 3D 照片修复:3d-photo-inpain ...

  8. day22作业

    # 1.检索文件夹大小的程序,要求执行方式如下 # python3.8 run.py 文件夹 import os,sys l = sys.argv[1] size = 0 def get_size(f ...

  9. cheat sheet 简介

    cheat sheet 速查表 /小抄 如果期末考试老师只让你让带一张A4纸,合法"作弊",纸上能写多少全凭自己本事,你会写什么?大部分人应该把整个课程的知识重点梳理一遍,方便记忆 ...

  10. codeforces Equalizing by Division (easy version)

    output standard output The only difference between easy and hard versions is the number of elements ...