scp命令和rsync命令区别
scp传输是加密的,可能会稍微影响一下速度,scp不占资源,不会提高多少系统负荷,
虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用
scp -P 29022 jkzg-cms.tar.gz 192.107.108.108:./
scp -r ws_gj_jkzg.201911.sql.tar.gz [email protected]:/data/data1
psql -U wsgjjkzg -d t_gj_tzy < /data/data1/t_gj_tzy.20191031235825.sql
命令格式:
1 scp local_file remote_username@remote_ip:remote_folder
2 scp local_file remote_username@remote_ip:remote_file
3 scp local_file remote_ip:remote_folder
4 scp local_file remote_ip:remote_file
实例1:从远处复制文件到本地目录
命令:从181.137.128.103机器上的/opt/soft/的目录中下载nginx-0.5.38.tar.gz 文件到本地/opt/soft/目录中
scp [email protected]:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/
实例2:从远处复制到本地
命令:从181.137.128.103器上的/opt/soft/中下载mongodb 目录到本地的/opt/soft/目录来
scp -r [email protected]:/opt/soft/mongodb /opt/soft/
实例3:上传本地文件到远程机器指定目录
命令:复制本地opt/soft/目录下的文件nginx-0.5.38.tar.gz 到远程机器192.168.120.204的opt/soft/scptest目录
scp /opt/soft/nginx-0.5.38.tar.gz [email protected]:/opt/soft/scptest
实例4:上传本地目录到远程机器指定目录
命令:
scp -r /opt/soft/mongodb [email protected]:/opt/soft/scptest
命令格式:
scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file
scp /home/space/music/1.mp3 [email protected]:/home/root/others/music
scp /home/space/music/1.mp3 [email protected]:/home/root/others/music/001.mp3
scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music
从远程复制到本地
应用实例:
scp [email protected]:/home/root/others/music /home/space/music/1.mp3
scp -r www.runoob.com:/home/root/others/ /home/space/music/
说明
1.如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P 参数来设置命令的端口号,命令格式如下:
#scp 命令使用端口号 4588
scp -P 4588 [email protected]:/usr/local/sin.sh /home/administrator
应用实例
把本机A上的文件拷贝到远程机器B上
拷贝所有的sql数据库到本地192.167.108.101的home目录
scp -r *.sql [email protected]:./
端口拷贝
通过端口拷贝数据到192.167.108.101的home目录
scp -P 29022 wmsvc.tar.gz 192.107.108.108:./
拷贝本机elasticsearch下的所有文件到192.107.108.100的home目录
scp -p 29022 elasticsearch* 192.107.108.100:./
拷贝本机软件到192.107.108.109的home目录
scp -p 29022 postgresql-9.6.1-1-linux-x64.run 192.107.108.109:./
把A机器上的/home/目录下文件,拷贝到B机器上tmp目录文件下
scp /home/lizi/3.txt [email protected]:/tmp
把远程机器上的文件拷贝到本机
把远程机器B上的文件拷贝到本机A
把远程B机器上的/home/hundsun/appcom目录下所有文件,拷贝到A机器上的目录文件下
在本机A上命令窗口终端输入命令
scp 10.20.27.239:/home/hundsun/appcom/* /home/hundsun/test
特殊点注意
1、如果因为安全策略,需要加上端口,则,命令格式如下:
scp -p 9022 10.20.27.239:/home/hundsun/appcom/* /home/hundsun/test
其中9022是端口地址
2、使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。
3、对拷文件夹 (包括文件夹本身)需要加上-r
scp -r 10.20.27.239:/home/hundsun/appcom /home/hundsun/test
参考案例
1、从服务器上下载文件
scp username@servername:/path/filename /var/www/local_dir(本地目录)
例如scp [email protected]:/var/www/test.txt 把192.168.0.101上的/var/www/test.txt 的文件下载到/var/www/local_dir(本地目录)
2、上传本地文件到服务器
scp /path/filename username@servername:/path
例如scp /var/www/test.php [email protected]:/var/www/ 把本机/var/www/目录下的test.php文件上传到192.168.0.101这台服务器上的/var/www/目录中
3、从服务器下载整个目录
scp -r username@servername:/var/www/remote_dir/(远程目录) /var/www/local_dir(本地目录)
例如:scp -r [email protected]:/var/www/test /var/www/
4、上传目录到服务器
scp -r local_dir username@servername:remote_dir
例如:scp -r test [email protected]:/var/www/ 把当前目录下的test目录上传到服务器的/var/www/ 目录
01 前言
scp命令都很熟悉,通常用于服务器之间文件传输,但是经常应用此场景的童鞋会发现每次都需输入密码,操作有点繁琐。
接下来介绍免密传输的办法
02 实现过程
假设有两台服务器 10.137.128.182 (服务器A)、10.137.128.182(服务器B)
1、在服务器A上生成密钥,敲以下命令
ssh-keygen -t rsa
2、以下3步直接敲回车
可以看到,服务器A的密钥已生成,路径为/root/.ssh/id_rsa.pub
3、将生成的密钥复制到远程机器上,即服务器B,放到/root/.ssh/authorized_keys文件中
scp /root/.ssh/id_rsa.pub [email protected]:/root.ssh/
此环节需要输入密码:******
4、在远程服务器B上将复制过来的id_rsa.pub文件
4.1 如果/root/.ssh/下已存在authorized_keys文件
cat id_rsa.pub >> authorized_keys
4.2 如果/root/.ssh/下不存在authorized_keys文件
mv id_rsa.pub authorized_keys
其实这里重定向也一样
5、此时两台机器已建立信任关系了,A到B即可以实现免密传输了,如果要实现B到A免密传输,操作是一样的
03 其他办法
其实也可以通过其他非交互式工具如execpt去实现,关于这个工具,我会接下来实验成功后再开文章记录…
rsync -e “ssh -p 22 -o StrictHostKeyChecking=no” /etc/fstab 172.16.10.5:/tmp
rsync有三种工作方式:
(1).本地文件系统上实现同步。命令行语法格式为上述"Local"段的格式。
(2).本地主机使用远程shell和远程主机通信。命令行语法格式为上述"Access via remote shell"段的格式。
(3).本地主机通过网络套接字连接远程主机上的rsync daemon。命令行语法格式为上述"Access via rsync daemon"段的格式。
基础示例
(1).将/etc/fstab拷贝到/tmp目录下。
[root@localhost ~]# rsync /etc/fstab /tmp
(2).将/etc/cron.d目录拷贝到/tmp下。
[root@localhost ~]# rsync -r /etc/cron.d /tmp
该命令会在目标主机上创建/tmp/cron.d目录,并将/etc/cron.d/中的文件放入到/tmp/cron.d/目录中,也就是说默认情况下,是不会在目录路径下创建上层目录/etc的。
(3).将/etc/cron.d目录拷贝到/tmp下,但要求在/tmp下也生成etc子目录。
[root@localhost ~]# rsync -R -r /etc/cron.d /tmp
其中"-R"选项表示使用相对路径,此相对路径是以目标目录为根的。对于上面的示例,表示在目标上的/tmp下创建etc/cron.d目录,即/tmp/etc/cron.d,etc/cron.d的根"/"代表的就是目标/tmp。
(4).对远程目录下已存在文件做一个备份。
[root@localhost ~]# rsync -R -r --backup /var/./log/anaconda /tmp
[root@localhost tmp]# ll log/anaconda/
这样在目标目录下,已存在的文件就被做一个备份,备份文件默认使用"~“做后缀,可以使用”–suffix"指定备份后缀。
[root@localhost ~]# mkdir /tmp/log_back
[root@localhost ~]# rsync -R -r --backup --backup-dir=/tmp/log_back /var/./log/anaconda /tmp
指定备份路径后,默认将不会加备份后缀,除非使用"–suffix"显式指定后缀,如"–suffix=~"。
[root@localhost tmp]# tree /tmp/log_back/
(5)源目录后加 / 和不加 / 的区别
加 /
[root@nfs01 ~]# ls 主机B ip,192.168.88.31
logs old
[root@backup ~]# ls 主机A ip,192.168.88.41
logs old passwd
[root@backup ~]# mkdir test
[root@backup ~]# touch test/stu{1..10}
[root@backup ~]# rsync -avz test/ -e 'ssh -p 22' [email protected]:/root/
[email protected]'s password:
sending incremental file list
省略
sent 465 bytes received 205 bytes 191.43 bytes/sec
total size is 0 speedup is 0.00
[root@nfs01 ~]# ls 主机B查看结果
logs old stu1 stu10 stu2 stu3 stu4 stu5 stu6 stu7 stu8 stu9
不加 /
[root@backup ~]# rsync -avz test -e 'ssh -p 22' [email protected]:/root/
[email protected]'s password:
sending incremental file list
test/
test/stu1
省略
sent 508 bytes received 206 bytes 204.00 bytes/sec
total size is 0 speedup is 0.00
[root@nfs01 ~]# ls 主机B查看结果,test目录在最后一列
logs old stu1 stu10 stu2 stu3 stu4 stu5 stu6 stu7 stu8 stu9 test
–delete 用法
[root@backup ~]# rsync --delete -az ./ -e 'ssh -p 22' [email protected]:/root/
[email protected]'s password:
[root@backup ~]# ls
logs old passwd test
[root@backup ~]# tree
省略
3 directories, 24 files 主机A的文件
[root@nfs01 ~]# ls
logs old passwd test
[root@nfs01 ~]# tree
省略
3 directories, 24 files 主机B的文件
(6)指定ssh连接参数,如端口、连接的用户、ssh选项等。
rsync -e “ssh -p 22 -o StrictHostKeyChecking=no” /etc/fstab 192.168.1.131:/tmp/3.txt
[email protected]’s password:
常见问题 :
Permission denied, please try again.
/tmp/3.txt没有权限
(7)从远程主机A拷贝文件到B
A :授予文件特定的拷贝用户权限
root@ubuntu:/tmp# chown -R wzq.wzq 2.txt #授于wzq用户2.txt文档权权限
root@ubuntu:/tmp# ls -l
total 920
-rw-r--r-- 1 wzq wzq 1918 Nov 1 14:30 2.txt
drwx------ 2 root root 4096 Sep 19 10:07 vmware-root
B :执行拷贝命令
root@ubuntu:/tmp# rsync -av /etc/passwd [email protected]:/tmp/2.txt
[email protected]'s password:
sending incremental file list
passwd
sent 2,010 bytes received 35 bytes 454.44 bytes/sec
total size is 1,918 speedup is 0.94
root@ubuntu:/tmp# ls -l #查看拷贝的文件
total 20
-rwxr-xr-x 1 user1 user1 6 Oct 31 20:42 1.txt
-rw-r--r-- 1 root root 1918 Oct 31 23:30 2.txt
(8)、–exclude 过滤指定文件
如–exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步
从/root/111/ 下的文件不包含.txt文档的,都拷贝到/tmp/222/
root@ubuntu:~# rsync -avL exclude "*.log" /root/111/ /tmp/222/
sending incremental file list
rsync: link_stat "/root/exclude" failed: No such file or directory (2)
rsync: link_stat "/root/*.log" failed: No such file or directory (2)
./
1.log
11.txt
sent 170 bytes received 57 bytes 454.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.1]
root@ubuntu:~# ls 111
11.txt 1.log
root@ubuntu:~# cd /tmp/222
root@ubuntu:/tmp/222# ls
11.txt 1.log
-P 显示同步过程,比如速率,比-v更加详细
(9)、rsync通过ssh同步
rsync -av /etc/passwd 172.16.17.70:/tmp/momo.txt (从a推送到b)
也可以反过来操作:
rsync -avP 172.16.17.70:/tmp/momo.txt /tmp/123.txt (从b拉数据到a)
rsync -av -e “ssh -p 22” test1/ 192.168.133.132:/tmp/test2/ (端口不一定为22的时候使用这个命令)
(10)、从远程主机拷贝到本地
*拷贝192.168.1.131上面的一个文件到本地机器:
rsync -v [email protected]:/home/1.txt
[email protected]'s password:
receiving file list ... done
-rw-r--r-- 0 2019/11/01 01:04:44 1.txt
sent 20 bytes received 39 bytes 16.86 bytes/sec
total size is 0 speedup is 0.00
root@ubuntu:~# cd /home
root@ubuntu:/home# ls
lin postgres user1 wzq
拷贝文件并且显示进度:
$ rsync --progress [email protected]:/home/quietheart/tmpTrans/linux.tar.gz ./
常见问题 :
1、请问直接使用rsync和rsync -e ssh有啥差别?
rsync -e ssh 走的是ssh协议,都可以使用
2、192.168.1.131拷贝到本地
rsync -avP [email protected]:/tmp/22.txt
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1655) [Receiver=3.1.1]
rsync: [Receiver] write error: Broken pipe (32)
A操作 :
#chown -R wzq.wzq 22.txt
/home# chmod 755 22.txt
B操作 :
rsync -avP [email protected]:/tmp/22.txt
解决办法 :
参考链接:
https://www.runoob.com/linux/linux-comm-scp.html
Linux篇:scp命令 : https://www.jianshu.com/p/2fdddb50c015
rsync
https://blog.csdn.net/jiangyu1013/article/details/79754060
https://blog.csdn.net/yujia_666/article/details/93745147
https://blog.csdn.net/qq_37120573/article/details/82632797
rsync工具介绍、rsync常用选项和rsync通过ssh同步 :https://blog.csdn.net/mojianbin/article/details/78720618
https://blog.csdn.net/dragon434/article/details/81124817
Linux命令学习手册-rsync命令 :https://blog.csdn.net/dragon434/article/details/81124817