• ベストアンサー

Linux コマンドの実装箇所

Linuxコマンドはカーネルのどこで実装がされていますか? 例えば、cd,grep,mkdir,df,・・などなどのコマンドです。 カーネルのソースコードを見ているのですがどこで実装されているのか 分かりませんでした。 例えばcd でディレクトリ移動できますが、これを、aaa で移動できるように設定 したりしたいのです。 カーネルでの実装箇所をおしえてくださいm(___)m

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

まず、システムコール という概念について勉強してみると良いかもしれません。 cdをaaaでできるようにするのはカーネルの仕事ではありません。カーネルの仕事は資源を使いたい複数のプログラムの調停と資源の管理です。それに対しての命令はシステムコールという特殊な命令で依頼しますが、x86でLinuxを動かしている場合、特殊なCPU命令とともにcdに相当する命令を示す番号を通知するだけでcdやaaaという文字を送ることはありません。 実際の流れとしては、あなたが、cdとコマンドを打つと、シェルというプログラムがcdを解釈して、それをシステムコールという形でカーネルに伝えます。つまり、cdの代わりにaaaで同じ意味にするには、シェルでcdという文字列からシステムコールに変換しているところを改造して、aaaでそれをできるようにするとよいでしょう。 ちなみに、cdのカーネルでの実装箇所ならここですね。 http://lxr.linux.no/#linux+v3.6.3/fs/open.c#L380 cdに相当するシステムコール(chdir)を呼ぶとここにくるはずです。 Linuxではありませんが、まず、「デーモン君のソースコード探検」あたりで雰囲気を掴むといいかもしれません。それから、もはやかなり古くなっていますが、「Linuxカーネル2.6解読室」にざっと目を通してからカーネルのコードを読むのにとりかかると良いでしょう。 あと、もっとざっくりOSについて学びたいなら「Operating System Concepts」という書籍が有名ですが、自分で読みこなすのも面倒だと思うので、これを参考文献に上げている大学の授業でも覗いてみるとよいでしょう。 では、頑張って。

momokotug
質問者

お礼

ありがとうございました☆ 参考になりました☆ 貴重な時間を割いてこたえていただいてありがとうございます☆

その他の回答 (3)

  • vaidurya
  • ベストアンサー率45% (2714/5983)
回答No.4

シェルというのは、大雑把に言うと、ユーザーインターフェイスを提供するプログラムです。 いわゆるLinux用ソフトは、シェルを介さずに、カーネルや その他のライブラリーなどを呼び出すことで動作します。 対して、人が操作する場合には、そういったLinux用ソフトが起動していなければ シェルプログラムを介さずに操作することはできません。 シェルには、大別して、sh,bashそれにCOMMAND.COMなどのコマンドシェルと WindowsやMacOSで使われているようなグラフィカルなシェルがあります。 つまりX Window Systemもグラフィカルシェルです。 言い換えれば、シェルとは、CLI,CUI,GUIのユーザーインターフェイスを提供するプログラムの総称です。 ですから、ユーザーが使うコマンド自体は、カーネルには実装されていません。 MS-DOSでの内部コマンドやバッチファイルはCOMMAND.COMを介して実行されますし cd,grep,mkdir,dfなどのコマンドを利用できるシェルスクリプトも、シェルの上で実行されます。 MS-DOS(COMMAND.COM)+Windows3.1の考え方をすると CUI操作のOSの上にGUIが乗っているように思えますが… UNIX系OSでは、カーネルの上に、CUIシェルとGUIシェルが乗っかるカタチになっています。 現行のWindowsNT系OSでも、GUIの起動に、COMMAND.COMは必須では無いはずです。

momokotug
質問者

お礼

ありがとうございました☆ 参考になりました☆ 貴重な時間を割いてこたえていただいてありがとうございます☆

回答No.2

>カーネルのソースコードを見ているのですがどこで実装されているのか >分かりませんでした。 そりゃカーネルで実装されてないからどう探そうが分からなくて当然。 >Linuxコマンドはカーネルのどこで実装がされていますか? シェルや各コマンド。 >これを、aaa で移動できるように設定 >したりしたいのです。 シェルのエイリアス機能を使え。

momokotug
質問者

お礼

ありがとうございました☆ 参考になりました☆ 貴重な時間を割いてこたえていただいてありがとうございます☆

  • EF_510
  • ベストアンサー率50% (306/604)
回答No.1

カーネルで実装されているわけではありません。 シェルコマンドはそれぞれのシェル、grepはgrepのプログラムファイルになります。 >例えばcd でディレクトリ移動できますが、これを、aaa で移動できるように設定 したりしたいのです。 通常、こういう設定は「シェルの設定」で行います。

momokotug
質問者

お礼

ありがとうございました☆ 参考になりました☆ 貴重な時間を割いてこたえていただいてありがとうございます☆

関連するQ&A