lsコマンドのシェルスクリプトはどこにありますか? [閉鎖]

lsコマンドのシェルスクリプトはどこにありますか? [閉鎖]

私はこのコマンドがどのように機能するかを理解しようとしており、ファイルシステムの場所を定義するlsシェルスクリプトがあるとします。lsこれは正しいですか?では、どこで見つけることができますか?

ベストアンサー1

lsディレクトリ内のすべてのファイルを使用opendir()し、段階的に実行します。readdir()そのうちの1つに関する追加情報が必要な場合は、を呼び出しますstat()。もちろん、ソースコードを読んでください。しかし、非常に便利なショートカットは次のとおりです。

# strace ls

コメントのいくつかの主要部分は次のとおりです。

ディレクトリエントリのインポート

open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3
fcntl64(3, F_GETFD)                     = 0x1 (flags FD_CLOEXEC)
getdents64(3, /* 53 entries */, 32768)  = 1744
getdents64(3, /* 0 entries */, 32768)   = 0
close(3)                                = 0

stdoutが文字デバイスであることを確認してください。

fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 0), ...}) = 0

標準入力をメモリにマッピングします。 (なぜかはわかりませんが、ソースコードを見てください)

mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
0) = 0xb73ff000

標準出力へのディレクトリエントリの書き込みと要約

write(1, "bin  Desktop  Documents  Downloa"..., 91bin  Desktop
Documents  Download  Music  Pictures  Public  public_html  Templates
Videos
) = 91
close(1)                                = 0
munmap(0xb73ff000, 4096)                = 0
close(2)                                = 0
exit_group(0)                           = ?

おすすめ記事