如何阅读shell命令的源代码?


158

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

我在http://directory.fsf.org/wiki/GNU中找到了一些命令。不幸的是,我找不到基本的命令,例如“ ls”,在我看来这很容易上手。

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


1
例如,访问:ftp.gnu.org/pub/gnu/coreutils您可以在线浏览代码。打开一个存档,然后检查src文件夹。
海尔

嗨,我也找到了一个实用程序,它是util-linux。您可以在这里
激进分子2014年

1
ls不是Linux的一部分,而是Gnu的一部分。Gnu在Linux和其他内核上运行。
ctrl-alt-delor

3
我发现github界面更易于阅读代码,github.com
coreutils/

Answers:


168

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

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

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

如果要下载最新的源代码,则应使用git:

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

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

sudo apt-get install git

说实话,在这里您可以找到ls命令的特定来源:

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

命令“足够简单”的代码行只有4984行,因为ls...您仍然对阅读它感兴趣吗?祝好运!:D


2
我的天啊!我以为这要容易一些...路径比预期的长和难:-)
Luigi Tiburzi 2012年

21
尝试使用的cat。只有767行。
Drew Noakes 2014年

3
Only 4984 code lines ...-似乎在4年3个月中ls又变得更加复杂了57行。
sherrellbc

3
我记得曾经尝试理解为什么wc它比等效的Java程序快得多。所以,我看着代码... OMG是它优化了磁盘读取,缓存输入等或什么:)
yǝsʞǝla

@yǝsʞǝlA我不精通C;您如何知道它的优化目的?你可以给我一个例子吗?
阿卜杜勒

127

指向以下一些流行程序的源的直接链接coreutils

完整列表在这里。


4
感谢您列出行数。:)
Gowtham Gopalakrishnan

你有su
亚伦·埃绍

@Drew,您是否知道是否有实际用Shell脚本编写的Shell命令?
拉斐尔


5

实际上,httpsbase://suckless.org提供了更多合理的资源,查看它们的存储库:

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

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

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


1

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

它基于Gnulib以及lib- 子目录中的实际源代码


1

您可以使用以下命令将其放在github上

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

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

您需要安装git

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


-1
    cd ~ && apt-get source coreutils && ls -d coreutils*     

您应该能够在ubuntu上使用类似这样的命令来收集软件包的源代码,也可以忽略sudo假设下载到自己的位置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.