scp和rsync命令都可以实现服务器与服务器之间的数据拷贝。
一、scp命令
1.定义
Linux scp 命令用于 Linux 之间复制文件和目录。
scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。
2.基本语法
scp -r 要拷贝的文件路径 目的用户名@目标主机:目的路径[/新名称]
参数:
- -r为递归,复制文件时不需要,复制文件夹时需要。
- 目的用户名若为普通用户,则需要注意目的路径是否有修改权限,如果没有则会发送失败。
- 目标主机可以为目标主机的ip地址,如果配了映射关系,也可以使用目标主机名。
- 若目的路径后没有跟新名称,则会把文件复制到目的路径下,否则会把文件复制到目标路径下并重命名为新名称。
3.使用
(1)把本地文件复制到另一台服务器
例如:在hadoop102上,把hadoop102上/home/nanfeng路径下的文件夹a复制到hadoop103上的/home/nanfeng路径下,并将文件夹名称改为b。
命令:scp -r /home/nanfeng/a nanfeng@hadoop103:/home/nanfeng/b
注意:
(2)从另一台服务器复制文件到本地
例如:在hadoop103上,把hadoop102上/etc下的profile文件复制到hadoop103上的/opt目录下。
命令:sudo scp -r nanfeng@hadoop102:/etc/profile /opt
注意:因为我使用的普通用户,所以对/opt目录没有修改权限,所以需要借助sudo命令。
(3)在本地把一台服务器的文件复制到另一台服务器
例如:在hadoop103上,把hadoop102上/home/nanfeng下的文件夹a复制到hadoop104上的/home/nanfeng路径下。
命令:scp -r nanfeng@hadoop102:/home/nanfeng/a nanfeng@hadoop104:/home/nanfeng
二、rsync命令
1.定义
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
2.基本语法
rsync -rvl 要拷贝的文件路径 目的用户名@目标主机:目的路径[/新名称]
参数:
- -r为递归,复制文件时不需要,复制文件夹时需要。
- -v为显示复制过程。
- -l为拷贝符号连接。
- 要拷贝的文件路径后不要加/,如果加了发送文件夹过去,又没改名的话会把文件夹里的文件散出来。
- 目的用户名若为普通用户,则需要注意目的路径是否有修改权限,如果没有则会发送失败。
- 目标主机可以为目标主机的ip地址,如果配了映射关系,也可以使用目标主机名。
- 若目的路径后没有跟新名称,则会把文件复制到目的路径下,否则会把文件复制到目标路径下并重命名为新名称。
3.使用
例子:在hadoop102上,把hadoop102上/home/nanfeng路径下的文件夹a复制到hadoop103上的/home/nanfeng路径下,并将文件夹名称改为b。
命令:rsync -rvl /home/nanfeng/a nanfeng@hadoop103:/home/nanfeng/b
P.s.:使用和scp命令差不多,可以参考上面scp命令的使用。
扩展:
上面讲到的是增量同步,也就是说同步时只对增加和修改的文件进行同步,不对删除的文件进行同步。
例如:如果两台服务器上都有一个相同的文件夹,其中一台服务器删除了文件夹中的一个文件,那么同步发送给另一个服务器这个文件夹后,另一个服务器的这个文件夹中被删的那个文件还在,不会被删除。
问题:如何实现删除操作也同步?
解决方法:执行的命令加上--delete参数
,即rsync -rvl --delete 要拷贝的文件路径 目的用户名@目标主机:目的路径
。
三、scp和rsync的区别
scp是相当于复制,黏贴,如果有的话是覆盖,比较耗时间,不智能。
rsync是复制,如果有重复的文件,会直接跳过,而且他自己的算法优化。
scp是把文件全部复制过去,当文件修改后还是把所有文件复制过去,rsync 第一次是把所有文件同步过去,当文件修改后,只把修改的文件同步过去。所以用rsync做文件的复制要比scp的速度快。