在文字处理上 , 最常出现的问题应该是比较两个或两个以上的文件 , 看看他们的内容是否相同 ---- 即便它们的名称不同 .

$cp /bin/ls /tmp/ls # 制作 /bin/ls 的私用副本

$cmp /bin/ls /tmp/ls # 拿原始文本与副本比较

$cmp /bin/cp /tmp/ls # 输出结构指出第一个不同处的位置

/bin/cp /tmp/ls differ: byte 25, line 1

分析 :cmp 发现两个参数文件一致时 , 会采用默认的方式 . 如果你只对他的离开状态有兴趣 , 可以使用 -s 选项 , 抑制警告信息 :

$cmp -s /bin/cp /tmp/ls       # 默认的比较两文件的不同

$echo $? # 显示离开码

1 # 0, 表示两个文件不同

cmp 命令详解 :

cmp [ 选项 ] [ 文件 ]

主要选项 :

-c

除了标明差异处的十进制字码之外 , 一并显示该字符所对应字符 .

-i< 字符数目 >

制定一个数目

-l

显示出所有不一样的地方

-s

不显示错误的信息

-v

显示版本信息

注意 : 在比较结果中 , 只能够西显示第一个不同的比较结果 .

如果你想知道两个文件有何不同 , 可使用 diff,diff 命令是 linux 上非常重要的命令 , 用于比较文件的内容 , 特别是比较两个版本不同的文件以找到改动的地方 .diff 在命令行中打印每一行的改动 . 最新版本的 diff 还支持二进制文件 .diff 程序的输出被称为补丁 (patch), 因为 linux 系统中海油一个 patch 程序 , 可以根据 diff 的输出将 a.c 的文件内容更新为 b.c . diff svn,cvs,git 等版本控制工具不可获取的一部分 .

diff 命令详解

diff [ 选项 ] [ 变动前文件或目录 ] [ 变动后文件或目录 ]

比较单个文件或目录的内容 . 如果指定比较的是文件 , 则只有当输入为文本文件时才有效 . 以逐行的方式 , 比较文本文件的异同处 . 如果指定比较的是目录 ,diff 命令会比较两个目录下名字相同的文本文件 . 列出不同的二进制文件 , 公共子目录和只在一个目录出现的文本 .

主要选项 :

-b

不检查空格字符的不同

-B

不检查空白行

-w

忽略全部的空格字符

-i

不检查大小写的不同

-q

仅显示有无差异 , 不显示详细的信息

diff 目录时常用的参数如下 :

-r

比较子目录中的文件

-N

文件 A 仅出现在某个目录中 , 预设会显示 :only in 目录 , 文件 A 若使用 -N 参数 , diff 会将文件 A 与一个空白的文件比较

-P

-N 类似 , 只有当第二个目录包含了一个第一个目录所没有的文件时 , 才会将这个文件与空白的文件作比较 .

diff 有四种格式 :

1.正常格式

2.并列格式

3.上下文格式

4.合并格式

正常格式案例 : 不添加任何参数


$cat f1

$cat f2

a b c

> a b c

分析 :1c1,3d2,5a5 是说明变动的位置 , 前边数字代表 f1 中国所变化的行 , 后面的则代表 f2 中变化的行 , 中间的字母分别代表 ”改变 (c) ”,”删除 (d) ”和”增加 (a)

< 表示 f1 指定行的内容 ,--- 分割两个文件的 , 然后 > 表示 f2 指定行的内容 . 删除或增加时 , 则分别 f2,f1 中指定行无内容

并列格式 diff

其他格式 diff 都实现后显式两个文件的内容变化 , 并列格式可以并排显式两个文件的内容变化 , 更形象的看出文件的变化 , vimdiff 显式的有些类似 .

使用方法为加入 -y 选项 , 即可并列显示 ,-W( 大写 ) num 参数可设定并列的宽度 , 可以不使用 .

$ diff -y -W 50 f1 f2

a b                   | a b c

b                       b

d                       d

e                       e

| 说明此行有变化 ,< 说明此行被删除了 ,> 说明此行是后增加的 .

上下文格式 diff

标准格式 diff 显式的内容不够直观 , 上下文格式则通过显示变化的上下文 , 而更加的利与理解 .

使用方法是使用参数 -c.

$diff -c f1 f2

*** f1  2015-07-13 18:42:50.996380933 +0800

--- f2  2015-07-13 18:43:06.846375746 +0800

***************

*** 1,5 ****

! a b

--- 1,5 ----

! a b c

分析 : 首先 , 显示两个文件的基本情况 :

*** f1  2015-07-13 18:42:50.996380933 +0800

--- f2  2015-07-13 18:43:06.846375746 +0800

*** 表示变动前的文件 f1,--- 表示变动后的文件 f2

然后 15 个星号将文件的基本情况和变动内容分隔开

*** 1,5 **** 表示 f1 文件的 1-5

--- 1,5 ---- 表示 f2 文件的 1-5

! 代表此行内容有变动 ,+ 表示新增加的 ,- 表示此行被删除了 .

上下文格式默认显示包括修改行前后的三行内容 , 可以使用 -num 来设置前后 num , :

$diff -C( 大写 C) -1( 数字 1) f1 f2

合并格式 diff

两个文件大量内容重复 , 上下文格式显示很多无用的干扰信息 , 后来就推出了合并式 diff.

使用方法为 , 加入 -u 参数 , 案例 :

$diff -u f1 f2

diff -u f1 f2

--- f1  2015-07-13 18:42:50.996380933 +0800

+++ f2  2015-07-13 18:43:06.846375746 +0800

@@ -1,5 +1,5 @@

+a b c

分析 : 同样前两行表示两个文件的基本情况

然后 @@-1,5 +1,5 @@ 表示修改的位置 ,- 代表 f1 1-5 ,+ 代表 f21-5 .

最后是合并显示的变动具体内容 , 依旧是 - 代表 f1,+ 代表 f2.

同上下文格式一样 , 合并格式也是默认显示修改前后三行的内容 , 可以使用 -num 来设置显示前后 num :

$diff -u -1 f1 f2

patch 工具程序

patch diff 的输出重定向到文本文件中 , 即得到了补丁文件 (patch), 可以使用 patch 命令对文本文件或目录打补丁 , 从而进行内容更新 .

patch 详解

patch [ 选项 ] [ 补丁文件 ]

主要参数 :

-p num

忽略几层文件夹

-E

选项说明如果发生了空文件 , 那么就删除它

-R

取消打过的补丁

如果使用参数 -p0, 表示从当前目录找打补丁的目标文件夹 , 再对该目录中的文件执行 patch 操作 .

而是用参数 -p1, 表示忽略第一层目录 , 从当前目录需找目标文件夹中的子目录的文件 , 进行 patch 操作 .

处理单个文件补丁

产生补丁 :

$diff -uN f1 f2 > file.patch

打补丁 :

$patch -p0 <file.patch

$patch f1 file.patch

取消补丁 :

$patch -RE -p0 < file.patch

$patch -RE f1 file.patch

处理文件补丁

产生补丁 :

$diff -urN d1 d2 > dir.patch

打补丁 :

$cd d1

$patch -p1 < ../dir.patch

取消补丁 :

patch -R -p1 < ../dir.patch

应用补丁时的目标代码和生成补丁时的代码未必相同 , 打补丁的操作可能失败 , 补丁失败的文件会以 .rej 结尾 .

patch 工具程序可利用 diff 输出 , 结合原始文件 , 以重建另一个文件 , 因为相异的部分 , 通常比原始文件小得多 , 软件开发人员常会通过 email 交换相异处的列表 , 再使用 patch 应用它 .

虽然 patch 可使用 diff 的一半输出 , 但较通用的当时影视使用 diff -c 选项 , 已取得上下文差异处 . 这么做会产生较详细冗长的报告 ,rangpatch 知道文件名 , 允许他验证变更位置 , 并回复不同之处 . 如果两个文件自从差异出已被记录下来之后都未有修改 , 则上下文差异功能是不重要的 , 但是在软件开发中 , 时常会有其中之一牵涉其中 .

不难看出 patch 的作用就是为了高效的就留程序源代码产生的 ,patch 只包含了对源代码修改的部分 .

文件比较所谓的文件比较,一般设计四个领域1.检查两个文件是否相同,如果不同,找不哪里不同2.应用两个文件的不同之处,使从其中一个回复另外一个3.使用校验和找出相同一致的文件4.使用数字签名以验证文件   cmp和diff在文字处理上,最常出现的问题应该是比较两个或两个以上的文件,看看他们的内容是否相同----即便它们的名称不同.案例:$cp /bin
目录 diff 命令作用 diff 命令用法 diff 命令作用 diff 命令逐行 比较 文本 文件 的异同,如果指定要 比较 目录,则会 比较 目录中相同 文件 名的 文件 ,但不会 比较 其中子目录。 diff 命令用法 1.命令格式: diff [options] files|directorys 2.输出信息: [num1,num2] [a|c|d] [num3,num4] num1,num2: 第一个 文件 中的行 a: 添加 1> diff 命令的功能 Linux中 diff 命令的功能为逐行 比较 两个文本 文件 ,列出其不同之处。它对给出的 文件 进行系统的检查,并显示出两个 文件 中所有不同的行,不要求事先对 文件 进行排序。 diff [options] file1 file2 该命...
1,还有个color diff 命令,用颜色标识不同的地方。需要先安装 2, diff normal模式中 2,5表示从第二行到第五行 3, diff -c 模式中,2,5表示从第二行到第五行 4, diff -u模式中,2,5表示从第二行开始的连续5行,即第2,3,4,5,6行 本文将要讨论的是 diff 命令, diff 用来 比较 两个 文件 。当然 文件 比较 的工具很多,wi...
diff 是Linux系统的一个很重要的工具程序,我们通常用 diff 对同一软件(或程序)的不同版本的 文件 进行对比查看。不过,你不要用 diff 比较 两个完全不相干的 文件 ,因为那样是比不出结果来的。 diff 是以“行”为单位 比较 的。 diff patch 是一对工具,在数学上来说, diff 是对两个集合的差运算, patch 是对两个集合的和运算。 diff 比较 两个 文件 文件 集合的差异,并记录下来,生成一个 diff 文件 ,这也是我们常说的 patch 文件 ,即补丁 文件 patch 能将 diff 文件 运用于原来的两个集合之一,从.
该命令是用于查询或更改 CMake 的策略 CMP 0081 的行为。该策略规定了 CMake 是否应该在生成器表达式中默认地保留空格。 具体来说,如果该策略被设置为 NEW,则 CMake 会在生成器表达式中默认保留空格。如果该策略被设置为 OLD,则 CMake 不会保留空格。 该命令的使用方式如下: cmake --help-policy CMP 0081 该命令将输出 CMP 0081 策略的当前状态和可用选项。如果你需要更改该策略的行为,可以使用 `cmake_policy` 命令来更改。例如,如果你想将该策略设置为 OLD,可以执行以下命令: cmake_policy(SET CMP 0081 OLD)