我昨天才发现/bin/true
。我绝不是 bash 高级用户,但我决定检查一下。我很惊讶地发现它是一个 22K 文件(Ubuntu 12.04),而不是最小的实用程序之一/bin
(例如kill
更小)。这真的只是好奇,但它不是一小段代码,有什么理由吗?我该如何找到源代码/bin/true
?
答案1
好吧,看看 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"
答案2
$ dpkg -S /bin/true
coreutils: /bin/true
因此实际提供文件的包/bin/true
是coreutils
。
运行以下命令下载源代码coreutils
,
apt-get source coreutils
答案3
true
是 GNU coreutils 的一部分。他们的主页在这里,那里有源代码的下载链接。使用 git,你可以使用以下命令下载源代码:
git clone git://git.sv.gnu.org/coreutils