/dev/fd が一貫性がない

/dev/fd が一貫性がない

次のレポートの内容の不一致をどのように説明できますか/dev/fd

erhannis@mnode6:/dev/fd$ ll /dev/fd/
total 0
dr-x------ 2 erhannis erhannis  0 Jan 12 22:10 .
dr-xr-xr-x 9 erhannis erhannis  0 Jan 12 22:10 ..
lrwx------ 1 erhannis erhannis 64 Jan 12 22:10 0 -> /dev/pts/8
lrwx------ 1 erhannis erhannis 64 Jan 12 22:10 1 -> /dev/pts/8
lrwx------ 1 erhannis erhannis 64 Jan 12 22:10 2 -> /dev/pts/8
lr-x------ 1 erhannis erhannis 64 Jan 12 22:10 3 -> /proc/24334/fd
erhannis@mnode6:/dev/fd$ ll
total 0
dr-x------ 2 erhannis erhannis  0 Jan 12 21:42 .
dr-xr-xr-x 9 erhannis erhannis  0 Jan 12 21:42 ..
lrwx------ 1 erhannis erhannis 64 Jan 12 21:42 0 -> /dev/pts/8
lrwx------ 1 erhannis erhannis 64 Jan 12 21:42 1 -> /dev/pts/8
lrwx------ 1 erhannis erhannis 64 Jan 12 21:42 2 -> /dev/pts/8
lrwx------ 1 erhannis erhannis 64 Jan 12 21:55 255 -> /dev/pts/8

特に、リンクされたllファイルは別々に表示されますが、リンクされたファイルは表示されることに注意してください。 (プロセス番号は毎回変わりますが、独自のプロセス番号のようです。)255/dev/pts/8ll /dev/fd/3/proc/24334/fdll

.…日付が違うこともわかりました。のディレクトリとのディレクトリは異なりますか/dev/fd/?また、/dev/fd(2つのパスのいずれかを使用して)にファイルを生成できないことも発見しました。

ベストアンサー1

最初のケースではリストされlsたもの/dev/fd -> /proc/self/fd -> /proc/<pid_of_ls>/fd、2番目のケースではリストされたものです/proc/<pid_of_the_shell>/fd

(引数なしで呼び出されたときにリストされている現在のディレクトリ)/dev/fdへの(魔法の)シンボリックリンクですが、そうではなく、以前の呼び出しの値で解決されました。/proc/self/fd.ls/proc/<pid_of_the_shell>/fdcd /dev/fd

ll255リンクファイルを個別に表示/dev/pts/8

これはbashシェルによって内部的に使用されるファイル記述子であり、このフラグで開くと、システムコールが他のプログラムを実行するために使用されるとき(あなたの場合のように)O_CLOEXEC自動的に閉じます。execve(2)/bin/ls

また、/dev/fd(2つのパスのいずれかを使用して)にファイルを生成できないことも発見しました。

Linuxのファイルシステムではファイルを作成できませんprocfs

ただし、下のディレクトリに別のファイルシステムをマウントする/procことも、下のパスにあるファイルまたはディレクトリをバインドマウントすることもできます/proc。他の場所と同様に。

おすすめ記事