【问题标题】:How do I read the source code of shell commands?如何阅读 shell 命令的源代码?
【发布时间】:2012-07-16 17:09:30
【问题描述】:

我想阅读编写 linux 命令的实际源代码。我已经获得了一些使用它们的经验,现在我认为是时候与我的机器进行更深层次的交互了。

我在这里找到了一些命令http://directory.fsf.org/wiki/GNU。不幸的是,我无法找到诸如“ls”之类的基本命令,这对我来说似乎很容易开始。

我如何准确地阅读像“ls”这样的简单 shell 命令的源代码? 我在 Ubuntu 12.04 上运行

【问题讨论】:

标签: linux command gnu-coreutils


【解决方案1】:

所有这些基本命令都是coreutils 包的一部分。

您可以在这里找到您需要的所有信息:

http://www.gnu.org/software/coreutils/

如果你想下载最新的源码,你应该使用git:

git clone git://git.sv.gnu.org/coreutils

要在你的 Ubuntu 机器上安装 git,你应该使用 apt-get(git 不包含在标准的 Ubuntu 安装中):

sudo apt-get install git

说实话,在这里你可以找到ls 命令的具体来源:

http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/ls.c

ls这样的命令“足够简单”只有 4984 行代码...你还有兴趣阅读它吗?祝你好运! :D

【讨论】:

  • 天啊!我认为这更容易一些......好吧,这条路比预期的更长更难:-)
  • 试试source for cat。它只有 767 行。
  • Only 4984 code lines ... -- 似乎在 4 年零 3 个月后,ls 又变得更复杂了 57 行。
  • 我记得有一次我试图理解为什么 wc 比同等的 Java 程序快得多。所以我查看了代码……天哪,它是否针对磁盘读取、缓冲输入等进行了优化:)
  • @yǝsʞǝlA 我不精通 C;你怎么知道它在优化什么?可以举个例子吗?
【解决方案2】:

直接链接到coreutils中一些流行程序的源代码:

Full list here.

【讨论】:

  • 感谢您列出行数。 :)
  • 你有su吗?
  • @Drew,你知道shell脚本中是否真的有shell命令吗?
  • 我在这里没有看到像 find . -type f -name '*.csproj' 这样的 find 命令我想看看这个算法的样子
【解决方案3】:

ls 是 coreutils 的一部分。你可以用 git 得到它:

git clone git://git.sv.gnu.org/coreutils

您会在this page 上找到与其他软件包一起列出的 coreutils(滚动到底部)。

【讨论】:

【解决方案4】:

实际上,http://suckless.org 提供了更健全的资源,请查看他们的 sbase 存储库:

git clone git://git.suckless.org/sbase

它们更清晰、更智能、更简单、更简单,例如ls.c 只有 369 LOC

之后会更容易理解更复杂的 GNU 代码。

【讨论】:

    【解决方案5】:

    其他帖子中提到的CoreUtils 并未显示我认为您寻求的大多数功能的真正实现。在大多数情况下,它为检索数据的实际函数提供前端,可在此处找到:

    它基于Gnulib 构建,实际源代码位于lib-subdirectory

    【讨论】:

    • 这个资源是官方还是第三方仓库?
    • @Merlin:这是官方的
    【解决方案6】:

    你可以用命令把它放到github上

    git clone https://github.com/coreutils/coreutils.git
    

    您可以在 src 文件夹中找到所有源代码。

    您需要安装git

    自 2012 年以来情况发生了变化,ls 源代码现在有 5309 行

    【讨论】:

      【解决方案7】:

      BSD 发行版实际上是一种很好的阅读源代码的方式,通过使用它们的存储库,因为它们都被打包到一个地方,您可以查看源代码在历史上是如何演变或变化的。那么为什么不使用 BSD 存储库,例如 NetBSDOpenBSD 来完成此任务。

      【讨论】:

        【解决方案8】:
            cd ~ && apt-get source coreutils && ls -d coreutils*     
        

        您应该能够在 ubuntu 上使用这样的命令来收集软件包的源代码,如果您下载到您拥有的位置,则可以省略 sudo

        【讨论】:

          猜你喜欢
          • 2012-01-15
          • 2019-04-16
          • 1970-01-01
          • 2019-01-09
          • 2013-05-16
          • 2012-09-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多