「名前空間ファイル」とはどのような種類のファイルを指しますか?

「名前空間ファイル」とはどのような種類のファイルを指しますか?

私は周りを見回し、/proc/*/ns名前空間ファイルが奇妙に見えることを発見しました。

# example from `man namespaces`
$ ls -l /proc/$$/ns
total 0
lrwxrwxrwx. 1 mtk mtk 0 Apr 28 12:46 cgroup -> cgroup:[4026531835]
lrwxrwxrwx. 1 mtk mtk 0 Apr 28 12:46 ipc -> ipc:[4026531839]
lrwxrwxrwx. 1 mtk mtk 0 Apr 28 12:46 mnt -> mnt:[4026531840]
lrwxrwxrwx. 1 mtk mtk 0 Apr 28 12:46 net -> net:[4026531969]
lrwxrwxrwx. 1 mtk mtk 0 Apr 28 12:46 pid -> pid:[4026531836]
lrwxrwxrwx. 1 mtk mtk 0 Apr 28 12:46 pid_for_children -> pid:[4026531834]
lrwxrwxrwx. 1 mtk mtk 0 Apr 28 12:46 user -> user:[4026531837]
lrwxrwxrwx. 1 mtk mtk 0 Apr 28 12:46 uts -> uts:[4026531838]

だから名前空間ファイルは...何へのシンボリックリンクですか? 10桁の識別子を持つ「何か」?私は、「すべてがファイルです」ということを知っていますが、以前はこのようなファイルパスを見たことがありません。どこにありますか?

そして邪悪な憎悪者たちで、私が今私の一般的なファイルや現在のファイルを指しているとしたらtouch "/proc/$$/ns/cgroup:[4026531835]"どうなりますかcgroup

ベストアンサー1

これは、新しいタイプのものを表現するために既存の抽象化を使用するための鍵です。これらのファイルは、実際には伝統的なシンボリックリンクの意味で何も「指定」しません。この値は名前空間への有効なハンドルです。カーネルはこの情報を内部的に使用して、内部データ構造内の適切な名前空間を見つけます。

/proc/<pid>/fdプロセスにソケットがある場合は、次の内容が表示されます。

lrwx------ 1 user group 64 Jun 28 14:35 3 -> 'socket:[17257]'

カーネルはこれらの内容を書き込む試みを拒否します。たとえば、

# echo hi > /proc/self/ns/ipc
bash: /proc/self/ns/ipc: Operation not permitted

また、そのディレクトリに名前付きファイルを作成することはできませんipc:[4026531839]。これはprocファイルシステムにあるため、ファイル/ディレクトリはカーネルの状態を抽象化するだけであり、カーネルはそのディレクトリに新しいファイル/ディレクトリを作成できません。ディレクトリ 。

おすすめ記事