wget命令詳解

一 wget簡介

wget是linux上的命令行的下載工具。這是一個GPL許可證下的自由軟件。wget支持HTTP和FTP協議,支持代理服務器和斷點續傳功能,能夠自動遞歸遠程主機的目錄,找到合乎條件的文件并將其下載到本地硬盤上;如果必要,wget將恰當地轉換頁面中的超級連接以在本地生成可瀏覽的鏡像。由于沒有交互式界面,wget可在后臺運行,截獲并忽略HANGUP信號,因此在用戶推出登錄以后,仍可繼續運行。通常,wget用于成批量地下載Internet網站上的文件,或制作遠程網站的鏡像。

二 實例

下載

1、下載192.168.1.168首頁并且顯示下載信息

wget -d http://192.168.1.168

2、下載192.168.1.168首頁并且不顯示任何信息

wget -q http://192.168.1.168

3、批量下載的情形,把所有需要下載文件的地址放到 filename.txt 中,然后 wget 就會自動為你下載所有文件了。

wget -i filelist.txt

4、下載到指定目錄

wget -P/tmp ftp://user:passwd@url/file

把文件file下載到/tmp目錄下。

5、下載 http://example.com 網站上 packages 目錄中的所有文件。其中,-np 的作用是不遍歷父目錄,-nd 表示不在本機重新創建目錄結構。

wget -r -np -nd http://example.com/packages/

6、僅下載 i386 目錄中所有擴展名為 iso 的文件。你也可以指定多個擴展名,只需用逗號分隔即可。

wget -r -np -nd --accept=iso http://example.com/centos-5/i386/

7、斷點續傳

wget -c http://example.com/really-big-file.iso

8、制作網站鏡像ghost

wget -m -k (-H) http://www.example.com/

三 參數

代碼:

$ wget --help

GNU Wget 1.9.1,非交互式的網絡文件下載工具。

用法: 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 不搜索上層目錄。

四 FQA

A.使用wget工具

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

wget也能夠實現斷點續傳(-c參數),當然,這種操作是需要遠程服務器支持的.

bash$ wget -c http://the.url.of/incomplete/file

可以把斷點續傳和鏡像功能結合起來,這樣可以在以前斷過多次的情況下繼續鏡像一個有大量選擇性文件的站點.如何自動實現這個目的我們在后面會討論得更多.

如果你覺得下載時老是斷線會影響你辦公的話,你可以限制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:00

warning: commands will be executed using /bin/sh

at> wget http://place.your.url/here

at> press Ctrl-D

這樣,我們設定了下載工作在晚上11點進行。為了使這個安排能夠正常進行,請確

認atd這個后臺程序正在運行。

D.下載要花很多時間?

當你需要下載大量的數據,而且你又沒有享有足夠的帶寬,這個時候你會經常發現在你安排的下載任務還沒有完成,一天的工作卻又要開始了。

作為一個好同事,你只能停掉了這些任務,而開始另外的工作。然后你又需要反復地重復使用”wget -c”來完成你的下載。這樣肯定太繁瑣了,所以最好是用crontab來自動執行。創建一個純文本文件,叫做”crontab.txt”,包含下面的內容:

0 23 * * 1-5 wget -c -N http://place.your.url/here

0 6 * * 1-5 killall wget

這個crontab文件指定某些任務定期地執行。前五列聲明是什么時候執行這個命令,而每行的剩余部分則告訴crontab執行什么內容。

前兩列指定了每天一到晚上11點就開始用wget下載,一到早上6點就停止一切wget下載。第三四列的*表示每個月的每一天都執行這個任務。第五列則指定了一個星期的哪幾天來執行這個程序。 –”1-5″表示從星期一到星期五。

這樣在每個工作日的晚上11點,下載工作開始,到了上午的6點,任何的wget任務就被停掉了。你可以用下面的命令來執行crontab:bash$ crontab crontab.txt

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進程都有自己的窗口來顯示傳輸的過程.

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,327評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,996評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,316評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,406評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,128評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,524評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,576評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,759評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,310評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,065評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,249評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,821評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,479評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,909評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,140評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,984評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,228評論 2 375

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,807評論 18 139
  • Ubuntu的發音 Ubuntu,源于非洲祖魯人和科薩人的語言,發作 oo-boon-too 的音。了解發音是有意...
    螢火蟲de夢閱讀 99,444評論 9 467
  • FTP服務概述 簡單FTP構建及訪問 VSFTP服務基礎 用戶禁錮、黑白名單 FTP并發及帶寬限制 一、FTP服務...
    紫_軒閱讀 7,660評論 3 25
  • 下面,就給大家介紹這些CentOS常用命令。 一:使用CentOS常用命令查看cpu more/proc/cpui...
    guiwuzhe閱讀 2,529評論 1 25
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數據革命閱讀 12,199評論 2 33