这里的计算机指的是广义上的计算机,包括但不限于家用电脑、服务器、手机、树莓派等等

scp

scp 使用的是 SSH 端口

1
2
3
4
5
6
7
8
# 拷贝本地文件testfile到192.168.1.100的/tmp目录下
scp testfile root@192.168.1.100:/tmp

# 拷贝本地文件夹到192.168.1.100的/tmp目录下
scp -r testfolder root@192.168.1.100:/tmp

# 拷贝远程到本地
scp root@192.168.1.100:/tmp/testfile .

ftp

ftp 控制端口是 21,用于账号密码认证以及协商端口等。
主动模式:数据端口是 20
被动模式:客户端可服务端协商一个端口

使用 Python 简单搭建一个 ftp 服务器

1
2
pip3 install pyftpdlib
python3 -m pyftpdlib -p 21

sftp

sftp 是安全的 ftp,走的是 SSH 协议

sftp 常用命令

命令 功能
cd path Change remote directory to ‘path’
get [-afpR] remote [local] Download file
help Display this help text
lcd path Change local directory to ‘path’
lls [ls-options [path]] Display local directory listing
lmkdir path Create local directory
ln [-s] oldpath newpath Link remote file (-s for symlink)
lpwd Print local working directory
ls [-1afhlnrSt] [path] Display remote directory listing
mkdir path Create remote directory
put [-afpR] local [remote] Upload file
pwd Display remote working directory
reget [-fpR] remote [local] Resume download file
reput [-fpR] local [remote] Resume upload file
rm path Delete remote file
rmdir path Remove remote directory
1
2
3
sftp root@192.168.1.100
# 可以用cd ls等命令,找到文件后使用get下载
get testfile

rsync

使用 ssh 协议传输

1
rsync -avz source/ user@remote_host:/destination

如果 ssh 有其他参数,需要特殊指定

1
rsync -avz -e 'ssh -p 2234' source/ user@remote_host:/destination

使用 rsync 协议传输

使用 rsync 协议需要对方安装 rsync 守护程序

使用 rsync://协议(默认端口 873)进行传输。具体写法是服务器与目标目录之间使用双冒号分隔::。

1
rsync -av source/ 192.168.122.32::module/destination

注意,上面地址中的 module 并不是实际路径名,而是 rsync 守护程序指定的一个资源名,由管理员分配。

如果想知道 rsync 守护程序分配的所有 module 列表,可以执行下面命令。

1
rsync rsync://192.168.122.32

rsync 协议除了使用双冒号,也可以直接用 rsync://协议指定地址。

1
rsync -av source/ rsync://192.168.122.32/module/destination

排除

1
rsync -av --exclude "snapshot" /var/lib/cass ./bak/

http

使用 python 搭建一个简单的 http 服务

1
python -m SimpleHTTPServer 8000
1
python -m http.server 8000

nc

优点:方便、可以使用 udp 端口被进行传输

在服务器上执行

1
2
nc -l 1234      # 监听tcp 1234端口
nc -lu 1234 # 监听udp 1234端口

在客户端执行

1
2
nc 10.0.0.131 1234      # 通过tcp连接服务器
nc 10.0.0.131 -u 1234 # 通过udp连接服务器

连接上后,在控制台输入文字,服务器端会显示

同样的,可以把控制台的数据重定向到文件,就可以实现文件的传输了

接受文件端:

1
nc -l 1234 > file.txt

传送文件端:

1
nc 10.0.0.131 1234 < file.txt

smb 或 nfs 等

搭建NFS服务

lrzsz

lrzsz 可以在连接终端的时候直接进行文件传输,比较方便,但是对终端有要求,在 windows 端有 xshell 可以支持,Linux 中 kde 的 konsole 可以支持。lrzsz 速度没有 scp 快,但是在连接了 ssh 的时候比较方便。比较适合传输小文件,大文件会比较容易出错。

xshell 甚至可以直接拖文件到终端窗口完成上传操作

远程服务器安装包

1
yum install -y lrzsz

上传文件:

1
rz

下载文件:

1
sz testfile

直接使用 SSH 加管道来传输

大家知道 Linux 管道可以传输数据,如果管道和 SSH 配合使用的话,也可以达到传输文件的效果,比如:

1
cat 1.txt| ssh iuxt@10.0.0.9 "cd /tmp && cat > 1.txt"

这样就是把主机上的 1.txt 文件传输到 10.0.0.9 的 tmp/1.txt 里面了。

还可以配合 tar 实现边压缩边传输:

1
tar zcv testfolder -f - | ssh iuxt@10.0.0.9 "cd /tmp && tar zxf -"