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
?
Bien, regardant dans les sources des outils de coreutils, true
est 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"
$ 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
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