次のレポートの内容の不一致をどのように説明できますか/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/8
ll /dev/fd/
3
/proc/24334/fd
ll
.
…日付が違うこともわかりました。のディレクトリとのディレクトリは異なりますか/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>/fd
cd /dev/fd
ll
255
リンクファイルを個別に表示/dev/pts/8
これはbashシェルによって内部的に使用されるファイル記述子であり、このフラグで開くと、システムコールが他のプログラムを実行するために使用されるとき(あなたの場合のように)O_CLOEXEC
自動的に閉じます。execve(2)
/bin/ls
また、/dev/fd(2つのパスのいずれかを使用して)にファイルを生成できないことも発見しました。
Linuxのファイルシステムではファイルを作成できませんprocfs
。
ただし、下のディレクトリに別のファイルシステムをマウントする/proc
ことも、下のパスにあるファイルまたはディレクトリをバインドマウントすることもできます/proc
。他の場所と同様に。