将下载的补丁放进linux,如何在Linux中将补丁应用到文件(和创建补丁) | MOS86

Linux patch命令可让您快速安全地将更改从一组文件转移到另一组文件。 了解如何使用补丁的简单方法。

假设您的计算机上有一个文本文件。 您会从其他人那里收到该文本文件的修改版本。 您如何快速将所有更改从修改后的文件转移到原始文件? 那就是patch和diff发挥作用的地方。 在Linux和其他类似Unix的操作系统(例如macOS)中可以找到patch和diff。

diff命令检查文件的两个不同版本并列出它们之间的差异。 差异可以存储在称为补丁文件的文件中。

修补程序命令可以读取修补程序文件并将其内容用作一组指令。 按照这些说明,将修改后的文件中的更改复制到原始文件中。

现在,假设该过程发生在整个文本文件目录中。 一口气。 那就是补丁的力量。

有时您不会收到修改后的文件。 您发送的只是补丁文件。 当可以发送一个文件或张贴一个文件以便于下载时,为什么还要发送几十个文件呢?

您如何使用补丁文件来实际补丁文件? 除了几乎是绕口说,这也是一个很好的问题。 好吧,本文将引导您完成。

patch命令最常用于处理软件源代码文件的人员,但无论其目的是什么,无论源代码是什么,它对于任何文本文件集都同样有效。

相关:如何在Linux终端中比较两个文本文件

在这种情况下,我们位于一个名为work的目录中,该目录包含另外两个目录。 一种称为工作,另一种称为最新。 工作目录包含一组源代码文件。 最新目录包含这些源代码文件的最新版本,其中一些已被修改。

为了安全起见,工作目录是文本文件当前版本的副本。 它不是它们的唯一副本。

diff命令查找两个文件之间的差异。 它的默认操作是在终端窗口中列出修改后的行。

一个文件称为slang.c。 将工作目录中的版本与最新目录中的版本进行比较。

-u(统一)选项告诉diff还列出每个更改的节之前和之后的一些未修改的文本行。这些行称为上下文行。它们帮助patch命令精确地定位在哪里 必须在原始文件中进行更改。

我们提供文件名,以便diff知道要比较的文件。 首先列出原始文件,然后列出修改后的文件。 这是我们发出的差异命令:

diff -u working / slang.c最新/slang.c

diff产生一个输出列表,显示文件之间的差异。 如果文件相同,则根本不会列出任何输出。 从diff看到这种类型的输出,确认两个文件版本之间存在差异,并且原始文件需要打补丁。

要捕获补丁文件中的这些差异,请使用以下命令。 与上面相同的命令,diff的输出重定向到名为slang.patch的文件中。

diff -u working / slang.c最新/slang.c> slang.patch

补丁文件的名称是任意的。 您可以随便叫它。 给它一个.patch扩展名是一个好主意。 但是,因为它确实清楚了文件的类型。

要使补丁程序作用于补丁程序文件并修改working / slang.c文件,请使用以下命令。 -u(统一)选项使修补程序知道修补程序文件包含统一的上下文行。 换句话说,我们将-u选项与diff一起使用,因此我们将-u选项与patch一起使用。

补丁-u working.slang.c -i slang.patch

如果一切顺利,那么会有一行输出告诉您补丁正在修补文件。

通过使用-b(备份)选项,我们可以指示修补程序在修补文件更改之前对其进行备份。 -i(输入)选项告诉修补程序要使用的修补程序文件的名称:

补丁-u -b working.slang.c -i slang.patch

该文件像以前一样打过补丁,输出没有明显差异。 但是,如果查看工作文件夹,则会看到名为slang.c.orig的文件已创建。 文件的日期和时间戳显示slang.c.orig是原始文件,而slang.c是由patch创建的新文件。

我们可以使用diff创建一个补丁文件,其中包含两个目录中文件之间的所有差异。 然后,我们可以将该补丁文件与patch一起使用,以通过单个命令将那些差异应用于工作文件夹中的文件。

与diff一起使用的选项是我们先前使用的-u(统一上下文)选项,使diff查看任何子目录的-r(递归)选项和-N(新文件)选项。

-N选项告诉diff如何处理最新目录中不在工作目录中的文件。 它强制diff将指令放入补丁文件中,以便补丁程序创建最新目录中存在但工作目录中缺少的文件。

您可以将选项捆绑在一起,以便它们使用单个连字符(-)。

请注意,仅提供目录名称,没有告诉diff查看特定文件:

diff -ruN工作/最新/> slang.patch

让我们快速查看补丁文件。 好用少看它的内容。

文件顶部显示slang.c的两个版本之间的差异。

向下滚动浏览补丁文件,我们看到它随后描述了另一个文件structs.h中的更改。 这可以验证补丁文件是否确实包含多个文件的不同版本之间的差异。

修补大量文件可能会有些不安,因此在尝试之前,我们将使用--dry-run选项检查一切是否正常,并致力于进行更改。

--dry-run选项告诉修补程序执行除实际修改文件之外的所有操作。 补丁程序将对文件执行所有的飞行前检查,如果遇到任何问题,它将报告它们。 无论哪种方式,都不会修改文件。

如果未报告任何问题,我们可以在不使用--dry-run选项的情况下重复该命令,并放心地修补文件。

-d(目录)选项告诉修补程序要在哪个目录上工作。

请注意,没有使用-i(输入)选项来告诉补丁哪个补丁文件包含来自diff的指令。 而是将修补程序文件重定向到带有修补程序--dry-run -ruN -d工作在整个目录中,diff找到了两个要修补的文件。 补丁已检查了有关对这两个文件进行修改的说明,并且未报告任何问题。

飞行前检查还可以; 准备起飞。

为了将补丁真正应用到文件中,我们使用了不带--dry-run选项的上一个命令。

补丁-ruN -d工作这次,输出的每一行都不以检查开始,而是以修补程序开始。

并且没有问题的报告。 我们可以编译我们的源代码,并且可以使用该软件的最新版本。

到目前为止,这是使用补丁程序的最简单,最安全的方法。 将您的目标文件复制到一个文件夹并对该文件夹进行修补。 当您满意补丁程序完成无错误时,将它们复制回去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值