Rm
Linux 在執行時如何自行格式化?
當你跑
sudo rm -rf --no-preserve-root /
您的系統將一個一個地刪除每個文件。但是,這也包括正在執行的程序和作業系統本身,最終會刪除
rm
.如果程序文件被刪除,作業系統缺少關鍵文件,Linux 如何繼續執行?
另外,刪除後如何
rm
繼續執行?
儘管它的名字,
rm
不刪除文件。它實際上取消連結-刪除目錄條目引用文件。如果該文件仍有硬連結,則數據將保持不變。當程序執行時,核心會在內部保留一種硬連結(它們都被視為同一個
inode
對象),因此數據將一直保留到最後一個程序關閉未連結的文件。請注意如何描述 unlink 系統呼叫:
如果該名稱是文件的最後一個連結,並且沒有程序打開該文件,則該文件將被刪除,並且它正在使用的空間可供重用。
如果名稱是文件的最後一個連結,但任何程序仍然打開該文件,則該文件將一直存在,直到最後一個引用它的文件描述符被關閉。
例如:
# cp /bin/sleep ./sleep # ln ./sleep ./sleep2 # ./sleep 1000 & [1] 24399 # rm ./sleep
此時,仍然可以通過硬連結訪問數據,並且核心仍然知道 inode 為
(task_struct)->mm->exe_file
:# ls -lh ./sleep2 -rwxr-xr-x 1 myaut users 31K Jun 17 23:10 ./sleep2 # > ls -l /proc/24399/exe lrwxrwxrwx 1 myaut users 0 Jun 17 23:11 /proc/24399/exe -> /tmp/test/sleep (deleted)
即使刪除了第二個硬連結,數據也會保留(順便說一句,如果此時拔掉插頭並且系統斷電,您將獲得 FS 空間洩漏):
# rm ./sleep2 # ls -l /proc/24399/exe /proc/24399/exe -> /tmp/test/sleep (deleted)
現在我終止程序,只有此時磁碟(或 tmpfs)空間才會被釋放:
# kill 24399