如何在Linux中将修补程序应用于文件(和创建修补程序)

PC在Linux桌面上显示shell提示符Fatmawati Achmad Zaenuri / Shutterstock.com

Linux 补丁 命令允许您快速安全地将更改从一组文件传输到另一组文件。学习如何使用 补丁 简单的方法。

补丁和差异命令

想象一下,您的计算机上有一个文本文件。您从其他人那里收到该文本文件的修改版本。如何快速将修改后的文件中的所有更改传输到原始文件?那是在哪里 补丁DIFF 参加进来。 补丁DIFF 可以在Linux和其他类Unix操作系统中找到,例如macOS。

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

补丁 命令可以读取补丁文件并将内容用作一组指令。通过遵循这些说明,修改后的文件中的更改将复制到原始文件中。

现在想象一下这个过程发生在整个文本文件目录中。一气呵成。这就是力量 补丁

有时您不会收到修改过的文件。你发送的只是补丁文件。为什么在发送一个文件或发布一个文件以便于下载时,为什么要发送几十个文件呢?

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

补丁 命令最常被使用软件源代码文件的人使用,但它适用于任何文本文件集,无论其目的,源代码与否。

有关: 如何比较Linux终端中的两个文本文件

我们的示例场景

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

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

找到两个版本的文件之间的差异

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

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

-u (统一)选项告诉 DIFF 还列出了每个更改的部分之前和之后的一些未修改的文本行。这些行称为上下文行。他们帮助了 补丁 命令准确定位必须在原始文件中进行更改的位置。

我们提供文件的名称 DIFF 知道要比较哪些文件。首先列出原始文件,然后列出修改后的文件。这是我们发出的命令 DIFF

diff -u working / slang.c latest / slang.c

diff -u working / slang.s latest / slang.c在终端窗口中

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

在终端窗口中从diff输出

制作补丁文件

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

diff -u working / slang.c latest / slang.c> slang.patch

diff -u working / slang.c latest / slang.c>终端窗口中的slang.patch

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

要做 补丁 对patch文件执行操作并修改working / slang.c文件,请使用以下命令。该 -u (统一)选项让 补丁 知道补丁文件包含统一的上下文行。换句话说,我们使用-u选项和diff,所以我们使用了 -u 选项 补丁

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

在终端窗口中修补-u working.slang.c -i slang.patch

如果一切顺利,只有一行输出告诉你 补丁 正在修补文件。

备份原始文件

我们可以指导 补丁 在使用修改文件进行更改之前制作修补文件的备份副本 -b (备份)选项。该 -一世 (input)选项告诉patch要使用的补丁文件的名称:

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

在终端窗口中修补-u working.slang.c -i slang.patch

该文件与以前一样进行了修补,输出中没有明显的差异。但是,如果查看工作文件夹,您将看到已创建名为slang.c.orig的文件。文件的日期和时间戳显示slang.c.orig是原始文件,slang.c是由文件创建的新文件 补丁

终端窗口中的ls输出

使用diff与目录

我们可以用 DIFF 创建一个包含两个目录中文件之间所有差异的补丁文件。然后我们可以使用该补丁文件 补丁 使用单个命令将这些差异应用于工作文件夹中的文件。

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

-N 选项告诉 DIFF 如何处理最新目录中不在工作目录中的文件。它强迫 DIFF 把指令放在补丁文件中补丁 创建最新目录中但缺少工作目录的文件。

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

请注意,我们只提供目录名称,我们没有说明 DIFF 查看特定文件:

diff -ruN working / latest /> slang.patch

如何在Linux中将修补程序应用于文件(和创建修补程序) 1

在补丁文件中偷看

让我们快速浏览补丁文件。我们会用的 看看它的内容。

在终端窗口中减少slang.patch

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

更少的slang.patch在终端窗口显示ile的顶部

通过补丁文件向下滚动,我们看到它然后描述了另一个名为structs.h的文件中的更改。这将验证补丁文件是否包含多个文件的不同版本之间的差异。

less slang.patch显示终端窗口中文件的中间位置

三思而后行

修补大量文件可能有点令人不安,所以我们将使用 --dry运行 在我们采取行动并承诺进行更改之前检查一切正常的选项。

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

如果没有报告任何问题,我们可以重复命令而不用 --dry运行 选项并自信地修补我们的文件。

-d (目录)选项告诉 补丁 要处理哪个目录。

请注意,我们没有使用 -一世 (输入)选项告诉 补丁 哪个补丁文件包含来自的说明 DIFF。相反,我们将补丁文件重定向到 补丁<

patch –dry-run -ruN -d working <slang.patch

<img class =“alignnone size-full wp-image-421261”src =“https://www.howtogeek.com/wp-content/uploads/2019/05/xpatch_14.png.pagespeed.gp+jp+jw+ pj + ws + js + rj + rp + rw + ri + cp + md.ic.EN3xXcFRY6.png“alt =”patch –dry-run -ruN -d working < slang.patch in a terminal window" width="646" height="122">

在整个目录中, DIFF 发现要修补的两个文件。有关这两个文件的修改的说明已经过检查 补丁 ,并没有报道任何问题。

飞行前检查没问题;我们准备好起飞了。

修补目录

要真正将补丁应用于文件,我们使用上一个命令而不使用 --dry运行 选项。

patch -ruN -d working <slang.patch

<img class =“alignnone size-full wp-image-421274”src =“https://www.howtogeek.com/wp-content/uploads/2019/05/xpatch_16.png.pagespeed.gp+jp+jw+ pj + ws + js + rj + rp + rw + ri + cp + md.ic.PrA8BQ3riq.png“alt =”patch -ruN -d working < slang.patch in a terminal window" width="646" height="122">

这一次,每行输出都不以“检查”开始,每行以“修补”开头。

并没有报道任何问题。我们可以编译我们的源代码,我们将使用最新版本的软件。

解决你的差异

这是迄今为止最简单,最安全的使用方式 补丁。将目标文件复制到文件夹并修补该文件夹。如果您对修补过程完成无错误感到高兴,请将其复制回来。

body #primary .entry-content ul#nextuplist list-style-type:none; margin-left:0px; padding-left:0px;
body #primary .entry-content ul#nextuplist li a text-decoration:none; color:#1d55a9;

请阅读下一步

  • >如何流UFC 238 Cejudo vs. Moraes Online
  • >如何在Windows 10上输入Kaomoji(╯°□°)╯(┻━┻
  • >如何在线观看2019年FIFA女足世界杯(无线)
  • >如何在Linux上使用timeout命令
  • >谷歌的Stadia即将崩溃对ISP数据上限
本文机器自动生成,不保证语句完整通顺和表达准确,亦不对内容真实有效性负责,请读者知悉。