linux远程同步下载文件 rsync、curl、wget、ftp、sftp

2018-07-02 22:18:02

rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。

rsync使用所谓的“Rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

rsync可以利用ssh来同步文件,也可以使用rsync服务的形式运行来同步(需要在远程安装启动rsync服务)。

-a,--archive	递归传输文件,保持所有属性=rlptgoD
-z,--compress	压缩传递
-r,--recursive	递归传送文件
--progress	显示备份过程
-v,verbose	详细模式
--exclude=pattern	排除
--include=pattern	包含
-delete	    源文件不存在了,就会把目标删除

-i     找出文件间的不同
#本地同步/root下所有文件到/tmp/root
rsync -avz /root /tmp/root

#ssh远程同步到本地
rsync -avz -delete root@192.168.1.3:/pro/* /tmp/pro/

#ssh本地同步到远程
rsync -avz -delete /tmp/pro/ root@192.168.1.3:/pro/

#触发远程rsync服务器来同步到本地
rsync -avz root@172.16.78.192::www /databack


curl

-v	详细信息
--trace file	16进制,ascii输出到文件
--trace -	16进制,ascii输出到stdout
--trace-ascii	除去16进制
--trace-time	追踪时间
--limit-rate	限速100K,100M
--max-filesize	下载最大字节数
--retry 5	times
--retry-delay 2    s
--retry-max-time 			
-m,--max-time	请求的最大时间
--raw	原生态不decode,encode

-C,--continue-at	从指定offset下载
-r,--range 100-1999	范围0-499(500), -500(最后500b), 

-d,--data	post(回车换行都会去掉)
-F,--form	form-data
--data-binary @filename	原生态
-H	请求头
-b,--cookie	cookie

-I,--head	head方法请求

-s/--silent

-w/--write-out	自定义内容输出到结尾(加变量)
-o file	输出到文件
-O	保存为原始文件名
--compress	压缩

-g,--globoff	不解析{}[]
#多进程下载假如300M的文件yang.mp3
curl www.yang.com/yang.mp3 -I	#head方法获取文件大小
curl www.yang.com/yang.mp3 -o yang-1.mp3 -r 0-100000000
curl www.yang.com/yang.mp3 -o yang-2.mp3 -r 100000001-200000000
curl www.yang.com/yang.mp3 -o yang-2.mp3 -r 200000001-

#然后再合并文件
cat yang-1.mp3 yang-2.mp3 yang-3.mp3 > yang.mp3
#设置请求头
curl www.baidu.com -H "Host: 192.168.1.3:9999" -H "Accept-Language: en-US,en;q=0.5"

#设置cookie
curl www.baidu.com --cookie "user=root;pass=123456"
#urlencode模式post请求
curl -d 'name=dailei&age=22' www.baidu.com 
curl -d @file.txt www.baidu.com

#先urlencode再发送
curl --data-urlencode "name=John Doe (Junior)" http://example.com

#form-data形式上传文件
#文件上传时会输出到屏幕,所以最好重定向到null
curl 192.168.1.3:888/uploads -F "file=@pldsec_waf.zip" > /dev/null

curl -F 'name=dailei' -F 'img=@tmp.jpg' -b 'sessid=abcd; haha=eee' http://www.baidu.com


#curl-ftp
-P,--ftp-port -		主动模式如果服务端只开放21端口而本地全开放
--no-eprt	关闭新的主动模式

--ftp-pasv	被动模式(默认,由服务器开端口传数据)
--no-epsv	新的被动模式

--ftp-method	multicwd(标准,速度慢)/nocwd(速度快)/singlecwd(标准点)
-l,--list-only	只列出文件名
-T,--upload-file	上传文件
#主动-保存原始文件名
curl ftp://dailei:dailei@202.91.248.125:20/papo/api/info/member.php -O -P -

#速度快
curl ftp://dailei:dailei@202.91.248.125:20/papo/api/info/member.php -O --ftp-method nocwd

#列出目录内容
curl ftp://dailei:dailei@202.91.248.125:20/papo/api/info/

#上传文件
curl -T member.php ftp://dailei:dailei@202.91.248.125:20/papo/api/info/ --ftp-method nocwd --no-epsv
#字节范围
curl -T member[1-100].php ftp://dailei:dailei@202.91.248.125:20/papo/api/info/
#多文件
curl -T '{Huey,Dewey,Louie}.php' ftp://dailei:dailei@202.91.248.125:20/papo/api/info/


wget

-b   后台执行
-i	--input-file	下载文件中的所有url
-t	--tries	失败尝试次数
-N	--timestamping 	不要重新下载文件除非比本地文件新
-T	--timeout=2 	设定响应超时的秒数
-O	tmp.zip		下载文件输出到tmp.zip
-a  追加到文件
-nH 	不创建主机目录	
--cut-dirs	去掉几层目录			
-r	递归下载默认5
-l	递归层数
-m	递归下载镜像
-k	转换内部链接为本地链接

-c 断点续传,假设下载tmp.zip,每次请求时先会检查当前目录是否
    存在 tmp.zip(假设100k),如果存在,则会从100k之后去远程下载
	
--limit-rate=100k 	限定下载输率
#限速下载,断点续传(接着上次继续下)
wget http://www.baidu.com/tmp.zip --limit-rate=300k -c

#下载并保存为
wget -O dailei.zip http://www.baidu.com/tmp.zipdailei.zip

#挂在后台下载,日志记录在wget-log
wget -b http://www.baidu.com/tmp.zip

#下载文件里的所有url
wget -i url_list.txt

#默认递归5层,只下载pdf
wget -r www.baidu.com -A .pdf

#默认递归5层,排除jpg
wget -r www.baidu.com -R .jpg

#ftp下载目录
wget -r --ftp-user=dailei --ftp-password=dailei ftp://202.91.248.125:20/xiaoxue/inc -nH --cut-dirs=1

#下载整个网站
wget -m eoner.lookbi.com -nH


ftp

cd	#切换远程目录
pwd	#显示远程工作目录
lcd	#显示本地当前目录
lcd  dir       	#切换本地当前目录
prompt  		#切换是否提示
get  file  |  mget  *  #只能获取文件
put  file  |  mput  *  #只能上传文件
mkdir/rmdir	#创建/删除远程目录
ls

#假设tmp.txt文件包含了下面五行的数据,则下面两个命令一样
cat tmp.txt | ftp -n

ftp -n <<eof
open 202.91.248.125 20
user dailei dailei
cd papo/api/info
lcd /usr/local/nginx/html/94-papo/api/info/
put home.php
eof


sftp

cd  dir		#切换远程工作目录
lcd  dir         #切换本地工作目录
pwd  		#显示远程工作目录
lpwd         	#显示本地工作目录

get  -r  *  	#递归获取全部
mget  -r  *  

put  -r  *	#递归上传全部
mput  -r  *
#直接下载支持断点续传
sftp root@139.196.201.240: /tmp/papo_html.tar.bz2

#批处理操作
sftp root@139.196.201.240 << EOF

lcd /var/websocket/py_websocket
cd /var/websocket/py_websocket

put main.py
put include/functions.py include/functions.py
put include/myaiomysql.py include/myaiomysql.py

EOF

上面的操作都需要交互,如果想在定时任务里运行不交互,则需要生成rsa密钥对。具体参照 linux利用ssh-keygen实现免密码登录


备注:
1.本系列命令都在centos7里测试,其他发行版如ubuntu、debian、fedora、opensuse等可能略微不同
2.本文只讲解常用用法,详细用法请自行利用 man 命令查看
3.原文地址http://www.freecls.com/a/2712/6f

 

©著作权归作者所有
收藏
推荐阅读
简介
天降大任于斯人也,必先苦其心志。