web-dev-qa-db-fra.com

Pourquoi / bin / true est-il un fichier aussi volumineux? Comment pourrais-je trouver le code source?

Je viens de découvrir /bin/true hier. Je ne suis en aucun cas un gros consommateur d’énergie, mais j’ai décidé de le vérifier. J'ai été surpris de constater qu'il s'agit d'un fichier 22K (Ubuntu 12.04) et non d'un des plus petits utilitaires de /bin (par exemple, kill est plus petit). Ce n’est vraiment que de la curiosité, mais y a-t-il une raison pour que ce ne soit pas un tout petit morceau de code? Comment pourrais-je trouver le code source de /bin/true?

2
Steve Koch

Bien, regardant dans les sources des outils de coreutils, trueest l'un des plus petits. Il est plus petit que kill, bien que plus grand que false qui est le plus petit:

$ 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

Ainsi, true comporte 78 lignes, mais seulement 58 d’entre elles sont en fait du code (le reste est constitué de lignes vides et de commentaires):

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

Et oui, beaucoup de ces lignes (10 lignes) sont dédiées à la fonction usage. Le programme est toujours minuscule si.

De plus, la raison pour laquelle false est plus petite est qu'elle appelle simplement true:

$ cat src/false.c
#define EXIT_STATUS EXIT_FAILURE
#include "true.c"
4
terdon
$ dpkg -S /bin/true
coreutils: /bin/true

Ainsi, le paquet qui fournit réellement le fichier /bin/true est coreutils.

Exécutez la commande ci-dessous pour télécharger le code source de coreutils,

apt-get source coreutils
3
Avinash Raj

true fait partie de GNU coreutils. Leur page d'accueil est ici , et il y a des liens de téléchargement pour la source. Avec git, vous pouvez télécharger la source en utilisant:

git clone git://git.sv.gnu.org/coreutils
2
jkt123