/proc/…/mountinfo 中的第 4 列(根)是什麼意思?
在
proc
手冊中,它將第 4 列命名mountinfo
為“root”,並將其描述為“文件系統中目錄的路徑名,該目錄構成了該掛載的根目錄”。但是怎麼理解呢?我認為掛載的基本元素是源和目標路徑,因為“掛載源”是第 10 列,目標位於第 5 列,那麼 root 有什麼用?
對於大多數掛載資訊,root 只是
/
,似乎沒有意義。我只發現綁定掛載的根不同於/
,所以它只在綁定掛載中有用嗎?在綁定情況下,為什麼不在根目錄中顯示絕對路徑?比如綁定/run/test_dir/a
to時/run/test_dir/b
,根列顯示/test_dir/a
,為什麼要隱藏/run
部分?
很難用語言元素(至少用我的英語技能)來解釋它 - 所以我決定做一個基於範例的答案:
根目錄通常稱為最高或最高目錄。這只是部分正確。該目錄被假定為最高目錄。你可以用“我將從這個目錄開始——我假設這是最高目錄,上面沒有任何東西”來描述它。
一些範例來闡明“根”的含義:
- 假設您執行一個 Web 伺服器並將域的根設置
example.com
為/var/www/html/example.com
. 現在您創建一個文件/var/www/html/example.com/test.html
。如果您https://example.com/test.html
在瀏覽器中打開。你得到創建文件的內容。如果設置/var/www/html
為root,則必須打開https://example.com/example.com/test.html
- 如果你
chroot
進入目錄/home/test/testSystem/
。這個環境的根是/home/test/testSystem
. 如果您ls
在 chrooted 環境中進行操作ls /
,您將獲得以下內容/home/test/testSystem/
帶根的掛載點
/
例如,USB 包含:
/ ├── dir1 │ ├── subfile1 │ └── subfile2 ├── file1 ├── file2 └── file3
如果您將此 USB 掛載到
/mnt
您將獲得您期望的正常輸出,因為您使用/
USB 的目錄作為根:531 137 0:52 / /mnt rw,nosuid,nodev shared:75 - /dev/sdb [...]
所以在大多數情況下,掛載點的根確實是
/
.具有不同根目錄的掛載點
/
您可以自己嘗試:將文件系統中的兩個目錄與
$ mount --bind /var/test1 /var/test2
的輸出
mountinfo
將類似於:564 29 0:26 /var/test1 /var/test2 rw,relatime shared:1 - ext4 /dev/sda rw [...]
位於下的掛載點的根
/var/test2
是/var/test1
. 安裝源(您已安裝的)是/dev/sda
回到 USB 範例:如果您現在將 的內容掛載
/mnt/dir1
到其他位置,您將獲得掛載根目錄/dir1
,而掛載源將是/dev/sdb
(USB)。該/mnt
部分被丟棄在這裡。“為什麼要隱藏 /run 部分”
簡而言之:
/run
被刪除是因為它是一個 tmpfs 分區。為什麼要刪除這些部分?在我們掛載到的 USB 範例
dir1
中。輸出將是:/dev/sdb``/home/test/usbmnt/
564 29 0:26 /dir1 /home/test/usbmnt/ rw,relatime shared:1 - ext4 /dev/sdb rw [...]
您會看到我們將 /dir1 的內容(來自 USB 而不是來自您的硬碟驅動器)安裝到名為 usbmnt 的目錄中。也許將其閱讀為
/dev/sdb/dir1
.如果由於
/mnt/usb/dir1
我們不知道 USB 上的實際位置是什麼而給出了根目錄:它可能是/dir1
,/usb/dir1
或者也許/mnt/usb/dir1