Linux

/proc/…/mountinfo 中的第 4 列(根)是什麼意思?

  • March 9, 2020

proc手冊中,它將第 4 列命名mountinfo為“root”,並將其描述為“文件系統中目錄的路徑名,該目錄構成了該掛載的根目錄”。但是怎麼理解呢?

我認為掛載的基本元素是源和目標路徑,因為“掛載源”是第 10 列,目標位於第 5 列,那麼 root 有什麼用?

對於大多數掛載資訊,root 只是/,似乎沒有意義。我只發現綁定掛載的根不同於/,所以它只在綁定掛載中有用嗎?在綁定情況下,為什麼不在根目錄中顯示絕對路徑?比如綁定/run/test_dir/ato時/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

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