Почему /bin/true такой большой файл? Как мне найти исходный код?
Я только что узнал о /bin/true
вчера. Я ни в коем случае не опытный пользователь bash, но я решил проверить это. Я был удивлен, обнаружив, что это 22K файл (Ubuntu 12.04), а не одна из самых маленьких утилит в /bin
(например kill
меньше). Это на самом деле просто любопытство, но есть ли причина для того, чтобы код не был очень маленьким? Как мне найти исходный код для /bin/true
?
3 ответа
Ну, глядя на источники инструментов 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 вы можете скачать исходный код, используя:
git clone git://git.sv.gnu.org/coreutils