シェルコマンドのソースコードをどうやって読むのですか?


158

Linuxコマンドが書かれている実際のソースコードを読みたいのですが。私はそれらを使用していくつかの経験を積んでおり、今は自分のマシンをより深いレベルで操作する時がきたと思います。

http://directory.fsf.org/wiki/GNUでいくつかのコマンドを見つけました。残念ながら、「ls」などの基本的なコマンドを見つけることができませんでした。

「ls」のような単純なシェルコマンドのソースコードをどのように正確に読み取りますか?Ubuntu 12.04で実行しています


1
たとえば、ftp.gnu.org / pub / gnu / coreutilsにアクセスしてください。コードはオンラインで閲覧できます。アーカイブの1つを開き、srcフォルダーを確認します。
Haileは

こんにちは、私もユーティリティを見つけました。それはutil-linuxです。あなたはここで
味方の14

1
lsLinuxの一部ではなく、Gnuの一部です。GnuはLinuxおよびその他のカーネルで実行されます。
ctrl-alt-delor 2017

3
私はgithubインターフェイスがコードを読む方が簡単だと感じてい
coreutils /

回答:


168

これらの基本的なコマンドはすべて、 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


2
ああ、神様!私はそれは少し簡単だったと思いました...まあ、パスは予想よりも長くて難しいです:-)
Luigi Tiburzi

21
ソースをcat試してください。たったの767行です。
Drew Noakes 2014

3
Only 4984 code lines ...-4年と3か月でls57行がさらに複雑になりました。
sherrellbc 2016年

3
なぜwc同等のJavaプログラムよりもはるかに速いのかを理解しようとしたときのことを覚えています。コードを見て... OMGは、それは入力、などまたは何をバッファリング、ディスクの読み込みに最適化された:)私はそう
yǝsʞǝla

@yǝsʞǝlA私はCに堪能ではありません。それが何のために最適化されているかをどのようにわかりますか 例を挙げてもらえますか?
Abdul

127

のいくつかの人気のあるプログラムのソースへの直接リンクcoreutils

完全なリストはこちら。


4
行数を記載していただきありがとうございます。:)
Gowtham Gopalakrishnan

ありますsuか?
アーロンエサウ2018

@Drew、シェルスクリプトで実際に書かれたシェルコマンドがあるかどうか知っていますか?
Rafael


5

実際には、http: //suckless.orgで提供されているより健全なソースがsbaseリポジトリにあります。

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

それらは、より明確で、よりスマートで、よりシンプルで、やさしくありません。 ls.cがありません。

その後、より複雑なGNUコードを理解するのが容易になります。


1

他の投稿で言及されているCoreUtilsは、あなたが求めると思われるほとんどの機能の実際の実装を示していません。ほとんどの場合、データを取得する実際の関数のフロントエンドを提供します。これは次の場所にあります。

lib-subdirectoryにある実際のソースコードを使ってGnulibに基づいて構築されています


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所有する場所へのダウンロードを想定することは省略できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.