175

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

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

我究竟如何阅读像'ls'这样的简单shell命令的源代码?我在 Ubuntu 12.04 上运行

4

8 回答 8

189

所有这些基本命令都是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

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

于 2012-07-17T18:08:29.093 回答
145

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

完整列表在这里。

于 2014-09-24T20:49:48.607 回答
6

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

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

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

于 2012-07-17T18:05:42.667 回答
5

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

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

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

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

于 2015-07-13T19:45:59.797 回答
1

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

它建立在Gnulib 之上,实际源代码位于lib-subdirectory

于 2016-08-18T07:31:55.997 回答
1

您可以使用以下命令在 github 上拥有它

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

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

你需要安装git

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

于 2019-02-04T14:23:45.027 回答
0

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

于 2021-06-08T13:34:15.463 回答
-1
    cd ~ && apt-get source coreutils && ls -d coreutils*     

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

于 2013-02-20T03:53:14.683 回答