天天看點

linux cp 和mv的差別,[linux]cp和mv對檔案和連結影響的差別

好久不寫blog了。。。加油,繼續寫blog。今天和同僚讨論到一個問題,問題描述:

有檔案a,a1為其硬連結,即: ln a a1

現在有檔案b,對其進行以下兩種操作:

1. mv b a

2. cp b a

問這兩種操作對a1有何影響?

這個問題

以前還真沒關注過,之前的項目的做法是對一個檔案用ln old back, 然後mv back

histroy/,過一段時間若有新檔案産生是進行mv new old操作并做類似的backup操作,沒有想過在做mv new

old的時候是否對之前的back檔案造成任何的影響(畢竟backup檔案在不出問題的情況下沒人去關心)。

今天做了一個實驗搞明白了其中的奧秘。

1. 建立檔案a 和 ln a a1

2. 建立檔案b

linux cp 和mv的差別,[linux]cp和mv對檔案和連結影響的差別

3. 執行mv b a

linux cp 和mv的差別,[linux]cp和mv對檔案和連結影響的差別

可以看出a的inode變為了b的inode,而a1不變。并且a的變為b檔案的内容,a1内容不變。

而且a1對應的inode的引用數變為了1。

4. 将環境重置

linux cp 和mv的差別,[linux]cp和mv對檔案和連結影響的差別

5. 執行cp b a

linux cp 和mv的差別,[linux]cp和mv對檔案和連結影響的差別

可以看出inode和引用數沒有發生變化, 但是a和a1的内容變為了b的内容。

6. 執行 cp a a2

linux cp 和mv的差別,[linux]cp和mv對檔案和連結影響的差別

這時可以看出a2的inode已經和a、a1不同,并且a,a1的inode和引用數都沒有發生變化。

結論: mv 操作隻是改變檔案的inode,并沒有對inode所指向的磁盤block做任何的改動。

cp操作是改變(建立)inode所指向的block(在建立時,會配置設定新的block)。

注:cp -i選項不在此讨論範圍内。