Linux에 패치 명령에 대한 소스 코드가 있습니까?

Linux에 패치 명령에 대한 소스 코드가 있습니까?

리눅스에서 사용되는 패치 명령어의 소스코드를 찾고 있습니다. 사용 가능한지 아는 사람 있나요?

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

답변1

patchbusybox내장된 명령과 같이 명령의 실제 구현이 많이 있습니다 . patch시스템과 함께 제공된 소스 코드를 찾고 있을 수도 있습니다 . 소스 코드를 찾으려면 찾고 있는 것이 무엇인지 알아야 합니다. 어떤 패키지가 patch명령을 제공하는지, 업스트림이 어디에 있는지 확인해야 합니다 . 사용 중인 운영 체제를 지정하지 않았지만 데비안에서는 다음을 수행할 수 있습니다:

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이 작성한 프로그램입니다. 그는 버전 1.3의 소스 코드를 shar 형식으로 유즈넷 뉴스 그룹에 게시했습니다.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 요구 사항과 충돌합니다.

관련 정보