替代简陋的Linux FTP命令,使用免费开源的Linux FTP客户端LFTP,快速同步目录,多线程断点续传

替代简陋的Linux FTP命令,使用免费开源的Linux FTP客户端LFTP,快速同步目录,多线程断点续传

最近由于公司业务需要迁移两台Linux服务器,而服务器上存储着大量的Docker挂载卷,迁移时就需要对这些重要数据进行备份。刚好手上有一台几个T的FTP服务器,于是决定将数据备份到FTP服务器。

由于要备份的文件体积有几十个GB之巨,不方便进行打包压缩,最理想的是直接将本地目录同步到FTP服务器。

尝试使用Linux默认的ftp命令发现此命令功能较弱,仅支持文件上传下载等简单操作,并不能支持目录上传下载,经过一番Google后,我们发现lftp是一个不错的替代选项。

lftp 是一个免费开源且功能强大的Linux FTP客户端工具,它支持ftp, http, sftp, fish, torrent等网路协议,它支持命令补全,历史记录,允许多个后台任务执行等功能,它还有书签、排队、镜像、断点续传、多进程下载等功能,使用起来非常方便。

1. 安装

可以直接使用Linux包管理工具安装即可,如:

sudo yum install lftp -y # CentOS
sudo apt install lftp -y # Ubuntu

2. 基本使用

lftp [options] <site>
options:
 -f <file>           执行文件中的命令后退出
 -c <cmd>            执行命令后退出
 -e <cmd>            登录后后执行命令
 -u <user>[,<pass>]  用户名密码鉴权
 -p <port>           连接端口,默认21
site:                FTP服务器地址

# 使用 Colin用户登录到192.168.0.211 FTP服务器
lftp -u Colin,123123 192.168.0.211

3. 常用命令

lftp支持常见Shell命令,命令默认在服务端运行,多数情况下在命令前使用!则可以在本地执行。

命令功能备注
ls显示服务器文件列表!ls显示本地文件列表
cd切换服务器目录
lcd切换本地目录!cd不可用
pwd显示服务器当前目录lpwd!pwd均可显示当前本地目录
mkdir创建服务端目录
mv移动文件或目录
rm删除服务端文件或目录!rm删除本地文件或目录
get下载文件get -c init.sql #断点下载init.sql
mget下载多个文件mget -c *.txt #下载当前目录所有txt文件
put上传文件put -c init.sql #断点上传init.sql
mput上传多个文件mput -c *.txt #上传当前目录所有txt文件
mirror同步目录上传或下载目录

上传下载文件(get/put/mget/mput)可选参数:

-c      #支持断点续传
-E      #传输后删除源文件
-e      #传输前删除目标文件
-a      #指定传输为 ascii 模式,默认为二进制模式
-P N    #最大同时传输文件
-O      #指定本地或远程存放目录

同步目录(mirror)常用参数:

-c  #支持断点续传
-R  #默认为下载远程到本地,使用 -R 参数则会上传本地到远程,两者任一缺省则使用同名。
-n  #只下载较新的档案,可用于增量备份
-r  #只下载当前目录,不递归目录

# 断点下载服务端jira目录到到当前目录
mirror -c jira
# 断点上传本地confluence目录到服务器
mirror -c -R confluence

4.书签管理

bookmark list       #显示书签列表
bookmark add name   #保存当前连接为书签名字 name,下次打开可直接使用 lftp name
bookmark edit name  #编辑书签
bookmark del name   #删除书签

5.高级配置

lftp全局配置文件默认为/etc/lftp.conf,我们可以按需修改其全局设置,如修改编码,设置主动模式,忽略SSL错误等。

# 忽略SSL错误,可修复 Fatal Error: Certificate Verification: Not Trusted 
set ssl:verify-certificate no

# 启用主动模式,默认为被动模式。主动模式客户端开启数据传输端口,被动模式服务端开启数据传输端口
set  ftp:passive-mode  no

# 设置服务端编码
set  ftp:charset  "gbk"
# 设置客户端编码
set  file:charset  "UTF-8"