幼稚園時代「何組」でしたか?

Linuxコマンドはカーネルのどこで実装がされていますか?
例えば、cd,grep,mkdir,df,・・などなどのコマンドです。

カーネルのソースコードを見ているのですがどこで実装されているのか
分かりませんでした。

例えばcd でディレクトリ移動できますが、これを、aaa で移動できるように設定
したりしたいのです。

カーネルでの実装箇所をおしえてくださいm(___)m

A 回答 (4件)

まず、システムコール という概念について勉強してみると良いかもしれません。



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」という書籍が有名ですが、自分で読みこなすのも面倒だと思うので、これを参考文献に上げている大学の授業でも覗いてみるとよいでしょう。

では、頑張って。
    • good
    • 1
この回答へのお礼

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

お礼日時:2012/10/25 19:37

シェルというのは、大雑把に言うと、ユーザーインターフェイスを提供するプログラムです。



いわゆる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は必須では無いはずです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/10/25 19:37

>カーネルのソースコードを見ているのですがどこで実装されているのか


>分かりませんでした。
そりゃカーネルで実装されてないからどう探そうが分からなくて当然。

>Linuxコマンドはカーネルのどこで実装がされていますか?
シェルや各コマンド。

>これを、aaa で移動できるように設定
>したりしたいのです。
シェルのエイリアス機能を使え。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/10/25 19:36

カーネルで実装されているわけではありません。



シェルコマンドはそれぞれのシェル、grepはgrepのプログラムファイルになります。

>例えばcd でディレクトリ移動できますが、これを、aaa で移動できるように設定
したりしたいのです。

通常、こういう設定は「シェルの設定」で行います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/10/25 19:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!