14

Linux と Unix で「Is」コマンドがどのように機能するかを正確に知りたいです。

私の知る限り、ls は & exec を Linux/Unix シェルにフォークし、(現在のファイル ツリーの出力を取得します。例:/home/ankit/)。fork を呼び出した後に何が起こるか分からないので、より詳細な説明が必要です。

「ls」コマンドの機能を詳しく説明してくれる人はいますか?

4

5 に答える 5

41

ls はフォークしません。シェルは、組み込まれていないコマンドを実行するためにフォークして実行します。実行できるコマンドの 1 つは ls です。

ls は、opendir() と readdir() を使用して、ディレクトリ内のすべてのファイルをステップ実行します。それらの 1 つに関する詳細情報が必要な場合は、stat() を呼び出します。

于 2008-10-15T09:59:00.423 に答える
10

答えに加えて、C プログラミング言語の本 (K&RC) で、ls の実装方法に関する小さな例を示しています。彼らは、データ構造と機能を非常によく説明しています。

于 2008-10-15T10:11:17.250 に答える
4

ls の機能を理解するには、OpenSolaris のソース ( https://hg.java.net/hg/solaris~on-src/file/tip/usr/src/cmd/ls/ls.c ) をざっと見てみるとよいでしょう。

それが難しい場合は、Solaris では、まず truss を使用して、ls が行うシステム コールを調べて、その動作を理解します。トラスを使用して、試してください:

トラス -afl -o ls.out /bin/ls

次に、ls.out の出力を見てください。

trace は Linux の truss に相当すると思います。

于 2008-10-28T20:50:47.727 に答える
3

ls の詳細な内部構造を本当に理解したい場合は、ソース コードを参照してください。Solaris ソースへの tpgould のリンクをたどることができます。または、任意の Linux または BSD ディストリビューションからオンラインでソースを簡単に見つけることができます。

特に 4.4BSD ソースをお勧めします。

私が思い出すように、ls は多くのオプションを解析することから始まり、次にコマンド ラインにリストされたファイルまたはディレクトリ (デフォルトは ".") から始まります。サブディレクトリは、ディレクトリ リスト ルーチンへの再帰によって処理されます。私が覚えている fork() または exec() はありません。

于 2008-10-31T22:20:53.450 に答える
-1

これは古いスレッドですが、支持されて受け入れられた回答が部分的に間違っていると信じているため、まだコメントしています。@Mark は、ls はシェルに組み込まれているため、シェルは実行およびフォークしないと述べています。bash の tldp ドキュメントを調べたところ (リンクを添付しました)、「ls」は組み込みコマンドとしてリストされていません。

http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_01_03.html

Bash 組み込みコマンド:

alias、bind、builtin、command、declare、echo、enable、help、let、local、logout、printf、read、shopt、type、typeset、ulimit、unalias。

于 2011-12-18T13:10:54.067 に答える