たとえば、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
。ディレクトリの変更は、他のほとんどのファイル操作と同様に、別々のシステムコールを介して行われますchdir
。stat
簡単に言えば、「このディレクトリに何がありますか」と「このディレクトリにアクセスしてください」は完全に独立したカーネル要求なので、プログラム的に異なる方法で動作できます。
したがって、に表示されないディレクトリを作成するには、ls -a
カーネルに結果から無視するように要求するだけですreaddir
。しかし、chdir
これは他のシステムコールなので、まだ機能します。
これは、特権ディレクトリを持つものと変わりません+x
。いいえ -r
cd
:その中にあるファイルやディレクトリにアクセスし、入力するなどの作業ができますがls
失敗します。私は他のものがこの配列を使用すると信じています。たとえば(これはあいまいなメモリからのものであるため、参照する必要はありません)、AFSには一種のグローバルネームスペースがあり、「名前を入力」してすべてのAFSサーバーに接続/afs
できます。世界中のすべてのサーバーが表示されません。 FUSEファイルシステムが同様の操作を実行したことを見たことがあります(たとえば、匿名FTPサーバーに接続するなど)。cd
ls
/afs
cd
(zfsの配列がPOSIXに厳密に準拠しているかどうかはわかりません。)