為什麼可以通過將文件系統掛載到其中一個文件夾來“循環”文件系統?
/dev/sda5安裝在**/**它是我的文件系統
piotr@thinkpad:~$ sudo mkdir /home/mpoint piotr@thinkpad:~$ sudo mount /dev/sda5 /home/mpoint
所以現在我可以這樣做:
piotr@thinkpad:~$ cd /home/mpoint/home/mpoint
當我在第二個 mpoint 目錄中時,它是空的。
我的問題是:
- 為什麼可以通過將文件系統掛載到其中一個文件夾來“循環”文件系統?
- 為什麼第二個 mpoint 目錄是空的?
安裝文件系統時,為系統添加一個額外的層。掛載點是通常隱藏目標內容的絕對路徑。仔細查看使用
stat
可能會有所幫助。IE:首先準備一個測試案例:
# mkdir /mnt/other # echo hi > /mnt/other/hello.txt # cat /mnt/other/hello.txt hi # stat -c %i /mnt/other 6424680
然後掛載
# mount / /mnt/other # cat /mnt/other/hello.txt cat: cannot access '/mnt/other/hello.txt': No such file or directory # stat -c %i /mnt/other 2 # stat -c %i / 2 # stat -c %i /mnt/other/mnt/other 6424680 # cat /mnt/other/mnt/other/hello.txt hi
如您所見,掛載點的 inode 從 inode 6424680 更改為 2(這是根目錄1的 inode )。就掛載點而言,該目錄的內容是隱藏的,但仍存在於磁碟上。它是文件系統之上的一層。
1 和父級到根,
.
和..
該路徑
/mnt/other/mnt/other
不是掛載點,而是保存該目錄的 inode 的原始內容。在你的情況下它是空的,在我的情況下它有一個文件;儘管您也可以將其設為掛載點:# mount / /mnt/other/mnt/other # stat -c %i /mnt/other/mnt/other 2 # stat -c %i /mnt/other/mnt/other/mnt/other 6424680 # cat /mnt/other/mnt/other/mnt/other/hello.txt hi
至於為什麼,那為什麼不呢。除非它損壞系統,否則讓使用者為所欲為。這並不是說一個人不能做損害系統的事情,儘管在這種情況下,從我所看到的情況來看,添加阻止程序的動機並不存在。出於某種原因,人們甚至可能想在根樹本身的掛載點創建另一個視圖。
進一步的 nix 系統有一個單一的目錄樹,而不是例如 Windows 的驅動器具有字母A:、B:、C:、…*。根據 man mount 的開始:
在 Unix 系統中可訪問的所有文件都排列在一棵大樹中,即文件層次結構,以 / 為根。這些文件可以分佈在多個設備上。mount 命令用於將在某個設備上找到的文件系統附加到大文件樹。
我會按相反的順序回答你的問題。
- 為什麼第二個 mpoint 目錄是空的?
因為那裡什麼都沒有 - 目錄是空的,並且注意到已安裝在該位置。
- 為什麼可以通過將文件系統掛載到其中一個文件夾來“循環”文件系統?
可能是因為要防止它需要做很多工作,而且沒有什麼不好的東西真的會來自它。並解決您的評論:沒有目錄由此獲得超過一個父級,
/home/mpoint
與/home/mpoint/home/mpoint
.