scp

上传/下载文件

$ scp ~/targe.tar.gz root@192.168.0.11:~/large.tar.gz
$ scp root@192.168.0.11:~/large.tar.gz  ~/targe.tar.gz

上传/下载目录:

$ scp -r ~/targe root@192.168.0.11:/root
$ scp -r root@192.168.0.11:~/targe ~/targe

rsync

经常用到的参数:

-a: archive mode,相当于-rlptgoD这7个选项

-r: --recursive
-v: verbose mode
-z: 压缩传输
-P: --partial --progress 断点续传和显示进度

-l, --links: 保留软链接
-p, --perms: 保持文件权限
-t, --times: 保持文件时间信息
-g, --group: 保持文件所属组信息
-o, --owner: 保持文件所属人信息
-D, --devices: 保持设备文件信息

--delete: 如果源端没有此文件,那么删除目的端的文件(必须与-r一起使用)

--exclude: 忽略文件

文件断点下载/上传:

$ rsync -P --rsh=ssh root@192.168.0.11:/root/large.tar.gz ~/targe.tar.gz
$ rsync -P --rsh=ssh ~/targe.tar.gz root@192.168.0.11:/root/large.tar.gz

目录断点下载/上传:

$ rsync -P --rsh=ssh -r root@192.168.0.11:/root/large ~/targe
$ rsync -P --rsh=ssh -r ~/targe root@192.168.0.11:/root/large

忽略文件

# Exclude a single file
$ rsync -avz --exclude 'file' source/ destination/

# Exclude a type of files
$ rsync -avz --exclude '*.typ' source/ destination/

# Exclude a folder
$ rsync -avz --exclude 'folder' source/ destination/

# Exclude multiple files or folders
$ rsync -avz --exclude '*.file_type' --exclude 'folder' source/ destination/

参考

后台运行:

# bg.sh
rsync -P --rsh=ssh -r root@192.168.0.11:/root/storage / &
$ chmod +x bg.sh
$ nohup ./bg.sh

管道传输

gzip -c file | ssh root@192.168.0.11 "gunzip -c - > file"

对 file 使用 gzip 压缩,-c 参数表示输出到 stdout;gunzip -c - 中的 - 表示接收从管道传进的 stdin

tar zcv file | ssh root@192.168.0.11 -p 22 'tar xz'

对 file 使用 tar 压缩,但是不输出到文件,而是通过管道传给 ssh

tar cf - /tmp/big_folder | ssh server 'tar xC /tmp/ -f -'

对 file 使用 tar 压缩, ssh

nc(netcat)

nc 可以在 2 台机器之间建立 tcp 或者 udp 连接,并在 2 个端口之间传输数据流

server:

$ nc -l port < filename

client:

$ nc server_ip port > filename

可以结合 dd 命令克隆磁盘分区,以下操作会克隆主机A的 /dev/vda 到主机B 的 /dev/sda

# 主机A执行
$ dd if=/dev/vda | gzip -c | nc -l 50522

# 主机B执行
$ nc server_ip 50522 | gzip -dc | dd of=/dev/sda

常用参数:

-l 用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其它地址发起连接
-p port	指定nc要使用的端口。若之前已指定-l,则这里的-p指定具体的侦听端口;若未指定-l,则表示向这个端口发起连接
-s hostname/ip-address,指定发送数据的源IP地址,适用于多网卡机器
-u 指定nc使用UDP协议,默认为TCP
-v 输出交互或出错信息

pv(pipe viewer)

pv 可以通过管道显示数据处理进度的信息。这些信息包括已经耗费的时间,完成的百分比(通过进度条显示),当前的速度,全部传输的数据,以及估计剩余的时间。

要使用 PV,需要配合合适的选项,把它放置在两个进程之间的管道。命令的标准输入将会通过标准输出传进来的,而进度会被输出到标准错误输出。

$ cat filename | pv -b | nc -l port
$ nc server_ip port | pb -b > filename

wget

$ wget -c -t 0 -O filename url