mv、cp、rm命令是linux系統中經常用到的工具,但是如果想知道這些命令在執行過程中底層具體做了哪些工作,我們首先要了解下一個關鍵的東西:inode 表。
? inode(index node)表中包含文件系統所有文件列表,一個節點 (索引節點)是在一個表項,包含有關文件的信息( 元數據 ),包括:文件類型,權限,UID,GID、鏈接數(指向這個文件名路徑名稱個數)、該文件的大小和不同的時間戳、指向磁盤上文件的數據塊指針、有關文件的其他數據。Inode表結構如下圖所示:
? 我們繼續從下圖中去了解inode表,文件引用的是 inode號,人是通過文件名來引用一個文件,一個目錄是目錄下的文件名和文件inode號之間的映射。
? 了解完inode表結構之后,我們需要首先了解下cp和rm兩個命令:
? cp命令是用來拷貝數據,在cp命令執行過程中:分配一個空閑的inode號,在inode表中生成新條目,在目錄中創建一個目錄項,將名稱與inode編號關聯,拷貝數據生成新的文件。
? rm命令是刪除數據的工具,在rm命令執行過程中;數據鏈接數遞減,從而釋放inode號,并且inode號可以被重用,把數據塊放在空閑列表中,刪除目錄項,數據實際上不會馬上被刪除,但當另一個文件使用數據塊時將被會被覆蓋。
? cp命令和rm命令可以看出來在運行這兩種工具時,底層數據都發生了改變,下面我們來談談mv命令執行時底層發生了什么:
? mv命令是經常用來將數據從一個地方挪到另外一個地方的工具,而mv命令在挪動數據的時候底層工作分為兩種情況:
? 第一種是mv命令的目標和源在相同的文件系統,可以理解為同一分區,mv命令在執行過程中用新的文件名創建對應新的目錄項,刪除舊目錄條目對應的舊的文件名,并不影響inode表(除時間戳)或磁盤上的數據位置,也就是說沒有數據被移動。
? 第二種如果目標和源不在一個文件系統,也就是不在一個分區,那么 mv就相當于cp和rm。即改變了inode表的條目,也發生了數據移動。
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/104126