全部博文(118)
分类: LINUX
2009-12-14 19:12:18
一直想找一个在linux里能与FlashFXP比肩的ftp客户端,试过了若干种GUI的ftp
client,有free的也有nonfree的,但实际用过得同志应该清楚,说它们是lj,恐怕伤了作者的心,但又实在找不出其他形容。转了一圈又回到
lftp,没有GUI,对于初学者来说,虽然有一点点痛苦,但只要想想,lftp能在众多client中屹立不倒这么多年,而且至今仍然是linux
里最首推崇的利器,足以说明他的功能和易用性都是不错的。我的经验是,花一点时间来学lftp是值得的,不要再徒劳地寻找GUI FTP
Client,在unix世界里,没有FlashFXP! 首先来说一下lftp登录站点的操作,有好几种方式,都非常简单。 1. 一气呵成式 $ lftp (ftp://)user:password@site:port 比较常用于网页或bbs上给出的现成链接,缺点是password显示为明文,推荐在月黑风高、四下无人的环境里偷偷输入...如果不幸背后有人 $ lftp (ftp://)user@site:port 然后系统会提示输入password,这是就是******了 2. 老实巴交型 $ lftp site -p port -u user,password 这是lftp说明文档里给出的标准方式,这一招比较费体力,请根据自己身体情况量力而行。如果体能一般,可以 $ lftp site:port -u user,password 似乎是略微省事一点儿,我一般也用这种方法 3. 五短之中暗藏一长 这是一个递归嵌套的招式%¥#@!×& $ lftp lftp:~>lftp user:password@site:port 就是说在lftp控制台里进行操作,和在系统终端是完全一样的,你仍然可以毫无顾忌地用使用前面两招,同时也可以用o或open代替lftp,后面站点用户名密码的格式也可以根据自己偏好输入 4. 终极大招 每次登录都狂敲一行user:password@site:port,长年累月,就算李铁来了也扛不住。所以还是要让lftp把常用的站点记下来,就象FlashFXP里的站台管理器,在lftp里,叫做bookmark,具体的咱们日后再说 登 录完成第一件事就是想看看这个服务器上有什么好东东。操作和终端里是一样的,ls就是列出服务器目录。有一点要说明,第一次ls之后,目录表就被保存到了 本地cache,这样再次ls就不能得到这个目录下最新的列表,这时可以用rels重新下载目录表。这里的cache是lftp的默认设置,目的无非就是 更快的得到列表,有时却不符和你的使用习惯。可以用 cache on和cache off开关cache,也可以用cache flush来清空cache。更改目录也是cd,没什么可说的,lftp也支持tab匹配功能,大大减少了劳动强度。 lftp 支援了六种模式, ftp, ftps, http, https, hftp, fish and file(当然了 https 和 ftps 的支援必须在编译就和 openssl library 一起编译好)。 lftp 内建了 shell-like 的命令格式, 允许在背景同时执行多个命令(&)。所有背景执行的工作都是在同一个程序中(process), 能将前景执行的命令放到背景执行(Ctrl-z), 或从背景拿回前景执行(wait 或 fg), 甚至还可以经由上个命令的传回值来决定目前这个命令是否要执行(&& ||)。 在结束 lftp 时, 如果还有程序执行中, lftp 会将自己切换到 no hup 模式並放到背景执行。因此不必担心执行 lftp 当中无法登出。 ! 可执行本地端 shell 中的命令, 如 !ls /usr/local/bin/由於 lftp 並没有 lls(显示本地端档案列表的指令), 故可用 !ls 来替代。 alias [] 定义别名 alias less more alias reconnect "close; cd ." 直接输入 alias 即可看到目前定义了那些别名。如果只输入 alias name 的话, 则是取消 name 这个别名。 bookmark SUBCMD 设定书籤, 可将目前站台及所在目录设成书籤, 下次可直接进来, 不用再 cd 来 cd 去的 bookmark add name 用来新增名称为 name 的书籤 bookmark del name 删除名称为 name 的书籤 bookmark list 显示目前有设定那些书籤(另外直接打 bookmark 和 bookmark list 的结果一样) bookmark edit 呼叫编辑器修改书籤 (~/.lftp/bookmarks) cd 切换远端目录 cache SUBCMD 管理 lftp 的 cache rels [] 从 cache 中显示远端档案列表 rels 则不会从 cache 中读取 recls opts [path/]pattern 从 cache 中显示远端的档案列表, 应该算是 ls 的加强版, 有很多参数可用,应该是可用来产生各种不同>的档案列表以供其他程式使用。 recls 则不会从 cache 中读取 du options 计算远端整个目录佔用容量 get OPTS -o 抓取远端档案 get rfile -o lfile 抓 rfile 到本地改名为 lfile -c 为续传 -E 抓档完成後, 将远端的档案砍了 -a 为 ascii mode, 预设为 binary mode -O 设定 base directory 为本地端放档案的目录 mget OPTS 下载远端档案(可用 wildcard expansion 也就是 *) pget OPTS -o 使用多个连结来下载档案, 预设为五个。 -n 3 为叁个连结 jobs -v 显示目前有那些程序在背景执行 -v 显示详细的资讯(-v 可多加幾个来显示更详细的资讯) lcd 切换本地端的目录 mirror OPTS remote [local] 下载整个目录(楼上的 get 只能用来抓档案) -c 续传 -e 这个要小心一些, 比较远端和本地端的档案, 假如远端没有的, 就将本地端的档案删除, 也就是将本地端和远端资料同步。 -R 上传整个目录 -n 只下载较新的档案 -r 不用递迴到目录中 --parallel=n 同时下载 n 个档案(预设一次只下载一个) module name args 载入模组 put OPTS -o 上传档案 mput OPTS 上传档案(可用 wildcard expansion 也就是 *) mv 将远端的 file1 改名为 file2 mrm 用 wildcard expansion 方式来删除远端档案 open OPTS 开启某个站台 open -u , -p site queue OPTS [] 将 cmd 放到伫列中等待执行 -d index 将编号为 index 的 job 删除 -m index new_index 将编号为 index 的 job 移至编号 new_index, 插队专用。 -n index 在编号 index 之前新增一个 job wait [] 将背景执行中的程序移至前景(也可用 fg) kill all| 删除全部的 jobs 或 job_no repeat delay command 每隔 delay 秒, 重覆执行 command, 预设是每隔一秒 rm -r -f 移除远端档案 mkdir -p 建立远端目录 rmdir -f 移除远端目录 set OPT [] 设定变数 直接键入 set 可看目前定义了那些变数 source 读取 file, 並执行 file 中的命令(应该是和 bash 中的 source 命令是一样的吧) debug [|off] -o 设定 debug level 为 level -o 将输出导向至 file exit [|bg] 结束 lftp 此时若还有 jobs, 则会将 lftp 放至背景执行, 继续未完成的工作 history -w file-r file-c|-l cnt 和 bash 中的 history 功能一样 renlist [] 只显示远端的档名 pwd -p 显示目前远端所在目录 -p 连登入密码也显示 scache [] 只打 scache 显示目前所有的 session, 加上 session_no 可切换至其他的 session, 对於同时开启多个站台或同个站台不同目录间切换。 小 弟有遇过某些站台, 一个 ip 只允许登入一次的,如果想同时抓好幾个档案在不同目录下,就只能一次抓一个,等到抓完了才能再切换到别的目录去抓第二个, 这时 lftp 的 queue 就派上用场了。一般下了 get, mget 的话, 档案就直接开始下载了, 这时就无法再切换到其他目录了, 因此, 先将 queue 给停止, 首先下个 queue, 按 enter, 再下个 jobs 即可看到目前 queue 是停止的。这时再将要抓的东东一个个加入 queue 中, 等到要抓的东东都进入 queue 後, 再下 queue start 一次全部传送, 这样子可省去随时注意档案是否抓完,迼成困扰。 lftp localhost:/pub/Iso> queue lftp localhost:/pub/Iso> jobs 0 queue (ftp://localhost) Queue is stopped. lftp localhost:/pub/Iso> queue get rettcd.iso lftp localhost:/pub/Iso> jobs 0 queue (ftp://localhost) Queue is stopped. Commands queued: 1. get rettcd.iso lftp localhost:/pub/Iso> queue mirror Linux/ lftp localhost:/pub/Iso> jobs 0 queue (ftp://localhost) Queue is stopped. Commands queued: 1. get rettcd.iso 2. mirror Linux/ lftp localhost:/pub/Iso> queue start lftp localhost:/pub/Iso> jobs 0 queue (ftp://localhost) Now executing: 1 get rettcd.iso Commands queued: 1. mirror Linux/ 1 get rettcd.iso `rettcd.iso' at 4772864 (9%) 3.00M/s eta:14s Receiving data 相关文件 /etc/lftp.conf 全局配置文件,实际位置依赖系统配置文件目录,可能在/etc,也可能在/usr/local/et c ~/.lftp/rc, ~/.lftprc 用户配置文件,将在/etc/lftp.conf之后执行,所以这里面的设置会覆盖/etc/lftp.conf中的设置。 lftp 缺省不会显示 ftp 服务器的欢迎信息和错误信息,这在很多时候不方便,因为你有可能想知道这个服务器到底是因为没开机连不上,还是连接数已满。如果是这样,你可以在 ~/.lftprc 里写入一行 debug 3 就可以看到出错信息了。 更多的配置选项请查man手册或在lftp界面内用命令 set -a 获得。 ~/.lftp/log 当lftp转为后台非挂起模式执行时,输出将重定向到这里 ~/.lftp/bookmarks 这是lftp存储书签的地方,可以lftp查看bookmark命令 ~/.lftp/cwd_history 这个文件用来存储访问过的站点的工作目录 碰到一个中文字符集显示的问题, Remote FTP Server 的 Charset 是 gb2312 的, 我若直接 ls, 所有中文字符都是乱码, 根本没有办法使用. 要这样给一个参数才行: lftp ryun@ ftp:charset gb2312 然后再 ls 一下看看, 是不是亲切多了 ^____^ 这里还有一个方法, 针对经常使用中文字符集FTP的朋友可以这样来设定配置文件: touch ~/.lftp/rc echo 'debug 4' >> ~/.lftp/rc echo 'set ftp:charset GBK' >> ~/.lftp/rc 现在 lftp 后直接支持中文字符显示 无法被动模式连接,转为主动模式就可以列目录了:在 lftp 登录后执行: set ftp:passive-mode no |