CentOS Linux lftp命令备份文件

18九/11 0

CentOS Linux lftp命令备份文件

lftp是Linux下的一个ftp客户端,用于登陆远程的FTP服务器。使用它的mirror命令可以把本地的文件通过lftp备份到远程FTP服务器上。

如果没有lftp命令,需要先安装:

yum install lftp

1、lftp登陆
lftp登陆常用格式:
lftp [-d] [-e cmd] [-p port] [-u user[,pass]] [site]

[-d]
在debug mode运行。

[-e cmd]
执行指定的命令。

[-p port]
指定连接端口。

[-u user[,pass]]
登陆的用户名和密码。

[site]
FTP服务器地址。

例如:
lftp -p 21 -u admin,123456 ftp.aaa.com
表示使用用户名admin、密码123456登陆ftp.aaa.com这个站点,端口为21。

简便格式:
lftp user:password@site:port

例如:
lftp admin:123456@ftp.aaa.com:21
同样可以登陆。

随后就和其它命令行的ftp工具一样使用ftp内部命令进行控制。登陆后输入help可以查看支持的命令。

2、lftp的mirror命令
lftp登陆成功后,使用mirror命令用来备份文件。

将远程服务器上的文件备份到本地:
mirror [选项] [远程目录] [本地目录]

将本地文件备份到远程服务器上:
mirror -R [其它选项] [本地目录] [远程目录]

常用选项:
-c, --continue :如果镜像过程中连接中断,重新开始。
-e, --delete :删除不在远程服务器上的本地文件。
-n, --only-newer :下载远程服务器上的新文件,不能和-c一起用。
-R, --reverse :将本地文件镜像传输到远程服务器上。
-v, --verbose[=level] :设置监视级别,范围0-3,0表示不输出,3表示输出全部。

举例:
mirror -R --delete --only-newer --verbose /home/aaa.com /public_html/web/aaa.com
将本地/home/aaa.com目录下的文件备份到远程服务器/public_html/web/aaa.com目录。

mirror --delete --only-newer --verbose /public_html/web /tmp
将远程服务器上/public_html/web目录下的文件备份到本地/tmp目录下。

3、一条命令实现lftp登陆和mirror
使用lftp的-e选项,例如:
lftp -e "mirror -R --delete --only-newer --verbose /home/aaa.com /public_html/web/aaa.com" -p 21 -u admin,123456 ftp.aaa.com
登陆后自动执行-e选项中的命令。

注意:如果远程FTP服务器是Pure-FTPd [privsep] [TLS],执行命令会报错
WARNING: Certificate verification: Not trusted
WARNING: Certificate verification: The certificate's owner does not match hostname 'www.xxx.com'
并且停留在[Making data connection...],连接不上。

需要编辑lftp的/etc/lftp.conf:

vim /etc/lftp.conf

在最后加入:

debug 3
set ftp:ssl-auth TLS-P
set ftp:use-feat no

再次尝试查看详情是否有报错。

PS:lftp默认使用PASV模式,如要使用PORT模式,登陆后执行set ftp:passive off,或者直接将其加入到/etc/lftp.conf中。

4、lftp多线程下载
lftp还可以做为一个多线程下载工具。

常用选项:
pget -n :设置使用线程数。
-c :断点续传。

举例:
lftp -c "pget -n 10 http://sourceforge.net/projects/kvm/files/qemu-kvm/1.2.0/qemu-kvm-1.2.0.tar.gz"

5、lftp使用问题
1)使用lftp的mirror命令备份时报550错
rm: Access failed: 550 dirname: Directory not empty

在lftp命令开头添加:
set ftp:list-options -a
是因为该文件夹下有隐藏文件,服务器默认不显示,所以删不掉。

2)设置lftp超时时间和重试次数
在lftp命令开头添加:
set net:timeout 10;set net:max-retries 2;set net:reconnect-interval-base 5;set net:reconnect-interval-multiplier 1;

综合这两点最终的命令为:
lftp -e "set net:timeout 10;set net:max-retries 2;set net:reconnect-interval-base 5;set net:reconnect-interval-multiplier 1;set ftp:list-options -a;mirror -R --delete --only-newer --verbose /home/aaa.com /public_html/web/aaa.com" -p 21 -u admin,123456 ftp.aaa.com

参考资料:
http://blog.chinaunix.net/space.php?uid=253473&do=blog&cuid=154733
http://heavenhades.blog.163.com/blog/static/1583886920075289154509/
http://www.cnblogs.com/LJ-fish/archive/2010/03/15/1686607.html




#!/bin/bash
source ~/.bash_profile


lftp jollychic:e8gFVc0Iq4TTPBPz@ftp.spl4cn.com:21  <<EOF


set ftp:use-feat true
mirror --delete --only-newer --verbose 


/data /data/edmdata 


EOF

### 解决方案 在 Linux 中遇到 `ftp: command not found` 的错误通常是因为系统的环境变量 PATH 中缺少 FTP 客户端的路径,或者该工具尚未安装。以下是可能的原因以及对应的解决方案: #### 原因分析 1. **FTP 工具未安装** 如果系统中没有安装 FTP 客户端,则会提示 `command not found`。可以通过检查是否存在 `/usr/bin/ftp` 或其他标准路径中的可执行文件来确认[^1]。 2. **PATH 环境变量配置不正确** 即使 FTP 客户端已安装,但如果其所在的目录不在当前用户的 PATH 变量中,也会导致此问题。例如,如果用户不是超级用户(sudoer),则可能存在权限不足的情况[^3]。 3. **Shell 配置文件缺失或损坏** 用户的 Shell 初始化脚本(如 `.bash_profile` 或 `.bashrc`)可能存在问题,未能正确加载必要的环境变量设置[^4]。 --- #### 解决方法 ##### 方法一:验证并安装 FTP 客户端 运行以下命令以检查是否已安装 FTP: ```bash which ftp ``` 如果没有返回任何结果,则说明 FTP 尚未安装。可以使用包管理器进行安装: - 对于基于 Debian 的系统(如 Ubuntu): ```bash sudo apt-get update && sudo apt-get install netkit-ftp ``` - 对于基于 RedHat 的系统(如 CentOS/Fedora): ```bash sudo yum install ftp ``` 完成安装后重新测试 FTP 是否可用。 ##### 方法二:调整 PATH 环境变量 如果 FTP 已经安装但仍无法识别,可能是由于 PATH 不包含 FTP 所在目录。编辑用户的 Shell 配置文件(`.bash_profile` 或 `.bashrc`),添加如下内容: ```bash export PATH=$PATH:/path/to/ftp/binary/directory ``` 保存更改后,通过以下命令使其生效: ```bash source ~/.bash_profile ``` ##### 方法三:修复 Shell 配置文件 当 `.bash_profile` 文件被意外修改或损坏时,可能导致环境变量丢失。建议备份现有文件后再恢复默认配置: ```bash cp ~/.bash_profile ~/.bash_profile.bak vi ~/.bash_profile ``` 确保其中至少包含以下基本设置: ```bash # Set environment variables export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ``` 对于 Oracle 用户或其他特定账户,还需注意是否有额外的自定义初始化脚本影响正常行为。 ##### 方法四:替代方案——使用 LFTP 作为更强大的 FTP 替代品,推荐尝试安装和使用 LFTP。它支持复杂的操作场景,并允许通过 Perl 脚本调用实现自动化任务[^2]: ```perl use strict; my ($ftpuser, $pass, $hostname) = ('username', 'password', 'example.com'); open(my $LFTP, '|-', "lftp -u $ftpuser,$pass -e \"set cmd:interactive false; open $hostname\"") or die "Failed to start lftp"; print $LFTP "mv source_file destination_dir\n"; # 使用 mv 命令移动文件 close($LFTP); ``` 以上代码片段展示了如何利用 Perl 和管道机制与 LFTP 进行交互。 --- ### 总结 上述四种方式涵盖了从基础到高级的不同层次解决问题的方法。优先考虑简单快捷的操作,比如直接安装 FTP;而对于复杂需求,则可以选择功能更为丰富的 LFTP 来满足业务目标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值