shell脚本命令--diff(比较文件目录的不同)、patch(打补丁)

一、diff

diff 命令是用来比较两个文件或目录的不同

1.语法格式
diff[参数][文件1或目录1][文件2或目录2]
diff [options] target1 target2
diff file1 file2
diff direcory1 directory2

2.diff用法说明

diff命令在最简单的情况下,比较两个文件的不同。如果使用”-”代替文件参数,则要比较的内容将来自标准输入。Diff命令是以逐行的方式比较文本文件的异同之处。如果指定比较的是目录的时候,diff命令会比较两个目录下名字相同的文本文件,但不会比较其中子目录。列出不同的二进制文件、公共子目录和只在一个目录出现的文件

3.参数选项说明

-                                指定要显示多少行的文本。此参数必须与-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参数时,仅显示不同之处。

4.示例展示

[root@shell mnt]# cat test1
hello kearshy
[root@shell mnt]# cat test2
hello kearshy
ahua
[root@shell mnt]# diff test1 test2
1a2	##a表示增加

> ahua
[root@shell mnt]# diff test2 test1
1d2	##d表示删除

diff 在比较文件过程中结果读取方式

num1 , num2][a|c|d][num3,num4]
num1,num2 表示在第一个文件中的行数
a 表示添加 ----add
c 表示更改 ----change
d 表示删除 ----delete
< 表示第一个文件中的内容, > 表示第二个文件中的内容, --- 分割线
num3,num4 表示在第二个文件中的行数
2,4c2,4 表示改变第一个文件中的第二行和第四行才能匹配第二个文件中
的第二行和第四行diff 在比较目录过程中结果的

diff 在比较目录过程中结果的读取

Only in directroy/: filename
directory 表示在那个目录中
filename 表示在这个目录

diff 中常用的参数

-b 或 --ignore-space-change  不检查空格字符的不同
-B 或 --ignore-blank-lines  不检查空白行
-c  显示全部内文,并标出不同之处
-i 或 --ignore-case  不检查大小写的不同
-p :若比较的文件为 C 语言的程序码文件时,显示差异所在的
函数名称;
-q 或 --brief :仅显示有无差异,不显示详细的信息
-r 或 --recursive :比较子目录中的文件
-u 以合并的方式来显示文件内容的不同

二、patch

此命令用于为特定软件包打补丁,他使用diff命令对源文件进行操作。

  • 基本命令语法:

patch [-R] {-p(n)} [–dry-run] < patch_file_name
p:为path的缩写。
n:指将patch文件里的path第n条’/’及其左边部分取消。
-R:卸载patch包。
–dry-run:尝试patch软件,并不真正改动软件。

  • 应用示例
安装patch
[root@shell ~]# yum install patch -y

shell脚本命令--diff(比较文件目录的不同)、patch(打补丁)_第1张图片

你可能感兴趣的:(linux下shell基础)