暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

rsync,scp,wget,curl,nc,ftp,lrzsz传输文件介绍

陶老师运维笔记 2019-11-08
3718

rsync,scp,wget,curl,nc,ftp,lrzsz传输文件介绍

本文介绍rsync,scp,wget,curl,nc,ftp,lrzsz等工具使用,尤其是在文件传输方面的应用。较多内容参考了https://www.ibm.com/developerworks/cn/linux/ 表示感谢。

1. rsync

rsync 是一款高效的远程数据备份和镜像工具,可快速地同步多台主机间的文件。官网:https://rsync.samba.org/

Rsync服务搭建: CentOS7 FTP及Rsync服务搭建

1.1 基本语法

  1. $man rsync

  2. rsync [OPTION]... SRC DEST

  3. rsync [OPTION]... SRC [USER@][host]:DEST

  4. rsync [OPTION]... [USER@]HOST:SRC DEST

  5. rsync [OPTION]... [USER@]HOST::SRC DEST

  6. rsync [OPTION]... SRC [USER@]HOST::DEST

  7. rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]


  8. $rsync -avzP data1user@192.168.1.2::data1 ~/data1

  9. 保持传输原有文件权限,用户,用户组,时间,递归的把data1模块数据复制到用户家目录的data1目录里.

  10. 参数 a的意思就是 保留文件原有权限,用户,用户组,时间且递归的copy包括链接文件。

  11. $rsync --compress --recursive --times --perms --owner --group --links --exclude=smarty/templates_c/ --timeout=30 [path] [user]@[ip]:[path]

复制

参数说明:

选项描述
-a, --archive归档模式,保持所有文件属性,等同于 -rlptgoD
-v, --verbose详细信息输出
-r, --recursive对子目录进行递归处理
-R, --relative使用相对路径信息
-b, --backup创建备份
-z, --compress对备份的文件在传输时进行压缩处理
--delete用于同步目录,从 DEST 中将 SRC 不存在的文件进行删除
--progress显示备份过程

1.2 命令示例

  1. #设置密码:

  2. $export RSYNC_PASSWORD=ops123456;

  3. #限速

  4. $rsync macdown071.zip ops@rsync.tao-ops.com::software/ --bwlimit=50000 -arv

  5. $rsync --password-file=/etc/rsyncd.secrets.passfile ops@ip::software . --bwlimit=50000 -arv


  6. #备份

  7. $rsync -avzP data1user@192.168.1.2::data1 ~/data1

  8. 保持传输原有文件权限,用户,用户组,时间,递归的把data1模块数据复制到用户家的data1目录里。


  9. #删除--delete

  10. rsync -avzP --delete data1user@192.168.1.2::data1 ~/data1

  11. #保持data1模块和用户家目录模块内容完全一致,加上参数 --delete,这样会删除在~/data1目录里但是不在data1

复制

2. SCP

scp 命令在网络上的主机之间拷贝文件,它是安全拷贝(secure copy)的缩写。scp 命令使用 ssh 来传输数据,并使用与 ssh 相同的认证模式,提供同样的安全保障。

2.1 基本语法

  1. $man scp

  2. $scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]

  3. [-l limit] [-o ssh_option] [-P port] [-S program]

  4. [[user@]host1:]file1 [...] [[user@]host2:]file2

复制

2.2 命令示例

  1. #示例:

  2. $scp ops@rsync.tao-ops.com:/home/ops/foo.txt ~/Downloads/

  3. $scp -r -P 4588 ops@rsync.tao-ops.com:/tmp/foo.txt /root/


  4. Copy 本地文件 /etc/eva.log, 到远程机器 sysB, 用户 user 的家目录下

  5. $scp /etc/eva.log user@sysB:/home/user


  6. copy 远程机器 sysB 上的文件 /home/uesr/eva.log, 到本地的 /etc 目录下 , 并保持文件属性不变

  7. $scp -p user@sysB:/home/uesr/eva.log /etc


  8. copy sysB 上的目录 /home/user 到本地 /home/user/tmp, <new dir,/home/user/tmp/user>

  9. $scp -r user@sysB:/home/user /home/user/tmp

复制

3. wget

wget 是一个经由 GPL 许可的可从网络上自动获取文件的自由软件包。它是一个非交互式的命令行工具。支持 HTTP,HTTPS 和 FTP 协议,支持代理服务器以及断点续传功能。wget 可实现递归下载,完全重建原始站点的目录结构,实现远程网站的镜像。在递归下载时,wget 将页面中的超级链接转换成指向本地文件,方便离线浏览。

3.1 基本语法

  1. #http://www.gnu.org/software/wget/manual/wget.html


  2. $man wget

  3. wget [options] [URL-list]

复制

wget 帮助手册: http://www.gnu.org/software/wget/manual/wget.html参数说明:

选项描述
-r递归下载服务器上所有的目录和文件。由 -l 选项来指定递归深度。
-b后台下载
-m制作站点镜像
-c指定断点续传功能。该功能要求服务器支持断点续传。
-I指定下载目录列表,可实现批量下载
-A/-R指定接受/拒绝下载列表,实现选择性地下载
--proxy=on/off指定是否利用代理服务器进行下载
-t, --tries=NUMBER最大尝试链接次数 (0 表示无限制,默认为 20 次 )
-nc, --no-clobber不覆盖已存在的文件
-N, --timestamping只下载比本地新的文件
-nd --no-directories不进行目录结构创建
-x, --force-directories强制创建目录结构
-nH, --no-host-directories不继承主机目录结构
-P, --directory-prefix=PREFIX设置目录前缀

3.2 命令示例

  • 下载文件 若需要密码可以--http-user='xxx' --http-passwd='xxx' 指定。

  1. #下载文件

  2. $wget https://dldir1.qq.com/weixin/mac/WeChatMac.dmg -O WeChatMac.dmg

  3. #有密码

  4. $wget -P /data1 -c --http-user='xxx' --http-passwd='xxx' http://ip:80/scripts/install.sh

复制
  • 下载ftp文件

  1. #下载ftp文件

  2. $wget -P /tmp/ ftp://ftp.tao-ops.com:21/pub/README.md --ftp-user=ftpuser --ftp-password=ftppwd

复制
  • 下载网站

  1. #递归下载 http://www.ibm.com.cn 站点的信息下载所有显示完整网页所以需要的文件,如图片等。

  2. #在下载不进行上层目录搜索并将绝对链接转换为相对链接。

  3. $wget -r -p -np -k http://www.ibm.com.cn


  4. #本地硬盘建立 http://www.ibm.com.cn 的镜像,递归深度为 4,重试次数为无穷

  5. $wget -m -l4 -t0 http://www.ibm.com.cn

  6. #使用代理进行下载,并实现断点续传。

  7. $wget -Y on -c http://www.ibm.com.cn

复制

4. curl

curl,它是对 libcurl 库的一个命令行工具包装。curl 使用 URL 的语法来传输文件,它支持 FTP, FTPS, HTTP, HTTPS, TFTP, SFTP, TELNET 等多种协议。

4.1 基本语法

  1. $man curl

  2. curl [options] [URL...]

复制

4.2 命令示例

  • 获取主页 curl 可以将从指定 url 处获取的内容打印到标准输出上。如果需要保存在本地文件中,可以使用 -o,或使用 -O 参数指定使用远程主机上的文件名。

  1. curl http://www.baidu.com

  2. curl -o 1.html http://www.baidu.com

  3. curl -O http://www.baidu.com/index.html

复制
  • 下载ftp文件 需要指定用户名和密码的话,可以在 url 中指定,或者使用 -u 参数。

  1. #无密码

  2. $curl ftp://ftp.gnu.org/README

  3. #有密码

  4. $curl ftp://name:passwd@machine.domain:port/full/path/to/file -O

  5. $curl -u name:passwd ftp://machine.domain:port/full/path/to/file -o xxx.file

复制
  • 使用代理 使用 -x 选项来使用代理进行连接

  1. curl -x my-proxy:port ftp://ftp.somesite.com/README

复制

curl 适合用来进行自动的文件传输或操作序列,它是一个很好的模拟用户在网页浏览器上的行为的工具。尤其当需要在程序中调用时,libcurl 是个很好的选择。

5. nc

nc命名netcat,可以连接和重定向Sockets。nc命令功能非常多,它可以打开TCP连接,发送UDP包,监听TCP/UDP端口,进行端口扫描等等。nc在两机器间传输文件速度非常快,推荐使用。

5.1 基本语法

  1. $man nc

  2. ncat - Concatenate and redirect sockets

  3. #用法

  4. $ncat [OPTIONS...] [hostname] [port]

  5. nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>]

  6. [-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...]

复制

基本参数

选项描述
-4仅使用IPv4
-6仅使用IPv6
-c,--sh-exec [command]执行给定的命令,同/bin/sh
-e,--exec [command]执行给定的命令
-m,--max-conns [n]设置同时连接的最大数
-d,--delay [time]设置读/写的等待时间
-o,--output [filename]将会话的数据保存为文件
-i,--idle-timeout [time]读/写空闲超时时间
-p,--source-port port指定本机使用的通信端口
-s,--source addr指定远程通信的主机地址
-l,--listen监听传入的连接信息
-k,--keep-open在监听模式中接收多个连接信息
-n,--nodns直接使用IP地址,不解析域名
-t,--telnet响应telnet请求
-u,--udp使用UDP替换默认的TCP
-v,--verbose显示详细的输出信息
-w,--wait [time]设置连接超时时间,单位为秒
-z建立连接后马上断开,不发送和接收任何数据即Zero-I/O模式,仅用于测试连接状

5.2 命令示例

  • 传输文件 1)传输文件

  1. 目标机(接收机器):

  2. nc -l 1234 >mysql-bin.000001

  3. #源机器: 文件的发送端,启动监听端口并准备好相应的文件

  4. nc 接收机ip 1234 < mysql-bin.000001

复制

2)传输文件夹

  1. 目标机(接收机器):192.168.0.3

  2. nc -l 1234 | tar xzvf - >mysql3306

  3. 源机器(发送机器):

  4. tar czvf - mysql3306 | nc 192.168.0.3 1234

复制
  • 测试端口

  1. 扫描本机端口20-22

  2. $nc -z -v -n -w 2 127.0.0.1 20-22

  3. nc: connect to 127.0.0.1 port 20 (tcp) failed: Connection refused

  4. nc: connect to 127.0.0.1 port 21 (tcp) failed: Connection refused

  5. Connection to 127.0.0.1 22 port [tcp/*] succeeded!

  6. #mysql

  7. $nc -z -vv 192.110.103.41 3306

  8. Connection to 192.110.103.41 3306 port [tcp/mysql] succeeded!

  9. #zk

  10. $echo 'ruok' | nc 127.0.0.1 2181

  11. #memcache

  12. $nc -z -vv 127.0.0.1 11211

  13. Connection to 127.0.0.1 11211 port [tcp/memcache] succeeded!

复制
  • 操作memcached

  1. yum install memcached

  2. #启动

  3. memcached -d -p 11211 -m 256

  4. #set key flags exptime bytes [noreply]

  5. $nc -z -vv 127.0.0.1 11211

  6. 1)存储数据:printf "set mykey 0 1000 6\r\n123456\r\n" |nc 127.0.0.1 11211

  7. 2)获取数据:printf "get mykey\r\n" |nc 127.0.0.1 11211

  8. 3)删除数据:printf "delete mykey\r\n" |nc 127.0.0.1 11211

  9. 4)查看状态:printf "stats\r\n" |nc 127.0.0.1 11211

  10. 5)模拟top命令查看状态:watch "echo stats" |nc 127.0.0.1 11211

  11. 6)清空缓存:printf "flush_all\r\n" |nc 127.0.0.1 11211 (小心操作,清空了缓存就没了)

复制
  • 聊天聊天工具

  1. 192.168.2.34上: nc -l 1234

  2. 192.168.2.33上: nc 192.168.2.34 1234

  3. 这样,双方就可以相互交流了。使用ctrl+C(或D)退出。

复制

6. ftp

ftp 命令使用文件传输协议(File Transfer Protocol, FTP)在本地主机和远程主机之间或者在两个远程主机之间进行文件传输。FTP 协议允许数据在不同文件系统的主机之间传输。

6.1 基本语法

  1. $ ftp 主机名 /IP #如果没有指定主机名,ftp 将给出提示符,等待用户输入命令

  2. #ftp命令 描述

  3. ls 列出远程机的当前目录

  4. cd 在远程机上改变工作目录

  5. lcd 在本地机上改变工作目录

  6. ascii 设置文件传输方式为 ASCII 模式

  7. binary 设置文件传输方式为二进制模式

  8. close 终止当前的 ftp 会话

  9. get (mget) 从远程机传送指定文件到本地机

  10. put (mput) 从本地机传送指定文件到远程机

  11. open 连接远程 ftp 站点

  12. quit 断开与远程机的连接并退出 ftp

  13. ? 显示本地帮助信息

  14. ! 转到 Shell

  15. prompt 1 关闭交互模式

复制

6.2 命令示例

  1. #ftp get (mget) 从远程机传送指定文件到本地机

  2. #wget

  3. $wget -P /tmp/ ftp://ftp.tao-ops.com:21/pub/README.md --ftp-user=user --ftp-password=ftppwd


  4. #curl有密码

  5. $curl ftp://name:passwd@machine.domain:port/full/path/to/file -O

  6. $curl -u name:passwd ftp://machine.domain:port/full/path/to/file -o xxx.file

复制

7. lrzsz

lrzsz是一个unix通信套件提供的X,Y,和ZModem文件传输协议,可以用在windows与linux 系统之间的文件传输,体积小速度快。

7.1 基本语法

  1. #安装

  2. $yum install lrzsz

  3. $man rz

  4. $man sz

复制

7.2 命令示例

若终端是SecureCRT,打开SecureCRT软件 -> Options -> session options -> X/Y/Zmodem 下可以设置上传和下载的目录;

  1. #下载 (从客户端上传文件到linux服务端)

  2. $rz

  3. #上传(发送文件到客户端)

  4. $sz /etc/passwd

复制

8. 传输工具总结

文件传输方法基于其自身的特点与优势均有其典型的适用场景:

  • rsync 更适用于大数据量的每日同步,拷贝的速度很快,相对 wget 来说速度快且安全高效。

  • ftp 作为最常用的入门式的文件传输方法,使用简单,易于理解,并且可以实现脚本自动化;

  • scp 利用 ssh 传输数据,并使用与 ssh 相同的认证模式,相对于 rcp 提供更强的安全保障;

  • wget,实现递归下载,可跟踪 HTML 页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构,适合实现远程网站的镜像;

  • curl 则适合用来进行自动的文件传输或操作,是一个很好的模拟用户在浏览器上的行为的工具;

  • nc nc功能强大,可以快速方便的在两台机器间传输文件或文件夹。

  • lrzsz 适用于小文件在linux服务器及客户机上传输。

参考:

  • CentOS7 FTP及Rsync服务搭建

  • https://www.ibm.com/developerworks/cn/linux/l-cn-filetransfer/

  • http://memcached.org/

  • https://www.cnblogs.com/misswangxing/p/11242859.html

  • https://blog.csdn.net/jinxingfeng_cn/article/details/24264693


最后修改时间:2019-12-17 12:28:37
文章转载自陶老师运维笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论