4.2. 设计

4.2.1. 确定所需的命令

首先想到的问题可能是,“我们如何知道需要哪些命令?” 可以从 catls 开始,然后在发现需要时安装其他命令。但这效率非常低下。我们需要一个计划或蓝图来依据。为此,我们可以参考文件系统层次结构标准 (Filesystem Hierarchy Standard, FHS),该标准可从 http://www.pathname.com/fhs/ 获取。FHS 规定了 Linux 系统上应存在的命令以及它们在目录结构中的位置。

4.2.2. 定位源代码

下一个合乎逻辑的问题是,“既然我们知道我们需要什么,那么从哪里获取源代码呢?” 找到这个问题的答案的一种方法是查看 manpages(手册页)。我们可以搜索包含在流行的 GNU/Linux 发行版之一中的 manpages,或者使用 http://www.tldp.org/docs.html#man 列出的 manpage 搜索引擎之一。 提示我们特定命令的源代码位置的一件事是列出的用于报告错误的的电子邮件地址。 例如,cat manpage 列出了 bug-textutils@gnu.org。 从这个电子邮件地址,我们可以推断出 cat 是来自 GNU 的 textutils 包的一部分。

4.2.3. 利用 FHS

所以让我们看看关于/bin目录。 列表中的前几个命令是 catchgrpchmodchowncp。 我们已经知道 cat 是 GNU 的 textutils 的一部分。 在 manpage 搜索中使用接下来的几个命令作为关键字,我们发现我们需要 GNU 的 fileutils 包来支持 chmodchgrpchowncp。 实际上,目录中有很多命令都来自/bin来自 GNU 的 fileutils。 date 命令也来自一个名为 sh-utils 的 GNU 包。 因此,解决查找源代码问题的一个好方法可能是按照包对命令进行分组,如下所示。

这四个包不包含目录中的所有命令,/bin但它们确实代表了其中 70% 以上。 这应该足以完成我们添加一些常用外部命令的目标。 我们可以稍后在项目的后期阶段再考虑其他命令。

4.2.4. 下载源代码

要获取源代码,我们只需连接到 GNU 的 FTP 站点 并导航到相应的软件包目录。

当我们进入 textutils 的目录时,有几个版本可用。 还有一条注释通知我们该软件包已重命名为 coreutils。 关于 coreutils 的相同消息也出现在 fileutils 和 sh-utils 目录中。 因此,我们可以从 coreutils 目录中的一个方便的捆绑包中获取所有内容,而不是下载三个单独的软件包。