最近由于公司业务需要迁移两台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"