个性化的WordPress原创主题

WordPress文章企业网站主题模板

patch

责任编辑:程程 更新时间: 关注:1629

Linux patch 命令是用来打补丁的工具,它可以将补丁文件应用到已有的源代码中,以修复或更新其中的错误、缺陷或功能。在使用 patch 命令时,需要指定补丁文件和目标文件,以及相关选项和参数,然后 patch 命令会自动将补丁文件中的修改应用到目标文件中,从而实现补丁的安装和更新。同时,patch 命令还支持备份和回滚功能,以便在发生问题时能够恢复到原始状态。

命令名称

patch

命令功能

用于应用补丁文件,将补丁文件中的更改应用到原文件中。

命令全称

patch

命令语法

  1. patch [OPTIONS] [ORIGFILE [PATCHFILE]]
  2. patch [OPTIONS] [ORIGFILE [PATCHFILE]] #[English]

命令参数

  1. --dry-run #模拟打补丁,不实际操作
  2. -p N #指定要去掉的路径层数
  3. -R #递归处理子目录中的文件
  4. --verbose #显示详细的处理信息
  5. --ignore-whitespace #忽略空格差异
  6. --ignore-tab-expansion #忽略制表符扩展
  7. --ignore-trailing-space #忽略行末空格的差异
  8. --ignore-space-change #忽略空格的差异
  9. --ignore-case #忽略大小写的差异
  10. --forward #向前打补丁
  11. --backward #向后打补丁
  12. --strip N #去掉前缀 N 的路径名
  13. --numeric-owner #使用数字来表示文件所有者和组
  14. --exclude=file #从打补丁文件中排除文件
  15. --fuzz=N #表示当某些行匹配多个修补程序时,可以放宽匹配的要求程度
  16. --force #不检查补丁文件的正确性
  17. --help #显示帮助信息
  18. --version #显示版本信息

linux patch 命令功能-参数选项-用法举例-详解

命令原理

linux patch 命令是一种将补丁文件应用到源代码文件的工具,其原理是通过比较源代码文件和补丁文件的不同之处,并将补丁文件中的修改应用到源代码文件中。补丁文件记录了源代码文件中需要修改的位置以及修改的内容,通过 patch 命令将补丁文件中的修改应用到源代码文件中,从而实现源代码文件的更新和修复。

用法举例

  1. #将补丁文件diff.patch应用到当前目录下的文件,-p1表示去掉文件路径前面的目录。
  2. patch -p1 < diff.patch
  1. #备份文件file.txt并将其标记为“已备份”。
  2. patch -b file.txt
  1. #取消对文件file.txt的补丁操作(还原文件)。
  2. patch -R file.txt
  1. #测试补丁文件diff.patch是否能成功应用到当前目录下的文件,但不实际应用。
  2. patch --dry-run -p1 < diff.patch
  1. #将补丁文件diff.patch应用到当前目录下的文件,并将输出结果保存到output.txt中。
  2. patch -i diff.patch -o output.txt
  1. #即使文件已经是版本,仍然尝试应用补丁文件。
  2. patch -N file.txt
  1. #输出已应用到文件file.txt的补丁信息。
  2. patch -u file.txt
  1. #安静模式,只输出错误信息,不显示详细的补丁信息。
  2. patch -s file.txt
  1. #允许文件与补丁文件的差异为1个字符。
  2. patch --fuzz=1 file.txt
  1. #显示patch命令的版本信息。
  2. patch --version

执行权限

所有用户均可执行。

系统路径

/usr/bin/patch

注意事项

使用patch命令应注意备份原文件。

系统自带

常用命令

命令分类

文件管理类命令

参数详解

-s, --silent
设置静默模式,不输出信息
  1. #设置为静默模式,不输出信息
  2. linux patch --dry-run -s patchfile
-p level
设置patch文件的路径级别,适用于旧路径的前缀匹配
  1. #指定路径级别为1,适用于旧路径的前缀匹配
  2. linux patch --dry-run -p1 patchfile
-i inputfile
指定输入文件
  1. #指定输入文件为patchfile
  2. linux patch --dry-run -i patchfile
  1. #将文件patchfile中的补丁反向应用到当前目录下的文件中。
  2. linux patch -R -i patchfile
-o outputfile
指定输出文件
  1. #指定输出文件为outputfile,如果没有指定,则默认输出到标准输出流中。
  2. linux patch --dry-run -o outputfile patchfile
N,N为数字
指定要去掉的文件路径前缀数量
  1. #将example.patch中的变更应用到当前目录下的文件,忽略文件路径前缀
  2. linux patch -p1 < example.patch
2
指定要去掉的文件路径前缀数量
  1. #将example.patch中的变更应用到当前目录下的文件,忽略文件路径前缀前两级
  2. linux patch -p2 < example.patch
-R
撤销已应用的patch
  1. #撤销已应用到当前目录下文件的example.patch中的变更
  2. linux patch -p1 -R < example.patch
  1. #撤销 patch
  2. linux patch --verbose -R file.patch
  1. #该命令可以撤销之前对文件的修改,还原为补丁文件中的原始版本。
  2. linux patch -R file.patch
  1. #该命令会撤销已经应用的补丁,恢复文件原始状态。
  2. linux patch -R -p1 test.patch
  1. #从第路径开始取消应用指定的patch文件
  2. linux patch -Rp1 < patchfile
--dry-run
模拟应用patch,不实际修改文件
  1. #模拟应用example.patch中的变更到当前目录下的文件,但不实际修改文件。
  2. linux patch -p2 --dry-run < example.patch
  1. #测试 patch 文件是否可以成功应用到源文件中,但不会实际进行修改
  2. linux patch --verbose --dry-run file.patch
  1. #通过该命令参数可以进行模拟运行,查看patch文件是否会产生冲突或错误,而不会实际应用。
  2. linux patch --dry-run file.patch
  1. #模拟应用example.patch补丁文件,不实际修改文件
  2. linux patch --dry-run example.patch
  1. #测试应用patch.diff的内容到当前目录下的文件时不会实际修改文件
  2. linux patch --dry-run -p1 < patch.diff
  1. #测试补丁文件patchfile.c是否可以应用到原始文件originalfile.c中。
  2. linux patch --dry-run patchfile.c originalfile.c
  1. #该命令会模拟应用test.patch文件,但不会实际修改文件,只会显示应用补丁后的结果。
  2. linux patch -p1 --dry-run test.patch
  1. #对当前目录下的文件进行模拟打补丁操作,不会真正修改目标文件,只会输出所需修改的内容。
  2. linux patch --dry-run test.patch
  1. #该命令会模拟执行指定的补丁文件,但不会实际应用该补丁。
  2. linux patch --dry-run patchfile
  1. #该命令用于模拟应用补丁,以便用户检查补丁是否可以成功应用,但并不实际改变文件。
  2. linux patch --dry-run originalfile patchfile
-pN
指定patch文件中路径的前缀级别N,忽略前缀路径
  1. #将patchfile文件中的补丁反向应用到当前目录下的文件中,忽略补丁文件中路径前缀。
  2. linux patch -R -p1 < patchfile
  1. #指定被 patch 的文件路径前缀,以便 patch 命令能够正确地找到文件
  2. linux patch --verbose -p1 file.patch
-d dir
指定补丁文件中路径的前缀为dir
  1. #将patchfile文件中的补丁反向应用到目录/foo/bar下的文件中。
  2. linux patch -R -d /foo/bar < patchfile
-B
在反向应用补丁前,自动备份原文件
  1. #将patchfile文件中的补丁反向应用到当前目录下的文件中,并在应用前自动备份原文件。
  2. linux patch -R -B < patchfile
-N
不自动向文件尾部添加换行符
  1. #将patchfile文件中的补丁反向应用到当前目录下的文件中,不自动向文件尾部添加换行符。
  2. linux patch -R -N < patchfile
  1. #该命令将会将file.patch文件中所含的补丁文件应用于当前目录及其子目录下的文件,但会忽略补丁文件中的时间戳信息
  2. linux patch --backward -N file.patch
  1. #该命令会跳过已经处理过的文件,只对新文件进行补丁操作。
  2. linux patch -N -p1 test.patch
  1. #从第路径开始应用指定的patch文件,即使之前已经应用过
  2. linux patch -Np1 < patchfile
-b
备份被修改的文件
  1. #备份被修改的文件
  2. linux patch --verbose -b file.patch
  1. #该命令会创建备份文件,以便在应用补丁时出现错误时恢复原始文件。
  2. linux patch -b -p1 test.patch
-l
列出所有被 patch 的文件
  1. #列出所有被 patch 的文件
  2. linux patch --verbose -l file.patch
--ignore-whitespace
忽略空格
  1. #通过该命令参数可以忽略掉patch文件中的空格,可以有效避免因空格导致的错误。
  2. linux patch --ignore-whitespace file.patch
  1. #应用example.patch补丁文件,忽略空格的差异
  2. linux patch --ignore-whitespace example.patch
  1. #将补丁文件patchfile.c应用到原始文件originalfile.c中,并忽略补丁文件和原始文件中的空格差异。
  2. linux patch --ignore-whitespace patchfile.c originalfile.c
--strip
指定忽略路径层数
  1. #该命令参数用于指定忽略路径的层数,strip为1时只会去掉外层路径,strip为2时去掉两层路径,以此类推。
  2. linux patch --strip 1 file.patch
  1. #应用patch.diff的内容到当前目录下的文件并从文件名中删除前缀路径
  2. linux patch --strip=1 -p1 < patch.diff
  1. #将补丁文件patchfile.c应用到原始文件originalfile.c中,并从上下文路径中剥离一个组件。
  2. linux patch --strip=1 patchfile.c originalfile.c
--verbose
显示详细操作信息
  1. #通过该命令参数可以显示详细的操作信息,包括每个文件的修改情况、patch文件中的每个修改操作等。
  2. linux patch --verbose file.patch
  1. #应用patch.diff的内容到当前目录下的文件时显示详细处理信息
  2. linux patch --verbose -p1 < patch.diff
--reject-file
指定拒文件路径
  1. #该命令参数用于指定拒文件的路径,当patch文件中的某些操作无法被应用时,会将这些操作保存在拒文件中。
  2. linux patch --reject-file reject.txt file.patch
  1. #将补丁文件patchfile.c应用到原始文件originalfile.c中,无法应用的补丁片段将保存到指定的拒文件reject.patch中。
  2. linux patch --reject-file=reject.patch patchfile.c originalfile.c
--strip=num,num为数字
剥离目录层数
  1. #应用example.patch补丁文件时,剥离一层目录
  2. linux patch --strip=1 example.patch
--reverse
回滚操作
  1. #回滚应用example.patch补丁文件的操作
  2. linux patch --reverse example.patch
  1. #反向应用patch.diff的内容到当前目录下的文件,实现反向补丁
  2. linux patch --reverse -p1 < patch.diff
  1. #该命令会撤销已经应用的补丁,使得系统回到该补丁应用前的状态。
  2. linux patch --reverse patchfile
--no-backup-if-mismatch
忽略备份
  1. #应用example.patch补丁文件时,如果备份文件和目标文件不一致,则不进行备份。
  2. linux patch --no-backup-if-mismatch example.patch
--ignore-trailing-space
忽略每一行末尾的空格
  1. #将patch.diff的内容应用于当前目录下的文件,并忽略每一行末尾的空格
  2. linux patch --ignore-trailing-space -p1 < patch.diff
--ignore-space-change
忽略空格差异
  1. #该命令可以在应用补丁时忽略代码中的空格差异。
  2. linux patch --ignore-space-change file.patch
-p
指定路径前缀
  1. #该命令可以指定应用补丁时文件路径的前缀,以匹配补丁文件中的路径信息。
  2. linux patch -p1 file.patch
--ignore-case
忽略大小写
  1. #该命令将会忽略大小写以应用补丁文件。
  2. linux patch --ignore-case file.patch
-i
忽略大小写
  1. #该命令将会在file.txt文件中查找所有包含hello的字符串,忽略大小写。
  2. linux grep -i "hello" file.txt
  1. #该命令将会在file.txt中将所有的old替换为new,直接修改文件内容。
  2. linux sed -i 's/old/new/g' file.txt
  1. #该命令将会忽略大小写比较file1.txt和file2.txt的不同处。
  2. linux diff -i file1.txt file2.txt
-f
忽略大小写
  1. #该命令将会忽略大小写对file.txt文件进行排序。
  2. linux sort -f file.txt
--forward
该选项用于将补丁文件应用到更高版本的原始文件。如果补丁已经应用到低版本的原始文件中,那么使用此选项可以继续将补丁应用到更高版本的原始文件。
  1. #将补丁文件patchfile.c应用到更高版本的原始文件originalfile.c中。
  2. linux patch --forward patchfile.c originalfile.c
-p
指定要截取的路径前缀的层数
  1. #该命令将会将file.patch文件中所含的补丁文件应用于当前目录及其子目录下的文件,截取2层路径前缀
  2. linux patch --backward -p 2 file.patch
-r
将补丁文件中的修改操作倒置(reverse)
  1. #该命令将会将file.patch文件中所含的补丁文件应用于当前目录及其子目录下的文件,但是将修改操作倒置
  2. linux patch --backward -r file.patch
-d
指定要将补丁文件中的文件放置到的目录
  1. #该命令将会将file.patch文件中所含的补丁文件应用于当前目录及其子目录下的文件,并将修改后的文件放置到/home/user/目录下
  2. linux patch --backward -d /home/user/ file.patch
-t
测试补丁文件,检查它们能否被成功应用而不实际修改文件
  1. #该命令将会测试file.patch文件中所含的补丁文件,检查它们能否被成功应用而不实际修改文件
  2. linux patch --backward -t file.patch
-p, --strip=N
指定被删除的文件名前缀的数量。N为数字,表示删除N层文件名前缀。
  1. #将名为example.patch的补丁文件应用到当前目录下的文件,并将层文件名前缀删除。
  2. patch -p1 < example.patch
--directory=
指定补丁文件内的文件名前缀在哪个目录下查找。
  1. #将名为example.patch的补丁文件应用到/usr/local/patch/目录下,并按补丁文件内的文件名前缀查找对应的文件。
  2. git apply --directory=/usr/local/patch/ example.patch
--relative
保留补丁文件内文件名前缀的相对路径。
  1. #将名为example.patch的补丁文件复制到/usr/local/目录下,并在复制文件时保留文件名前缀的相对路径。
  2. rsync -av --relative example.patch /usr/local/
-p, --strip=
指定被删除的文件名前缀的数量。n为数字,表示删除n层文件名前缀。
  1. #将当前目录下的补丁文件应用到当前目录下的文件,并将层文件名前缀删除。
  2. quilt push -p1
--strip-components=
指定被删除的文件名前缀的数量。number为数字,表示删除number层文件名前缀。
  1. #将名为example.cpio的cpio文件解压到当前目录下,并将层文件名前缀删除。
  2. cpio -idv --strip-components=1 < example.cpio
--numeric-owner
在应用patch时,使用数值UID和GID而不是名称
  1. #使用数值UID和GID应用名为patchfile的补丁文件,并在应用时去除文件路径中的前缀,即去掉1级目录。
  2. linux patch --numeric-owner -p1 < patchfile
  1. #使用数值UID和GID应用名为patchfile的补丁文件,并在应用时不去除文件路径中的前缀。
  2. linux patch --numeric-owner -p0 < patchfile
  1. #使用数值UID和GID应用名为patchfile的补丁文件,并在应用时去除文件路径中的前缀,即去掉2级目录。
  2. linux patch --numeric-owner -p2 < patchfile
  1. #使用数值UID和GID反向应用名为patchfile的补丁文件,并在应用时去除文件路径中的前缀,即去掉1级目录。
  2. linux patch --numeric-owner -R -p1 < patchfile
  1. #使用数值UID和GID将名为patchfile的补丁文件应用到文件系统,并在应用时去除文件路径中的前缀,即去掉1级目录。如果应用补丁时需要生成备份文件,则备份文件的后缀为~。
  2. linux patch --numeric-owner -b -p1 < patchfile
--exclude=file
排除指定文件,不对其进行补丁
  1. #该命令将test.patch应用于当前目录下的文件,但排除foo/bar文件,不对其进行补丁。
  2. linux patch -p1 --exclude=foo/bar test.patch
--fuzz=N
指定模糊度,当patch文件与目标文件的差异行不完全匹配时,允许在目标文件中寻找接近的行,并将其视为匹配。
  1. #使用test.patch对当前目录下的文件进行打补丁操作,模糊度为3。
  2. linux patch --fuzz=3 test.patch
--strip=N
从patch文件中剥离掉前N级目录结构,以便在不同的目录中应用补丁。
  1. #使用test.patch对当前目录下的文件进行打补丁操作,从patch文件中剥离掉前1级目录结构。
  2. linux patch --strip=1 test.patch
--input=FILE
读取指定的patch文件。
  1. #使用指定的test.patch文件对当前目录下的文件进行打补丁操作。
  2. linux patch --input=test.patch
--reject-file=FILE
指定拒文件的名称,当无法应用补丁时,将在该文件中输出无法应用的补丁内容。
  1. #使用test.patch对当前目录下的文件进行打补丁操作,当无法应用补丁时,将在rejects.txt文件中输出无法应用的补丁内容。
  2. linux patch --reject-file=rejects.txt test.patch
--force
强制执行补丁
  1. #该命令会强制执行指定的补丁文件,即使当前系统已经应用过该补丁。
  2. linux patch --force patchfile
--quiet
静默模式,不输出执行信息
  1. #该命令会在执行补丁时不输出执行信息,只输出错误信息。
  2. linux patch --quiet patchfile
--strip=
去除指定的路径部分
  1. #该命令会去除补丁文件中路径中的部分,应用补丁时只考虑路径后面的部分。
  2. linux patch --strip=1 patchfile
-p NUM
指定要去掉的文件路径前缀的级数
  1. #将应用指定的patch文件,并去掉文件路径前缀的第
  2. linux patch -p1 < patchfile
-i FILE
指定要应用的patch文件
  1. #将应用指定的patch文件
  2. linux patch -i patchfile
-p,其中n为整数,默认为0
指定路径前缀
  1. #该命令用于在应用补丁时指定路径前缀,将补丁中的相对路径转换为路径。
  2. linux patch -p1 < patchfile
-b,--backup
备份原始文件
  1. #该命令用于应用补丁时备份原始文件。
  2. linux patch -b originalfile patchfile
-R,--reverse
撤销补丁
  1. #该命令用于撤销之前应用的补丁。
  2. linux patch -R originalfile patchfile

命令报错原因

* 找不到要打补丁的文件,修改路径或文件存在;

* 补丁已经被应用过,使用-f参数强制覆盖;

* 要打的补丁已经包含在目标文件中,再次打补丁;

* 补丁文件中的文件命名错误,修改文件名;

* 补丁文件和要打补丁的文件不在同一目录下,使用-p参数指定路径;

* 要打补丁的文件被锁定或没有写权限,修改权限或使用root用户;

* 补丁文件和要打补丁的文件版本不一致,查看版本信息并选择正确的补丁文件;

* 补丁文件格式错误,检查文件格式是否正确。

  • 获赞104
  • 声明:内容版权归原作者所有,未经授权不得任意转载
  • 本文标题和链接:
    linux patch 命令功能-参数选项-用法举例-详解
    https://e.69525.com/a/18d056a564945943/

猜您喜欢

Copyright © 2023 WordPress主题. All rights reserved.Powered by e.69525.com.

本站基于WordPress主题搭建,正在以新的版本流畅运行;由69525提供主题免费升级支持