데비안(및 파생 상품)

데비안(및 파생 상품)

갑자기 'echo'의 소스 코드를 살펴보고 싶다고 결심했습니다.

$ 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가 좋은 생각이 아니라는 건 알지만, 그냥 궁금해서요...)

저는 현재 Fedora를 사용하고 있지만 Debian에 대한 답변에도 관심이 있습니다.

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


편집하다:

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

/usr/bin/echo그래서 를 다 읽으려고 하기보다는 에 있는 것을 보고 싶다고 생각합니다 bash.

답변1

데비안(및 파생 상품)

어떤 패키지가 속하는지 dpkg -S /path확인하려면 다음을 실행하세요 ./path

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

소스를 얻으세요(저는 Ubuntu를 사용하고 있습니다):

$ 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

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

답변2

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

관련 정보