Linuxコマンドのソースコードを取得する方法(Debian環境):オリジナルコマンド作成前の勉強向け

前書き

少し古い雑誌ですが、CQ出版社のInterface誌(2016年10月号)に「レベルアップ! オリジナル・コマンドを作る」という記事がありました。しかし、この雑誌に書かれている内容は、bashに偏っており、情報が不足していると(当時)感じました。

単純に自作コマンドを作成し、自作コマンドをシステムにインストールするだけであれば、以下の2点が必要な情報ではないかと考えています(本来であれば、メッセージの国際化やmanの作成など、コマンド作成時はすべき事が多いです)。

自作コマンドを作成する上で、最低限必要な情報
  • 自作コマンド(実行形式ファイル)の格納先
  • 自作コマンド作成時の参考(既存コマンドのソースコード)の取得方法

本記事では、上記2点に関して記載します。なお、本記事は、2016年に書いた内容に加筆したものであり、2019年現在から3年経過しています。その3年の間に、私は他人のコードを読む事が勉強になる事を肌で感じています。そのため、コマンド(パッケージ)のソースコード取得方法は、プログラマであれば覚えておいて損はないと考えています。

                          

検証環境

                               

一般的なコマンドの格納先

Linuxのディレクトリ階層は、Filesystem Hierarchy Standardで(ある程度)定められています。そのため、Linuxコマンドの格納先は、一般的に下表のディレクトリとなります。自作コマンドであれば、格納が推奨されているディレクトリは、/usr/local/bin です。

ディレクトリ 役割
/bin シングルユーザモードで必要になるコマンド格納先(cat、rmなど)
/sbin システム管理系コマンド格納先(sudo、ifconfigなど)
/usr/bin 一般ユーザ向けだが、基本的(一般的)ではないコマンド格納先(make、wgetなど)
/usr/sbin 基本的ではないシステムコマンド格納先(各種デーモンなど)
/usr/local/bin 評価版パッケージや自作コマンドの格納先

                       

特定のコマンドの格納先が知りたい場合は、下記のコマンドでパスを取得できます。

コマンド名 機能
whereis コマンド格納先、manの格納先を表示
which コマンドの格納先を表示

                                           

コマンドのソースコードの取得方法(CUI)

まず、コマンドを提供しているパッケージ名を調査します。今回は、mkdirコマンドを例にします。

上記のdpkgコマンドにより、mkdirはcoreutilsパッケージで提供される事が分かります。なお、apt-fileコマンドを用いて、パッケージ名を取得する方法もあります。ただし、こちらの方法は、複数のパッケージ名や関係のないディレクトリも表示されます。

次に、aptコマンドでソースコードパッケージを取得する前に、安定版(2019年現在stretch)のソースコードリポジトリを”/etc/apt/sources.list”に設定します。sources.list中で、”deb”から始まる設定はバイナリパッケージリポジトリ、”deb-src”から始まる設定はソースコードパッケージリポジトリに関する設定です。つまり、”deb-src”と記載された設定があれば、以下の手順は不要です。

以下の例でsources.listに記載している”stretch”(=Debian9)という文字列は、”stable(安定版)”に書き換えても良いです。Version名を明確に指定する理由は、システム管理者(ユーザ)がVersion更新に気づかず、意図せずに次Versionのソースコードを取得する事を防ぐためです(バイナリパッケージではないため、”stable”と記載しても影響は殆どありません)。

      

最後に、aptコマンドで該当パッケージ(例:coreutils)をソースコードパッケージで取得します。ソースコードと同時に、パッチやdscファイルが付いてきますが、これらはDebian環境下のパッケージ管理に関わるファイルです。ソースコードの大枠を確認する際には、不要な内容なため、今回は無視します。

                    

                                

コマンドのソースコードの取得方法(GUI)

一例ですが、以下のサイトからパッケージ名を検索して、ソースを取得する事ができます。

                           

おまけ:DebianソースコードをWebブラウザで閲覧

ソースコードをダウンロードして確認する事が面倒であれば、「Debian Sources」がオススメです。Webブラウザからソースコードパッケージの内容を確認する事が出来ます。

また、”apt source”コマンドで取得したdebソースパッケージをビルドしたくなった場合、以下の記事にビルド手順をまとめてあります。

環境構築:Debianソースコードパッケージをビルドする方法(debソースパッケージ構築ツールのインストール)

                      

おすすめ