两台计算机直接传输文件的几种方式
这里的计算机指的是广义上的计算机,包括但不限于家用电脑、服务器、手机、树莓派等等
scp
scp 使用的是 SSH 端口
1 | # 拷贝本地文件testfile到192.168.1.100的/tmp目录下 |
ftp
ftp 控制端口是 21,用于账号密码认证以及协商端口等。
主动模式:数据端口是 20
被动模式:客户端可服务端协商一个端口
使用 Python 简单搭建一个 ftp 服务器
1 | pip3 install pyftpdlib |
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 | sftp root@192.168.1.100 |
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 | nc -l 1234 # 监听tcp 1234端口 |
在客户端执行
1 | nc 10.0.0.131 1234 # 通过tcp连接服务器 |
连接上后,在控制台输入文字,服务器端会显示
同样的,可以把控制台的数据重定向到文件,就可以实现文件的传输了
接受文件端:
1 | nc -l 1234 > file.txt |
传送文件端:
1 | nc 10.0.0.131 1234 < file.txt |
smb 或 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 -" |