web-dev-qa-db-ja.com

ディレクトリ内のファイルの「ディレクトリ順」(「ls -U」で使用)は何ですか?

Lsのマニュアルページによると、ls -U 手段:

ソートしないでください。エントリーをディレクトリー順にリストします。

「ディレクトリの順序」とはどういう意味で、どのように決定されますか?

次のテスト(ext3ファイルシステムで実行)は、ファイルが作成された順序ではないことを示しています。

root@sv1010vm0007:/tmp# mkdir test
root@sv1010vm0007:/tmp# touch test/2
root@sv1010vm0007:/tmp# touch test/1
root@sv1010vm0007:/tmp# touch test/3
root@sv1010vm0007:/tmp# ls -U test
2  3  1
19
Stefan

それはファイルシステムに依存します。一部のファイルシステム(そのうちのext3)では、ディレクトリは実際には既知の形式のファイルであり、 'd'ビットはそのアクセス許可またはモードに設定されています。その場合、どのくらいの長さのファイル名が作成および削除されたかの履歴が重要になる可能性があります。カーネルは、新しいファイルの名前を保持するのに十分なスペースがあるディレクトリファイルの最初のエントリを入力します。詳細については、「物理的な説明」というタイトルのセクションの http://e2fsprogs.sourceforge.net/ext2intro.html を参照してください。

他の一部のファイルシステム、Reiserfsの場合、ディレクトリは実際には B +ツリーの一部のエントリ ファイルシステムでは表示されないため、Reiserfsファイルシステムのディレクトリの単純なls語彙順になっています。

14
Bruce Ediger

実際、期待する特定の順序はありません。エントリを好きなように順序付けるのは、OSとファイルシステムの実装次第です。このオプションの目的の1つは、可能な限り高速なリストを取得することです。これは、非常に大きなディレクトリでは重要な要素になる場合があります。

3
jlliagre

エントリがファイルシステムの内部に保存される順序です。これはファイルシステムによって異なります。たとえば、全体が Red-Black Tree などのある種のバランスの取れたツリーに格納される場合があります。エントリの数が少ないディレクトリや、追加と削除を効率的に処理するために、さらに最適化が行われる場合があります。

2
KeithB