前言
如果有图形界面的话 我们可以直接使用FileZilla
或者 SecureCRT
进行文件传输
但Linux
服务器都是不带图形界面的, 这个时候我们需要通过相关指令来处理
假设有两台公网的Linux
机器A和B, 我们需要从A传输文件至B
可以采用以下几种方式:
第一种 使用nc指令
操作如下:
服务器B开启文件端口监听:
1 | nc -l 3300 > aaa.tar //将接受的文件取名为aaa.tar |
服务器A传输文件:
1 | nc 服务器Bip 3300 < 需要传送的文件 |
第二种 使用scp指令
操作如下:
1 | scp -r 需要传输的目录 root@服务器ip:目标存放目录 |
第三种 使用rsync指令
操作如下:
1 | rsync -r 需要传输的目录 root@服务器Bip:目标存放目录 |
和scp
很相似, 比scp
多了一个排除子目录的功能:
1 | rsync -r -v --exclude 需要排除不进行传输的子目录 需要传输的目录 root@服务器Bip:目标存放目录 |
如果要同时排除多个目录 那么需要指定多次--exclude
如下:
1 | rsync -r -v --exclude 排除目录1 --exclude 排除目录2 需要传输的目录 root@服务器Bip:目标存放目录 |
第四种 使用wget工具
操作如下:
首先服务器B需要开启http
服务, 这里以python
为例:
1 | python -m http.server 3300 |
服务器A开始从B下载文件:
1 | sudo wget -bc --limit-rate=6M 0.0.0.0:3300/需要下载的文件 |
参数说明:
-b
: 后台执行-c
: 断点续传–limit-rate=6M
: 限速6M
总结
工具 | 优点 | 缺点 |
---|---|---|
nc | 采用tcp协议 占用系统资源小 速度快 | 安全性不高 操作相对繁琐 |
wget | 采用tcp协议 支持子目录排除 支持限速 断点续传 | 安全性不高操作相对繁琐 |
scp | 采用ssh协议 传输安全 支持限速 占用系统资源小 | 不支持子目录排除 |
rsync | 采用ssh协议 传输安全 速度比scp快 支持子目录排除 支持限速和本地复制 和断点续传 | 小文件众多时比较消耗资源 |
本地传输
使用scp
和rsync
不仅可以对两台服务器上的数据进行相互传输 还可以进行本地数据传输 比如将服务器上的数据下载到本地:
1 | rsync -r root@服务器IP:服务器目录 本地目录 |
或者
1 | scp -r root@服务器IP:服务器目录 本地目录 |
还可以将本地的数据上传到服务器 只需将前后两者反过来即可 比如:
1 | rsync -r 本地目录 root@服务器IP:服务器目录 |
或者
1 | scp -r 本地目录 root@服务器IP:服务器目录 |
断点续传
如果传输的文件比较大 可以采用断点续传的方式 然而scp
并不支持断点续传, wget
只能实现服务器之间数据传输以及本地从服务器拉取数据 无法做到将本地数据推到服务器
好在rsync
工具给我们提供一个用于断点续传的指令, 如下:
1 | rsync -r --partial --progress 本地目录 root@服务器IP:服务器目录 |
参数解释:
--partial
:保留因故没有完全传输的文件,以加快随后的再次传输,即断点续传--progress
: 在传输时显示传输过程
rsync
还允许我们这样写:
1 | rsync -r -P 本地目录 root@服务器IP:服务器目录 |
参数解释:
-P
:等价于--partial
和--progress
关于rsync目录排除不生效的问题
这种情况通常是目录路径不对的问题 比如:
1 | rsync -r -P --exclude=/root/songjian/auto root@服务器IP:/root/songjian songjian |
上面这种写法并不能正确排除目录 正确的写法应该如下:
1 | rsync -r -P --exclude=/songjian/auto root@服务器IP:/root/songjian songjian |
本文为作者原创 转载时请注明出处 谢谢
微信公众号二维码如下: