POSIX準拠のシステムから引き続きアクセスできる間、ls -aでファイル/ディレクトリを隠す方法は?

POSIX準拠のシステムから引き続きアクセスできる間、ls -aでファイル/ディレクトリを隠す方法は?

たとえば、FreeBSDとZoLのZFSには、各zpoolマウントポイント内にディレクトリを表示する.zfsために使用できるマジックディレクトリがあります。zfs set snapdir=visible.zfs

私が気になったのは、この設定が「非表示」に設定されている場合dirが実際に.zfs出力から隠された方法ls -aそれとも、まだアクセスできる間にシェルパスが自動補完されますか(まだcdアクセスまたは呼び出すことができますstat)?

私は何かが存在し、アクセス可能であればそれをリストする必要があると思うので、この事実について頭を閉じることはできません。ls -aそれはただ魔法的/仮想的であってもです。

誰かがこれがどのように機能するかを説明できますか?ls -aアクセス可能なディレクトリを隠すPOSIX互換の方法はありますか?どうすればいいですか?

答え1

これを行う方法は簡単です。lsという名前のシステムコール(またはLinuxではlibc関数)のリストを取得しますreaddir。ディレクトリの変更は、他のほとんどのファイル操作と同様に、別々のシステムコールを介して行われますchdirstat

簡単に言えば、「このディレクトリに何がありますか」と「このディレクトリにアクセスしてください」は完全に独立したカーネル要求なので、プログラム的に異なる方法で動作できます。

したがって、に表示されないディレクトリを作成するには、ls -aカーネルに結果から無視するように要求するだけですreaddir。しかし、chdirこれは他のシステムコールなので、まだ機能します。

これは、特権ディレクトリを持つものと変わりません+xいいえ -rcd:その中にあるファイルやディレクトリにアクセスし、入力するなどの作業ができますがls失敗します。私は他のものがこの配列を使用すると信じています。たとえば(これはあいまいなメモリからのものであるため、参照する必要はありません)、AFSには一種のグローバルネームスペースがあり、「名前を入力」してすべてのAFSサーバーに接続/afsできます。世界中のすべてのサーバーが表示されません。 FUSEファイルシステムが同様の操作を実行したことを見たことがあります(たとえば、匿名FTPサーバーに接続するなど)。cdls/afscd

(zfsの配列がPOSIXに厳密に準拠しているかどうかはわかりません。)

関連情報