天天看點

rsync指令使用總結

rsync的重要功能

速度:第一次,rsync複制源目錄和目标目錄之間的整個内容。下一次,rsync僅将更改的塊或位元組傳輸到目标位置,這使傳輸真正快速。

安全性:rsync允許在傳輸過程中使用ssh協定對資料進行加密。

較少帶寬:rsync分别在發送和接收端使用資料塊的壓縮和解壓縮。是以,rsync使用的帶寬與其他檔案傳輸協定相比總是較少。

特權:安裝和執行rsync不需要特殊的權限

使用格式:

<code>$ </code><code>rsync</code> <code>options </code><code>source</code> <code>destination</code>

Source 、destination可以是本地或遠端。在遠端的情況下,指定登入名,遠端伺服器名稱和位置。

1.同步本地伺服器中的兩個目錄

要同步本地計算機中的兩個目錄,請使用以下rsync -zvr指令

<code># rsync -zvr /tmp/ /data/</code>

<code>sending incremental </code><code>file</code> <code>list</code>

<code>ks-script-hd1UxV</code>

<code>yum.log</code>

<code>.ICE-unix/</code>

<code>.Test-unix/</code>

<code>.X11-unix/</code>

<code>.XIM-unix/</code>

<code>.font-unix/</code>

<code>111/</code>

<code>sent 642 bytes  received 74 bytes  1432.00 bytes</code><code>/sec</code>

<code>total size is 836  speedup is 1.17</code>

在上面的rsync示例中:

-z是啟用壓縮

-v詳細

-r表示遞歸

現在讓我們看一下從源到目的地複制的檔案之一的時間戳。如下所示,rsync在同步期間沒有保留時間戳

<code># ll /tmp/yum.log /data/yum.log </code>

<code>-rw-------. 1 root root 0 Aug 25 22:16 </code><code>/data/yum</code><code>.log</code>

<code>-rw-------. 1 root root 0 Aug 20 20:39 </code><code>/tmp/yum</code><code>.log</code>

rsync選項-a表示歸檔模式。-a選項執行以下操作,

遞歸模式

儲存符号連結

保留權限

保留時間戳

儲存所有者群組

現在,執行示例1中提供的相同指令(但是使用rsync選項-a),如下所示:

<code># rsync -azv /tmp/ /data/        </code>

<code>./</code>

如下所示,rsync在同步期間保留時間戳

<code>-rw-------. 1 root root 0 Aug 20 20:39 </code><code>/data/yum</code><code>.log</code>

要僅複制一個檔案,請指定rsync指令的檔案名,如下所示。

<code># rsync -v /tmp/yum.log /data/</code>

<code>sent 67 bytes  received 31 bytes  196.00 bytes</code><code>/sec</code>

<code>total size is 0  speedup is 0.00</code>

rsync允許您同步本地和遠端系統之間的檔案/目錄。

<code># rsync -avz /data/1.txt [email protected]:/data/</code>

<code>The authenticity of host </code><code>'192.168.0.172 (192.168.0.172)'</code> <code>can't be established.</code>

<code>ECDSA key fingerprint is 96:4f:34:ce:2f:c6:15:ae:24:06:02:7f:e1:a8:7f:66.</code>

<code>Are you sure you want to </code><code>continue</code> <code>connecting (</code><code>yes</code><code>/no</code><code>)? </code><code>yes</code>

<code>Warning: Permanently added </code><code>'192.168.0.172'</code> <code>(ECDSA) to the list of known hosts.</code>

<code>1.txt</code>

<code>sent 75 bytes  received 31 bytes  11.16 bytes</code><code>/sec</code>

<code>total size is 6  speedup is 0.06</code>

在與遠端伺服器進行同步時,需要指定遠端伺服器的使用者名和IP位址。您還應該在遠端伺服器上指定目标目錄。格式為username @ machinename:path

如上所述,它在從本地到遠端伺服器執行rsync時要求輸入密碼。

有時您不想在從本地伺服器遠端伺服器備份檔案時輸入密碼。例如,如果您有一個備份shell腳本,可以使用rsync将檔案從本地檔案複制到遠端伺服器,那麼您無需輸入密碼即可使用rsync。

要做到這一點,請先安裝ssh密碼登入,

當要将檔案從遠端同步到本地時,請在目标的源和本地路徑中指定遠端路徑,如下所示。

<code># rsync -avz 192.168.0.176:/data/yum.log /data/ </code>

<code>receiving incremental </code><code>file</code> <code>list</code>

<code>sent 30 bytes  received 73 bytes  18.73 bytes</code><code>/sec</code>

rsync允許您指定要使用的遠端shell。您可以使用rsync ssh啟用安全的遠端連接配接。使用rsync -e ssh指定要使用哪個遠端shell。在這種情況下,rsync将使用ssh

<code># rsync -avz -e ssh 192.168.0.176:/data/ /data/tmp/        </code>

<code>sent 53 bytes  received 204 bytes  514.00 bytes</code><code>/sec</code>

在典型的同步情況下,如果檔案在目的地被修改,我們可能不想用來源的舊檔案覆寫該檔案。

使用rsync -u選項來做到這一點。(即不要覆寫目的地的檔案,如果被修改)。在以下示例中,名為Basenames的檔案已在目标位置修改。是以,它不會被rsync -u覆寫。

<code># cat /data/tmp/yum.log </code>

<code>111111</code>

<code># rsync -avzu 192.168.0.176:/data/ /data/tmp/       </code>

<code>sent 16 bytes  received 150 bytes  110.67 bytes</code><code>/sec</code>

<code># rsync -avzu 192.168.0.176:/data/ /data/tmp/</code>

<code>2.txt</code>

<code>sent 38 bytes  received 216 bytes  46.18 bytes</code><code>/sec</code>

<code>total size is 7  speedup is 0.03</code>

使用rsync -d選項隻能從源到目的地同步目錄樹。以下示例,以遞歸方式同步目錄樹,而不是目錄中的檔案。

<code># tree /data/</code>

<code>/data/</code>

<code>├── 1dir</code>

<code>│   ├── 4dir</code>

<code>│   │   └── 5.txt</code>

<code>│   └── 5dir</code>

<code>├── 2dir</code>

<code>├── 2.txt</code>

<code>├── 3dir</code>

<code>└── yum.log</code>

<code># rsync -vd 192.168.0.176:/data/ /data/tmp/    </code>

<code>receiving </code><code>file</code> <code>list ... </code><code>done</code>

<code>1dir/</code>

<code>2dir/</code>

<code>3dir/</code>

<code>sent 45 bytes  received 231 bytes  552.00 bytes</code><code>/sec</code>

<code># tree /data/tmp/</code>

<code>/data/tmp/</code>

<code>3 directories, 2 files</code>

當您使用rsync進行備份時,您可能需要知道備份的進度。即有多少個檔案是副本,以什麼速度複制檔案等。

rsync -progress選項顯示rsync執行的詳細進度,如下所示。

<code># rsync -avz --progress 192.168.0.176:/data/ /data/tmp/</code>

<code>           </code><code>0 100%    0.00kB</code><code>/s</code>    <code>0:00:00 (xfer</code><code>#1, to-check=15/18)</code>

<code>1dir</code><code>/4dir/</code>

<code>1dir</code><code>/4dir/5</code><code>.txt</code>

<code>           </code><code>6 100%    5.86kB</code><code>/s</code>    <code>0:00:00 (xfer</code><code>#2, to-check=4/18)</code>

<code>1dir</code><code>/5dir/</code>

<code>2dir</code><code>/4dir/</code>

<code>2dir</code><code>/5dir/</code>

<code>3dir</code><code>/4dir/</code>

<code>3dir</code><code>/5dir/</code>

<code>sent 93 bytes  received 470 bytes  375.33 bytes</code><code>/sec</code>

<code>total size is 13  speedup is 0.02</code>

您還可以使用rsnapshot實用程式(使用rsync)來備份本地linux伺服器或備份遠端linux伺服器。

如果檔案不存在于源,但存在于目标中,則可能需要在rsync期間删除目标檔案。

在這種情況下,請使用-delete選項,如下所示。rsync delete選項删除源目錄中不存在的檔案。

目标有新的檔案名為1.txt,當與-delete選項同步時,它删除了檔案1.txt

如果你願意,你可以更新(同步)目标的現有檔案。如果源有新的檔案,目标不存在,您可以避免在目标上建立這些新檔案。如果需要此功能,請使用-existing選項與rsync指令。

首先,把目前的之前同步的3.txt删除,目的地就沒有了3.txt

<code># rm -rf /data/tmp/3.txt</code>

<code>[root@kvm-host ~]</code><code># rsync -avz --existing 192.168.0.176:/data/ /data/tmp/</code>

<code>sent 28 bytes  received 405 bytes  66.62 bytes</code><code>/sec</code>

<code>total size is 53  speedup is 0.12</code>

source:

<code># ll /data/</code>

<code>total 12</code>

<code>drwxr-xr-x. 4 root root 30 Aug 25 23:09 1dir</code>

<code>drwxr-xr-x. 4 root root 30 Aug 25 23:09 2dir</code>

<code>-rw-r--r--. 1 root root  7 Aug 25 23:06 2.txt</code>

<code>drwxr-xr-x. 4 root root 30 Aug 25 23:09 3dir</code>

<code>-rw-r--r--. 1 root root 20 Aug 25 23:22 3.txt</code>

<code>-rw-r--r--. 1 root root 20 Aug 25 23:21 new-</code><code>file</code><code>.txt</code>

<code>-rw-------. 1 root root  0 Aug 25 22:21 yum.log</code>

dst:

<code># ll /data/tmp/</code>

<code>total 16</code>

<code>drwxr-xr-x 4 root root 4096 Aug 25 23:09 1dir</code>

<code>drwxr-xr-x 4 root root 4096 Aug 25 23:09 2dir</code>

<code>-rw-r--r-- 1 root root    7 Aug 25 23:06 2.txt</code>

<code>drwxr-xr-x 4 root root 4096 Aug 25 23:09 3dir</code>

<code>-rw------- 1 root root    0 Aug 25 22:21 yum.log</code>

現在讓我們看看rsync如何顯示這個差異。-i選項顯示項目更改。

<code> </code><code>rsync</code> <code>-avzi 192.168.0.176:</code><code>/data/</code> <code>/data/tmp/</code>           

<code>&gt;f+++++++++ 3.txt</code>

<code>&gt;f+++++++++ new-</code><code>file</code><code>.txt</code>

<code>sent 63 bytes  received 520 bytes  1166.00 bytes</code><code>/sec</code>

<code>total size is 53  speedup is 0.09</code>

在輸出中,它顯示檔案名或目錄名前面的9個字母,表示更改。

在我們的例子中,前面的字母表示如下:

<code>&gt;指定檔案正在傳輸到本地主機。</code>

<code>f表示它是一個檔案。</code>

<code>s表示大小變化。t表示時間戳更改。</code>

<code>o所有者改變</code>

<code>g組改變了。</code>

rsync允許您在進行同步時給出要包含的模式并排除檔案或目錄。

<code># mkdir /data/{s1dir,s2dri}</code>

<code># mkdir /data/r1dir</code>

<code># touch /data/r1dir/u.txt</code>

<code># rsync -avz --include 's*' --exclude '*' 192.168.0.176:/data/ /data/tmp/ </code>

<code>s1dir/</code>

<code>s2dri/</code>

<code>sent 37 bytes  received 80 bytes  234.00 bytes</code><code>/sec</code>

在上面的例子中,它隻包含以's'(使用rsync include)開頭的檔案或目錄,并排除所有其他檔案。(使用rsync 排除'*')

您可以告訴rsync不要使用rsync -max-size選項傳輸大于特定大小的檔案。

<code># ll -h /data/test.txt /data/t.txt</code>

<code>-rw-r--r--. 1 root root  78K Aug 25 23:51 </code><code>/data/test</code><code>.txt</code>

<code>-rw-r--r--. 1 root root 2.0K Aug 25 23:52 </code><code>/data/t</code><code>.txt</code>

<code># rsync -avz --max-size="50K" 192.168.0.176:/data/ /data/tmp/</code>

<code>t.txt</code>

<code>r1dir/</code>

<code>r1dir</code><code>/u</code><code>.txt</code>

<code>sent 72 bytes  received 1300 bytes  249.45 bytes</code><code>/sec</code>

<code>total size is 81341  speedup is 59.29</code>

max-size = 50K使rsync僅傳輸小于或等于50K的檔案。您可以将M表示為兆位元組,G表示千兆位元組。

rsync的一個主要特點是它隻将更改的塊傳輸到目的地,而不是發送整個檔案。

如果不考慮網絡帶寬(但CPU除外),則可以使用rsync -W選項傳輸整個檔案。這将加速rsync程序,因為它不必在源和目的地執行校驗和

<code># rsync -avzW 192.168.0.176:/data/ /data/tmp/</code>

<code>test</code><code>.txt</code>

<code>sent 47 bytes  received 13085 bytes  2387.64 bytes</code><code>/sec</code>

<code>total size is 81341  speedup is 6.19</code>

16、通過ssh無密碼rsync

首先需要生成沒有加密的public key,把你的ssh public key放到遠端主機

<code># ssh-keygen</code>

<code>Enter passphrase (empty </code><code>for</code> <code>no passphrase):</code>

<code>Enter same passphrase again:</code>

<code>ssh</code><code>-copy-</code><code>id</code> <code>-i ~/.</code><code>ssh</code><code>/id_rsa</code><code>.pub 192.168.0.176</code>

<code># rsync -avz -e ssh /data/tmp/ 192.168.0.176:/data/</code>

<code></code>

本文轉自 喵來個魚 51CTO部落格,原文連結:http://blog.51cto.com/m51cto/1959478,如需轉載請自行聯系原作者