.png)
De repente, decidi que gostaria de ver o código-fonte de 'echo'
$ which echo
/usr/bin/echo
então
$ ls -al /usr/bin/echo
-rwxr-xr-x. 1 root root 32536 Oct 31 2016 /usr/bin/echo
então
$strings /usr/bin/echo
me leva a acreditar que é um programa C compilado
Agora estou preso.
Como é que eu:
Descubra em qual pacote ele está
Obtenha a fonte
Reconstrua
Teste-o
Instale a nova versão em todo o sistema
(Eu sei que 5 não é uma boa ideia, só estou curioso...)
Atualmente estou no Fedora, mas também estaria interessado nas respostas para o Debian
Um link para um tutorial relevante seria uma boa resposta.
Editar:
$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo
Então, acho que é aquele que /usr/bin/echo
eu gostaria de ver, em vez de tentar ler o arquivo inteiro bash
.
Responder1
Debian (e derivados)
Execute dpkg -S /path
para ver a qual pacote /path
pertence:
$ dpkg -S /bin/echo
coreutils: /bin/echo
Obtenha a fonte (estou no 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
Encontre o arquivo:
$ cd coreutils-8.5
$ find src -iname '*echo*'
src/echo.c
O resto é com você.
Responder2
RHEL/Fedora
Correrrpm -qf /path
$ rpm -qf /usr/bin/echo
coreutils-8.25-17.fc25.x86_64
Baixe o pacote fonte (use yum
para RHEL):
$ dnf download coreutils --enablerepo="*source"
Extraia as fontes, patches do pacote SRPM baixado no diretório atual, mude para o diretório onde os arquivos foram extraídos e encontre seu arquivo:
$ rpmbuild -rp coreutils-8.25-17.fc25.src.rpm
$ cd ~/rpmbuild/BUILD/coreutils-8.25/
$ find src -iname '*echo*'
src/echo.c
Você pode reconstruir o pacote usando rpmbuild --rebuild coreutils-8.25-17.fc25.src.rpm
, que produzirá os RPMs que você pode instalar diretamente em seu sistema.
Se você precisar fazer alguma modificação nos pacotes do Fedora, é muito mais fácil seguir o caminho do mantenedor: Instalar fedpkg
, clonar o repositório, fazer as modificações (usando patches) e reconstruir o pacote com as modificações:
$ sudo dnf install fedpkg
$ fedpkg clone coreutils
$ cd coreutils
$ # do the modifications
$ fedpkg local