scp是secure copy的簡寫,用于在Linux下進行遠程拷貝文件的命令,和它類似的命令有cp,不過cp只是在本機進行拷貝不能跨服務器,而且scp傳輸是加密的??赡軙晕⒂绊懸幌滤俣?。當你服務器硬盤變為只讀 read only system時,用scp可以幫你把文件移出來。另外,scp還非常不占資源,不會提高多少系統負荷,在這一點上,rsync就遠遠不及它了。雖然 rsync比scp會快一點,但當小文件眾多的情況下,rsync會導致硬盤I/O非常高,而scp基本不影響系統正常使用。scp在夸機器復制的時候為了提高數據的安全性,使用了ssh連接和加密方式,如果機器之間配置了ssh免密碼登錄,那在使用scp的時候密碼都不用輸入。
一般而言,我們會選擇使用rsync進行遠程同步或拷貝。rsync和scp的區別在于:
->rsync只對差異文件做更新,可以做增量或全量備份;而scp只能做全量備份。簡單說就是rsync只傳修改了的部分,如果改動較小就不需要全部重傳,所以rsync備份速度較快;默認情況下,rsync 通過比較文件的最后修改時間(mtime)和文件的大?。╯ize)來確認哪些文件需要被同步過去。
->rsync是分塊校驗+傳輸,scp是整個文件傳輸。rsync比scp有優勢的地方在于單個大文件的一小部分存在改動時,只需傳輸改動部分,無需重新傳輸整個文件。如果傳輸一個新的文件,理論上rsync沒有優勢;
->rsync不是加密傳輸,而scp是加密傳輸,使用時可以按需選擇。
SCP拷貝命令中常用的幾個參數說明
-B 使用批處理模式(傳輸過程中不詢問傳輸口令或短語) -C 允許壓縮。(將-C標志傳遞給ssh,從而打開壓縮功能) -p 保留原文件的修改時間,訪問時間和訪問權限。 -q 不顯示傳輸進度條。 -r 遞歸復制整個目錄。 -v 詳細方式顯示輸出。scp和ssh(1)會顯示出整個過程的調試信息。這些信息用于調試連接,驗證和配置問題。 -c cipher 以cipher將數據傳輸進行加密,這個選項將直接傳遞給ssh。 -F ssh_config 指定一個替代的ssh配置文件,此參數直接傳遞給ssh。 -i identity_file 從指定文件中讀取傳輸時使用的密鑰文件,此參數直接傳遞給ssh。 -l limit 限定用戶所能使用的帶寬,以Kbit/s為單位。 -o ssh_option 如果習慣于使用ssh_config(5)中的參數傳遞方式, -P port 注意是大寫的P, port是指定數據傳輸用到的端口號 -S program 指定加密傳輸時所使用的程序。此程序必須能夠理解ssh(1)的選項。
Rsync拷貝命令中常用的幾個參數說明
-a, --archive 歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性,等于-rlptgoD -v, --verbose 詳細模式輸出 -p, --perms 保持文件權限 -g, --group 保持文件屬組信息 -o, --owner 保持文件屬主信息 -r, --recursive 對子目錄以遞歸模式處理。同步目錄的時候要加上這個參數 -l, --links 保留軟鏈結,加上這個參數,同步過來的文件會保持之前的軟鏈接屬性不變 -H, --hard-links 保留硬鏈結 -e, --rsh=COMMAND 指定使用rsh、ssh方式進行數據同步 -z, --compress 對備份的文件在傳輸時進行壓縮處理 --stats 給出某些文件的傳輸狀態 --progress 打印同步的過程 --timeout=TIME 同步過程中,IP超時時間,單位為秒 --delete 刪除那些目標目錄中有而源目錄中沒有的多余文件。這個是rsync做增量方式的全備份的最佳選擇方案?。。。。。?--delete-before 接受者在輸出之前進行刪除操作。即先將目標目錄中文件全部刪除,再將源目錄文件拷貝過去。這是rsync保持目標目錄跟源目錄一致的方案?。?! --delete-after 在同步操作之后做比較,刪除那些目標目錄中有而源目錄中沒有的多余文件 --delete-excluded 刪除目標目錄中那些被該選項指定排除的文件 --ignore-errors 即使出現IO錯誤也進行刪除,忽略錯誤 --exclude 指定同步時需要過濾掉的文件或子目錄(即不需要同步過去的),后面直接跟不需要同步的單個文件名或子目錄(不需要跟路徑) ,過濾多個文件或子目錄,就使用多個--exclude --exclude-from 指定同步時需要過濾掉的文件或子目錄,后面跟文件(比如/root/exclue.txt),然后將不需要同步的文件和子目錄放到/root/exclue.txt下。 --version 打印版本信息 --port=PORT 指定其他的rsync服務端口 --log-format=formAT 指定日志文件格式 --password-file=FILE 從FILE中得到密碼 --bwlimit=KBPS 限制I/O帶寬,KBytes per second
在使用SCP和Rsync進行遠程同步的時候,需要注意下面幾個技巧:
1)遠程拷貝時的軟鏈接處理
用rsync遠程拷貝目錄時,只需要加上-l參數就可以實現拷貝軟鏈接。 用scp遠程拷貝目錄時, 那么目錄下的軟鏈會丟失,如果想要軟鏈接也拷貝過去,正確的做法是: 1)在源服務器上, 打包, tar zcvf test.tar.gz test 2)把源服務器上的test.tar.gz拷貝到目標服務器上 3)在目標服務器上執行tar zxvf test.tar.gz, 進行解包, 可以看到, 軟鏈接保持得好好的。
2)遠程拷貝時的進度條顯示
1)rsync命令 [root@dbtest bak]# rsync -e "ssh -p22222" -avpgolr --progress db170630.tar.gz 192.168.1.198:/data/upload/ [email protected]'s password: sending incremental file list db170630.tar.gz 702087168 4% 5.60MB/s 0:41:47 --progress 可以實現本機帶進度條提示拷貝,可以實現不同機器帶進度條提示拷貝,可以拷貝多個文件 2)scp命令 [root@dbtest bak]# scp -v /mnt/full20100526.tar.gz /usr/local/src/ [以上命令] 本機拷貝無法顯示進度 [root@dbtest bak]# scp -v /mnt/full20100526.tar.gz [email protected]:/usr/local/src/ [以上命令] 不同機器拷貝可以顯示進度條,即使不帶"-v"參數也可以顯示進度條 [root@dbtest bak]# scp -v /mnt/full20100526.tar.gz [email protected]:/usr/local/src/ [以上命令] 變相實現本機帶進度條提示拷貝,可以不帶"-v"參數 3) cp命令 暫時沒有找到帶進度條提示拷貝
3)遠程拷貝時的限流
rsync拷貝命令(--bwlimit) [root@dbtest bak]# rsync -auvz --progress --delete --bwlimit=1000 遠程文件 本地文件 //限制為1000kBytes/s [root@dbtest bak]# rsync -auvz --progress --delete --bwlimit=2048 遠程文件 本地文件 //限制為2M/s scp拷貝命令(-l參數) [root@dbtest bak]# scp -l 1024 file [email protected] //限制為1M Bytes/s
4)遠程拷貝時的過濾
-----rsync命令----- 需要排除某個文件(或文件夾),可以用--exclude來指定(事實上,系統會把文件和文件夾一視同仁)。例如: 1)需要排除源目錄下的dir1文件夾,可以寫為: [root@dbtest bak]# /usr/bin/rsync -vzrtopg --exclude=dir1 /var/www/src/ /var/www/dest 可以同時排除多條 [root@dbtest bak]# /usr/bin/rsync -vzrtopg --exclude=dir1 --exclude=dir2 /var/www/src/ /var/www/dest [root@dbtest bak]# /usr/bin/rsync -vzrtopg --exclude "file1" --exclude="file2" --exclude dir1 --exclude=dir2 /var/www/src/ /var/www/dest 注意: a)過濾參數使用"--exclude"或"--exclude="都可以,參數后面跟的文件或目錄加不加引號的效果也都一樣! b)過濾參數后面跟的文件或目錄必須直接是文件或目錄名,不能跟路徑(不管是相對路徑還是絕對路徑,否則就過濾不掉) 比如:下面的寫法就過濾不掉test目錄下的file1文件,不管是相對路徑還是絕對路徑 [root@dbtest bak]# /usr/bin/rsync -vzrtopg --exclude "/var/www/src/test/file1" /var/www/src/ /var/www/dest [root@dbtest bak]# /usr/bin/rsync -vzrtopg --exclude "../test1" /var/www/src/ /var/www/dest 去掉路徑,使用下面的寫法就可以正常過濾了 [root@dbtest bak]# /usr/bin/rsync -vzrtopg --exclude "file1" /var/www/src/ /var/www/dest c)另外:過濾參數還可以使用通配符 避開不想同步的文件或目錄, 例如,同步/var/www/src/目錄下的內容到/var/www/dest目錄下,同步時過濾以test開頭的文件/目錄 以及 以data結尾的文件/目錄 [root@dbtest bak]# /usr/bin/rsync -vzrtopg --exclude "test*" --exclude="*data" /var/www/src/ /var/www/dest 2)如果想要過濾同步的文件或目錄過多,可以通過--exclude-from來指定一個特定文件。例如: [root@dbtest bak]# /usr/bin/rsync -vzrtopg --exclude-from=exclude.list /var/www/src/ /var/www/dest exclude.list文件中指定需要排除的文件或目錄列表(這個文件前面的參數只能是--exclude-from) [root@dbtest bak]# cat exclude.list dir1 [0-9]* dir2/.[a-z0-9]* .svn 或者 [root@dbtest bak]# /usr/bin/rsync -vzrtopg --exclude-from="/data/bak/exclude.list" /var/www/src/ /var/www/dest 注意: a)過濾參數使用"--exclude-from"或者"--exclude-from="都可以,后面的文件名加不加引號效果也都一樣。 b)這里過濾參數后面跟的exclude.list文件,為了避免出問題,最好設置為絕對路徑。但是里面的內容一定要寫為相對路徑(即當前同步源目錄下的相對路徑或直接是文件名/目錄名) c)exclude和exclude-from前面都是有兩個減號,如果漏寫了一個,命令行不會報錯,但是不能排除執行的文件或文件夾。 -----scp命令----- 結合find命令進行操作,例如: 將/data目錄下除了ms目錄之外的所有目錄及文件遠程拷貝到10.0.11.202機器的/data目錄下 [root@dbtest bak]# for i in `find /data/ -type d -path /data/ms -prune -o -print |awk -F"/" '{print $3}'|sort|uniq`;do /usr/bin/scp -r /data/$i [email protected]:/data/;done
5)遠程拷貝時的隱藏文件
-----rsync命令----- 如下(注意帶/) 可以將/path/to/source/目錄下所有的文件(包括隱藏文件)一起拷貝到192.168.1.5機器的/path/to/dest/目錄下 [root@dbtest bak]# rsync -e "ssh -p22" -avpgolr /path/to/source/ [email protected]:/path/to/dest/ 如下(注意帶/*) 可以將/path/to/source/目錄下所有的文件(不包括隱藏文件)一起拷貝到192.168.1.5機器的/path/to/dest/目錄下 [root@dbtest bak]# rsync -e "ssh -p22" -avpgolr /path/to/source/* [email protected]:/path/to/dest/ -----scp命令----- 如下(注意帶) 可以將/path/to/source/目錄下所有的文件(包括隱藏文件)一起拷貝到192.168.1.5機器的/path/to/dest/目錄下 [root@dbtest bak]# scp -rp -P 22 /path/to/source/. [email protected]:/path/to/dest/ 如果直接使用/,則就是把/path/to/source整個目錄拷貝到192.168.1.5機器的/path/to/dest/目錄下,即拷貝到遠程 的目錄是/path/to/dest/source [root@dbtest bak]# scp -rp -P 22 /path/to/source/ [email protected]:/path/to/dest/ 如下(注意/*) 可以將/path/to/source/目錄下所有的文件(不包括隱藏文件)一起拷貝到192.168.1.5機器的/path/to/dest/目錄下 [root@dbtest bak]# scp -rp -P 22 /path/to/source/* [email protected]:/path/to/dest/ --------------- 注意,直接使用rm或rm -rf刪除一個目錄時,默認目錄下的隱藏文件是刪除不掉的,隱藏文件需要單獨刪除,如下: [root@dbtest ~]# cd /opt/ [root@dbtest opt]# ll -a total 28 drwxr-xr-x. 3 root root 4096 Mar 8 15:00 . dr-xr-xr-x. 27 root root 4096 Feb 26 03:54 .. -rw-r--r--. 1 root root 0 Mar 8 09:47 ac -rw-r--r--. 1 root root 45 Mar 8 09:47 a.txt -rw-r--r--. 1 root root 0 Mar 8 09:47 bb -rw-r--r--. 1 root root 21 Mar 8 09:45 b.txt -rw-r--r--. 1 root root 0 Mar 8 09:47 gg -rw-r--r--. 1 root root 52 Mar 8 15:00 .haha drwxr-xr-x. 2 root root 4096 Mar 8 15:00 .kevin -rw-r--r--. 1 root root 33 Mar 8 15:00 .my.cnf [root@dbtest opt]# rm -rf ./* [root@dbtest opt]# ll -a total 20 drwxr-xr-x. 3 root root 4096 Mar 8 17:44 . dr-xr-xr-x. 27 root root 4096 Feb 26 03:54 .. -rw-r--r--. 1 root root 52 Mar 8 15:00 .haha drwxr-xr-x. 2 root root 4096 Mar 8 15:00 .kevin -rw-r--r--. 1 root root 33 Mar 8 15:00 .my.cnf [root@dbtest opt]# rm -rf .haha .kevin .my.cnf [root@dbtest opt]# ll -a total 8 drwxr-xr-x. 2 root root 4096 Mar 8 17:44 . dr-xr-xr-x. 27 root root 4096 Feb 26 03:54 ..
鏈接:https://www.cnblogs.com/kevingrace/p/8529792.html
-
Linux
+關注
關注
87文章
11406瀏覽量
212096 -
文件
+關注
關注
1文章
575瀏覽量
25081 -
命令
+關注
關注
5文章
715瀏覽量
22569
原文標題:SCP和Rsync遠程拷貝的幾個技巧
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
Linux命令詳解之scp命令
imx6q scp拷貝大文件到CPU,提示網絡掉線是為什么?怎么解決?
linux的scp命令怎么用_linux的grep命令用法

評論