runsisi

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  45 随笔 :: 15 文章 :: 26 评论 :: 0 Trackbacks
Lftp是一个功能强大的下载工具,它支持访问文件的协议: ftp, sftp,ftps, http, https, hftp, fish.(其中ftps 和https需要在编译的时候包含openssl库)。llftp的界面非常想一个shell: 有命令补全,历史记录,允许多个后台任务执行等功能,使用起来非常方便。它还有书签、排队、镜像、断点续传、多进程下载等功能。

相关配置文件:

/etc/lftp.conf
全局配置文件,实际位置依赖系统配置文件目录,可能在/etc,也可能在/usr/local/etc

~/.lftp/rc, ~/.lftprc
用户配置文件,将在/etc/lftp.conf之后执行,所以这里面的设置会覆盖/etc/lftp.conf中的设置,貌似.lftprc没用,而下边的配置文件都与.lftp有关,不如直接建立.lftp目录及rc文件

lftp 缺省不会显示 ftp 服务器的欢迎信息和错误信息,这在很多时候不方便,因为你有可能想知道这个服务器到底是因为没开机连不上,还是连接数已满。如果是这样,你可以在 ~/.lftp/rc 里写入一行
debug 3
就可以看到出错信息了。

更多的配置选项请查man手册或在lftp界面内用命令 set -a 获得。

~/.lftp/log
当lftp转为后台非挂起模式执行时,输出将重定向到这里

~/.lftp/bookmarks
这是lftp存储书签的地方,可以lftp查看bookmark命令

~/.lftp/cwd_history
这个文件用来存储访问过的站点的工作目录

登录ftp服务器:

lftp ftp://user:password@site:port
lftp user:password@site:port
lftp site -p port -u user,password
lftp site:port -u user,password

上面的几种方式都能正常工作,不过密码都是明文,这样不太安全。没关系
lftp user@site:port
系统会提示输入password

如果在命令行不输入站点名称,则必须在进入到lftp界面后用open命令打开
也可以先不带用户名登录,然后在接口界面下用login命令来用指定账号登录,密码不显示

在用lftp访问国内一些ftp服务器时,往往看到的中文是乱码,这是由于服务器和本地编码不一致造成的。我们只要在主目录下新建文件~/.lftp/rc,并在其中加入以下内容:
debug 3
set ftp:charset GBK
set file:charset UTF-8
也可以在/etc/lftp.conf 中添加:
set ftp:charset gbk
set file:charset utf8
set pget:default-n 5

常用命令:

下载
get当然是可以的,还可以
mget -c *.pdf
把所有的pdf文件以允许断点续传的方式下载。m代表multi

mirror aaa/
将aaa目录整个的下载下来,子目录也会自动复制

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

上传
同样的put,mput,都是对文件的操作,和下载类似。

mirror -R 本地目录名
将本地目录以迭代(包括子目录)的方式反向上传到ftp site。

模式设置
file:charset (string)
设置本地字符集,初始化默认读取系统locale
ftp:charset (string)
ftp服务器端字符集,默认为空,即本地系统locale同,只在server不支持utf-8时用

我的设置:
set ftp:charset "gbk"
set sftp:charset "UTF-8"
set file:charset "UTF-8"
ftp:passive-mode (boolean)

默认为被动模式
设置ftp的被动模式,在有防火墙或者转发路由时用
lftp在被动模式用PASV命令,而不用主动模式的PORT命令
passive mode:lftp自己建立到ftp server的连接
active mode: ftp server建立数据传输的连接

我的设置:
# default: use passive mode
set ftp:passive-mode yes
## 202.38.64.22, use active mode
set ftp:passive-mode/202.38.64.22 no
set ftp:passive-mode/203.38.64.41 no
set ftp:passive-mode/166.111.153.78 no

set ftp:charset gbk
远程ftp site用gbk编码,对应的要设置为utf8,只要替换gbk为utf8即可。

set file:charset utf8
本地的charset设定为utf8,如果你是gbk,相应改掉。

set ftp:passive-mode 1
使用被动模式登录,有些site要求必须用被动模式或者主动模式才可以登录,这个开关就是设置这个的。0代表不用被动模式。

set net:limit-rate 10000,10000
限制上传下载各为10KB/s

!
执行本地 shell的命令(由于lftp 没有 lls, 故可用 !ls 来替代)

下载单个文件和一组文件,断点续传用-c参数
lftp dsec.pku.edu.cn:/> get -c ls-lR.txt
lftp dsec.pku.edu.cn:/> mget *.txt

镜像(反镜像即上传)一个目录,可以用多个线程并行镜像一个目录(--parallel=N)
lftp dsec.pku.edu.cn:/> mirror incoming local_name
lftp dsec.pku.edu.cn:/> mirror -R local_name
lftp dsec.pku.edu.cn:/> mirror --parallel=3 incoming local_name

多线程下载,类似网络蚂蚁的功能;缺省是5个线程
lftp dsec.pku.edu.cn:/> pget -n 4 ls-lR.txt

后台任务管理

缺省情况下,按 Ctrl+z,正在执行的任务将转为后台执行,也可以在命令行末尾加&符号使任务在后台执行。用jobs命令可以查看所有的后台进程。用 queue命令可以排队新的任务。如果退出lftp是还有任务在后台执行,lftp将转为后台执行。


其它用法
lftp支持类似bash的管道操作,例如用下面的命令可以将ftp服务器上的特定目录下(也可以是整个站点)所有文件的大小存到本地的文件ls.txt中
lftp dsec.pku.edu.cn:/> du incoming > ls.txt

!shell command
anon 匿名登录
at time [-- command] 在给定时间执行命令.eg:‘at 08:00 -- exit top kill &
cls和ls区别:ls是由服务器来格式化输出,cls则是由lftp自己来格式化,类似shell中的ls命令

command cmd args... 直接运行cmd,忽略alias

exit [bg] [top] [kill]

find 可遍历目录,用于缺乏ls -R文件的服务器

glob [-d] [-a] [-f] command pattern:用于模式扩展,普通的lftp命令没有模式扩展功能

-f plain files(default)
-d directories
-a all files
kill all | job_no 杀死全部job或指定job号

mirror [OPTS] [source [target]]
-r, --no-recursion don’t go to subdirectorie
- R, --reverse reverse mirror (put files)
queue [-n num ] cmd
quote cmd
rels [args] 同ls,只是不用cache。
repeat [ -c ] [[-d] delay] [command]
重复执行command,默认间隔1秒
-c 重复次数
--while-ok breaks loop when command returns non-zero exit code;
--until-ok’ breaks on zero exit code.

Examples:
repeat at tomorrow -- mirror
repeat 1d mirror


ftp中的bookmark命令,是将配置写到~/.lftp/bookmarks文件中;我们可以直接修改此文件,快速登陆ftp服务器。

例如添加一行:
echo 'uftp ftp://user:passwd@ftp.ubuntu.org.cn' >> ~/.lftp/bookmarks

lftp的bookmarks文件书写格式为:
别名<空格>ftp://user:passwd@site:port

以后要登陆ubuntu-cn的ftp,只要执行:
lftp uftp

在lftp终端中,前面带一个l的命令例如lcd,指的是local,就是在本机的操作,而对应的没有这个l的,都是对ftp site的操作。还有就是要执行本地终端命令,也可以用前面带一个!的方式。这样,配合起来,终端,本地的操作都很放遍。
例如,查看ftp上所有的以mp3为扩展名的文件:
代码:
find . -name "*.mp3"
posted on 2009-03-23 15:16 runsisi 阅读(1652) 评论(0)  编辑 收藏 引用 所属分类: linux

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理