[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

 

  

  3. 執行mv b a

  

  可以看出a的inode變為了b的inode,而a1不變。並且a的變為b文件的內容,a1內容不變。

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

  4. 將環境重置

 

  

  5. 執行 cp b a

 

  

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

  6. 執行 cp a a2

 

  

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

 

  結論: mv 操作只是改變文件的inode,並沒有對inode所指向的磁盤block做任何的改動。

      cp操作是改變(創建)inode所指向的block(在創建時,會分配新的block)。

 

      注:cp -i選項不在此討論范圍內。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM