Por que / bin / true é um arquivo tão grande? Como eu encontraria o código fonte?

2

Acabei de descobrir sobre /bin/true ontem. Eu não sou um usuário poderoso bash por qualquer meio, mas eu decidi dar uma olhada. Fiquei surpreso ao descobrir que é um arquivo de 22K (Ubuntu 12.04), e não um dos menores utilitários em /bin (por exemplo, kill é menor). Isso é realmente apenas curiosidade, mas há motivos para não ser um pequeno código? Como eu poderia encontrar o código-fonte para /bin/true ?

    
por Steve Koch 24.04.2014 / 03:51

3 respostas

4

Bem, olhando para as fontes das ferramentas coreutils, true é uma das menores. É menor que kill , embora maior que false , que é o menor:

$ for i in src/*c; do wc -l $i; done | sort -nr | tail -11
78 src/true.c
74 src/operand2sig.c
73 src/sync.c
37 src/prog-fprintf.c
2 src/uname-uname.c
2 src/uname-arch.c
2 src/ls-vdir.c
2 src/ls-ls.c
2 src/ls-dir.c
2 src/lbracket.c
2 src/false.c

Então, true tem 78 linhas, mas apenas 58 delas são realmente código (o resto são linhas em branco e comentários):

$ grep . src/true.c | awk '{ if(/\/\*/){a=0} if(a){print} if(/\*\//){a=1}}' | wc
50

E sim, muito disso (10 linhas) é dedicado à função usage . O programa ainda é minúsculo .

Além disso, o motivo pelo qual false é menor é que ele simplesmente chama true :

$ cat src/false.c
#define EXIT_STATUS EXIT_FAILURE
#include "true.c"
    
por terdon 11.05.2014 / 03:07
3
$ dpkg -S /bin/true
coreutils: /bin/true

Portanto, o pacote que realmente fornece o arquivo /bin/true é coreutils .

Execute o comando abaixo para baixar o código-fonte de coreutils ,

apt-get source coreutils
    
por Avinash Raj 24.04.2014 / 04:12
2

true faz parte dos coreutils do GNU. Sua página inicial está aqui , e há links de download para a fonte lá. Com o git, você pode baixar a fonte usando:

git clone git://git.sv.gnu.org/coreutils
    
por jkt123 24.04.2014 / 03:55