linux命令对比文件,linux比较文件差异命令

Linux命令diff、patch

背景

创新互联-专业网站定制、快速模板网站建设、高性价比宜黄网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式宜黄网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖宜黄地区。费用合理售后完善,十多年实体公司更值得信赖。

在Linux系统环境的工作过程中,经常遇到需要对比文件差异的情况,此时,使用Linux提供的diff工具可以方便的发现文件不同版本之间差异,从而快速排除解决问题。

Windows端有强大文件对比工具BeyondCompare。

patch 命令可以将diff命令的输出应用到原始的对比文件中,将新版本的更新应用到原始的文件中。

命令

diff [option] [file1] [file2]

patch [option] [file1] [file_differ]

测试环境

WSL: Linux PERSONALPC 4.4.0-19041-Microsoft #488-Microsoft Mon Sep 01 13:43:00 PST 2020 x86_64 x86_64 x86_64 GNU/Linux

测试过程

红帽linux系统与UOS命令对比

目前在各 Linux 发行版中, 比较著名的软件包管理系统有如下两种:

RPM: Red Hat/Fedora,Suse,Mandriva 使用的是这类管理系统。

DPKG: Debian,ubuntu使用的是这类管理系统。

UOS是基于Debian发行版本,因此UOS使用的是DPKG包管理机制。

Redhat的rpm软件包管理相信大家都很熟悉,这里主要讲UOS系统的软件升级的源配置,在/etc/apt/sources.list。文件内容的格式如下:

deb [by-hash=force] eagle main contrib non-free

其中,第一列描述了文件类型,是deb类型还是deb-src类型,deb是已经编译好的二进制软件包,deb-src是源码包,第二列是使用的镜像地址,apt可以使用多种类型的镜像地址,如:http、ftp、file等。其中,eagle 是系统的codename。 main non-free contrib是源下面不同的目录,每个目录放一类软件,即不同的子仓库。

在每次修改sources.list文件后,都需要运行apt-get update命令更新源列表系统中所有packages的信息都在 /var/lib/dpkg/目录下, 其子目录 /var/lib/dpkg/info 用于保存各个软件包的配置文件列表,/var/lib/dpkg/available文件的内容是软件包的描述信息, 该软件包括当前系统所使用的深度安装源中的所有软件包,其中包括当前系统中已安装的和未安装的软件包。/var/cache/apt/archives目录是在用 apt-get install 安装软件包时,软件包的临时存放路径,而/etc/apt/sources.list 存放的是软件源站点, 当执行 apt-get install package-name 时,软件包就去这些站点下载软件包到本地并执行安装。

红帽系统与UOS的基本操作命令基本相同,属于Linux基本操作命令。二者命令的主要区别在软件包的管理上,下面就针对二者对软件包的管理命令进行对比。

表1 rpm与dpkg软件包管理常用命令对比

表2 yum与apt软件包管理常用命令对比

注:yumdownloader命令需要安装yum-utils*

Linux中怎么对比两个文件呢?

在linux系统中有两种方式可以实现两个文件的对比

第一传统的命令行方式 应用diff命令

diff的功能为逐行比较两个文本文件,列出其不同之处。它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。

diff

语法

diff

[options]

file1

file2

命令字

参数

待对比文件1

待对比文件2

[options]的主要参数

-a:将所有文件当作文本文件来处理。

-b或–ignore-space-change

 忽略空格造成的不同。

-B或–ignore-blank-lines

 忽略空行造成的不同。

-c:使用纲要输出格式。

-H:利用试探法加速对大文件的搜索。

-I:忽略大小写的变化。

-n

–rcs:输出RCS格式。

-N或–new-file

 在比较目录时,若文件A仅出现在某个目录中,会显示:Only

in目录;文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。

-r或–recursive

 比较子目录中的文件。

-u,-U列数或–unified=列数

 以合并的方式来显示文件内容的不同。

第二种方式是图形界面交互方式

该方式要安装第三方工具软件比如Kompare软件包,这个工具可以让用户可以查看文件之间的差异,并且合并文件。

Linux文件比较命令的Comm命令

如果想对两个有序的文件进行比较,可以使用comm命令。

语法:comm [- 123 ] file1 file2

说明:该命令是对两个已经排好序的文件进行比较。其中file1和file2是已排序的文件。comm读取这两个文件,然后生成三列输出:仅在file1中出现的行;仅在file2中出现的行;在两个文件中都存在的行。如果文件名用“- ”,则表示从标准输入读取。

comm -1 不显示只出现在第一个文件的行。

comm -2 不显示只出现在第二个文件的行。

comm -3 不显示同时出现在两个文件的行。

comm file1 file2 显示三列,第一列代表只出现在file1的行,第二列代表只出现在file2的行,第三列代表俩个文件同时出现的行

comm -12 显示两个文件同时出现的行 也就是交集

comm -13 显示只出现在第二个文件的行

comm -23 显示只出现在第一个文件的行

例如:假设要对文件myfile1和myfile2进行比较

$ cat myfile1

main( )

{

float a,b, i, j ,z ;

a=i=10 ; b=j=5 ;

z= i + j ;

printf(“z=%d\\\\n”,z) ;

}

$ cat myfile2

#include stdio.h

main( )

{

float i, j ,z ;

i=10 ; j=5 ;

z= i + j ;

printf(“z=%f\\\\n”,z) ;

}

$ comm - 12 myfile1 myfile2

main( )

{

z= i + j ;

}

就只显示文件myfile1和myfile2中共有的行。

linux 中两个文档怎么对比内容是否一致

可以用diff命令对比文档内容。

[语法]: diff [参数] 文件1 文件2

[说明]: 本命令比较两个文本文件,将不同的行列出来

-b 将一串空格或TAB 转换成一个空格或TAB

-e 生成一个编辑角本,作为ex 或ed 的输入可将文件1 转换成文件2

[例子]:

diff file1 file2

diff -b file1 file2

diff -e file1 file2 edscript

diff 命令的常用参数

a 将所有文件当做文本文件来处理

b 忽略空格造成的不同

B 忽略空行造成的不同

q 只报告什么地方不同,不报告具体的不同信息

H 利用试探法加速对大文件的搜索

i 忽略大小写的变化

l 用pr对输出进行分页

r 在比较目录时比较所有的子目录

s 两个文件相同时才报告

v 在标准输出上输出版本信息并退出

实例:比较两个文件

代码如下:

[root@localhost test3]# diff log2014.log log2013.log

----------------------------------------------------------------------------

3c3

《 2014-03

---

》 2013-03

8c8

《 2013-07

---

》 2013-08

11,12d10

《 2013-11

《 2013-12

----------------------------------------------------------------------------

说明:上面的“3c3”和“8c8”表示log2014.log和log20143log文件在3行和第8行内容有所不同;“11,12d10”表示第一个文件比第二个文件多了第11和12行。

Linux使用diff命令怎么比较文件

Y:diff命令

●简介

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

★diff以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。

●语法

★命令格式:diff[参数][文件1或目录1][文件2或目录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@localhost test3]# diff log2014.log log2013.log

3c3

2014-03

---

2013-03

8c8

2013-07

---

2013-08

11,12d10

2013-11

2013-12

☆上面的"3c3"和"8c8"表示log2014.log和log20143log文件在3行和第8行内容有所不同;"11,12d10"表示第一个文件比第二个文件多了第11和12行。

★实例二:并排格式输出

[root@localhost test3]# diff log2014.log log2013.log -y -W 50

2013-01 2013-01

2013-02 2013-02

2014-03 | 2013-03

2013-04 2013-04

2013-05 2013-05

2013-06 2013-06

2013-07 2013-07

2013-07 | 2013-08

2013-09 2013-09

2013-10 2013-10

2013-11

2013-12

[root@localhost test3]# diff log2013.log log2014.log -y -W 50

2013-01 2013-01

2013-02 2013-02

2013-03 | 2014-03

2013-04 2013-04

2013-05 2013-05

2013-06 2013-06

2013-07 2013-07

2013-08 | 2013-07

2013-09 2013-09

2013-10 2013-10

2013-11

2013-12

★说明:

☆"|"表示前后2个文件内容有不同;

☆""表示后面文件比前面文件少了1行内容;

☆""表示后面文件比前面文件多了1行内容;


网站栏目:linux命令对比文件,linux比较文件差异命令
文章转载:http://myzitong.com/article/hoghdp.html