lftp是Linux下的一個ftp工具,支持ftp, ftps, http, https, hftp, fish, sftp, file, bittorrent等協議(支持https 和 ftps,必須編譯時和 openssl library 一塊兒編譯)。lftp 內建了 shell-like 的命令格式, 容許在背景同時執行多個命令(&)。全部背景執行的工做都是在同一個程序中(process), 能將前景執行的命令放到背景執行(Ctrl-z), 或從背景拿回前景執行(wait 或 fg), 甚至還能夠經由上個命令的傳回值來決定目前這個命令是否要執行(&& ||)。在結束 lftp 時, 若是還有程序執行中, lftp會將本身切換到no hup模式並放到背景執行,所以沒必要擔憂正在執行的任務會結束。android
一、配置
在用lftp訪問國內一些ftp服務器時,每每看到的中文是亂碼,這是因爲服務器和本地編碼不一致形成的。咱們只要在主目錄下新建一個文件~/.lftprc或者~/.lftp/rc,並在其中加入如下內容:
debug 3
set ftp:charset GBK
set file:charset UTF-8
#set ftp:passtive-mode no
#alias utf8 " set ftp:charset UTF-8"
#alias gbk " set ftp:charset GBK"
二、登陸服務器
cb@127:~$ lftp zdhz
lftp 23.65.2.16:~> user cb
口令:
三、下載
//指定下載文件的目標目錄,須要每一個文件以後用-o選項(小寫),不然上傳到服務器的當前目錄
lftp
cb@23.65.2.16:/working> get kaiti.rar -o ~/tmp 指揮信息系統軍事需求分析.doc -o ~/doc
1806382 字節 已傳輸
總共傳輸 2 個文件
//使用通配符下載多個文件
lftp zdhz
cb@23.65.2.16:/working> mget *.doc
202969 字節 已傳輸
總共傳輸 6 個文件
//指定下載的基目錄(base),使用-O選項,注意是大寫
lftp zdhz
cb@23.65.2.16:/> mget ebook/source* -O ~/tmp
52511692 字節, 在 5 秒中傳輸完畢 (10.96M/s)
總共傳輸 2 個文件
lftp
cb@23.65.2.16:/ebook> mget 十天學會PHP.rar 程序設計實踐.rar -O ~/tmp/
8004043 字節, 在 2 秒中傳輸完畢 (3.72M/s)
總共傳輸 2 個文件
//鏡像下載整個目錄
lftp zdhz
cb@23.65.2.16:/working> mirror network ~/tmp/
所有: 1 個目錄,9 個文件, 0 個符號連接
新建: 9 個文件, 0 個符號連接
1453557 字節 已傳輸
//多線程下載, -o 選項指定下載的目標目錄,注意是小寫。
lftp zdhz
cb@23.65.2.16:/> pget -n 4 ebook/source1.pdf ebook/source2.pdf -o ~/tmp
52514342 字節, 在 7 秒中傳輸完畢 (7.34M/s)
四、上傳
//指定上傳的目標目錄須要每一個文件以後用-o選項(小寫),不然上傳到服務器的當前目錄
lftp zdhz
cb@23.65.2.16:/> put source1.pdf -o ebook/ source2.pdf -o ebook/ Linux命令大全.chm
52866871 字節, 在 5 秒中傳輸完畢 (11.09M/s)
總共傳輸 3 個文件
//使用通配符上傳多個文件,注意:使用-O參數指定上傳的基目錄,要大寫
lftp zdhz
cb@23.65.2.16:/> mput source*.pdf -O ebook/
52511692 字節, 在 4 秒中傳輸完畢 (11.14M/s)
總共傳輸 2 個文件
//鏡像上傳整個目錄,可用於同步
lftp zdhz
cb@23.65.2.16:/> mirror -R ~/ebook/Linux/LFS/ ebook/
所有: 15 個目錄,137 個文件, 0 個符號連接
新建: 137 個文件, 0 個符號連接
4456290 字節, 在 6 秒中傳輸完畢 (688.9K/s)
lftp zdhz
cb@23.65.2.16:/> ls ebook/
total 0
drw-rw-rw- 1 user group 0 Sep 28 16:50 .
drw-rw-rw- 1 user group 0 Sep 28 16:50 ..
drw-rw-rw- 1 user group 0 Sep 28 16:50 LFS
五、刪除服務器上文件
//刪除多個文件
lftp zdhz
cb@23.65.2.16:/> rm ebook/source1.pdf Linux命令大全.chm
rm 成功, 刪除 2 個文件
//刪除整個目錄
lftp zdhz
cb@23.65.2.16:/> rm -r ebook/
rm 成功, 刪除 `ebook/'
//刪除某個目錄下的多個文件
lftp zdhz
cb@23.65.2.16:/> mrm ebook/*.pdf
rm 成功, 刪除 2 個文件
六、任務隊列
對於那些只能一個IP只能登陸一次的服務器,若是想同時下載多個不一樣目錄下的文件,就只能一次下載一個,等到下載完了第一個才能再切換到別的目錄去下載第二個, 這時 lftp 的 queue 派上用場了。
lftp
cb@23.65.2.16:/pub/Iso> queue
1. get rettcd.iso
1. get rettcd.iso
2. mirror Linux/
1. mirror Linux/
1 get rettcd.iso
'rettcd.iso' at 4772864 (9%) 3.00M/s eta:14s Receiving data
七、命令行下載
//多線程下載
$ lftp -c 'pget -n $Thread_num -c $URL -o $SAVE_PATH' &
//BitTorrent下載
$ lftp -c 'torrent ubuntu-14.04-dvd-amd64.iso.torrent' &
小結:
- 經常使用命令:cd, lcd, get, mget, put, mput, mirror, rm, mrm, pget, queue, jobs
- mget, mput, mrm可以使用通配符*匹配多個文件
- 默認mirror:set-permissions on,則mirror 會拷貝文件和目錄的(原有)權限,不然(off)利用文件系統建立文件和目錄的規則從新設置文件目錄的權限(文件666 & umask,目錄777 & umask);和-p(或—no-perms)將該變量設置爲off是等效的;建議在~/.lftprc中將該變量設置爲off狀態:set mirror:set-permission off
- -O指定mput和mget命令上傳或下載的基目錄,所以多個文件不用每一個文件都使用-o選項指定目標路徑。