lftp札记

一般情况下我用的ftp客户端是filezilla,只因这几天没有办法删除空间里试用过的themes的目录,所以只好把lftp牵出来。自从听说过lftp的名字介绍之后,便对它心怀畏惧,不敢再深入了解使用方法,今天强制自己学习了一把,终于把它臣服了。摇一摇,晃当晃当响,嗯,有半壶了。以下为记录:

0丶获得帮助
所有的lftp终端内的命令,都可以用

lftp :~> help COMMAND_NAME

的方式来查看帮助信息。
另外,lftp支持tab自动补全,记不得命令时,使用tab键,就可以看到可能的选项。

1丶登录ftp

$ lftp username:password@ftp_site:port

也可以先不带用户名登录,然后在lftp终端下用login命令来用指定账号登录,密码不显示。
或者先不带任何参数运行lftp,然后在lftp终端下用open命令来登录ftp服务器,详情请参考帮助。

2丶查看文件与改变目录

lftp username@ftp.example.com:/> ls
lftp username@ftp.example.com:/> cd FTP_DIR

在lftp终端中,前面带一个l的命令例如lcd,指的是local,就是在本机的操作。而对应的没有这个l的,都是对ftp服务器的操作。
还有就是要执行本地console命令,也可以用前面带一个!的方式。这样,配合起来,远程ftp服务器、本地的操作都很方便。
例如,查看ftp上所有的以mp3为扩展名的文件:

lftp username@ftp.example.com:/> find . -name "*.mp3"

3丶下载
get当然是可以的,但是还可以:

lftp username@ftp.example.com:/> mget -c *.pdf

它表示把所有的pdf文件以允许断点续传的方式下载。m代表multi
再看一个例子

lftp username@ftp.example.com:/> mirror FTP_DIR

这表示将FTP_DIR目录整个的下载下来,子目录也会自动复制,这可以理解为镜像目录。
还是例子

lftp username@ftp.example.com:/> pget -c -n 10 FTP_FILE

表示最多10个线程以允许断点续传的方式下载FTP_FILE,c表示断点续传
线程可以通过设置pget:default-n的值而使用默认值。

4丶上传
相应的有put,mput,mirror,都是对上传的操作命令,和下载类似。
看下面这个例子

lftp username@ftp.example.com:/> mirror -R LOCAL_DIR

将本地目录以迭代(包括子目录)的方式上传到ftp服务器,即为反向镜像。

5丶模式设置

lftp username@ftp.example.com:/> set ftp:charset utf8

远程ftp服务器使用的字符编码为utf8,所以要在这里这样设置。

lftp username@ftp.example.com:/> set file:charset utf8

本地环境的字符编码为utf8,因此这里也要这样设置。
以上两项若设置不当,则会出现乱码。
其实不管是哪种服务端软件哪一种客户端软件,出现乱码均为以上两项未设置妥当。

lftp username@ftp.example.com:/> set ftp:passive-mode 1

使用被动模式登录,有些ftp服务器要求必须使用被动模式或者主动模式才可以登录,这个开关就是设置这个的。0代表不用被动模式。

6丶书签
其实命令行也可以有书签,在lftp终端提示符下:

lftp username@ftp.example.com:/> bookmark add FTP_SERVER_NAME

按以上命令就可以把当前正在浏览的ftp服务器用FTP_SERVER_NAME作为标签储存起来。以后在console下,直接

$ lftp FTP_SERVER_NAME

就可以自动填好用户名,密码,进入对应的目录了。

lftp username@ftp.example.com:/> bookmark edit

以上命令会调用编辑器手动修改书签。当然,也可以看到,这个书签其实就是个简单的文本文件。密码,用户名都可以看到。

7丶后台任务
这算是lftp最大的特色,可以理解为lftp内置了一个微型的shell

*添加后台任务
缺省情况下,按 Ctrl+z,正在执行的任务将转为后台执行
也可以在命令行末尾加&符号使任务在后台执行。

lftp username@ftp.example.com:/> queue get textfile.txt

表示向后台任务中添加一个新的任务

lftp username@ftp.example.com:/> queue start

要执行完这句才开始的,不然可就一直是任务队列而已。

*查看后台任务

lftp username@ftp.example.com:/> jobs -v

这将显示后台所有的任务,包括任务状态。

*删除后台任务

lftp username@ftp.example.com:/> wait 3

这将把后台任务当中的3号转为当前执行的状态,并从后台删除这个任务。
有一点需要说明一下,fg命令与wait命令等同。

但你要慎重执行下面这个语句,它将清空整个后台任务队列。

lftp username@ftp.example.com:/> kill all

8丶配置文件
它是这个文件
/etc/lftp.conf
当然,它也可以是这个文件
~/.lftp/rc
一般,我会添加这几行:

set ftp:charset utf8
set file:charset utf8
set pget:default-n 10
debug 3

这样,就不用每次进入都要打命令了。
其他的set可以自己tab然后help来看。