Я только что узнал о /bin/true
вчера. Я ни в коем случае не опытный пользователь bash, но я решил проверить это. Я был удивлен, обнаружив, что это файл 22K (Ubuntu 12.04), а не одна из самых маленьких утилит в /bin
(например, kill
меньше). Это на самом деле просто любопытство, но есть ли причина для того, чтобы код не был очень маленьким? Как мне найти исходный код для /bin/true
?
Ну, изучение источников coreutils инструментов, true
один из самых маленьких. Это меньше, чем kill
, хотя больше, чем false
, который является самым маленьким:
$ 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
Так, true
имеет 78 строк, но только 58 из них являются на самом деле кодом (остальные - пустые строки и комментарии):
$ grep . src/true.c | awk '{ if(/\/\*/){a=0} if(a){print} if(/\*\//){a=1}}' | wc
50
И да, многое из того (10 строк) выделено эти usage
функция. Программа все еще крошечная все же.
кроме того, причина, которая false
является более крошечной, состоит в том, что это просто звонит true
:
$ cat src/false.c
#define EXIT_STATUS EXIT_FAILURE
#include "true.c"
$ dpkg -S /bin/true
coreutils: /bin/true
, Таким образом, пакет, который на самом деле обеспечивает /bin/true
файл, coreutils
.
Выполнение ниже команды для загрузки исходного кода coreutils
,
apt-get source coreutils
true
часть GNU coreutils. Их домашняя страница здесь , и существуют ссылки на загрузку для источника там. С мерзавцем можно загрузить исходное использование:
git clone git://git.sv.gnu.org/coreutils