Linux と Unix で「Is」コマンドがどのように機能するかを正確に知りたいです。
私の知る限り、ls は & exec を Linux/Unix シェルにフォークし、(現在のファイル ツリーの出力を取得します。例:/home/ankit/)。fork を呼び出した後に何が起こるか分からないので、より詳細な説明が必要です。
「ls」コマンドの機能を詳しく説明してくれる人はいますか?
Linux と Unix で「Is」コマンドがどのように機能するかを正確に知りたいです。
私の知る限り、ls は & exec を Linux/Unix シェルにフォークし、(現在のファイル ツリーの出力を取得します。例:/home/ankit/)。fork を呼び出した後に何が起こるか分からないので、より詳細な説明が必要です。
「ls」コマンドの機能を詳しく説明してくれる人はいますか?
ls はフォークしません。シェルは、組み込まれていないコマンドを実行するためにフォークして実行します。実行できるコマンドの 1 つは ls です。
ls は、opendir() と readdir() を使用して、ディレクトリ内のすべてのファイルをステップ実行します。それらの 1 つに関する詳細情報が必要な場合は、stat() を呼び出します。
答えに加えて、C プログラミング言語の本 (K&RC) で、ls の実装方法に関する小さな例を示しています。彼らは、データ構造と機能を非常によく説明しています。
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 に相当すると思います。
ls の詳細な内部構造を本当に理解したい場合は、ソース コードを参照してください。Solaris ソースへの tpgould のリンクをたどることができます。または、任意の Linux または BSD ディストリビューションからオンラインでソースを簡単に見つけることができます。
特に 4.4BSD ソースをお勧めします。
私が思い出すように、ls は多くのオプションを解析することから始まり、次にコマンド ラインにリストされたファイルまたはディレクトリ (デフォルトは ".") から始まります。サブディレクトリは、ディレクトリ リスト ルーチンへの再帰によって処理されます。私が覚えている fork() または exec() はありません。
これは古いスレッドですが、支持されて受け入れられた回答が部分的に間違っていると信じているため、まだコメントしています。@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。