명령의 소스 코드를 어떻게 확인합니까? [닫은]


13

갑자기 '에코'의 소스 코드를보고 싶다고 결정했습니다.

$ which echo
/usr/bin/echo

그래서

$ ls -al /usr/bin/echo
-rwxr-xr-x. 1 root root 32536 Oct 31  2016 /usr/bin/echo

그래서

$strings /usr/bin/echo

컴파일 된 C 프로그램이라고 믿게합니다.

이제 막혔어요

내가 어떻게 할:

  1. 포함 된 패키지 찾기

  2. 소스 받기

  3. 그것을 재건

  4. 그것을 테스트

  5. 시스템 전체에 새 버전 설치

(5는 좋은 아이디어가 아니라는 것을 알고 있습니다. 궁금합니다 ...)

저는 현재 페도라에 있지만 데비안에 대한 답변에도 관심이 있습니다

관련 튜토리얼에 대한 링크가 좋은 답변입니다.


편집하다:

$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo

그래서 나는 /usr/bin/echo전체를 읽으려고 시도하기보다는보고 싶은 것 같아요 bash.


2
type -a echo먼저 시도하십시오 .
사토 카츠라

1
-a echo 유형; echo는 내장 쉘입니다. echo는 / usr / bin / echo입니다. 그래서 나는 모든 bash를 읽는 것이 아니라 / usr / bin / echo를보고 싶다고 생각한다!
John Lawrence Aspden

2
/usr/bin/echo --version다음에 시도하십시오 .
사토 카츠라


2
... 그리고 그것은 당신이 요청한 것과는 매우 다른 질문입니다.
사토 카츠라

답변:


13

RHEL / 페도라

운영 rpm -qf /path

$ rpm -qf /usr/bin/echo
coreutils-8.25-17.fc25.x86_64

소스 패키지 다운로드 ( yumRHEL에 사용 ) :

$ dnf download coreutils --enablerepo="*source"

현재 디렉토리에 다운로드 된 SRPM 패키지에서 소스, 패치를 추출하고 파일이 추출 된 디렉토리로 변경 한 후 파일을 찾으십시오.

$ rpmbuild -rp coreutils-8.25-17.fc25.src.rpm
$ cd ~/rpmbuild/BUILD/coreutils-8.25/
$ find src -iname '*echo*'
src/echo.c

를 사용하여 패키지를 다시 빌드하면 rpmbuild --rebuild coreutils-8.25-17.fc25.src.rpm시스템에 직접 설치할 수있는 RPM이 생성됩니다.

fedora 패키지를 약간 수정해야하는 경우 유지 관리 방법을 사용하는 것이 훨씬 쉽습니다. 설치 fedpkg, 저장소 복제, 수정 (패치 사용) 및 수정으로 패키지를 다시 빌드

$ sudo dnf install fedpkg
$ fedpkg clone coreutils
$ cd coreutils
$ # do the modifications
$ fedpkg local

15

데비안 (및 파생 상품)

다음에 속하는 dpkg -S /path패키지를 확인하십시오 /path.

$ dpkg -S /bin/echo
coreutils: /bin/echo

소스를 얻으십시오 (우분투에 있습니다) :

$ apt-get source coreutils
Reading package lists... Done
Need to get 5,755 kB of source archives.
Get:1 http://jp.archive.ubuntu.com/ubuntu xenial/main coreutils 8.25-2ubuntu2 (dsc) [2,071 B]
Get:2 http://jp.archive.ubuntu.com/ubuntu xenial/main coreutils 8.25-2ubuntu2 (tar) [5,725 kB]
Get:3 http://jp.archive.ubuntu.com/ubuntu xenial/main coreutils 8.25-2ubuntu2 (diff) [28.0 kB]
Fetched 5,755 kB in 3s (1,758 kB/s)
gpgv: Signature made 2016年02月18日 22時28分36秒 JST using RSA key ID 73F3F233
gpgv: Can't check signature: public key not found
dpkg-source: warning: failed to verify signature on ./coreutils_8.25-2ubuntu2.dsc
dpkg-source: info: extracting coreutils in coreutils-8.25
dpkg-source: info: unpacking coreutils_8.25.orig.tar.xz
dpkg-source: info: unpacking coreutils_8.25-2ubuntu2.debian.tar.xz
dpkg-source: info: applying no_ls_quoting.patch
dpkg-source: info: applying 61_whoips.patch
dpkg-source: info: applying 63_dd-appenderrors.patch
dpkg-source: info: applying 72_id_checkngroups.patch
dpkg-source: info: applying 80_fedora_sysinfo.patch
dpkg-source: info: applying 85_timer_settime.patch
dpkg-source: info: applying 99_kfbsd_fstat_patch.patch
dpkg-source: info: applying 99_hppa_longlong.patch
dpkg-source: info: applying 99_float_endian_detection.patch

파일을 찾으십시오.

$ cd coreutils-8.5 
$ find src -iname '*echo*'
src/echo.c

나머지는 당신에게 달려 있습니다.


매우 감사합니다. 나는 그것에 대해 물어 봤기 때문에 RHEL / Fedora가 허용 된 답변으로 만들어야한다고 생각합니다. 그러나 주로 데비안을 사용하므로 아마도 내 관점에서 당신이 선호하는 것입니다! 안타깝게도 둘 다 받아 들일 수 없습니다.
John Lawrence Aspden

정답은 정확하지만 추가로 업스트림 소스를보고 싶을 수도 있습니다 (예 : 새로운 변경 사항이 아직 배포판에 없는지 여부). 해당 전화 dpkg -s coreutils(또는 관심있는 패키지)를 수행하고을 찾으십시오 Homepage:. 홈페이지에서 일반적으로 소스 코드 및 전체 버전 기록에 대한 읽기 액세스 권한을 찾을 수 있습니다.
Uwe Geuder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.