Linuxで使用されるパッチ命令のソースコードを探しています。利用可能かどうかを知っている人はいますか?
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/
このページには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.unix
(mod.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要件と競合します。