lftp常用命令

基本用法

1、$ sudo apt-get install lftp //安装lftp

2、$ lftp //进入lftp

2、lftp :~> lftp 192.168.1.124 //(或直接输入ftp的网址)登录远程ftp

3、lftp 192.168.1.124:~> user root //输入ftp用户名root (匿名ftp不用输入用户名和密码)

4、Password: 111111 //输入ftp密码(不回显)

5、lftp [email protected]:/> mirror jsweb /opt/www  //将ftp上的jsweb(文件夹名称)下载到本地的/opt/www

 

终端常用命令:
ls 
显示远端文件列表(!ls 显示本地文件列表)。 
cd 
切换远端目录(lcd 切换本地目录)。 
get 
下载远端文件。 
mget 
下载远端文件(可以用通配符也就是 *)。 
pget 
使用多个线程来下载远端文件, 预设为五个。 
mirror 
下载/上传(mirror -R)/同步 整个目录。 
put 
上传文件。 
mput 
上传多个文件(支持通配符)。 
mv 
移动远端文件(远端文件改名)。 
rm 
删除远端文件。 
mrm 
删除多个远端文件(支持通配符)。 
mkdir 
建立远端目录。 
rmdir 
删除远端目录。 
pwd 
显示目前远端所在目录(lpwd 显示本地目录)。 
du 
计算远端目录的大小 

执行本地 shell的命令(由于lftp 没有 lls, 故可用 !ls 来替代) 
lcd 
切换本地目录 
lpwd 
显示本地目录 
alias 
定义别名 
bookmark 
设定书签。 
exit 
退出ftp 

lftp mirror的高级应用举例

mirror –delete –only-newer –verbose work /opt/bak/

自动备份服务器work文件夹,到本地opt/bak文件夹下,并且删除已经不存在的文件,并且只下载最新的文件,再给出详细的输出。

用 lftp 的 -e 选项,把命令直接接在 lftp 之后:

lftp -u username,password -e”mirror –delete –only-newer –verbose /work bak/”ftpIP

也可以用 at 选项指定备份的时间:

lftp at 01:00 -u username,password -e”mirror –delete –only-newer –verbose /work bak/” ftpIP

这样每天 1 点就会执行备份任务。

  lftpmirror这个命令的其他参数

 -c, --continue         支持断点续传if possible

 -e, --delete           如果远程目录下已经没有某个文件,而本地有,则删除这个文件。

     --delete-first     在下载新文件之前先删除旧的文件

 -s, --allow-suid       保留远程目录中设定的用户及组权限

     --allow-chown      设置下载文件的所有者和所属组

     --ignore-time      屏蔽时间判定,这样mirror只通过大小来判断文件,同步速度可以加快。

 -n, --only-newer       只下载新的文件,mirror的判定新文件是通过文件大小和修改时间来判定的(这时候-c不能使用)

 -r, --no-recursion     不下载子目录中的文件,即没有递归的功能

 -p, --no-perms         不设置下载后文件的访问权限

     --no-umask         don't apply umask to file modes #这个不知道怎么翻译

 -R, --reverse          上传到FTP

 -L, --dereference      download symbolic links as files #这个不知道怎么翻译

 -N, --newer-than=SPEC  只下载某个特定时间以后更新过的文件

 -P, --parallel[=N]     同时下载N个文件

 -i RX, --include RX    下载时包含的文件名称,RX表示正则表达式

 -x RX, --exclude RX    下载时不包含的文件名称,RX表示正则表达式

 -v, --verbose[=N]      关于操作的详细输出。

     --log=FILE         将已经执行过的lftp命令写入文件

     --script=FILE      将lftp命令写入文件,但不执行

     --just-print, --dry-run    same as --script=- #这个不知道怎么翻译

 

说到空闲超时,要明白的一点是,任何FTP客户端设定的超时时间都必须参考FTP服务器软件的空闲超时设置,也就是说如果客户端设置的时间值大于服务器端设置的时间值时,FTP客户端上设置的值是没意义的,因为在此之前FTP服务端已经断开了连接. 注意,FTP服务端空闲超时与FTP客户端空闲超时的处理是不一样的,这可以在日志中得到体现,一般来说标准的FTP服务器软件对于本身空闲超时会是一个421代码,按rfc定义为"Connection timed out",而客户端超时首先会发送一QUIT命令,然后服务端返回221成功代码(Goodbye). 如果可以自由调控FTP服务器,最快的方法当然将FTP服务器软件的超时设置调大,然后再来设置客户端软件,很多情况下我们是没有权限来操作FTP服务器软件的,而且我们要的是客户端一直连接而不超时,这个对FlashFXP等windows下地客户端来说设置是很简单的,设置间隔一定时间发送一"NOOP"指令就可以了,当然这个时间间隔得小于服务器的超时时间. 具体到lftp,虽然没有直接的设置选项,但由于lftp功能强大,组合一些命令还是可以实现的 

repeat 120 "quote 'NOOP'" &


实质是上每隔120s发送一NOOP指令('&'表示后台运行),repeat和quote都是lftp命令,可以看下lftp的man,lftp默认超时时间是3分钟(180s),所以一定要在超时前发送'NOOP'指令,120s还是有效的,当然,前提是服务端超时值应该比这个要大. 
要更改超时设置,可以修改~/.lftprc或者~/.lftp/rc,lftp在启动时会依次执行/etc/lftp.conf ~/.lftprc ~/.lftp/rc,不推荐直接修改/etc/lftp.conf 
可以看看~/.lftprc文件中的内容 


set net:reconnect-interval-base 10 
set net:reconnect-interval-max 300 
set net:reconnect-interval-multiplier 2 


lftp连接失败后重试间隔由这三个参数决定,连接失败时,重试处理流程基本如下: 
1. 如果是第一次重试,net:reconnect-interval-base 第一次连接失败时重试间隔,间隔reconnect-interval-base重试 
2. 每次重试间隔为:上次重试间隔 * reconnect-interval-multiplier,当计算出来的重试间隔超过reconnect-interval-max值时,重试间隔又恢复到reconnect-interval-base,相当于跳到了第一步. 
下面的设置基本上能保证重试间隔为1s: 


set net:reconnect-interval-base 1 
set net:reconnect-interval-max 3 
set net:reconnect-interval-multiplier 4 


在客户端看来,跟一直连接没多大区别,当然最完美的还是用在服务端未断开前发NOOP指令了,如果服务端超时时间比较长,也可以设置lftp的超时间隔  

set net:timeout 1h 

下面是一些lftp下载的例子

remote_ip = “192.168.0.1"
remote_path = "/home/smart/test/"
local_path = "/home/abc/Desktop/"
file_list = [vga.mp4, hello.mp4]
#无密码ftp下载
wget = "lftp -e \"set net:limit-rate 10000000;set net:timeout 3;set net:max-retries 1;set net:reconnect-interval-base 1;set net:reconnect-interval-max 5;set net:reconnect-interval-multiplier 1; open %s; mirror -c -x '.mp4' -i {} '%s' '%s'; ls '%s' > '%s/.listing'; quit\"".format(' -i '.join(file_list)) % (remote_ip, remote_path, local_path, remote_path, local_path)
os.system(wget)
# open 连接远程ftp地址
# mirror -c 下载整个文件夹,断点续传
# -x  后面正则表达式,不下载这些文件
# -i  后面正则表达式,下载这些文件  一起用可以下载某些MP4文件和其他所有文件
# ls remote_path > local_path/.listing  把远程文件所有文件名放到本地.listing文件中
# set net:limit-rate 10000000  最大使用宽带
# set net:timeout 3   超时时间3s
# set net:max-retries 1  最大重试次数
# set net:reconnect-interval-base 1    第一次连接失败时重试间隔
# set net:reconnect-interval-max 5   	最大重试时间间隔
# set net:reconnect-interval-multiplier 1   每次重试间隔为:上次重试间隔 * reconnect-interval-multiplier,当计算出来的重试间隔超过reconnect-interval-max值时,重试间隔又恢复到reconnect-interval-base,相当于跳到了第一步

#有密码ftp下载
username_passwd = "-u username,passwd"
#无密码时,可以是username_passwd 为""
wget = "lftp %s %s -e \"set net:limit-rate 10000000;set net:timeout 3;set net:max-retries 1;set net:reconnect-interval-base 1;set net:reconnect-interval-max 5;set net:reconnect-interval-multiplier 1; mirror -c -x '.mp4' -i {} '%s' '%s'; ls '%s' > '%s/.listing'; quit\"".format(' -i '.join(file_list)) % (username_passwd,remote_ip[0:-1], remote_path, local_path, remote_path, local_path)

 

你可能感兴趣的:(Python)