Shell

/dev/fd 不一致

  • January 13, 2021

什麼解釋了以下報告內容的不一致/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。就像其他任何地方一樣。

引用自:https://unix.stackexchange.com/questions/628893