私は最近、Linuxにコマンドを使用して表示できない特別な隠しディレクトリがあることを発見しましたls -a
。つまり、私が出会ったのは.reiserfs_privディレクトリは reiserfs ファイルシステムのルートディレクトリにあります。私はls -ld .reiserfs_priv
それを呼び出してcd
(ルートとして)ディレクトリに行くことができますが、ls -a
コマンドと共に表示されません(find ./ -name *reiser*
見つかりません)。
質問:
- この種のディレクトリを実際にどのように検出しますか?
- 私は自分で作ることができますか?
- 彼らは滞在するためにどのようなメカニズムを使用しますか?こっそりなぜ
ls -a
見ることができないのですか? - ファイルになりますか?
- このタイプのディレクトリは通常どこで使用されますか?
ベストアンサー1
通常、これらのファイルは検出または生成できません。ファイルシステムが一貫性のないデータを報告するために存在します。
ファイルシステムを変更せずにファイルシステムのファイルに関する情報を取得するさまざまな方法には冗長性があります。たとえば、権限は次のことを許可します。
- ファイル名が報告されると、その名前を使用した
readdir
呼び出しがlstat
成功します。 - ファイルがシンボリックリンクとして報告されていない場合と
lstat
呼び出しも成功します。stat
open
stat
成功すれば成功open
です。open
成功したら、次のことを行いstat
ますlstat
。stat
レポートファイルがディレクトリであれば成功cd
し、その逆も同様です。
など。 Reiserfsファイルシステムが.reiserfs_priv
ディレクトリリストからエントリを省略したが、そのエントリに直接アクセスするシステムコールを介してディレクトリを報告すると、ファイルシステムは一貫性のない情報を報告します。
情報が間違っているのではなく、一貫性がないだけです。これはルール違反にすぎず、ルール違反にすぎません。cd
orを実行する前にディレクトリを作成し、ls .reiserfs_priv
orを実行する前に削除する非常に高速なゴブリンがある場合でも、同じ動作が観察されることがありますfind
。
ファイルシステムが一貫性のないデータを報告するのは、一部のアプリケーションとユーザーを混乱させる可能性があるため、悪い形式なので、妥当な理由がある場合にのみ実行する必要があります。 Reiserfsの場合、その理由は、特にファイル検索とインデックス検索で一部の情報をかなり隠したままにするためです。これは、その内容が.reiserfs_priv
「実際の」ファイルではなく保存に使用されるため便利です。拡張ファイル属性、システムコールシリーズを呼び出してアクセスします*xattr
。実際、私はそれがなぜ露出されたのか分からない。たぶんデバッグ目的だけです。
自分の存在を報告しないファイルの別の例は、同じデータを異なる方法で返すことを可能にするファイルシステムです。例えば、CIOPFSファイルシステムの大文字と小文字を区別しないビューを提供します。 thenというファイルがある場合は、ディレクトリリストFoo
のみが一覧表示されますが、Foo
アクセスfoo
などFOO
は成功します。