lftp是Linux下的一個ftp客戶端,用於登陸遠程的FTP服務器。使用它的mirror命令可以把本地的文件通過lftp備份到遠程FTP服務器上。
如果沒有lftp命令,需要先安裝:
yum install lftp
1、lftp登陸
lftp登陸常用格式:
lftp [-d] [-e cmd] [-p port] [-u user[,pass]] [site]
[-d]
在debug mode運行。
[-e cmd]
執行指定的命令。
[-p port]
指定連接端口。
[-u user[,pass]]
登陸的用戶名和密碼。
[site]
FTP服務器地址。
例如:
lftp -p 21 -u admin,123456 ftp.aaa.com
表示使用用戶名admin、密碼123456登陸ftp.aaa.com這個站點,端口為21。
簡便格式:
lftp user:password@site:port
例如:
lftp admin:[email protected]:21
同樣可以登陸。
隨後就和其它命令行的ftp工具一樣使用ftp內部命令進行控制。登陸後輸入help可以查看支持的命令。
2、lftp的mirror命令
lftp登陸成功後,使用mirror命令用來備份文件。
將遠程服務器上的文件備份到本地:
mirror [選項] [遠程目錄] [本地目錄]
將本地文件備份到遠程服務器上:
mirror -R [其它選項] [本地目錄] [遠程目錄]
常用選項:
-c, --continue :如果鏡像過程中連接中斷,重新開始。
-e, --delete :刪除不在遠程服務器上的本地文件。
-n, --only-newer :下載遠程服務器上的新文件,不能和-c一起用。
-R, --reverse :將本地文件鏡像傳輸到遠程服務器上。
-v, --verbose[=level] :設置監視級別,范圍0-3,0表示不輸出,3表示輸出全部。
舉例:
mirror -R --delete --only-newer --verbose /home/aaa.com /public_html/web/aaa.com
將本地/home/aaa.com目錄下的文件備份到遠程服務器/public_html/web/aaa.com目錄。
mirror --delete --only-newer --verbose /public_html/web /tmp
將遠程服務器上/public_html/web目錄下的文件備份到本地/tmp目錄下。
3、一條命令實現lftp登陸和mirror
使用lftp的-e選項,例如:
lftp -e "mirror -R --delete --only-newer --verbose /home/aaa.com /public_html/web/aaa.com" -p 21 -u admin,123456 ftp.aaa.com
登陸後自動執行-e選項中的命令。
注意:如果遠程FTP服務器是Pure-FTPd [privsep] [TLS],執行命令會報錯
WARNING: Certificate verification: Not trusted
WARNING: Certificate verification: The certificate's owner does not match hostname 'www.xxx.com'
並且停留在[Making data connection...],連接不上。
需要編輯lftp的/etc/lftp.conf:
vim /etc/lftp.conf
在最後加入:
debug 3
set ftp:ssl-auth TLS-P
set ftp:use-feat no
再次嘗試查看詳情是否有報錯。
PS:lftp默認使用PASV模式,如要使用PORT模式,登陸後執行set ftp:passive off,或者直接將其加入到/etc/lftp.conf中。
4、lftp多線程下載
lftp還可以做為一個多線程下載工具。
常用選項:
pget -n :設置使用線程數。
-c :斷點續傳。
舉例:
lftp -c "pget -n 10 http://sourceforge.net/projects/kvm/files/qemu-kvm/1.2.0/qemu-kvm-1.2.0.tar.gz"
5、lftp使用問題
1)使用lftp的mirror命令備份時報550錯
rm: Access failed: 550 dirname: Directory not empty
在lftp命令開頭添加:
set ftp:list-options -a
是因為該文件夾下有隱藏文件,服務器默認不顯示,所以刪不掉。
2)設置lftp超時時間和重試次數
在lftp命令開頭添加:
set net:timeout 10;set net:max-retries 2;set net:reconnect-interval-base 5;set net:reconnect-interval-multiplier 1;
綜合這兩點最終的命令為:
lftp -e "set net:timeout 10;set net:max-retries 2;set net:reconnect-interval-base 5;set net:reconnect-interval-multiplier 1;set ftp:list-options -a;mirror -R --delete --only-newer --verbose /home/aaa.com /public_html/web/aaa.com" -p 21 -u admin,123456 ftp.aaa.com