wget是linux上的命令行的下載工具。這是一個GPL許可證下的自由軟件。Linux wget支持HTTP和FTP協議,支持代理服務器和斷點續傳功能,可以自動遞歸遠程主機的目錄,找到合乎條件的文件並將其下載到本地硬盤上;若是必要,Linux wget將恰當地轉換頁面中的超級鏈接以在本地生成可瀏覽的鏡像。因爲沒有交互式界面,Linux wget可在後臺運行,截獲並忽略HANGUP信號,所以在用戶推出登陸之後,仍可繼續運行。一般,Linux wget用於成批量地下載Internet網站上的文件,或製做遠程網站的鏡像。php
2、實例html
下載下載192.168.1.168首頁而且顯示下載信息Linux wget -d http://192.168.1.168下載192.168.1.168首頁而且不顯示任何信息wget -q http://192.168.1.168下載filelist.txt中所包含的連接的全部文件wget -i filelist.txtlinux
下載到指定目錄wget -P/tmp ftp://user:passwd@url/file把文件file下載到/tmp目錄下。Linux wget是一個命令行的下載工具。對於咱們這些 Linux 用戶來講,幾乎天天都在使用它。下面爲你們介紹幾個有用的 Linux wget 小技巧,可讓你更加高效而靈活的使用 Linux wget。web
*shell
$ wget -r -np -nd http://example.com/packages/centos
這條命令能夠下載 http://example.com 網站上 packages 目錄中的全部文件。其中,-np 的做用是不遍歷父目錄,-nd 表示不在本機從新建立目錄結構。瀏覽器
*緩存
$ wget -r -np -nd --accept=iso http://example.com/centos-5/i386/bash
與上一條命令類似,但多加了一個 --accept=iso 選項,這指示Linux wget僅下載 i386 目錄中全部擴展名爲 iso 的文件。你也能夠指定多個擴展名,只需用逗號分隔便可。服務器
*
$ wget -i filename.txt
此命令經常使用於批量下載的情形,把全部須要下載文件的地址放到 filename.txt 中,而後 Linux wget就會自動爲你下載全部文件了。
*
$ wget -c http://example.com/really-big-file.iso
這裏所指定的 -c 選項的做用爲斷點續傳。
*
$ wget -m -k (-H) http://www.example.com/
該命令可用來鏡像一個網站,Linux wget將對連接進行轉換。若是網站中的圖像是放在另外的站點,那麼可使用 -H 選項。
3、參數
代碼:
$ wget --helpGNU Wget 1.9.1
,非交互式的網絡文件下載工具。用法:Linux wget[選項]... [URL]...長選項必須用的參數在使用短選項時也是必須的。
啓動:
-V, --version 顯示 Wget 的版本而且退出。
-h, --help 打印此幫助。
-b, -background 啓動後進入後臺操做。
-e, -execute=COMMAND 運行‘.wgetrc’形式的命令。
日誌記錄及輸入文件:
-o, --output-file=文件 將日誌消息寫入到指定文件中。
-a, --append-output=文件 將日誌消息追加到指定文件的末端。
-d, --debug 打印調試輸出。
-q, --quiet 安靜模式(不輸出信息)。
-v, --verbose 詳細輸出模式(默認)。
-nv, --non-verbose 關閉詳細輸出模式,但不進入安靜模式。
-i, --input-file=文件 下載從指定文件中找到的 URL。
-F, --force-html 以 HTML 方式處理輸入文件。
-B, --base=URL 使用 -F -i 文件選項時,在相對連接前添加指定的 URL。
下載:
-t, --tries=次數 配置重試次數(0 表示無限)。
--retry-connrefused 即便拒絕鏈接也重試。
-O --output-document=文件 將數據寫入此文件中。
-nc, --no-clobber 不更改已經存在的文件,也不使用在文件名後添加 .#(# 爲數字)的方法寫入新的文件。
-c, --continue 繼續接收已下載了一部分的文件。
--progress=方式 選擇下載進度的表示方式。
-N, --timestamping 除非遠程文件較新,不然再也不取回。
-S, --server-response 顯示服務器迴應消息。
--spider 不下載任何數據。
-T, --timeout=秒數 配置讀取數據的超時時間 (秒數)。
-w, --wait=秒數 接收不一樣文件之間等待的秒數。
--waitretry=秒數 在每次重試之間稍等一段時間 (由 1 秒至指定的 秒數不等)。
--random-wait 接收不一樣文件之間稍等一段時間(由 0 秒至 2*WAIT 秒不等)。
-Y, --proxy=on/off 打開或關閉代理服務器。
-Q, --quota=大小 配置接收數據的限額大小。
--bind-address=地址 使用本機的指定地址 (主機名稱或 IP) 進行鏈接。
--limit-rate=速率 限制下載的速率。
--dns-cache=off 禁止查找存於高速緩存中的 DNS。
--restrict-file-names=OS 限制文件名中的字符爲指定的 OS (操做系統) 所容許的字符。
目錄:
-nd --no-directories 不建立目錄。
-x, --force-directories 強制建立目錄。
-nH, --no-host-directories 不建立含有遠程主機名稱的目錄。
-P, --directory-prefix=名稱 保存文件前先建立指定名稱的目錄。
--cut-dirs=數目 忽略遠程目錄中指定數目的目錄層。
HTTP 選項:
--http-user=用戶 配置 http 用戶名。
--http-passwd=密碼 配置 http 用戶密碼。
-C, --cache=on/off (不)使用服務器中的高速緩存中的數據 (默認是使用的)。
-E, --html-extension 將全部 MIME 類型爲 text/html 的文件都加上 .html 擴展文件名。
--ignore-length 忽略「Content-Length」文件頭字段。
--header=字符串 在文件頭中添加指定字符串。
--proxy-user=用戶 配置代理服務器用戶名。
--proxy-passwd=密碼 配置代理服務器用戶密碼。
--referer=URL 在 HTTP 請求中包含「Referer:URL」頭。
-s, --save-headers 將 HTTP 頭存入文件。
-U, --user-agent=AGENT 標誌爲 AGENT 而不是 Wget/VERSION。
--no-http-keep-alive 禁用 HTTP keep-alive(持久性鏈接)。
--cookies=off 禁用 cookie。
--load-cookies=文件 會話開始前由指定文件載入 cookie。
--save-cookies=文件 會話結束後將 cookie 保存至指定文件。
--post-data=字符串 使用 POST 方法,發送指定字符串。
--post-file=文件 使用 POST 方法,發送指定文件中的內容。
HTTPS (SSL) 選項:
--sslcertfile=文件 可選的客戶段端證書。
--sslcertkey=密鑰文件 對此證書可選的「密鑰文件」。
--egd-file=文件 EGD socket 文件名。
--sslcadir=目錄 CA 散列表所在的目錄。
--sslcafile=文件 包含 CA 的文件。
--sslcerttype=0/1 Client-Cert 類型 0=PEM (默認) / 1=ASN1 (DER)
--sslcheckcert=0/1 根據提供的 CA 檢查服務器的證書
--sslprotocol=0-3 選擇 SSL 協議;0=自動選擇,
1=SSLv2 2=SSLv3 3=TLSv1
FTP 選項:
-nr, --dont-remove-listing 不刪除「.listing」文件。
-g, --glob=on/off 設置是否展開有通配符的文件名。
--passive-ftp 使用「被動」傳輸模式。
--retr-symlinks 在遞歸模式中,下載連接所指示的文件(連至目錄則例外)。
遞歸下載:
-r, --recursive 遞歸下載。
-l, --level=數字 最大遞歸深度(inf 或 0 表示無限)。
--delete-after 刪除下載後的文件。
-k, --convert-links 將絕對連接轉換爲相對連接。
-K, --backup-converted 轉換文件 X 前先將其備份爲 X.orig。
-m, --mirror 等效於 -r -N -l inf -nr 的選項。
-p, --page-requisites 下載全部顯示完整網頁所需的文件,例如圖像。
--strict-comments 打開對 HTML 備註的嚴格(SGML)處理選項。
遞歸下載時有關接受/拒絕的選項:
-A, --accept=列表 接受的文件樣式列表,以逗號分隔。
-R, --reject=列表 排除的文件樣式列表,以逗號分隔。
-D, --domains=列表 接受的域列表,以逗號分隔。
--exclude-domains=列表 排除的域列表,以逗號分隔。
--follow-ftp 跟隨 HTML 文件中的 FTP 連接。
--follow-tags=列表 要跟隨的 HTML 標記,以逗號分隔。
-G, --ignore-tags=列表 要忽略的 HTML 標記,以逗號分隔。
-H, --span-hosts 遞歸時可進入其它主機。
-L, --relative 只跟隨相對連接。
-I, --include-directories=列表 要下載的目錄列表。
-X, --exclude-directories=列表 要排除的目錄列表。
-np, --no-parent 不搜索上層目錄。
4、實例:用Wget批量下載遠程FTP服務器上的文件
昨天買了個VPS,把虛擬主機遷移到VPS了,遷移過程確定是要轉移數據的。之前虛擬主機遷移數據的模式是很是低效率的,舊主機打包下載->新主機上傳再解壓縮,因爲家庭網絡帶寬很是低,並且ADSL的上行速率512kbps萬年不變,致使之前遷移網站絕對是體力活...
如今有了VPS,有了shell,這個過程就無比簡單了,藉助機房的大帶寬,直接機房對機房互傳文件看着簡直就是一種享受啊
好了,講一下方法:
一、舊虛擬主機打包備份整站 site.tar.gz
二、在VPS的shell中利用wget下載舊虛擬主機中的site.tar.gz,使用FTP協議
wget --ftp-user=username --ftp-password=password -m -nh ftp://xxx.xxx.xxx.xxx/xxx/xxx/site.tar.gz</p> <p>wget --ftp-user=username --ftp-password=password -r -m -nh ftp://xxx.xxx.xxx.xxx/xxx/xxx/*
上面就是命令了,FTP用戶名密碼參數不解釋;
-r 可選,表示遞歸下載,若是直接下載整個目錄就須要該參數;
-m 表示鏡像,不解釋;
-nh表示不生成那一堆層級目錄,直接從當前目錄開始顯示,很是好的參數;
後面是ftp的地址,斜槓後的 * 表示下載該目錄下的全部文件,若是隻是一個文件,直接輸入文件名便可。
5、Q&A
A.使用wget工具linux因此的主要版本都自帶了Linux wget這個下載工具.bash$ wget http://place.your.url/here它還能控制ftp來下載整個web站點的各級目錄,固然,若是你不當心,可能會把整個網站以及其餘和他作連接的網站所有下載下來.bash$ wget -m http://target.web.site/subdirectory因爲這個工具具備很強的下載能力,因此能夠在服務器上把它用做鏡像網站的工具.讓它按照」robots.txt」的規定來執行.有不少參數用來控制它如何正確地作鏡像,能夠限制連接的類型和下載文件的類型等等.例如:只下載有聯繫的連接而且忽略GIF圖片:
bash$ wget -m -L –reject=gif http://target.web.site/subdirectory
Linux wget也可以實現斷點續傳(-c參數),固然,這種操做是須要遠程服務器支持的.
bash$ wget -c http://the.url.of/incomplete/file
能夠把斷點續傳和鏡像功能結合起來,這樣能夠在之前斷過屢次的狀況下繼續鏡像一個有大量選擇性文件的站點.如何自動實現這個目的咱們在後面會討論得更多.
若是你以爲下載時總是斷線會影響你辦公的話,你能夠限制Linux wget重試的次數.
bash$ wget -t 5 http://place.your.url/here
這樣重試五次後就放棄了.用」-t inf」參數表示永遠不放棄.不停地重試.
B.那對於代理服務該怎麼辦呢?可使用http代理的參數或者在.wgetrc配置文件裏指定一個如何經過代理去下載的途徑.可是有這麼一個問題,若是經過代理來進行斷點續傳的話可能會有幾回失敗.若是有一次經過代理下載的過程發生中斷,那麼代理服務器上緩存裏保存是那個完整的文件拷貝. 因此當你用」wget -c」來下載剩餘部分的時候代理服務器查看它的緩存,並錯誤地認爲你已經下載了整個文件.因而就發出了錯誤的信號.這個時候你能夠用添加一個特定的請求參數來促使代理服務器清除他們的緩存:
bash$ wget -c –header=」Pragma: no-cache」 http://place.your.url/here
這個」–header」參數可以以各類數字,各類方式添加。經過它咱們能夠更改web服務器或者代理服務器的某些屬性。有些站點不提供外部鏈接的文件服務,只有經過同一個站點上其餘的一些頁面時內容纔會被提交。這個時候你能夠用加上」Referer:」參數:bash$ wget –header=」Referer: http://coming.from.this/page」 http://surfing.to.this/page有些特殊的網站只支持某種特定的瀏覽器,這個時候能夠用」User-Agent:」參數bash$ wget –header=」User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)」 http://msie.only.url/here
C.那我怎麼設定下載時間呢?若是你須要在你的辦公電腦上經過和其餘同事共享的一個鏈接來下載一些很大的文件,並且你但願你的同事不會由於網絡速度的減慢而收到影響,那你就應該儘可能避開高峯時段。固然,不須要在辦公室裏等到因此人都走掉,也不須要在家裏用完晚飯後還惦記着要上網下載一次。用at來就能夠很好的定製工做時間:bash$ at 23:00warning: commands will be executed using /bin/shat> wget http://place.your.url/hereat> press Ctrl-D這樣,咱們設定了下載工做在晚上11點進行。爲了使這個安排可以正常進行,請確認atd這個後臺程序正在運行。
D.下載要花不少時間?
當你須要下載大量的數據,並且你又沒有享有足夠的帶寬,這個時候你會常常發如今你安排的下載任務尚未完成,一天的工做卻又要開始了。
做爲一個好同事,你只能停掉了這些任務,而開始另外的工做。而後你又須要反覆地重複使用」wget -c」來完成你的下載。這樣確定太繁瑣了,因此最好是用crontab來自動執行。建立一個純文本文件,叫作」crontab.txt」,包含下面的內容:0 23 * * 1-5 wget -c -N http://place.your.url/here0 6 * * 1-5 killall wgetz這個crontab文件指定某些任務按期地執行。前五列聲明是何時執行這個命令,而每行的剩餘部分則告訴crontab執行什麼內容。
前兩列指定了天天一到晚上11點就開始用Linux wget下載,一到早上6點就中止一切Linux wget下載。第三四列的*表示每月的每一天都執行這個任務。第五列則指定了一個星期的哪幾天來執行這個程序。 –」1-5″表示從星期一到星期五。這樣在每一個工做日的晚上11點,下載工做開始,到了上午的6點,任何的Linux wget任務就被停掉了。你能夠用下面的命令來執行
crontab:bash$ crontab crontab.txt
Linux wget的這個」-N」參數將會檢查目標文件的時間戳,若是匹配了,下載程序就會中止,由於它說明整個文件已經下載徹底了。用」crontab -r」能夠刪除這個計劃安排。我已經屢次採用這種方法,經過共享的電話撥號來下載過不少的ISO鏡像文件,仍是比較實用的。
E.如何下載動態變化的網頁
有些網頁天天都要根據要求變化好幾回.因此從技術上講,目標再也不是一個文件,它沒有文件長度.所以」-c」這個參數也就失去了意義.例如:一個PHP寫的而且常常變更的linux週末新聞網頁:
bash$ wget http://lwn.net/bigpage.php3
我辦公室裏的網絡條件常常不好,給個人下載帶了很大的麻煩,因此我寫了個簡單的腳原本檢測動態頁面是否已經徹底更新了.
#!/bin/bash
#create it if absent
touch bigpage.php3
#check if we got the whole thing
while ! grep -qi bigpage.php3
do
rm -f bigpage.php3
#download LWN in one big page
wget http://lwn.net/bigpage.php3
done
這個腳本可以保證持續的下載該網頁,直到網頁裏面出現了" ",這就表示該文件已經徹底更新了.
F.對於ssl和Cookies怎麼辦?
若是你要經過ssl來上網,那麼網站地址應該是以」https://」來開頭的.在這樣的狀況下你就須要另一種下載工具,叫作curl,它可以很容易得到.有些網站迫使網友在瀏覽的時候必須使用cookie.因此你必須從在網站上獲得的那個 Cookie裏面獲得」Cookie:」這個參數.這樣才能保證下載的參數正確.對於lynx和Mozilla的Cookie的文件格式,用下面的:
bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf(」%s=%s;」,$6,$7)} )
就能夠構造一個請求Cookie來下載http://www.nytimes.com上的內容.固然,你要已經用這個瀏覽器在該網站上完成註冊.w3m使用了一種不一樣的,更小巧的Cookie文件格式:
bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf(」%s=%s;」,$2,$3)} )
如今就能夠用這種方法來下載了:
bash$ wget –header=」Cookie: $cookie」 http://www.nytimes.com/reuters/technology/tech-tech-supercomput.html
或者用curl工具:
bash$ curl -v -b $cookie -o supercomp.html http://www.nytimes.com/reuters/technology/tech-tech-supercomput.htm
G.如何創建地址列表?
到如今爲止咱們下載的都是單個文件或者是整個網站.有的時候咱們須要下載某個網頁上連接的大量文件,但沒有必要把它整個網站都鏡像下來.好比說咱們想從一個依次排列的100首歌裏面下載前20首.注意,這裏」–accept」和」–reject」參數是不會起做用的, 由於他們只對文件操做起做用.因此必定要用」lynx -dump」參數來代替.
bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep gz$ |tail -10 |awk {print $2} > urllist.txt
lynx的輸出結果能夠被各類GNU文本處理工具過慮.在上面的例子裏,咱們的連接地址是以」gz」結尾的,而且把最後10個文件地址放到urllist.txt文件裏.而後咱們能夠寫一個簡單的bash腳原本自動下載這個文件裏的目標文件:
bash$ for x in $(cat urllist.txt)
> do
> wget $x
> done
這樣咱們就可以成功下載Linux Gazette網站(ftp://ftp.ssc.com/pub/lg/)上的最新10個論題.
H.擴大使用的帶寬
若是你選擇下載一個受帶寬限制的文件,那你的下載會由於服務器端的限制而變得很慢.下面這個技巧會大大縮短下載的過程.但這個技巧須要你使用curl而且遠程服務器有多個鏡像能夠供你下載.例如,假設你想從下面的三個地址下載Mandrake 8.0:
url1=http://ftp.eecs.umich.edu/pub/linux/mandrake/iso/Mandrake80-inst.iso
url2=http://ftp.rpmfind.net/linux/Mandrake/iso/Mandrake80-inst.iso
url3=http://ftp.wayne.edu/linux/mandrake/iso/Mandrake80-inst.iso
這個文件的長度是677281792個字節,因此用curl程序加」–range」參數來創建三個同時進行的下載:
bash$ curl -r 0-199999999 -o mdk-iso.part1 $url1 &
bash$ curl -r 200000000-399999999 -o mdk-iso.part2 $url2 &
bash$ curl -r 400000000- -o mdk-iso.part3 $url3 &
這樣就建立了三個後臺進程.每一個進程從不一樣的服務器傳輸這個ISO文件的不一樣部分.這個」-r」參數指定目標文件的字節範圍.當這三個進程結束後,用一個簡單的cat命令來把這三個文件銜接起來– cat mdk-iso.part? > mdk-80.iso.(強烈建議在刻盤以前先檢查md5)你也能夠用」–verbose」參數來使每一個curl進程都有本身的窗口來顯示傳輸的過程.