Linux中传输文件的scp和rsync命令

Posted 砚台是黑的

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux中传输文件的scp和rsync命令相关的知识,希望对你有一定的参考价值。

scp

# 利用ssh传输文件
# 在linux下一般用scp这个命令来通过ssh传输文件。

# 1、从服务器上下载文件
scp username@servername:/path/filename /var/www/local_dir(本地目录)

# 例如scp root@192.168.0.101:/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  root@192.168.0.101:/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 root@192.168.0.101:/var/www/test  /var/www/  

# 4、上传目录到服务器
scp  -r local_dir username@servername:remote_dir

# 例如:scp -r test  root@192.168.0.101:/var/www/   把当前目录下的test目录上传到服务器的/var/www/ 目录

sudo scp -r include lib user@ip:~

# 注:目标服务器要开启写入权限。

rsync

# 1、将文件从本地同步拷贝至远程目录
rsync -avz /root/temp/ user@ip:/root/temp

# 2、将文件从远程目录同步至本地
rsync -avz user@ip:/root/temp /root/temp
# 比如:
rsync -avzt --progress user@ip:/storage/data/xxx.mp4 /home/bng/sil/sil-example-data/sil-test-datas

# 3、不要覆盖目标位置上已经修改的文件
rsync -avzu user@ip:/root/temp /root/

# 4、在传输过程中查看rsync进度
rsync -avz --progress /root/temp/ user@ip:/root/temp

# 5、在目标目录中删除源目录不存在的文件
# 如果文件不在源中而是在目标中存在,则可能希望在rsync同步期间删除目标上的文件,在这种情况下,请使用 --delete选项  rsync使用--delete选项删除目标目录中不包含源目录的文件
rsync -avz --delete /root/temp user@ip:/root

# 6、文件传输过程中的include和exclude模式
# rsync允许在进行同步时提供要包括和排除文件或目录的模式
# 例如:在上面的示例中,它仅包括以’P’开头的文件或目录,并排除所有其他文件
rsync -avz --include \'P*\' --exclude \'*\' user@ip:/var/lib/rpm/ /root/temp/

# 7、不传输大文件,可以使用 rsync --max-size选项告诉rsync不要传输大于指定大小的文件
# -max-size=1M使rsync仅传输小于或等于1M的文件。单位可以是K,M,G等
# 还可以使用--min-size=参数,指定传输最小文件的大小
rsync -avz --max-size=\'1M\' root@192.168.43.137:/var/lib/rpm/ /root/temp/

# 8、拷贝指定文件
# -t --times:保持mtime属性。强烈建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新
# -a --archive :归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"
# -z :传输时进行压缩提高效率。
# -v:显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息
rsync -avzt --progress /storage/sil-test-datas/文件 USER@IP:/storage/sil-test-datas

# 下面的是普通模式,耗费带宽
# 两种模式都是从当前机器复制一份指定文件到远端IP机器的指定位置
rsync -av --progress --inplace --rsh=\'ssh -p 22\' ./文件 用户名@远端目标IP:/storage/sil-test-datas
rsync -avzt --progress ./sil-example-data.tar.gz username@ip:~/sil

Linux scp命令详解

     scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令, scp传输是加密的,可能会稍微影响一下速度。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用

常见命令参数

usage: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[[email protected]]host1:]file1 ... [[[email protected]]host2:]file2

-q:  quiet
-r:   recuersive
-p:   properity
-v:   verbose
-i:   identity_file      【从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh】 
-P:  port

 

常见命令展示

scp命令的实际应用概述: 

从本地服务器复制到远程服务器:

(1) 复制文件: 

命令格式:

scp local_file [email protected]_ip:remote_folder  

或者

scp local_file [email protected]_ip:remote_file  

或者

scp local_file remote_ip:remote_folder  

或者

scp local_file remote_ip:remote_file  

第1,2个指定了用户名,命令执行后需要输入用户密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名  

第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名  

(2) 复制目录: 

命令格式:

scp -r local_folder [email protected]_ip:remote_folder  

或者

scp -r local_folder remote_ip:remote_folder  

第1个指定了用户名,命令执行后需要输入用户密码;  

第2个没有指定用户名,命令执行后需要输入用户名和密码

以上是关于Linux中传输文件的scp和rsync命令的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统中的文件传输优化

linux服务器间传文件命令scp,rsync以及排除部分文件夹

Linux scp命令详解

linux下不同服务器间数据传输(rcp,scp,rsync,ftp,sftp,lftp,wget,curl)

-scp Linux之间复制文件和目录

linux下常用文件传输命令(转)