歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 同步 UNIX 文件

同步 UNIX 文件

日期:2017/2/28 16:47:37   编辑:Linux教程

有許多工具可以用來跨 UNIX? 目錄同步文件,但是要想有效且安全地完成這個任務,就需要多做一些工作。本文介紹跨 UNIX 文件系統和不同的計算機系統安全地同步文件的解決方案,包括如何為了執行備份同步文件的加密版本。

文件同步就是在一個位置添加、修改或刪除文件時,在另一個位置添加、修改或刪除同一個文件的過程。本文討論三個實用程序,cp、tar 和 rsync,它們都有助於同步 UNIX 文件。cp 和 tar 命令的同步功能有限,而 rsync 提供很全面的選項;盡管如此,它們都有各自適用的場合。

用 cp 命令執行直接復制

盡管 cp 命令並不是真正的同步命令,但它可能是在兩個位置之間復制文件的最簡單方法。對於單一文件復制,cp 顯然是非常高效的:$ cp source destination。

要想復制整個目錄結構,可以使用 -r 選項遞歸地把整個目錄結構從一個位置復制到另一個位置:$ cp -r source destination。這種復制方法僅僅遞歸地復制文件和目錄。文件的權限、所有者和其他元數據並不會復制到目標位置。可以使用 -p 選項保留復制的每個文件和目錄的所有者、權限和時間:$ cp -pr source destination。

使用 cp 命令是最容易最公認的文件復制方法,但是 cp 的效率很低,而且如果不使用 NFS 這樣的遠程文件系統解決方案,就不可能把目錄復制到遠程系統上。

使用 tar

tar(tape archive 的簡寫)實用程序原來用於高效地把目錄結構(包括文件和文件元數據)轉換為二進制流,然後就可以把二進制流寫到備份磁帶上。

通常使用 tar 創建一個包含所需目錄的 .tar 文件:$ tar cf mydir.tar ./mydir。c 選項讓 tar 創建新的存檔文件,f 選項使用後面的參數指定要創建的存檔文件的名稱 (mydir.tar)。其余參數指定應該包含在存檔文件中的文件或目錄。tar 命令自動地遞歸遍歷目錄結構,所以如果指定包含一個目錄,tar 將在存檔文件中包含這個目錄以及其中的所有文件和目錄。

tar 的一個重要特點是,用戶指定的路徑名被看作絕對路徑。也就是說,如果為 tar 指定完整的目錄位置,例如 /etc 目錄:$ tar cf etc.tar /etc。那麼,在默認情況下,tar 將把文件提取到它們的絕對位置。例如,如果提取這個存檔文件:$ tar xf etc.tar,就會在 /etc 目錄中重新創建文件和目錄結構。這可能會產生破壞(可能會覆蓋 /etc 中希望保留的文件)。這個問題有兩種解決方法。第一種是使用 GNU tar,它支持通過 --strip-path 選項從提取的路徑中刪除元素。

另一個簡單的解決方法是進入父目錄,然後使用相對路徑(見清單 1)。

清單 1. 進入父目錄並使用相對路徑

$ cd /

$ tar cf etc.tar ./etc

在提取存檔文件時,會在相對位置重新創建文件。可以使用這種方法幫助同步目錄。因為 tar 創建目錄結構的字節流,可以通過結合使用 tar 和管道把文件從一個位置復制到另一個位置:$ tar cf - ./etc |( cd /backup; tar xf - )。“-” 指定 tar 應該使用標准輸出(在寫時)或標准輸入(在讀時)。圓括號讓語句在一個子 shell 中執行。看一下管道符前面的代碼,它創建文件的字節流並發送到標准輸出。在管道符後面,切換到另一個目錄,然後從標准輸入提取字節流。

要想保留文件的所有者和權限,可以使用 p 選項保留每個文件和目錄的元數據:$ tar cfp - ./etc |( cd /backup; tar xfp - )。

掌握這種基本結構之後,就可以執行更復雜的操作。例如,可以只復制在特定時間之後修改過的文件:$ tar cf - --newer 20090101 ./etc |(cd /backup; tar xf - )。這個命令創建在 2009 年 1 月 1 日之後修改過的文件的拷貝。

通過與 rsh 或 ssh 結合使用,還可以把文件同步到遠程主機:$ tar cfp - ./etc |(ssh user@host -- tar xfp -)。按照這種方式使用 ssh 和 tar 是在遠程主機上創建本地文件備份的好方法。但是,還有更高效的信息同步方法。

Copyright © Linux教程網 All Rights Reserved