Shell
/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/8
,而是ll /dev/fd/
顯示3
連結到的文件/proc/24334/fd
。(proc 編號每次都會更改;我懷疑它是它自己的程序編號ll
。)…我還注意到,現在,日期不同了——我得到的目錄
.
與 for不同/dev/fd/
嗎?我進一步注意到,我無法在 /dev/fd 中創建文件(使用任一路徑)。
在第一種情況下,
ls
列出 的內容/dev/fd -> /proc/self/fd -> /proc/<pid_of_ls>/fd
,在第二種情況下,列出 的內容/proc/<pid_of_the_shell>/fd
。While是指向,
/dev/fd
的(神奇的)符號連結(目前目錄,在不帶參數的情況下呼叫時列出)不是,並且在您之前呼叫時它已經被解析。/proc/self/fd``.``ls``/proc/<pid_of_the_shell>/fd``cd /dev/fd
ll
單獨顯示255
連結到的文件/dev/pts/8
這是 bash shell 內部使用的文件描述符,使用標誌打開,當系統呼叫用於執行另一個程序時(如您的情況)
O_CLOEXEC
,它會自動關閉。execve(2)``/bin/ls
我進一步注意到,我無法在 /dev/fd 中創建文件(使用任一路徑)。
procfs
在 Linux的文件系統中創建文件是不可能的。但是,您可以將另一個文件系統掛載到
/proc
– 下的任何目錄上,或者將任何文件或目錄綁定掛載到 . 下的任何路徑上/proc
。就像其他任何地方一樣。