Linux 命令行技巧之: 服务器间传输文件的几种方式

󰃭 2016-11-28

环境

  1. 服务器 172.16.2.8,172.16.2.9, 用户名:root,密码:passwd
  2. 目录在 172.16.2.8 服务器上 /test
  3. 文件在 172.16.2.8 服务器上 /test/test1.log,/test/test2.log

从 172.16.2.8 传输到 172.16.2.9,反向也可以

命令行之 Linux 服务器之间传输/复制文件的几种方式

ssh 命令传输文件

# 当前在 172.16.2.8 机器上,从 172.16.2.8 传输单个文件到 172.16.2.9
# 使用 pv 可以显示传送进度条
pv /test/test1.log | ssh root@172.16.2.9 "cat - > /tmp/test1.log"

# 当前在 172.16.2.9 机器上,从 172.16.2.8 传输单个文件到 172.16.2.9
ssh root@172.16.2.8 "cat /test/test1.log" | cat - > /tmp/test1.log

# 传输目录(也可以用来压缩传输文件)
# 当前在 172.16.2.8 机器上,从 172.16.2.8 传输目录到 172.16.2.9
tar cjvf - /test | ssh root@172.16.2.9 "tar xjvf - -C /tmp"

rsync 命令传输文件

只同步有变化的文件,可以用来做增量同步

# 当前在 172.16.2.8 机器上,从 172.16.2.8 传输单个文件到 172.16.2.9
rsync -avz /test/test1.log root@172.16.2.9:/tmp/test1.log

# 当前在 172.16.2.9 机器上,从 172.16.2.8 传输单个文件到 172.16.2.9
rsync -avz root@172.16.2.8:/test/test1.log /tmp/test1.log

# 当前在 172.16.2.8 机器上,从 172.16.2.8 传输目录到 172.16.2.9
rsync -avz /test root@172.16.2.9:/tmp

scp 命令传输文件

# 当前在 172.16.2.8 机器上,从 172.16.2.8 传输单个文件到 172.16.2.9
scp /test/test1.log root@172.16.2.9:/tmp/

# 当前在 172.16.2.8 机器上,从 172.16.2.8 传输目录到 172.16.2.9
scp -r /test root@172.16.2.9:/tmp

nc 命令传输文件

# 当前在 172.16.2.8 机器上,从 172.16.2.8 传输单个文件到 172.16.2.9
# 首先在 172.16.2.9 上打开一个监听端口
nc -l -p 3333 > test1.log
# 其次在 172.16.2.8 上使用 nc 链接服务器传送文件
pv /test/test1.log | nc 172.16.2.9 3333

使用 python3 开启 http server

# 当前在 172.16.2.8 机器上,从 172.16.2.8 传输单个文件到 172.16.2.9
# 首先在服务器 172.16.2.8 上面开启 http server
python3 -m http.server 8888

# 然后从 172.16.2.9 上面使用 wget/curl/aria2 下载文件
wget http://172.16.2.8:8888/test1.log
curl -O http://172.16.2.8:8888/test1.log
aria2c http://172.16.2.8:8888/test1.log