Linux에서 패치 명령에 사용할 수 있는 소스 코드가 있습니까?

Linux에서 패치 명령에 사용할 수 있는 소스 코드가 있습니까?

Linux에서 사용되는 패치 명령에 대한 소스 코드를 찾고 있습니다. 사용 가능한 것이 있는지 아는 사람이 있나요?

POSIX, 특히 QNX v7과 호환되는 것을 찾고 있습니다.

답변1

patch예를 들어 자체적으로 제공되는 명령 구현에는 여러 가지가 있습니다 busybox. 아마도 patch시스템과 함께 제공되는 소스 코드를 찾고 있을 것입니다 . 소스 코드를 찾으려면 찾고 있는 것이 무엇인지 알아야 합니다. 어떤 패키지가 patch명령을 제공하는지, 업스트림이 어디에 있는지 확인해야 합니다 . 어떤 OS를 사용하는지 지정하지 않았지만 데비안에서는 다음을 수행할 수 있습니다.

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 패치가 사용되며 데비안 패키지 설명에는 프로젝트 홈페이지 링크도 포함되어 있습니다. http://savannah.gnu.org/projects/patch하지만 지금은 작동하지 않습니다.

patch패키지 관리자가 추가한 모든 패치 및 주석과 함께 현재 시스템에서 사용하는 소스를 얻고 싶을 수도 있습니다 . 데비안에서는 다음을 할 수 있습니다:

$ apt-get source patch

답변2

patch적어도 기본 명령은데비안(그러나 아마도 대부분의 다른 Linux 배포판에서도) GNU 입니다 patch.

GNU patch프로젝트 "홈페이지"는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원래 1985년 5월 Larry Wall이 작성한 프로그램입니다. 그는 유즈넷 뉴스 그룹에 shar 형식의 버전 1.3 소스를 게시했습니다.mod.sources.

comp.sources.unix버전 2.0은 1986년 Larry Wall이 ( 나중에 이름이 변경됨) 게시물을 통해 게시되었으며 mod.sourcesLarry 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를 통해 "돈을 버는 것"을 금지하기 때문에 OSS에 대한 오늘날의 아이디어와 일치하지 않습니다.

주의가 필요한 복잡한 프로그램이므로 patch여러 가지 파생 버전이 있습니다.

GNU 사람들은 1990년에 GPLd 버전을 내놓았지만 AFAIK는 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의 일부 요구 사항과 충돌합니다.

관련 정보