実行可能ファイルを指定すると、その完全なパスが Linux で (C を使用して) 表示される必要があります。実行可能ファイルは、現在のディレクトリにある場合もあれば、他のディレクトリにある場合もあります。
UNIX の TYPE コマンドに似ているはずです。たとえばtype cp
の場合、結果は になります/bin/cp
。
誰でもコードを教えてもらえますか? それに関連するシステムコールを許可します。
これは非常に簡単です。コードを提供したくはありませんが、基本的なアイデアを提供したいと思います。
これは、コマンドを検索する.net 2.0を搭載したWindowsオペレーティングシステム用に私がずっと前に書いたプロジェクトfindcomです。ソースから何らかのアイデアが得られるかもしれません。
コマンドを入力したときに実行される実行可能ファイルへのフルパスを取得するには、次を使用します。
$ which bash
/bin/bash
すべてのパス(MANPATHを含む)を検索するには、whereisを使用します
$ whereis bash
bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz
whereisは、SolarisシステムのsysV shutdown(/ usr / sbin / shutdown)やberkeley shutdown(/ usr / ucb / shutdown)など、パスのさまざまな部分に同じ名前の実行可能ファイルがある場合に役立ちます。which
デフォルトで実行するものをwhereis
示し、すべての可能性を提供します。
応答が返ってこない場合、それはシェルビルトインであり、実行可能ファイルではないことを意味します。
$ which while
$ whereis while
while:
ただし、シェルビルトインおよび実行可能ファイルとして存在する場合は、実行可能ファイルへのパスを返しますが、実行可能ファイルへのパスが指定されていない限り、ビルトインを実行します。
$ which test
/usr/bin/test
$ whereis test
test: /usr/bin/test /usr/share/man/man1/test.1.gz
Linux は、$PATH 環境変数を使用して実行可能プログラムを見つけます。通常、プログラムを実行するためのフル パスは指定しません (つまり、/usr/bin/ls ではなく ls を実行するだけです)。実行可能ファイル名は、$PATH の下のディレクトリの下で検索されます。$PATH 環境変数は次のようになります。
$ エコー $PATH /usr/bin:/usr/sbin:/bin
システムは、: で区切られたディレクトリの下に実行可能ファイルを見つけます。あなたがしなければならないことは、この文字列を「:」で区切り、プログラム名を最後まで連結することです。stat コールを発行します。統計が正常に返された場合は、プログラムがそこにあることを意味します。そうでない場合は、次の候補に進みます。あなたがするように、システムは最初に見つかったパスを実行します。