我正在尋找 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.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 人們在 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 的一些要求相衝突。