蛋疼地翻譯了一遍man lftp......
====================
lftp是個功能強大的文件傳輸工具,操作上很像shell,支持命令補全、歷史記錄、多任務后台執行,還有書簽、排隊、鏡像、斷點續傳、多進程下載等功能。
lftp支持ftp, ftps, http, https, hftp, fish, sftp, file等多種文件訪問方式(https和ftps方式只有lftp編譯集成了OpenSSL庫時才可用)。可以在open url命令中指定訪問方式,比如open http://www.us.kernel.org/pub/linux/. hftp是ftp-over-http-proxy協議的縮寫,即通過http代理的ftp訪問,設置ftp:proxy為http://proxy[:port]后會自動應用。fish是通過ssh連接到unix賬戶的協議。sftp是內置了ssh2的訪問協議。
lftp中的每項操作都是可靠的,非致命錯誤都會被忽略同時操作會被重新執行。比如下載中斷,它會重新從中斷點開始繼續下載;即便ftp服務器不支持斷點續傳,lftp會從頭開始重新下載文件知道文件傳輸完成。
lftp擁有類似shell的語法,支持並行在后台(&)運行命令,支持用()分組命令並將它們在后台執行。所有后台任務在同一個進程中執行。使用^Z(Ctrl+Z)將前台任務切換到后台執行,wait或fg(wait的別名)命令將后台任務切換到前台,使用jobs命令羅列正在執行的任務。一些命令(如cat, ls等)允許將輸出重定向至文件或通過管道傳送給別的命令。命令能根據前一命令的結束狀態有選擇性地執行(&&, ||)。
如果你在仍有任務未完成的情況下退出lftp, lftp將會把自己切換到nohup模式在后台繼續運行,直至任務完成。
lftp內置了鏡像功能(mirror命令)允許下載整個目錄,反向鏡像功能(mirror -R命令)允許上傳整個目錄到服務器上。鏡像功能同樣可用於同步兩個遠程服務器上的文件夾。
at命令在當前環境下指定在特定的時刻執行某些任務;queue命令將指定的命令在當前服務器上按順序執行;還有其他很多命令。
啟動時,lftp先后執行配置文件/etc/lftp.conf, ~/.lftprc, ~/.lftp/rc 。你可以在這些配置文件中增加alias或set命令。希望看到完整協議調試內容的朋友可以通過debug命令來啟動調試模式,如使用debug 3將看到所有的問候消息和錯誤消息。
lftp擁有大量的配置項,可以通過set -a命令來查看所有的配置項和值,set -d命令查看配置項的默認值。配置項可以使用縮寫並且省略前導符,只要名稱唯一。
如果編譯包括了OpenSSL (configure --with-openssl),那么lftp將內置有OpenSSL項目開發的軟件功能。
lftp命令
! shell command
運行shell或shell命令;如!ls將列出本地的當前文件夾下的內容。
alias [name [value]]
定義或取消name別名。設置value,別名name將被定義;忽略value,別名name將被取消。沒有參數,將羅列當前的所有別名。比如
1
2
alias dir ls -lF
alias less zmore
anon
設置用戶為匿名用戶,默認情況。
at time [ -- command ]
等到指定時間執行指定的命令。參見linux下的at命令。
bookmark [subcommand]
操作書簽,子命令如下:
- add <name> [<loc>] 將當前位置或指定位置以指定名稱添加到書簽
- del <name> 刪除指定名稱的書簽
- edit 啟動編輯器來編輯書簽文件
- import <type> 導入外部書簽
- list 羅列所有書簽(默認)
cache [subcommand]
操作本地內存緩存,子命令如下:
- stat 打印緩存狀態(默認)
- on|off 開啟或關閉緩存
- flush 清空緩存
- size lim 設置緩存大小限制,-1表示不限制
- expire Nx 設置緩存過期時間為N秒(x=s), 分鍾(x=m), 小時(x=h), 天(x=d)
cat files
羅列遠程目錄下的內容到標准輸出。
cd rdir
切換當前的遠程目錄。前一遠程目錄被存為-, 可以使用cd -切換到前一目錄。每個站點前一目錄會被保存到磁盤,所以即使重啟lftp后同樣可以執行open site; cd -命令。
chmod mode files
改變遠程文件的權限控制碼,mode必須為八進制數字。
close [-a]
關閉空閑鏈接。默認只關閉當前服務器連接,使用-a關閉所有空閑鏈接。
cls [OPTS] files...
獲取指定的文件或目錄信息,以OPTS參數指定的格式顯示結果。與ls的差別是,ls請求由服務器來格式化信息,cls由自身來格式化信息。通過help cls查看OPTS參數的使用。
command cmd args...
執行執行的命令,忽略別名。
debug [-o file] level|off
切換調試默認是level級別或關閉調試。使用-o重定向調試信息輸出到文件。
echo [-n] string
輸出string字符串,使用-n不輸出換行符。
eval [-f format ] args...
不指定-f,將把args作為命令執行;使用-f,args將被轉換為新的命令。format可以包括普通字符和占位符$0 ... $9, $@(與參數args對應)
exit [bg] [top] [kill] [code]
退出lftp或將lftp切換到后台執行如果仍有活動任務。如果當前沒有活動任務,code會被作為lftp的結束狀態傳給操作系統。如果code被忽略,最后一條命令的退出代碼將被作為code。
exit bg強制lftp切換到后台執行如果cmd:move-background是false。exit top終止最上層shell(lftp的內部命令)的執行。exit kill在退出前結束所有任務。選項可以別結合使用,比如at 08:00 -- exit top kill & 將在8:00結束所有任務並退出lftp。
fg
wait的別名。
find [directory]
羅列指定目錄(默認為當前目錄)及所有子目錄下的所有文件。作為服務器沒有ls -R功能的補充。輸出可進行重定向。
ftpcopy
過時的命令,使用一下命令取代:
- get ftp://... -o ftp://...
- get -O ftp://... file1 file2...
- put ftp://...
- mput ftp://.../*
- mget -O ftp://... ftp://.../*
get [-E] [-a] [-c] [-O base] rfile [-o lfile] ...
獲取遠程文件rfile並保存為本地文件lfile。如果沒有-o參數,文件將被保存為與rfile同名的本地文件。可以通過指定多個rfile和-o lfile來獲取多個文件。如需使用通配符,請用mget代替get命令。舉例:
- get README
- get README -o debian.README
- get README README.mirrors
- get README -o debian.README README.mirrors -o debian.mirrors
- get README -o ftp://some.host.org/debian.README
- get README -o ftp://some.host.org/debian-dir/ (end slash is important)
get1 [OPTS] rfile
傳輸單個文件,選項:
- -o <lfile> 目標文件名(默認為同rfile中的文件名)
- -c 繼續,重新獲取
- -E 在傳輸完成后刪除源文件
- -a 使用ascii模式(默認為二進制模式)
- --source-region=<from-to> 傳輸源文件的指定區塊
- --target-position=<pos> 指定目標文件的數據寫入位置
glob [-d] [-a] [-f] command patterns
取出當前目錄下符合patterns的文件或文件夾名,結果串接后傳給command命令。比如glob echo *。選項:
- -f 文件(默認)
- -d 文件夾
- -a 所有類型
help [cmd]
打印cmd命令的幫助信息;未指定cmd時將打印所有可用命令。
jobs [-v]
羅列正在運行的任務。-v顯示詳細信息,可指定多個-v。
kill all|job_no
刪除job_no指定的任務或所有任務。job_no可通過jobs命令查看。
lcd ldir
切換當前的本地目錄為ldir。前一本地目錄被存為-, 可以使用lcd -切換到前一目錄。
lpwd
打印當前本地的工作目錄。
ls params
羅列遠程文件。可以將此命令的輸出重定向至文件或通過管道傳送給其他命令。默認,ls的輸出會被緩存,使用rels或cache flush來查看新的羅列結果。
mget [-c] [-d] [-a] [-E] [-O base] files
獲取滿足通配符條件的文件,選項:
- -c 繼續,重新獲取
- -d 創建與文件路徑中目錄名相同的目錄,並保存文件到對應目錄中
- -E 在傳輸完成后刪除源文件
- -a 使用ascii模式(默認為二進制模式)
- -O <base> 指定文件被保存的目錄或URL
mirror [OPTS] [source [target]]
將源文件夾鏡像到目標文件夾。如果目標文件夾以/結尾,原文件夾名稱會被附加到目標文件夾名稱之后。源和目標都可以是指向文件夾的URL。
- -c, --continue 續傳上次的任務
- -e, --delete 刪除遠程目錄上不存在的文件
- --delete-first 在傳輸新文件之前刪除舊的文件
- --depth-first 進入下一層目錄優先於文件傳輸
- -s, --allow-suid 根據遠程站點設置suid/sgid比特位
- --allow-chown 嘗試將自己設置為文件所有者和所有組
- --ascii 使用ascii方式傳輸(隱含了--ignore-size)
- --ignore-time 決定是否下載時忽略時間因素
- --ignore-size 決定是否下載時忽略文件大小因素
- --only-missing 只下載缺少的文件
- --only-existing 只下載已經存在於目標文件夾中的文件
- -n, --only-newer 只下載新文件(-c參數無法工作)
- --no-empty-dirs 不創建空文件夾(隱含了--depth-first)
- -r, --no-recursion 不進入子文件夾
- --no-symlinks 不創建符號鏈接
- -p, --no-perms 不設置文件權限
- --no-umask 不使用文件預設權限
- -R, --reverse 反向鏡像(上傳文件)
- -L, --dereference 將符號鏈接作為文件下載
- -N, --newer-than=SPEC 只下載比指定時間晚的文件
- --on-change=CMD 只要有文件或文件夾存在差異就執行命令CMD
- --older-than=SPEC 只下載比指定時間早的文件
- --size-range=RANGE 只下載大小在指定區間上的文件
- -P, --parallel[=N] 並行下載N個文件
- --use-pget[-n=N] 使用pget傳輸每個文件
- --loop 循環知道找不到差異
- -i RX, --include RX 包括相匹配的文件
- -x RX, --exclude RX 不包括相匹配的文件
- -I GP, --include-glob GP 包括相匹配的文件
- -X GP, --exclude-glob GP 不包括相匹配的文件
- -v, --verbose[=level] 冗長操作
- --log=FILE 將執行的lftp命令寫入文件FILE
- --script=FILE 將lftp命令寫入文件FILE,但不執行
- --just-print, --dry-run 與--script=-相同
- --use-cache 使用緩存目錄列表
- --Remove-source-files 傳輸完成后刪除源文件
- -a 與--allow-chown --allow-suid --no-umask相同
使用-R時,第一個目錄為本地目錄,第二個目錄為遠程目錄。如果第二個目錄被忽略,將采用第一個目錄的目錄名。如果兩個目錄都被忽略,將采用當前的本地和遠程目錄。如果目標目錄以/結尾,那么源目錄名將被加到目標目錄上。
RX是擴展的正則表達式,具體語法可參考egrep命令。
GP是通配符規則,比如*.zip。
包含和不包含選項可以被多次使用。符合以下規則之一的文件將被鏡像傳輸:(1)符合包含規則而不符合之后的不包含規則;(2)不符合任何規則,但第一條為不包含規則。目錄匹配時包括結尾的/。
注意:符號鏈接(軟鏈接)不會被傳輸到遠程服務器上,因為無法被FTP協議傳輸。要上傳鏈接指向的文件,請使用mirror -RL命令(將符號鏈接視為普通文件)。
對於--newer-than選項,你可以使用文件或時間作為參數。時間參數的格式同at命令,如now-7days、week age等。如果指定為文件,將采用文件的修改時間。
冗長輸出級別可以通過--verbose=level選項或者使用多個-v選項進行設定,比如-vvv。冗長輸出級別為:
- 0 - 無輸出(默認)
- 1 - 打印動作
- 2 - +打印不刪除的文件名(當沒有采用-e選項時)
- 3 - +打印
--only-newer關閉文件大小比較,只上傳/下載新的文件,即使文件大小存在差異,默認情況下舊的文件會被新的文件代替。
當用URL代替目錄時,可以對兩台服務器上的目錄進行鏡像操作。只要可以,會自動使用FXP在FTP服務器之間進行文件傳輸。
一些ftp服務器默認隱藏了.開頭的文件(如.htaccess),只會在LIST命令使用-a選項時顯示。在這種情況下,使用設置set ftp:list-options -a。
mkdir [-p] dir(s)
創建遠程目錄。如果使用-p參數,將創建路徑的所有相關目錄。
module module [ args ]
使用dlopen函數加載已知模塊。如果模塊名中不包含/,將在module:path指定的位置搜索模塊。參數會被傳給module_init函數,具體技術細節可查看README.modules。
more files
與cat files | more命令相同。
mput [-c] [-d] [-a] [-E] [-O base] files
上傳符合通配符規則的文件。默認使用本地文件名作為遠程的文件名,可以使用-d選項修改。
- -c 繼續上傳
- -d 創建與文件路徑中目錄名相同的目錄,並將文件放到對應目錄,而不是當前目錄
- -E 傳輸成功后刪除源文件
- -a 使用ascii模式(默認為二進制模式)
- -O <base> 指定目標目錄或URL
mrm file(s)
與glob rm命令相同,刪除符合通配符規則的文件。
mv file1 file2
將文件file1重命名為file2。
nlist [args]
列出遠程文件名。
open [-e cmd] [-u user[,pass]] [-p port] host|url
打開一台ftp服務器。
pget [OPTS] rfile [-o lfile]
使用多個連接下載同一文件,可提高下載速度,但會加重網絡和服務器的負載,影響其他用戶。盡量只在緊急時使用。選項:
- -c 繼續傳輸;需要文件lfile.lftp-pget-status
- -n maxconn 設置最大連接數(默認使用pget:default-n設置)
put [-E] [-a] [-c] [-O base] lfile [-o rfile]
將文件lfile上傳到遠程並存為rfile。如果忽略-o參數,lfile中的文件名將被作為遠程的文件名。如需擴展通配符,請使用mput。
- -o <rfile> 指定遠程文件名(默認為lfile中的文件名)
- -c 繼續上傳,需要遠程文件的覆蓋權限
- -E 傳輸完成后刪除源文件
- -a 使用ascii模式(默認為二進制模式)
- -O <base> 指定目標目錄或URL
pwd [-p]
打印當前的遠程URL。使用-p參數在URL中顯示密碼。
queue [-n num ] cmd
將指定命令放入隊列來依次執行。每個站點維護一個命令隊列。-n參數將指定命令放入隊列中指定位置。不要將cd或lcd命令加入隊列,這可能使lftp執行出現混亂。應在queue命令之前使用cd/lcd切換目錄。允許通過queue wait <jobno>命令將正在執行的任務加入隊列,任務將繼續執行即使它不是隊列中的第一個。
queue stop將停止隊列,它將不再執行任何新的命令,但正在執行的命令會繼續執行。你可以使用queue stop命令來創建一個空的暫停隊列。queue start命令可以重新啟動命令執行。當你退出lftp時,它將自動啟動所有暫停的隊列。
沒有指定參數的queue命令將創建一個暫停隊列或者打印隊列狀態。
queue --delete|-d [index or wildcard expression]
刪除隊列中的一個或多個條目。如果沒有指定參數,會刪除隊列中的最后一個條目。
queue --move|-m <index or wildcard expression> [index]
將指定條目移動到隊列的指定位置;如沒有指定位置,將會移動到末尾。
- -q 不輸出任何提示
- -v 輸出詳細的提示
- -Q 以特定格式輸出,可以被重新加入隊列
01
02
03
04
05
06
07
08
09
10
11
> get file &
[1] get file
> queue wait 1
> queue get another_file
> cd a_directory
> queue get yet_another_file
queue -d 3 刪除隊列中的第3個條目
queue -m 6 4 移動隊列中的第6個條目到第4個條目之前
queue -m "get*zip" 1 移動所有符合get*zip的命令道隊列最開始(條目順序不變)
queue -d "get*zip" 刪除所有所有符合get*zip的命令
quote cmd
FTP協議下,將直接向服務器發送命令。使用時需要注意:它將導致遠程處於未知狀態,導致重新連接,即使重新連接狀態仍然無法被重置。
HTTP協議下,語法為quote <command> [<args>],command可以為set-cookie或post。
1
2
3
4
open http://www.site.net
quote set-cookie "variable=value; othervar=othervalue"
set http:post-content-type application/x-www-form-urlencoded
quote post /cgi-bin/script.cgi "var=value&othervar=othervalue" > local_file
FISH協議下,將直接向服務器發送命令。使用此方法可以在服務器上執行任何命令。但執行的命令不能需要輸入和在新行的開頭打印###,否則將導致協議失去同步。
1
2
open fish://server
quote find -name \*.zip
reget rfile [-o lfile]
與get -c命令相同。
rels [args]
與ls命令相同,但忽略緩存。
renlist [args]
與nlist命令相同,但忽略緩存。
repeat [ -c <count>] [[-d] delay] [command]
重復執行命令。在命令執行之間會加入延時,默認為1秒。-c選項用來限制重復次數。--while-ok將使命令返回非零值時退出循環;--until-ok將使命令返回零值時退出循環。比如:
1
2
repeat at tomorrow -- mirror
repeat 1d mirror
reput lfile [-o rfile]
與put -c命令相同。
rm [-r] [-f] files
刪除遠程文件。如需要使用通配符規則,請使用mrm代替。-r指定遞歸刪除目錄,-f 取消錯誤消息提示。
rmdir dir(s)
刪除遠程目錄。
scache [session]
羅列緩存的會話,或切換到指定會話。
set [var [val]]
將變量設定為指定值。如果值被忽略了,則取消這個變量。如未指定變量名,將顯示被改變的設置變量。可以使用以下選項修改顯示:
- -a 羅列所有的設置,包括默認值
- -d 只羅列默認值
site site_cmd
執行站點命令site_cmd,可以重定向輸出。
sleep interval
休眠指定時間間隔然后退出。時間間隔默認以秒為單位,但可以后綴m, h, d來對應表示分鍾、小時、天。
slot [name]
選擇特定的slot,或者羅列所有已分配的slot。slot是與服務器的一個連接,有點像虛擬控制台。你可以創建連接到不同服務器的多個slot,並可在不同的slot之間進行切換。你同樣可以使用slot:name作為偽URL表示那個slot位置。
默認情況下,可以使用Meta-0 至 Meta-9(往往使用Alt鍵代替Meta鍵)快捷鍵來快速切換0-9的slot。
source file
source -e command
執行file文件中的命令或是有特定command返回的命令。
1
2
source ~/.lftp/rc
source -e echo help
suspend
暫停lftp進程。注意:傳輸任務同樣或被暫停直到你使用shell的fg或bg命令繼續執行這個進行。
user user [pass]
user URL [pass]
使用特定的信息登陸遠程ftp。如果你對URL指定了用戶名,輸入的密碼將被緩存起來供以后使用。
version
打印lftp版本信息。
wait [jobno]
wait all
等待特定任務終止。如果忽略jobno,將等待最后一個后台任務終止。wait all等待所有任務終止。
zcat files
與cat相同,但通過zcat過來每個文件。
zmore files
與more相同,但通過zcat過來每個文件。
lftp設置
lftp啟動時執行~/.lftprc 和~/.lftp/rc。你可以在這兩個文件中加入alias或set命令。如果你想看到完全的協議調試過程,可以使用debug來打開調試。
系統級的啟動文件為/etc/lftp.conf。
lftp擁有眾多設置項,可以通過set -a命令查看所有設置項及它們的值。
lftp命令選項
-d 切換到調試模式
-e commands 執行指定的命令,並且不退出
-p port 使用執行端口進行連接
-u user[,pass] 使用執行的用戶名和密碼進行連接
-f script_file 執行文件中的命令並且退出
-c commands 執行指定的命令並且退出
環境變量
以下環境變量將被lftp使用:
HOME 作為~的擴展
SHELL 在!命令時決定使用哪個shell來運行
PAGER 作為頁面名稱,在more和zmore命令中使用
http_proxy, https_proxy 作為初始時http:proxy, hftp:proxy, https:proxy的值
ftp_proxy 作為初始時ftp:proxy或hftp:proxy的值(由環境變量中的URL協議指定)
no_proxy 作為初始時的net:no-proxy值
LFTP_MODULE_PATH 作為初始時的module:path值
LFTP_HOME 用於定位用戶配置文件的目錄,如未設置將使用~/.lftp
相關文件
/etc/lftp.conf 系統級啟動文件。實際位置由--sysconfdir配置項決定。
~/.lftp/rc, ~/.lftprc 這些文件在/etc/lftp.conf之后被執行。
~/.lftp/log 用於記錄lftp運行於后台nohup模式時的日志。
~/.lftp/bookmarks 用戶保存lftp中的書簽。
~/.lftp/cwd_history 用於保存每個站點的當前工作目錄。
~/.netrc 用於保存站點的用戶名和密碼。