Linux 下有补丁命令的源代码吗?

Linux 下有补丁命令的源代码吗?

我正在寻找 Linux 中使用的 patch 命令的源代码。有谁知道是否有可用的?

我正在寻找与 POSIX 或更具体地说 QNX v7 兼容的东西。

答案1

patch命令的实际 实现有多种,busybox例如自带的。您可能正在寻找patch您的系统附带的源代码。为了找到源代码,您必须知道您在寻找什么。您需要检查哪个包提供了patch命令以及上游在哪里。您没有指定您使用的操作系统,但在 Debian 上您可以执行以下操作:

root@64ee32ea5ee6:/# dpkg -S "$(command -v patch)"
patch: /usr/bin/patch
root@64ee32ea5ee6:/# dpkg -s patch
Package: patch
Status: install ok installed
Priority: standard
Section: vcs
Installed-Size: 238
Maintainer: Ubuntu Developers <[email protected]>
Architecture: amd64
Multi-Arch: foreign
Version: 2.7.6-2ubuntu1.1
Depends: libc6 (>= 2.17)
Suggests: ed, diffutils-doc
Description: Apply a diff file to an original
 Patch will take a patch file containing any of the four forms
 of difference listing produced by the diff program and apply
 those differences to an original file, producing a patched
 version.
Homepage: http://savannah.gnu.org/projects/patch/
Original-Maintainer: Laszlo Boszormenyi (GCS) <[email protected]>

以 Slackware 为例:

$ grep $(sed 's,^/,,' <<< "$(command -v patch)" ) /var/log/packages/* | cut -d: -f1
/var/log/packages/metamail-2.7-x86_64-7
/var/log/packages/patch-2.7.6-x86_64-3
/var/log/packages/patchelf-0.10-x86_64-1
$ cat /var/log/packages/patch-2.7.6-x86_64-3
PACKAGE NAME:     patch-2.7.6-x86_64-3
COMPRESSED PACKAGE SIZE:     116K
UNCOMPRESSED PACKAGE SIZE:     290K
PACKAGE LOCATION: ./patch-2.7.6-x86_64-3.txz
PACKAGE DESCRIPTION:
patch: patch (apply a diff file to an original file or files)
patch:
patch: Patch is a utility used to apply diffs (or patches) to files, which
patch: are usually source code.
patch:
patch: Larry Wall wrote the original version of patch. Paul Eggert removed
patch: patch's arbitrary limits; added support for binary files, setting
patch: file times, and deleting files; and made it conform better to POSIX.
patch: Other  contributors include Wayne Davison, who added unidiff support,
patch: and David MacKenzie, who added configuration and backup support.
patch:

在这两种情况下都使用了 GNU 补丁,Debian 软件包描述甚至包含项目主页的链接 http://savannah.gnu.org/projects/patch但目前不起作用。

您也可能希望获得patch当前在系统上使用的源代码以及软件包维护者添加的所有补丁和注释。在 Debian 上你可以这样做:

$ apt-get source patch

答案2

默认patch命令至少德班(但可能也在大多数其他 Linux 发行版上)是 GNU patch

GNUpatch项目“主页”是https://www.gnu.org/software/patch/

此页面包含两个链接软件存储库可下载的分发档案

软件存储库的 Github 镜像位于https://github.com/mirror/patch

BSD 系统有另一种实现方式。 OpenBSD 实现可以在以下位置查看:https://cvsweb.openbsd.org/src/usr.bin/patch/

答案3

如果您使用的是 Linux,您很可能使用 GNU 补丁,请参阅http://www.gnu.org,但patch历史悠久,并且存在不止一种变体:

patch是一个最初由 Larry wall 于 1985 年 5 月编写的程序。 他将 1.3 版的源代码以 shar 格式发布到 Usenet 新闻组mod.sources

2.0 版本由 Larry Wall 于 1986 年通过帖子发布comp.sources.unixmod.sources后来更名),Larry Wall 的最新版本于 1988 年 6 月制作。

Larry 的原始许可证是:

* This program may be copied as long as you don't try to make any
* money off of it, or pretend that you wrote it.

这与当今 OSS 的理念不符,因为它禁止从中“赚钱”。

由于复杂的程序patch需要引起注意,因此有多个派生版本。

GNU 人们在 1990 年提出了 GPLd 版本,但据我所知,从未证实 Larry 确实同意了这一许可证变更。

IBM、HP、DEC 和 Sun 在 20 世纪 90 年代制作了闭源版本。它已符合 POSIX 标准,但从未修复所有已知错误。

大约。 10 年前,OpenBSD 和我创建了没有 GPLd 代码的变体。

大约。 5 年前,Larry 确实允许 OpenBSD 人员和我使用第 1 条 BSD 许可证,以使补丁 OSS 兼容。

虽然 BSD 人员和我之间就错误和安全问题进行了某种交流,但 GNU 版本是独立的。

中的版本schilytools包括昂贵的补丁测试套件,并将结果与​​预期结果以及本地安装版本的结果进行比较。由于这是(在许多情况下gpatch),因此每次检测到系统安装版本中的错误时都需要包含一些解决方法,-)

schilytools 版本的手册页可以在这里找到:http://schilytools.sourceforge.net/man/man1/patch.1.html

鉴于 OP 对 QNX 感兴趣,他对 OpenBSD 源代码不感兴趣,因为该源代码不可移植。 schilytools 具有高度可移植性,尽管距离上次看到 QNX 编译的反馈已经过去了很长时间。因此,如果它在 QNX 上不再编译,请发送提示。

顺便说一句:GNU 补丁与 POSIX 的一些要求相冲突。

相关内容