Linuxにはパッチコマンドのソースコードがありますか?

Linuxにはパッチコマンドのソースコードがありますか?

Linuxで使用されるパッチ命令のソースコードを探しています。利用可能かどうかを知っている人はいますか?

POSIX、特にQNX v7と互換性があるものを探しています。

答え1

patchbusybox組み込みコマンドなど、コマンドの実際の実装がたくさんあります。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/

このページには2つのリンクが含まれていますソフトウェアリポジトリそしてダウンロード可能な配布アーカイブ

ソフトウェアリポジトリの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もともと1985年5月、ラリー・ウォールが作成したプログラムです。 彼はバージョン1.3のソースコードをshar形式でUsenetニュースグループに公開しました。mod.sources

バージョン2.0は1986年にLarry Wallによって公開され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のGPLdバージョンが1990年に提案されましたが、私の知る限り、Larryが実際にこのライセンスの変更に同意したことは確認されていません。

IBM、HP、DEC、およびSunは、1990年代にプライベートソースバージョンを製造しました。 POSIXと互換性がありますが、既知のすべてのバグは修正されていません。

について。 10年前、OpenBSDと私はGPLdコードのないバリエーションを作りました。

について。 5年前、Larryは、OpenBSDの人々と私がパッチしたOSSを互換性にするためにセクション1 BSDライセンスを使用することを許可しました。

バグとセキュリティの問題についてBSDの人々と私の間に少しのコミュニケーションがありましたが、GNUバージョンは独立していました。

バージョンにはschilytools高価なパッチテストのコレクションが含まれており、結果を期待される結果とローカルにインストールされたバージョンの結果と比較します。これは(ほとんどの場合gpatch)なので、システムにインストールされているバージョンでバグが検出されるたびにいくつかの回避策を含める必要があります。 -)

schilytoolsバージョンのマニュアルページはここにあります:http://schilytools.sourceforge.net/man/man1/patch.1.html

OPがQNXに興味を持っていることを考えると、OpenBSDソースコードは移植性がないので興味がありません。 schilytoolsは移植性に優れていますが、QNXコンパイルに関するフィードバックを最後に見てから長い時間がかかりました。したがって、もはやQNXでコンパイルされない場合は、ヒントを送ってください。

注:GNUパッチは一部のPOSIX要件と競合します。

関連情報