0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用SCP和Rsync远程拷贝文件

马哥Linux运维 来源:博客园-散尽浮华 2024-09-29 15:54 次阅读

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)和文件的大小(size)来确认哪些文件需要被同步过去。
->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/
root@192.168.1.198'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 root@192.168.1.1:/usr/local/src/
[以上命令] 不同机器拷贝可以显示进度条,即使不带"-v"参数也可以显示进度条
 
[root@dbtest bak]# scp -v /mnt/full20100526.tar.gz root@127.0.0.1:/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 root@192.168.1.100 //限制为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 root@10.0.11.202:/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/ user@192.168.1.5:/path/to/dest/
  
如下(注意带/*)
可以将/path/to/source/目录下所有的文件(不包括隐藏文件)一起拷贝到192.168.1.5机器的/path/to/dest/目录下
[root@dbtest bak]# rsync -e "ssh -p22" -avpgolr /path/to/source/* user@192.168.1.5:/path/to/dest/
  
-----scp命令-----
如下(注意带)
可以将/path/to/source/目录下所有的文件(包括隐藏文件)一起拷贝到192.168.1.5机器的/path/to/dest/目录下
[root@dbtest bak]# scp -rp -P 22 /path/to/source/. user@192.168.1.5:/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/ user@192.168.1.5:/path/to/dest/
 
如下(注意/*)
可以将/path/to/source/目录下所有的文件(不包括隐藏文件)一起拷贝到192.168.1.5机器的/path/to/dest/目录下
[root@dbtest bak]# scp -rp -P 22 /path/to/source/* user@192.168.1.5:/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

    文章

    11136

    浏览量

    208039
  • 文件
    +关注

    关注

    1

    文章

    554

    浏览量

    24575
  • 命令
    +关注

    关注

    5

    文章

    660

    浏览量

    21936

原文标题:SCP和Rsync远程拷贝的几个技巧

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux命令详解之scp命令

    Linux scp命令 通常用于Linux的跨主机之间的文件和目录的复制。scp是 secure copy的缩写, scp命令 是Linux 下基于ssh登陆进行安全
    发表于 08-27 13:41

    imx6q scp拷贝文件到CPU,提示网络掉线是为什么?怎么解决?

    大家好,在飞凌imx6q开发板上测试4.9.88内核,scp拷贝文件到CPU,经常提示网络掉线重连。日志如下:root@imx6qsabresd:~# fec 2188000.ethernet
    发表于 01-11 07:03

    linux的scp命令怎么用_linux的grep命令用法

    在linux中,scp命令用于Linux之间复制文件和目录,即在一台Linux服务器中将本地的文件上传到一台远端服务器,或将远端服务器的文件下载到本地。
    发表于 09-04 15:36 4362次阅读
    linux的<b class='flag-5'>scp</b>命令怎么用_linux的grep命令用法

    SCP-LT8362-B-EVALZ-设计文件

    SCP-LT8362-B-EVALZ-设计文件
    发表于 03-22 14:39 0次下载
    <b class='flag-5'>SCP</b>-LT8362-B-EVALZ-设计<b class='flag-5'>文件</b>

    SCP-THRUBRD-EVALZ-设计文件

    SCP-THRUBRD-EVALZ-设计文件
    发表于 03-22 14:46 0次下载
    <b class='flag-5'>SCP</b>-THRUBRD-EVALZ-设计<b class='flag-5'>文件</b>

    Rsync远程数据同步工具简介

    Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件Rsync使用所谓的“Rsy
    的头像 发表于 09-16 09:13 1015次阅读

    Rsync远程数据同步工具介绍

    Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件Rsync使用所谓的“Rsy
    的头像 发表于 09-23 10:32 972次阅读

    Rsync远程数据同步工具简介

    Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件Rsync使用所谓的“Rsy
    的头像 发表于 10-12 09:12 843次阅读

    如何在Linux使用Rsync命令复制和同步文件和目录

    Rsync用于在两个远程计算机之间同步文件文件夹。它仅通过传输源和目标之间的差异来提供快速的增量文件传输。
    的头像 发表于 12-07 09:47 1.1w次阅读

    如何使用cp和rsync命令复制文件和目录

    复制文件和目录是在使用命令行时最常见的任务之一。在Linux,有两个命令用于复制文件cp和rsync,但cp命令比rsync更受欢迎。
    的头像 发表于 12-07 17:39 6728次阅读

    如何在Linux使用rsync命令排除文件和目录

    Rsync是一种快速同步的命令行程序,用于在两个计算机之间同步文件文件夹。借助Rsync,您可以镜像数据,创建增量备份。
    的头像 发表于 12-23 16:49 7392次阅读

    一篇文章学会数据备份利器rsync

    在Linux系统下数据备份的工具很多,但阿铭只用一种,那就是rsync,从字面意思上可以理解为remote sync(远程同步)。rsync不仅可以远程同步数据(类似于
    的头像 发表于 01-04 14:38 577次阅读

    如何在Linux和类Unix操作系统中使用SCP安全地传输文件

    在网络上文件传输可以通过各种不同的方式和协议来完成。远程复制文件最常用的协议是 RsyncSCP 和 SFTP。
    的头像 发表于 02-23 09:25 1403次阅读
    如何在Linux和类Unix操作系统中使用<b class='flag-5'>SCP</b>安全地传输<b class='flag-5'>文件</b>

    使用SCPRsync在Linux中传输文件

    在 Linux 中,有时需要将文件从一台计算机传输到另一台计算机。为了完成这个任务,有两个主要的工具可以使用:SCPRsync。本文将介绍如何使用这两个工具在 Linux 中传输文件
    的头像 发表于 05-12 14:32 861次阅读

    什么是rsync?如何安装rsync?如何恢复中断的传输?

    我们都使用过 scp 来传输文件。当传输在中途或甚至在 99% 时被中断时,(每当我想起99%的中断传输时,我的心都很痛);让我们看看如何使用 rsync 来替代 scp,避免这样的不
    的头像 发表于 08-24 09:16 1314次阅读