Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
wget的使用形式是:wget[參數(shù)列表]URL,接下來(lái)是小編為大家收集的Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件,歡迎大家閱讀:
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
首先來(lái)介紹一下wget的主要參數(shù):
· -b:讓wget在后臺(tái)運(yùn)行,記錄文件寫(xiě)在當(dāng)前目錄下”wget-log”文件中;
· -t [nuber of times]:嘗試次數(shù),當(dāng)wget無(wú)法與服務(wù)器建立連接時(shí),嘗試連接多少次 。比如”-t 120″表示嘗試120次。當(dāng)這一項(xiàng)為”0″的時(shí)候,指定嘗試無(wú)窮多次直到連接成功為止,這個(gè) 設(shè)置非常有用,當(dāng)對(duì)方服務(wù)器突然關(guān)機(jī)或者網(wǎng)絡(luò)突然中斷的時(shí)候,可以在恢復(fù)正常后繼續(xù) 下載沒(méi)有傳完的文件;
·-c:斷點(diǎn)續(xù)傳,這也是個(gè)非常有用的設(shè)置,特別當(dāng)下載比較大的文件的時(shí)候,如果中途意外中斷,那么連接恢復(fù)的時(shí)候會(huì)從上次沒(méi)傳完的地方接著傳,而不是又從頭開(kāi)始,使用這一項(xiàng)需要遠(yuǎn)程服務(wù)器也支持?jǐn)帱c(diǎn)續(xù)傳,一般來(lái)講,基于UNIX/Linux的Web/FTP服務(wù)器 都支持?jǐn)帱c(diǎn)續(xù)傳;
· -T [number of seconds]:超時(shí)時(shí)間,指定多長(zhǎng)時(shí)間遠(yuǎn)程服務(wù)器沒(méi)有響應(yīng)就中斷連接 ,開(kāi)始下一次嘗試。比如”-T 120″表示如果120秒以后遠(yuǎn)程服務(wù)器沒(méi)有發(fā)過(guò)來(lái)數(shù)據(jù),就重新嘗試連接。如果網(wǎng)絡(luò)速度比較快,這個(gè)時(shí)間可以設(shè)置的短些,相反,可以設(shè)置的長(zhǎng)一些,一般最多不超過(guò)900,通常也不少于60,一般設(shè)置在120左右比較合適;
· -w [number of seconds]:在兩次嘗試之間等待多少秒,比如”-w 100″表示兩次嘗試 之間等待100秒;
· -Y on/off:通過(guò)/不通過(guò)代理服務(wù)器進(jìn)行連接;
· -Q [byetes]:限制下載文件的總大小最多不能超過(guò)多少,比如”-Q2k”表示不能超過(guò)2K 字節(jié),”-Q3m”表示最多不能超過(guò)3M字節(jié),如果數(shù)字后面什么都不加,就表示是以字節(jié)為單 位,比如”-Q200″表示最多不能超過(guò)200字節(jié);
· -nd:不下載目錄結(jié)構(gòu),把從服務(wù)器所有指定目錄下載的文件都堆到當(dāng)前目錄里;
· -x:與”-nd”設(shè)置剛好相反,創(chuàng)建完整的目錄結(jié)構(gòu),例如”wget -x http://www.gnu.org”將在當(dāng)前目錄下創(chuàng)建”www.gnu.org”子目錄,然后按照服務(wù)器 實(shí)際的目錄結(jié)構(gòu)一級(jí)一級(jí)建下去,直到所有的文件都傳完為止;
· -nH:不創(chuàng)建以目標(biāo)主機(jī)域名為目錄名的目錄,將目標(biāo)主機(jī)的目錄結(jié)構(gòu)直接下到當(dāng)前目錄下;
· –http-user=username · –http-passwd=password:如果Web服務(wù)器需要指定用戶名和口令,用這兩項(xiàng)來(lái)設(shè)定;
· –proxy-user=username · –proxy-passwd=password:如果代理服務(wù)器需要輸入用戶名和口令,使用這兩個(gè)選項(xiàng) ;
· -r:在本機(jī)建立服務(wù)器端目錄結(jié)構(gòu);
· -l [depth]:下載遠(yuǎn)程服務(wù)器目錄結(jié)構(gòu)的深度,例如”-l 5″下載目錄深度小于或者等 于5以內(nèi)的目錄結(jié)構(gòu)或者文件;
· -m:做站點(diǎn)鏡像時(shí)的選項(xiàng),如果你想做一個(gè)站點(diǎn)的鏡像,使用這個(gè)選項(xiàng),它將自動(dòng)設(shè)定其他合適的選項(xiàng)以便于站點(diǎn)鏡像;
· -np:只下載目標(biāo)站點(diǎn)指定目錄及其子目錄的內(nèi)容。這也是一個(gè)非常有用的選項(xiàng),我們假設(shè)某個(gè)人的個(gè)人主頁(yè)里面有一個(gè)指向這個(gè)站點(diǎn)其他人個(gè)人主頁(yè)的連接,而我們只想下載這個(gè)人的個(gè)人主頁(yè),如果不設(shè)置這個(gè)選項(xiàng),甚至–有可能把整個(gè)站點(diǎn)給抓下來(lái),這顯然是我們通常不希望的;
ü 如何設(shè)定wget所使用的代理服務(wù)器 wget
可以使用用戶設(shè)置文件”.wgetrc”來(lái)讀取很多設(shè)置,我們這里主要利用這個(gè)文件來(lái)是
設(shè)置代理服務(wù)器。使用者用什么用戶登錄,那么什么用戶主目錄下的”.wgetrc”文件就起
作用。例如,”root”用戶如果想使用”.wgetrc”來(lái)設(shè)置代理服務(wù)器,”/root/.wgert”就起 作用,下面給出一個(gè)”.wge trc”文件的內(nèi)容,讀者可以參照這個(gè)例子來(lái)編寫(xiě)自己的”wgetrc”文件:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
這兩行的含義是,代理服務(wù)器IP地址為:111.111.111.111,端口號(hào)為:80。第一行指定 HTTP協(xié)議所使用的代理服務(wù)器,第二行指定FTP協(xié)議所使用的代理服務(wù)器。
下面就開(kāi)始實(shí)戰(zhàn)吧!
A.使用wget工具
linux所以的主要版本都自帶了wget這個(gè)下載工具.
bash$ wget http://place.your.url/here
它還能控制ftp來(lái)下載整個(gè)web站點(diǎn)的各級(jí)目錄,當(dāng)然,如果你不小心,可能會(huì)把整個(gè)網(wǎng)站以及其他和他做鏈接的網(wǎng)站全部下載下來(lái).
bash$ wget -m http://target.web.site/subdirectory
由于這個(gè)工具具有很強(qiáng)的下載能力,所以可以在服務(wù)器上把它用作鏡像網(wǎng)站的工具.讓它按照”robots.txt”的規(guī)定來(lái)執(zhí)行.
有很多參數(shù)用來(lái)控制它如何正確地做鏡像,可以限制鏈接的類型和下載文件的類型等等.例如:只下載有聯(lián)系的鏈接并且忽略GIF圖片:
bash$ wget -m -L –reject=gif http://target.web.site/subdirectory
wget也能夠?qū)崿F(xiàn)斷點(diǎn)續(xù)傳(-c參數(shù)),當(dāng)然,這種操作是需要遠(yuǎn)程服務(wù)器支持的.
bash$ wget -c http://the.url.of/incomplete/file
可以把斷點(diǎn)續(xù)傳和鏡像功能結(jié)合起來(lái),這樣可以在以前斷過(guò)多次的情況下繼續(xù)鏡像一個(gè)有大量選擇性文件的站點(diǎn).如何自動(dòng)實(shí)現(xiàn)這個(gè)目的我們?cè)诤竺鏁?huì)討論得更多.
如果你覺(jué)得下載時(shí)老是斷線會(huì)影響你辦公的話,你可以限制wget重試的次數(shù).
bash$ wget -t 5 http://place.your.url/here
這樣重試五次后就放棄了.用”-t inf”參數(shù)表示永遠(yuǎn)不放棄.不停地重試.
B.那對(duì)于代理服務(wù)該怎么辦呢?
可以使用http代理的參數(shù)或者在.wgetrc配置文件里指定一個(gè)如何通過(guò)代理去下載的途徑.但是有這么一個(gè)問(wèn)題,如果通過(guò)代理來(lái)進(jìn)行斷點(diǎn)續(xù)傳的話可能會(huì)有幾次失敗.如果有一次通過(guò)代理下載的過(guò)程發(fā)生中斷,那么代理服務(wù)器上緩存里保存是那個(gè)完整的文件拷貝.所以當(dāng)你用”wget -c”來(lái)下載剩余部分的時(shí)候代理服務(wù)器查看它的緩存,并錯(cuò)誤地認(rèn)為你已經(jīng)下載了整個(gè)文件.于是就發(fā)出了錯(cuò)誤的信號(hào).
這個(gè)時(shí)候你可以用添加一個(gè)特定的請(qǐng)求參數(shù)來(lái)促使代理服務(wù)器清除他們的緩存:
bash$ wget -c –header=”Pragma: no-cache” http://place.your.url/here
這個(gè)”–header”參數(shù)能夠以各種數(shù)字,各種方式添加。通過(guò)它我們可以更改web服務(wù)器或者代理服務(wù)器的某些屬性。有些站點(diǎn)不提供外部連接的文件服務(wù),只有通過(guò)同一個(gè)站點(diǎn)上其他的一些頁(yè)面時(shí)內(nèi)容才會(huì)被提交。這個(gè)時(shí)候你可以用加上”Referer:”參數(shù):
bash$ wget –header=”Referer: http://coming.from.this/page” http://surfing.to.this/page
有些特殊的網(wǎng)站只支持某種特定的瀏覽器,這個(gè)時(shí)候可以用”User-Agent:”參數(shù)
bash$ wget –header=”User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)” http://msie.only.url/here
C.那我怎么設(shè)定下載時(shí)間呢?
如果你需要在你的辦公電腦上通過(guò)和其他同事共享的一個(gè)連接來(lái)下載一些很大的文件,而且你希望你的同事不會(huì)因?yàn)榫W(wǎng)絡(luò)速度的減慢而收到影響,那你就應(yīng)該盡量避開(kāi)高峰時(shí)段。當(dāng)然,不需要在辦公室里等到所以人都走掉,也不需要在家里用完晚飯后還惦記著要上網(wǎng)下載一次。
用at來(lái)就可以很好的定制工作時(shí)間:
bash$ at 23:00
warning: commands will be executed using /bin/sh
at> wget http://place.your.url/here
at> press Ctrl-D
這樣,我們?cè)O(shè)定了下載工作在晚上11點(diǎn)進(jìn)行。為了使這個(gè)安排能夠正常進(jìn)行,請(qǐng)確
認(rèn)atd這個(gè)后臺(tái)程序正在運(yùn)行。
D.下載要花很多時(shí)間?
當(dāng)你需要下載大量的數(shù)據(jù),而且你又沒(méi)有享有足夠的帶寬,這個(gè)時(shí)候你會(huì)經(jīng)常發(fā)現(xiàn)在你安排的下載任務(wù)還沒(méi)有完成,一天的工作卻又要開(kāi)始了。
作為一個(gè)好同事,你只能停掉了這些任務(wù),而開(kāi)始另外的工作。然后你又需要反復(fù)地重復(fù)使用”wget -c”來(lái)完成你的下載。這樣肯定太繁瑣了,所以最好是用crontab來(lái)自動(dòng)執(zhí)行。創(chuàng)建一個(gè)純文本文件,叫做”crontab.txt”,包含下面的內(nèi)容:
0 23 * * 1-5 wget -c -N http://place.your.url/here
0 6 * * 1-5 killall wget
這個(gè)crontab文件指定某些任務(wù)定期地執(zhí)行。前五列聲明是什么時(shí)候執(zhí)行這個(gè)命令,而每行的剩余部分則告訴crontab執(zhí)行什么內(nèi)容。
前兩列指定了每天一到晚上11點(diǎn)就開(kāi)始用wget下載,一到早上6點(diǎn)就停止一切wget下載。第三四列的*表示每個(gè)月的每一天都執(zhí)行這個(gè)任務(wù)。第五列則指定了一個(gè)星期的哪幾天來(lái)執(zhí)行這個(gè)程序。 –”1-5″表示從星期一到星期五。
這樣在每個(gè)工作日的晚上11點(diǎn),下載工作開(kāi)始,到了上午的6點(diǎn),任何的wget任務(wù)就被停掉了。你可以用下面的命令來(lái)執(zhí)行crontab:bash$ crontab crontab.txt
wget的這個(gè)”-N”參數(shù)將會(huì)檢查目標(biāo)文件的時(shí)間戳,如果匹配了,下載程序就會(huì)停止,因?yàn)樗f(shuō)明整個(gè)文件已經(jīng)下載完全了。
用”crontab -r”可以刪除這個(gè)計(jì)劃安排。我已經(jīng)多次采用這種方法,通過(guò)共享的電話撥號(hào)來(lái)下載過(guò)很多的ISO鏡像文件,還是比較實(shí)用的。
E.如何下載動(dòng)態(tài)變化的網(wǎng)頁(yè)
有些網(wǎng)頁(yè)每天都要根據(jù)要求變化好幾次.所以從技術(shù)上講,目標(biāo)不再是一個(gè)文件,它沒(méi)有文件長(zhǎng)度.因此”-c”這個(gè)參數(shù)也就失去了意義.
例如:一個(gè)PHP寫(xiě)的并且經(jīng)常變動(dòng)的linux周末新聞網(wǎng)頁(yè):
bash$ wget http://lwn.net/bigpage.php3
我辦公室里的網(wǎng)絡(luò)條件經(jīng)常很差,給我的下載帶了很大的麻煩,所以我寫(xiě)了個(gè)簡(jiǎn)單的腳本來(lái)檢測(cè)動(dòng)態(tài)頁(yè)面是否已經(jīng)完全更新了.
#!/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
這個(gè)腳本能夠保證持續(xù)的下載該網(wǎng)頁(yè),直到網(wǎng)頁(yè)里面出現(xiàn)了" ",這就表示該文件已經(jīng)完全更新了.
F.對(duì)于ssl和Cookies怎么辦?
如果你要通過(guò)ssl來(lái)上網(wǎng),那么網(wǎng)站地址應(yīng)該是以”https://”來(lái)開(kāi)頭的.在這樣的情況下你就需要另外一種下載工具,叫做curl,它能夠很容易獲得.有些網(wǎng)站迫使網(wǎng)友在瀏覽的時(shí)候必須使用cookie.所以你必須從在網(wǎng)站上得到的那個(gè)Cookie里面得到”Cookie:”這個(gè)參數(shù).這樣才
能保證下載的參數(shù)正確.對(duì)于lynx和Mozilla的Cookie的文件格式,用下面的:
bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf(”%s=%s;”,,)} )
就可以構(gòu)造一個(gè)請(qǐng)求Cookie來(lái)下載http://www.nytimes.com上的內(nèi)容.當(dāng)然,你要已經(jīng)用這個(gè)瀏覽器在該網(wǎng)站上完成注冊(cè).
w3m使用了一種不同的,更小巧的Cookie文件格式:
bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf(”%s=%s;”,
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
wget的使用形式是:wget[參數(shù)列表]URL,接下來(lái)是小編為大家收集的Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件,歡迎大家閱讀:
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
首先來(lái)介紹一下wget的主要參數(shù):
· -b:讓wget在后臺(tái)運(yùn)行,記錄文件寫(xiě)在當(dāng)前目錄下”wget-log”文件中;
· -t [nuber of times]:嘗試次數(shù),當(dāng)wget無(wú)法與服務(wù)器建立連接時(shí),嘗試連接多少次 。比如”-t 120″表示嘗試120次。當(dāng)這一項(xiàng)為”0″的時(shí)候,指定嘗試無(wú)窮多次直到連接成功為止,這個(gè) 設(shè)置非常有用,當(dāng)對(duì)方服務(wù)器突然關(guān)機(jī)或者網(wǎng)絡(luò)突然中斷的時(shí)候,可以在恢復(fù)正常后繼續(xù) 下載沒(méi)有傳完的文件;
·-c:斷點(diǎn)續(xù)傳,這也是個(gè)非常有用的設(shè)置,特別當(dāng)下載比較大的文件的時(shí)候,如果中途意外中斷,那么連接恢復(fù)的時(shí)候會(huì)從上次沒(méi)傳完的地方接著傳,而不是又從頭開(kāi)始,使用這一項(xiàng)需要遠(yuǎn)程服務(wù)器也支持?jǐn)帱c(diǎn)續(xù)傳,一般來(lái)講,基于UNIX/Linux的Web/FTP服務(wù)器 都支持?jǐn)帱c(diǎn)續(xù)傳;
· -T [number of seconds]:超時(shí)時(shí)間,指定多長(zhǎng)時(shí)間遠(yuǎn)程服務(wù)器沒(méi)有響應(yīng)就中斷連接 ,開(kāi)始下一次嘗試。比如”-T 120″表示如果120秒以后遠(yuǎn)程服務(wù)器沒(méi)有發(fā)過(guò)來(lái)數(shù)據(jù),就重新嘗試連接。如果網(wǎng)絡(luò)速度比較快,這個(gè)時(shí)間可以設(shè)置的短些,相反,可以設(shè)置的長(zhǎng)一些,一般最多不超過(guò)900,通常也不少于60,一般設(shè)置在120左右比較合適;
· -w [number of seconds]:在兩次嘗試之間等待多少秒,比如”-w 100″表示兩次嘗試 之間等待100秒;
· -Y on/off:通過(guò)/不通過(guò)代理服務(wù)器進(jìn)行連接;
· -Q [byetes]:限制下載文件的總大小最多不能超過(guò)多少,比如”-Q2k”表示不能超過(guò)2K 字節(jié),”-Q3m”表示最多不能超過(guò)3M字節(jié),如果數(shù)字后面什么都不加,就表示是以字節(jié)為單 位,比如”-Q200″表示最多不能超過(guò)200字節(jié);
· -nd:不下載目錄結(jié)構(gòu),把從服務(wù)器所有指定目錄下載的文件都堆到當(dāng)前目錄里;
· -x:與”-nd”設(shè)置剛好相反,創(chuàng)建完整的目錄結(jié)構(gòu),例如”wget -x http://www.gnu.org”將在當(dāng)前目錄下創(chuàng)建”www.gnu.org”子目錄,然后按照服務(wù)器 實(shí)際的目錄結(jié)構(gòu)一級(jí)一級(jí)建下去,直到所有的文件都傳完為止;
· -nH:不創(chuàng)建以目標(biāo)主機(jī)域名為目錄名的目錄,將目標(biāo)主機(jī)的目錄結(jié)構(gòu)直接下到當(dāng)前目錄下;
· –http-user=username · –http-passwd=password:如果Web服務(wù)器需要指定用戶名和口令,用這兩項(xiàng)來(lái)設(shè)定;
· –proxy-user=username · –proxy-passwd=password:如果代理服務(wù)器需要輸入用戶名和口令,使用這兩個(gè)選項(xiàng) ;
· -r:在本機(jī)建立服務(wù)器端目錄結(jié)構(gòu);
· -l [depth]:下載遠(yuǎn)程服務(wù)器目錄結(jié)構(gòu)的深度,例如”-l 5″下載目錄深度小于或者等 于5以內(nèi)的目錄結(jié)構(gòu)或者文件;
· -m:做站點(diǎn)鏡像時(shí)的選項(xiàng),如果你想做一個(gè)站點(diǎn)的鏡像,使用這個(gè)選項(xiàng),它將自動(dòng)設(shè)定其他合適的選項(xiàng)以便于站點(diǎn)鏡像;
· -np:只下載目標(biāo)站點(diǎn)指定目錄及其子目錄的內(nèi)容。這也是一個(gè)非常有用的選項(xiàng),我們假設(shè)某個(gè)人的個(gè)人主頁(yè)里面有一個(gè)指向這個(gè)站點(diǎn)其他人個(gè)人主頁(yè)的連接,而我們只想下載這個(gè)人的個(gè)人主頁(yè),如果不設(shè)置這個(gè)選項(xiàng),甚至–有可能把整個(gè)站點(diǎn)給抓下來(lái),這顯然是我們通常不希望的;
ü 如何設(shè)定wget所使用的代理服務(wù)器 wget
可以使用用戶設(shè)置文件”.wgetrc”來(lái)讀取很多設(shè)置,我們這里主要利用這個(gè)文件來(lái)是
設(shè)置代理服務(wù)器。使用者用什么用戶登錄,那么什么用戶主目錄下的”.wgetrc”文件就起
作用。例如,”root”用戶如果想使用”.wgetrc”來(lái)設(shè)置代理服務(wù)器,”/root/.wgert”就起 作用,下面給出一個(gè)”.wge trc”文件的內(nèi)容,讀者可以參照這個(gè)例子來(lái)編寫(xiě)自己的”wgetrc”文件:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
這兩行的含義是,代理服務(wù)器IP地址為:111.111.111.111,端口號(hào)為:80。第一行指定 HTTP協(xié)議所使用的代理服務(wù)器,第二行指定FTP協(xié)議所使用的代理服務(wù)器。
下面就開(kāi)始實(shí)戰(zhàn)吧!
A.使用wget工具
linux所以的主要版本都自帶了wget這個(gè)下載工具.
bash$ wget http://place.your.url/here
它還能控制ftp來(lái)下載整個(gè)web站點(diǎn)的各級(jí)目錄,當(dāng)然,如果你不小心,可能會(huì)把整個(gè)網(wǎng)站以及其他和他做鏈接的網(wǎng)站全部下載下來(lái).
bash$ wget -m http://target.web.site/subdirectory
由于這個(gè)工具具有很強(qiáng)的下載能力,所以可以在服務(wù)器上把它用作鏡像網(wǎng)站的工具.讓它按照”robots.txt”的規(guī)定來(lái)執(zhí)行.
有很多參數(shù)用來(lái)控制它如何正確地做鏡像,可以限制鏈接的類型和下載文件的類型等等.例如:只下載有聯(lián)系的鏈接并且忽略GIF圖片:
bash$ wget -m -L –reject=gif http://target.web.site/subdirectory
wget也能夠?qū)崿F(xiàn)斷點(diǎn)續(xù)傳(-c參數(shù)),當(dāng)然,這種操作是需要遠(yuǎn)程服務(wù)器支持的.
bash$ wget -c http://the.url.of/incomplete/file
可以把斷點(diǎn)續(xù)傳和鏡像功能結(jié)合起來(lái),這樣可以在以前斷過(guò)多次的情況下繼續(xù)鏡像一個(gè)有大量選擇性文件的站點(diǎn).如何自動(dòng)實(shí)現(xiàn)這個(gè)目的我們?cè)诤竺鏁?huì)討論得更多.
如果你覺(jué)得下載時(shí)老是斷線會(huì)影響你辦公的話,你可以限制wget重試的次數(shù).
bash$ wget -t 5 http://place.your.url/here
這樣重試五次后就放棄了.用”-t inf”參數(shù)表示永遠(yuǎn)不放棄.不停地重試.
B.那對(duì)于代理服務(wù)該怎么辦呢?
可以使用http代理的參數(shù)或者在.wgetrc配置文件里指定一個(gè)如何通過(guò)代理去下載的途徑.但是有這么一個(gè)問(wèn)題,如果通過(guò)代理來(lái)進(jìn)行斷點(diǎn)續(xù)傳的話可能會(huì)有幾次失敗.如果有一次通過(guò)代理下載的過(guò)程發(fā)生中斷,那么代理服務(wù)器上緩存里保存是那個(gè)完整的文件拷貝.所以當(dāng)你用”wget -c”來(lái)下載剩余部分的時(shí)候代理服務(wù)器查看它的緩存,并錯(cuò)誤地認(rèn)為你已經(jīng)下載了整個(gè)文件.于是就發(fā)出了錯(cuò)誤的信號(hào).
這個(gè)時(shí)候你可以用添加一個(gè)特定的請(qǐng)求參數(shù)來(lái)促使代理服務(wù)器清除他們的緩存:
bash$ wget -c –header=”Pragma: no-cache” http://place.your.url/here
這個(gè)”–header”參數(shù)能夠以各種數(shù)字,各種方式添加。通過(guò)它我們可以更改web服務(wù)器或者代理服務(wù)器的某些屬性。有些站點(diǎn)不提供外部連接的文件服務(wù),只有通過(guò)同一個(gè)站點(diǎn)上其他的一些頁(yè)面時(shí)內(nèi)容才會(huì)被提交。這個(gè)時(shí)候你可以用加上”Referer:”參數(shù):
bash$ wget –header=”Referer: http://coming.from.this/page” http://surfing.to.this/page
有些特殊的網(wǎng)站只支持某種特定的瀏覽器,這個(gè)時(shí)候可以用”User-Agent:”參數(shù)
bash$ wget –header=”User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)” http://msie.only.url/here
C.那我怎么設(shè)定下載時(shí)間呢?
如果你需要在你的辦公電腦上通過(guò)和其他同事共享的一個(gè)連接來(lái)下載一些很大的文件,而且你希望你的同事不會(huì)因?yàn)榫W(wǎng)絡(luò)速度的減慢而收到影響,那你就應(yīng)該盡量避開(kāi)高峰時(shí)段。當(dāng)然,不需要在辦公室里等到所以人都走掉,也不需要在家里用完晚飯后還惦記著要上網(wǎng)下載一次。
用at來(lái)就可以很好的定制工作時(shí)間:
bash$ at 23:00
warning: commands will be executed using /bin/sh
at> wget http://place.your.url/here
at> press Ctrl-D
這樣,我們?cè)O(shè)定了下載工作在晚上11點(diǎn)進(jìn)行。為了使這個(gè)安排能夠正常進(jìn)行,請(qǐng)確
認(rèn)atd這個(gè)后臺(tái)程序正在運(yùn)行。
D.下載要花很多時(shí)間?
當(dāng)你需要下載大量的數(shù)據(jù),而且你又沒(méi)有享有足夠的帶寬,這個(gè)時(shí)候你會(huì)經(jīng)常發(fā)現(xiàn)在你安排的下載任務(wù)還沒(méi)有完成,一天的工作卻又要開(kāi)始了。
作為一個(gè)好同事,你只能停掉了這些任務(wù),而開(kāi)始另外的工作。然后你又需要反復(fù)地重復(fù)使用”wget -c”來(lái)完成你的下載。這樣肯定太繁瑣了,所以最好是用crontab來(lái)自動(dòng)執(zhí)行。創(chuàng)建一個(gè)純文本文件,叫做”crontab.txt”,包含下面的內(nèi)容:
0 23 * * 1-5 wget -c -N http://place.your.url/here
0 6 * * 1-5 killall wget
這個(gè)crontab文件指定某些任務(wù)定期地執(zhí)行。前五列聲明是什么時(shí)候執(zhí)行這個(gè)命令,而每行的剩余部分則告訴crontab執(zhí)行什么內(nèi)容。
前兩列指定了每天一到晚上11點(diǎn)就開(kāi)始用wget下載,一到早上6點(diǎn)就停止一切wget下載。第三四列的*表示每個(gè)月的每一天都執(zhí)行這個(gè)任務(wù)。第五列則指定了一個(gè)星期的哪幾天來(lái)執(zhí)行這個(gè)程序。 –”1-5″表示從星期一到星期五。
這樣在每個(gè)工作日的晚上11點(diǎn),下載工作開(kāi)始,到了上午的6點(diǎn),任何的wget任務(wù)就被停掉了。你可以用下面的命令來(lái)執(zhí)行crontab:bash$ crontab crontab.txt
wget的這個(gè)”-N”參數(shù)將會(huì)檢查目標(biāo)文件的時(shí)間戳,如果匹配了,下載程序就會(huì)停止,因?yàn)樗f(shuō)明整個(gè)文件已經(jīng)下載完全了。
用”crontab -r”可以刪除這個(gè)計(jì)劃安排。我已經(jīng)多次采用這種方法,通過(guò)共享的電話撥號(hào)來(lái)下載過(guò)很多的ISO鏡像文件,還是比較實(shí)用的。
E.如何下載動(dòng)態(tài)變化的網(wǎng)頁(yè)
有些網(wǎng)頁(yè)每天都要根據(jù)要求變化好幾次.所以從技術(shù)上講,目標(biāo)不再是一個(gè)文件,它沒(méi)有文件長(zhǎng)度.因此”-c”這個(gè)參數(shù)也就失去了意義.
例如:一個(gè)PHP寫(xiě)的并且經(jīng)常變動(dòng)的linux周末新聞網(wǎng)頁(yè):
bash$ wget http://lwn.net/bigpage.php3
我辦公室里的網(wǎng)絡(luò)條件經(jīng)常很差,給我的下載帶了很大的麻煩,所以我寫(xiě)了個(gè)簡(jiǎn)單的腳本來(lái)檢測(cè)動(dòng)態(tài)頁(yè)面是否已經(jīng)完全更新了.
#!/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
這個(gè)腳本能夠保證持續(xù)的下載該網(wǎng)頁(yè),直到網(wǎng)頁(yè)里面出現(xiàn)了" ",這就表示該文件已經(jīng)完全更新了.
F.對(duì)于ssl和Cookies怎么辦?
如果你要通過(guò)ssl來(lái)上網(wǎng),那么網(wǎng)站地址應(yīng)該是以”https://”來(lái)開(kāi)頭的.在這樣的情況下你就需要另外一種下載工具,叫做curl,它能夠很容易獲得.有些網(wǎng)站迫使網(wǎng)友在瀏覽的時(shí)候必須使用cookie.所以你必須從在網(wǎng)站上得到的那個(gè)Cookie里面得到”Cookie:”這個(gè)參數(shù).這樣才
能保證下載的參數(shù)正確.對(duì)于lynx和Mozilla的Cookie的文件格式,用下面的:
bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf(”%s=%s;”,,)} )
就可以構(gòu)造一個(gè)請(qǐng)求Cookie來(lái)下載http://www.nytimes.com上的內(nèi)容.當(dāng)然,你要已經(jīng)用這個(gè)瀏覽器在該網(wǎng)站上完成注冊(cè).
w3m使用了一種不同的,更小巧的Cookie文件格式:
bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf(”%s=%s;”,
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
wget的使用形式是:wget[參數(shù)列表]URL,接下來(lái)是小編為大家收集的Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件,歡迎大家閱讀:
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
首先來(lái)介紹一下wget的主要參數(shù):
· -b:讓wget在后臺(tái)運(yùn)行,記錄文件寫(xiě)在當(dāng)前目錄下”wget-log”文件中;
· -t [nuber of times]:嘗試次數(shù),當(dāng)wget無(wú)法與服務(wù)器建立連接時(shí),嘗試連接多少次 。比如”-t 120″表示嘗試120次。當(dāng)這一項(xiàng)為”0″的時(shí)候,指定嘗試無(wú)窮多次直到連接成功為止,這個(gè) 設(shè)置非常有用,當(dāng)對(duì)方服務(wù)器突然關(guān)機(jī)或者網(wǎng)絡(luò)突然中斷的時(shí)候,可以在恢復(fù)正常后繼續(xù) 下載沒(méi)有傳完的文件;
·-c:斷點(diǎn)續(xù)傳,這也是個(gè)非常有用的設(shè)置,特別當(dāng)下載比較大的文件的時(shí)候,如果中途意外中斷,那么連接恢復(fù)的時(shí)候會(huì)從上次沒(méi)傳完的地方接著傳,而不是又從頭開(kāi)始,使用這一項(xiàng)需要遠(yuǎn)程服務(wù)器也支持?jǐn)帱c(diǎn)續(xù)傳,一般來(lái)講,基于UNIX/Linux的Web/FTP服務(wù)器 都支持?jǐn)帱c(diǎn)續(xù)傳;
· -T [number of seconds]:超時(shí)時(shí)間,指定多長(zhǎng)時(shí)間遠(yuǎn)程服務(wù)器沒(méi)有響應(yīng)就中斷連接 ,開(kāi)始下一次嘗試。比如”-T 120″表示如果120秒以后遠(yuǎn)程服務(wù)器沒(méi)有發(fā)過(guò)來(lái)數(shù)據(jù),就重新嘗試連接。如果網(wǎng)絡(luò)速度比較快,這個(gè)時(shí)間可以設(shè)置的短些,相反,可以設(shè)置的長(zhǎng)一些,一般最多不超過(guò)900,通常也不少于60,一般設(shè)置在120左右比較合適;
· -w [number of seconds]:在兩次嘗試之間等待多少秒,比如”-w 100″表示兩次嘗試 之間等待100秒;
· -Y on/off:通過(guò)/不通過(guò)代理服務(wù)器進(jìn)行連接;
· -Q [byetes]:限制下載文件的總大小最多不能超過(guò)多少,比如”-Q2k”表示不能超過(guò)2K 字節(jié),”-Q3m”表示最多不能超過(guò)3M字節(jié),如果數(shù)字后面什么都不加,就表示是以字節(jié)為單 位,比如”-Q200″表示最多不能超過(guò)200字節(jié);
· -nd:不下載目錄結(jié)構(gòu),把從服務(wù)器所有指定目錄下載的文件都堆到當(dāng)前目錄里;
· -x:與”-nd”設(shè)置剛好相反,創(chuàng)建完整的目錄結(jié)構(gòu),例如”wget -x http://www.gnu.org”將在當(dāng)前目錄下創(chuàng)建”www.gnu.org”子目錄,然后按照服務(wù)器 實(shí)際的目錄結(jié)構(gòu)一級(jí)一級(jí)建下去,直到所有的文件都傳完為止;
· -nH:不創(chuàng)建以目標(biāo)主機(jī)域名為目錄名的目錄,將目標(biāo)主機(jī)的目錄結(jié)構(gòu)直接下到當(dāng)前目錄下;
· –http-user=username · –http-passwd=password:如果Web服務(wù)器需要指定用戶名和口令,用這兩項(xiàng)來(lái)設(shè)定;
· –proxy-user=username · –proxy-passwd=password:如果代理服務(wù)器需要輸入用戶名和口令,使用這兩個(gè)選項(xiàng) ;
· -r:在本機(jī)建立服務(wù)器端目錄結(jié)構(gòu);
· -l [depth]:下載遠(yuǎn)程服務(wù)器目錄結(jié)構(gòu)的深度,例如”-l 5″下載目錄深度小于或者等 于5以內(nèi)的目錄結(jié)構(gòu)或者文件;
· -m:做站點(diǎn)鏡像時(shí)的選項(xiàng),如果你想做一個(gè)站點(diǎn)的鏡像,使用這個(gè)選項(xiàng),它將自動(dòng)設(shè)定其他合適的選項(xiàng)以便于站點(diǎn)鏡像;
· -np:只下載目標(biāo)站點(diǎn)指定目錄及其子目錄的內(nèi)容。這也是一個(gè)非常有用的選項(xiàng),我們假設(shè)某個(gè)人的個(gè)人主頁(yè)里面有一個(gè)指向這個(gè)站點(diǎn)其他人個(gè)人主頁(yè)的連接,而我們只想下載這個(gè)人的個(gè)人主頁(yè),如果不設(shè)置這個(gè)選項(xiàng),甚至–有可能把整個(gè)站點(diǎn)給抓下來(lái),這顯然是我們通常不希望的;
ü 如何設(shè)定wget所使用的代理服務(wù)器 wget
可以使用用戶設(shè)置文件”.wgetrc”來(lái)讀取很多設(shè)置,我們這里主要利用這個(gè)文件來(lái)是
設(shè)置代理服務(wù)器。使用者用什么用戶登錄,那么什么用戶主目錄下的”.wgetrc”文件就起
作用。例如,”root”用戶如果想使用”.wgetrc”來(lái)設(shè)置代理服務(wù)器,”/root/.wgert”就起 作用,下面給出一個(gè)”.wge trc”文件的內(nèi)容,讀者可以參照這個(gè)例子來(lái)編寫(xiě)自己的”wgetrc”文件:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
這兩行的含義是,代理服務(wù)器IP地址為:111.111.111.111,端口號(hào)為:80。第一行指定 HTTP協(xié)議所使用的代理服務(wù)器,第二行指定FTP協(xié)議所使用的代理服務(wù)器。
下面就開(kāi)始實(shí)戰(zhàn)吧!
A.使用wget工具
linux所以的主要版本都自帶了wget這個(gè)下載工具.
bash$ wget http://place.your.url/here
它還能控制ftp來(lái)下載整個(gè)web站點(diǎn)的各級(jí)目錄,當(dāng)然,如果你不小心,可能會(huì)把整個(gè)網(wǎng)站以及其他和他做鏈接的網(wǎng)站全部下載下來(lái).
bash$ wget -m http://target.web.site/subdirectory
由于這個(gè)工具具有很強(qiáng)的下載能力,所以可以在服務(wù)器上把它用作鏡像網(wǎng)站的工具.讓它按照”robots.txt”的規(guī)定來(lái)執(zhí)行.
有很多參數(shù)用來(lái)控制它如何正確地做鏡像,可以限制鏈接的類型和下載文件的類型等等.例如:只下載有聯(lián)系的鏈接并且忽略GIF圖片:
bash$ wget -m -L –reject=gif http://target.web.site/subdirectory
wget也能夠?qū)崿F(xiàn)斷點(diǎn)續(xù)傳(-c參數(shù)),當(dāng)然,這種操作是需要遠(yuǎn)程服務(wù)器支持的.
bash$ wget -c http://the.url.of/incomplete/file
可以把斷點(diǎn)續(xù)傳和鏡像功能結(jié)合起來(lái),這樣可以在以前斷過(guò)多次的情況下繼續(xù)鏡像一個(gè)有大量選擇性文件的站點(diǎn).如何自動(dòng)實(shí)現(xiàn)這個(gè)目的我們?cè)诤竺鏁?huì)討論得更多.
如果你覺(jué)得下載時(shí)老是斷線會(huì)影響你辦公的話,你可以限制wget重試的次數(shù).
bash$ wget -t 5 http://place.your.url/here
這樣重試五次后就放棄了.用”-t inf”參數(shù)表示永遠(yuǎn)不放棄.不停地重試.
B.那對(duì)于代理服務(wù)該怎么辦呢?
可以使用http代理的參數(shù)或者在.wgetrc配置文件里指定一個(gè)如何通過(guò)代理去下載的途徑.但是有這么一個(gè)問(wèn)題,如果通過(guò)代理來(lái)進(jìn)行斷點(diǎn)續(xù)傳的話可能會(huì)有幾次失敗.如果有一次通過(guò)代理下載的過(guò)程發(fā)生中斷,那么代理服務(wù)器上緩存里保存是那個(gè)完整的文件拷貝.所以當(dāng)你用”wget -c”來(lái)下載剩余部分的時(shí)候代理服務(wù)器查看它的緩存,并錯(cuò)誤地認(rèn)為你已經(jīng)下載了整個(gè)文件.于是就發(fā)出了錯(cuò)誤的信號(hào).
這個(gè)時(shí)候你可以用添加一個(gè)特定的請(qǐng)求參數(shù)來(lái)促使代理服務(wù)器清除他們的緩存:
bash$ wget -c –header=”Pragma: no-cache” http://place.your.url/here
這個(gè)”–header”參數(shù)能夠以各種數(shù)字,各種方式添加。通過(guò)它我們可以更改web服務(wù)器或者代理服務(wù)器的某些屬性。有些站點(diǎn)不提供外部連接的文件服務(wù),只有通過(guò)同一個(gè)站點(diǎn)上其他的一些頁(yè)面時(shí)內(nèi)容才會(huì)被提交。這個(gè)時(shí)候你可以用加上”Referer:”參數(shù):
bash$ wget –header=”Referer: http://coming.from.this/page” http://surfing.to.this/page
有些特殊的網(wǎng)站只支持某種特定的瀏覽器,這個(gè)時(shí)候可以用”User-Agent:”參數(shù)
bash$ wget –header=”User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)” http://msie.only.url/here
C.那我怎么設(shè)定下載時(shí)間呢?
如果你需要在你的辦公電腦上通過(guò)和其他同事共享的一個(gè)連接來(lái)下載一些很大的文件,而且你希望你的同事不會(huì)因?yàn)榫W(wǎng)絡(luò)速度的減慢而收到影響,那你就應(yīng)該盡量避開(kāi)高峰時(shí)段。當(dāng)然,不需要在辦公室里等到所以人都走掉,也不需要在家里用完晚飯后還惦記著要上網(wǎng)下載一次。
用at來(lái)就可以很好的定制工作時(shí)間:
bash$ at 23:00
warning: commands will be executed using /bin/sh
at> wget http://place.your.url/here
at> press Ctrl-D
這樣,我們?cè)O(shè)定了下載工作在晚上11點(diǎn)進(jìn)行。為了使這個(gè)安排能夠正常進(jìn)行,請(qǐng)確
認(rèn)atd這個(gè)后臺(tái)程序正在運(yùn)行。
D.下載要花很多時(shí)間?
當(dāng)你需要下載大量的數(shù)據(jù),而且你又沒(méi)有享有足夠的帶寬,這個(gè)時(shí)候你會(huì)經(jīng)常發(fā)現(xiàn)在你安排的下載任務(wù)還沒(méi)有完成,一天的工作卻又要開(kāi)始了。
作為一個(gè)好同事,你只能停掉了這些任務(wù),而開(kāi)始另外的工作。然后你又需要反復(fù)地重復(fù)使用”wget -c”來(lái)完成你的下載。這樣肯定太繁瑣了,所以最好是用crontab來(lái)自動(dòng)執(zhí)行。創(chuàng)建一個(gè)純文本文件,叫做”crontab.txt”,包含下面的內(nèi)容:
0 23 * * 1-5 wget -c -N http://place.your.url/here
0 6 * * 1-5 killall wget
這個(gè)crontab文件指定某些任務(wù)定期地執(zhí)行。前五列聲明是什么時(shí)候執(zhí)行這個(gè)命令,而每行的剩余部分則告訴crontab執(zhí)行什么內(nèi)容。
前兩列指定了每天一到晚上11點(diǎn)就開(kāi)始用wget下載,一到早上6點(diǎn)就停止一切wget下載。第三四列的*表示每個(gè)月的每一天都執(zhí)行這個(gè)任務(wù)。第五列則指定了一個(gè)星期的哪幾天來(lái)執(zhí)行這個(gè)程序。 –”1-5″表示從星期一到星期五。
這樣在每個(gè)工作日的晚上11點(diǎn),下載工作開(kāi)始,到了上午的6點(diǎn),任何的wget任務(wù)就被停掉了。你可以用下面的命令來(lái)執(zhí)行crontab:bash$ crontab crontab.txt
wget的這個(gè)”-N”參數(shù)將會(huì)檢查目標(biāo)文件的時(shí)間戳,如果匹配了,下載程序就會(huì)停止,因?yàn)樗f(shuō)明整個(gè)文件已經(jīng)下載完全了。
用”crontab -r”可以刪除這個(gè)計(jì)劃安排。我已經(jīng)多次采用這種方法,通過(guò)共享的電話撥號(hào)來(lái)下載過(guò)很多的ISO鏡像文件,還是比較實(shí)用的。
E.如何下載動(dòng)態(tài)變化的網(wǎng)頁(yè)
有些網(wǎng)頁(yè)每天都要根據(jù)要求變化好幾次.所以從技術(shù)上講,目標(biāo)不再是一個(gè)文件,它沒(méi)有文件長(zhǎng)度.因此”-c”這個(gè)參數(shù)也就失去了意義.
例如:一個(gè)PHP寫(xiě)的并且經(jīng)常變動(dòng)的linux周末新聞網(wǎng)頁(yè):
bash$ wget http://lwn.net/bigpage.php3
我辦公室里的網(wǎng)絡(luò)條件經(jīng)常很差,給我的下載帶了很大的麻煩,所以我寫(xiě)了個(gè)簡(jiǎn)單的腳本來(lái)檢測(cè)動(dòng)態(tài)頁(yè)面是否已經(jīng)完全更新了.
#!/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
這個(gè)腳本能夠保證持續(xù)的下載該網(wǎng)頁(yè),直到網(wǎng)頁(yè)里面出現(xiàn)了" ",這就表示該文件已經(jīng)完全更新了.
F.對(duì)于ssl和Cookies怎么辦?
如果你要通過(guò)ssl來(lái)上網(wǎng),那么網(wǎng)站地址應(yīng)該是以”https://”來(lái)開(kāi)頭的.在這樣的情況下你就需要另外一種下載工具,叫做curl,它能夠很容易獲得.有些網(wǎng)站迫使網(wǎng)友在瀏覽的時(shí)候必須使用cookie.所以你必須從在網(wǎng)站上得到的那個(gè)Cookie里面得到”Cookie:”這個(gè)參數(shù).這樣才
能保證下載的參數(shù)正確.對(duì)于lynx和Mozilla的Cookie的文件格式,用下面的:
bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf(”%s=%s;”,,)} )
就可以構(gòu)造一個(gè)請(qǐng)求Cookie來(lái)下載http://www.nytimes.com上的內(nèi)容.當(dāng)然,你要已經(jīng)用這個(gè)瀏覽器在該網(wǎng)站上完成注冊(cè).
w3m使用了一種不同的,更小巧的Cookie文件格式:
bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf(”%s=%s;”,
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
wget的使用形式是:wget[參數(shù)列表]URL,接下來(lái)是小編為大家收集的Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件,歡迎大家閱讀:
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
首先來(lái)介紹一下wget的主要參數(shù):
· -b:讓wget在后臺(tái)運(yùn)行,記錄文件寫(xiě)在當(dāng)前目錄下”wget-log”文件中;
· -t [nuber of times]:嘗試次數(shù),當(dāng)wget無(wú)法與服務(wù)器建立連接時(shí),嘗試連接多少次 。比如”-t 120″表示嘗試120次。當(dāng)這一項(xiàng)為”0″的時(shí)候,指定嘗試無(wú)窮多次直到連接成功為止,這個(gè) 設(shè)置非常有用,當(dāng)對(duì)方服務(wù)器突然關(guān)機(jī)或者網(wǎng)絡(luò)突然中斷的時(shí)候,可以在恢復(fù)正常后繼續(xù) 下載沒(méi)有傳完的文件;
·-c:斷點(diǎn)續(xù)傳,這也是個(gè)非常有用的設(shè)置,特別當(dāng)下載比較大的文件的時(shí)候,如果中途意外中斷,那么連接恢復(fù)的時(shí)候會(huì)從上次沒(méi)傳完的地方接著傳,而不是又從頭開(kāi)始,使用這一項(xiàng)需要遠(yuǎn)程服務(wù)器也支持?jǐn)帱c(diǎn)續(xù)傳,一般來(lái)講,基于UNIX/Linux的Web/FTP服務(wù)器 都支持?jǐn)帱c(diǎn)續(xù)傳;
· -T [number of seconds]:超時(shí)時(shí)間,指定多長(zhǎng)時(shí)間遠(yuǎn)程服務(wù)器沒(méi)有響應(yīng)就中斷連接 ,開(kāi)始下一次嘗試。比如”-T 120″表示如果120秒以后遠(yuǎn)程服務(wù)器沒(méi)有發(fā)過(guò)來(lái)數(shù)據(jù),就重新嘗試連接。如果網(wǎng)絡(luò)速度比較快,這個(gè)時(shí)間可以設(shè)置的短些,相反,可以設(shè)置的長(zhǎng)一些,一般最多不超過(guò)900,通常也不少于60,一般設(shè)置在120左右比較合適;
· -w [number of seconds]:在兩次嘗試之間等待多少秒,比如”-w 100″表示兩次嘗試 之間等待100秒;
· -Y on/off:通過(guò)/不通過(guò)代理服務(wù)器進(jìn)行連接;
· -Q [byetes]:限制下載文件的總大小最多不能超過(guò)多少,比如”-Q2k”表示不能超過(guò)2K 字節(jié),”-Q3m”表示最多不能超過(guò)3M字節(jié),如果數(shù)字后面什么都不加,就表示是以字節(jié)為單 位,比如”-Q200″表示最多不能超過(guò)200字節(jié);
· -nd:不下載目錄結(jié)構(gòu),把從服務(wù)器所有指定目錄下載的文件都堆到當(dāng)前目錄里;
· -x:與”-nd”設(shè)置剛好相反,創(chuàng)建完整的目錄結(jié)構(gòu),例如”wget -x http://www.gnu.org”將在當(dāng)前目錄下創(chuàng)建”www.gnu.org”子目錄,然后按照服務(wù)器 實(shí)際的目錄結(jié)構(gòu)一級(jí)一級(jí)建下去,直到所有的文件都傳完為止;
· -nH:不創(chuàng)建以目標(biāo)主機(jī)域名為目錄名的目錄,將目標(biāo)主機(jī)的目錄結(jié)構(gòu)直接下到當(dāng)前目錄下;
· –http-user=username · –http-passwd=password:如果Web服務(wù)器需要指定用戶名和口令,用這兩項(xiàng)來(lái)設(shè)定;
· –proxy-user=username · –proxy-passwd=password:如果代理服務(wù)器需要輸入用戶名和口令,使用這兩個(gè)選項(xiàng) ;
· -r:在本機(jī)建立服務(wù)器端目錄結(jié)構(gòu);
· -l [depth]:下載遠(yuǎn)程服務(wù)器目錄結(jié)構(gòu)的深度,例如”-l 5″下載目錄深度小于或者等 于5以內(nèi)的目錄結(jié)構(gòu)或者文件;
· -m:做站點(diǎn)鏡像時(shí)的選項(xiàng),如果你想做一個(gè)站點(diǎn)的鏡像,使用這個(gè)選項(xiàng),它將自動(dòng)設(shè)定其他合適的選項(xiàng)以便于站點(diǎn)鏡像;
· -np:只下載目標(biāo)站點(diǎn)指定目錄及其子目錄的內(nèi)容。這也是一個(gè)非常有用的選項(xiàng),我們假設(shè)某個(gè)人的個(gè)人主頁(yè)里面有一個(gè)指向這個(gè)站點(diǎn)其他人個(gè)人主頁(yè)的連接,而我們只想下載這個(gè)人的個(gè)人主頁(yè),如果不設(shè)置這個(gè)選項(xiàng),甚至–有可能把整個(gè)站點(diǎn)給抓下來(lái),這顯然是我們通常不希望的;
ü 如何設(shè)定wget所使用的代理服務(wù)器 wget
可以使用用戶設(shè)置文件”.wgetrc”來(lái)讀取很多設(shè)置,我們這里主要利用這個(gè)文件來(lái)是
設(shè)置代理服務(wù)器。使用者用什么用戶登錄,那么什么用戶主目錄下的”.wgetrc”文件就起
作用。例如,”root”用戶如果想使用”.wgetrc”來(lái)設(shè)置代理服務(wù)器,”/root/.wgert”就起 作用,下面給出一個(gè)”.wge trc”文件的內(nèi)容,讀者可以參照這個(gè)例子來(lái)編寫(xiě)自己的”wgetrc”文件:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
這兩行的含義是,代理服務(wù)器IP地址為:111.111.111.111,端口號(hào)為:80。第一行指定 HTTP協(xié)議所使用的代理服務(wù)器,第二行指定FTP協(xié)議所使用的代理服務(wù)器。
下面就開(kāi)始實(shí)戰(zhàn)吧!
A.使用wget工具
linux所以的主要版本都自帶了wget這個(gè)下載工具.
bash$ wget http://place.your.url/here
它還能控制ftp來(lái)下載整個(gè)web站點(diǎn)的各級(jí)目錄,當(dāng)然,如果你不小心,可能會(huì)把整個(gè)網(wǎng)站以及其他和他做鏈接的網(wǎng)站全部下載下來(lái).
bash$ wget -m http://target.web.site/subdirectory
由于這個(gè)工具具有很強(qiáng)的下載能力,所以可以在服務(wù)器上把它用作鏡像網(wǎng)站的工具.讓它按照”robots.txt”的規(guī)定來(lái)執(zhí)行.
有很多參數(shù)用來(lái)控制它如何正確地做鏡像,可以限制鏈接的類型和下載文件的類型等等.例如:只下載有聯(lián)系的鏈接并且忽略GIF圖片:
bash$ wget -m -L –reject=gif http://target.web.site/subdirectory
wget也能夠?qū)崿F(xiàn)斷點(diǎn)續(xù)傳(-c參數(shù)),當(dāng)然,這種操作是需要遠(yuǎn)程服務(wù)器支持的.
bash$ wget -c http://the.url.of/incomplete/file
可以把斷點(diǎn)續(xù)傳和鏡像功能結(jié)合起來(lái),這樣可以在以前斷過(guò)多次的情況下繼續(xù)鏡像一個(gè)有大量選擇性文件的站點(diǎn).如何自動(dòng)實(shí)現(xiàn)這個(gè)目的我們?cè)诤竺鏁?huì)討論得更多.
如果你覺(jué)得下載時(shí)老是斷線會(huì)影響你辦公的話,你可以限制wget重試的次數(shù).
bash$ wget -t 5 http://place.your.url/here
這樣重試五次后就放棄了.用”-t inf”參數(shù)表示永遠(yuǎn)不放棄.不停地重試.
B.那對(duì)于代理服務(wù)該怎么辦呢?
可以使用http代理的參數(shù)或者在.wgetrc配置文件里指定一個(gè)如何通過(guò)代理去下載的途徑.但是有這么一個(gè)問(wèn)題,如果通過(guò)代理來(lái)進(jìn)行斷點(diǎn)續(xù)傳的話可能會(huì)有幾次失敗.如果有一次通過(guò)代理下載的過(guò)程發(fā)生中斷,那么代理服務(wù)器上緩存里保存是那個(gè)完整的文件拷貝.所以當(dāng)你用”wget -c”來(lái)下載剩余部分的時(shí)候代理服務(wù)器查看它的緩存,并錯(cuò)誤地認(rèn)為你已經(jīng)下載了整個(gè)文件.于是就發(fā)出了錯(cuò)誤的信號(hào).
這個(gè)時(shí)候你可以用添加一個(gè)特定的請(qǐng)求參數(shù)來(lái)促使代理服務(wù)器清除他們的緩存:
bash$ wget -c –header=”Pragma: no-cache” http://place.your.url/here
這個(gè)”–header”參數(shù)能夠以各種數(shù)字,各種方式添加。通過(guò)它我們可以更改web服務(wù)器或者代理服務(wù)器的某些屬性。有些站點(diǎn)不提供外部連接的文件服務(wù),只有通過(guò)同一個(gè)站點(diǎn)上其他的一些頁(yè)面時(shí)內(nèi)容才會(huì)被提交。這個(gè)時(shí)候你可以用加上”Referer:”參數(shù):
bash$ wget –header=”Referer: http://coming.from.this/page” http://surfing.to.this/page
有些特殊的網(wǎng)站只支持某種特定的瀏覽器,這個(gè)時(shí)候可以用”User-Agent:”參數(shù)
bash$ wget –header=”User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)” http://msie.only.url/here
C.那我怎么設(shè)定下載時(shí)間呢?
如果你需要在你的辦公電腦上通過(guò)和其他同事共享的一個(gè)連接來(lái)下載一些很大的文件,而且你希望你的同事不會(huì)因?yàn)榫W(wǎng)絡(luò)速度的減慢而收到影響,那你就應(yīng)該盡量避開(kāi)高峰時(shí)段。當(dāng)然,不需要在辦公室里等到所以人都走掉,也不需要在家里用完晚飯后還惦記著要上網(wǎng)下載一次。
用at來(lái)就可以很好的定制工作時(shí)間:
bash$ at 23:00
warning: commands will be executed using /bin/sh
at> wget http://place.your.url/here
at> press Ctrl-D
這樣,我們?cè)O(shè)定了下載工作在晚上11點(diǎn)進(jìn)行。為了使這個(gè)安排能夠正常進(jìn)行,請(qǐng)確
認(rèn)atd這個(gè)后臺(tái)程序正在運(yùn)行。
D.下載要花很多時(shí)間?
當(dāng)你需要下載大量的數(shù)據(jù),而且你又沒(méi)有享有足夠的帶寬,這個(gè)時(shí)候你會(huì)經(jīng)常發(fā)現(xiàn)在你安排的下載任務(wù)還沒(méi)有完成,一天的工作卻又要開(kāi)始了。
作為一個(gè)好同事,你只能停掉了這些任務(wù),而開(kāi)始另外的工作。然后你又需要反復(fù)地重復(fù)使用”wget -c”來(lái)完成你的下載。這樣肯定太繁瑣了,所以最好是用crontab來(lái)自動(dòng)執(zhí)行。創(chuàng)建一個(gè)純文本文件,叫做”crontab.txt”,包含下面的內(nèi)容:
0 23 * * 1-5 wget -c -N http://place.your.url/here
0 6 * * 1-5 killall wget
這個(gè)crontab文件指定某些任務(wù)定期地執(zhí)行。前五列聲明是什么時(shí)候執(zhí)行這個(gè)命令,而每行的剩余部分則告訴crontab執(zhí)行什么內(nèi)容。
前兩列指定了每天一到晚上11點(diǎn)就開(kāi)始用wget下載,一到早上6點(diǎn)就停止一切wget下載。第三四列的*表示每個(gè)月的每一天都執(zhí)行這個(gè)任務(wù)。第五列則指定了一個(gè)星期的哪幾天來(lái)執(zhí)行這個(gè)程序。 –”1-5″表示從星期一到星期五。
這樣在每個(gè)工作日的晚上11點(diǎn),下載工作開(kāi)始,到了上午的6點(diǎn),任何的wget任務(wù)就被停掉了。你可以用下面的命令來(lái)執(zhí)行crontab:bash$ crontab crontab.txt
wget的這個(gè)”-N”參數(shù)將會(huì)檢查目標(biāo)文件的時(shí)間戳,如果匹配了,下載程序就會(huì)停止,因?yàn)樗f(shuō)明整個(gè)文件已經(jīng)下載完全了。
用”crontab -r”可以刪除這個(gè)計(jì)劃安排。我已經(jīng)多次采用這種方法,通過(guò)共享的電話撥號(hào)來(lái)下載過(guò)很多的ISO鏡像文件,還是比較實(shí)用的。
E.如何下載動(dòng)態(tài)變化的網(wǎng)頁(yè)
有些網(wǎng)頁(yè)每天都要根據(jù)要求變化好幾次.所以從技術(shù)上講,目標(biāo)不再是一個(gè)文件,它沒(méi)有文件長(zhǎng)度.因此”-c”這個(gè)參數(shù)也就失去了意義.
例如:一個(gè)PHP寫(xiě)的并且經(jīng)常變動(dòng)的linux周末新聞網(wǎng)頁(yè):
bash$ wget http://lwn.net/bigpage.php3
我辦公室里的網(wǎng)絡(luò)條件經(jīng)常很差,給我的下載帶了很大的麻煩,所以我寫(xiě)了個(gè)簡(jiǎn)單的腳本來(lái)檢測(cè)動(dòng)態(tài)頁(yè)面是否已經(jīng)完全更新了.
#!/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
這個(gè)腳本能夠保證持續(xù)的下載該網(wǎng)頁(yè),直到網(wǎng)頁(yè)里面出現(xiàn)了" ",這就表示該文件已經(jīng)完全更新了.
F.對(duì)于ssl和Cookies怎么辦?
如果你要通過(guò)ssl來(lái)上網(wǎng),那么網(wǎng)站地址應(yīng)該是以”https://”來(lái)開(kāi)頭的.在這樣的情況下你就需要另外一種下載工具,叫做curl,它能夠很容易獲得.有些網(wǎng)站迫使網(wǎng)友在瀏覽的時(shí)候必須使用cookie.所以你必須從在網(wǎng)站上得到的那個(gè)Cookie里面得到”Cookie:”這個(gè)參數(shù).這樣才
能保證下載的參數(shù)正確.對(duì)于lynx和Mozilla的Cookie的文件格式,用下面的:
bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf(”%s=%s;”,$6,$7)} )
就可以構(gòu)造一個(gè)請(qǐng)求Cookie來(lái)下載http://www.nytimes.com上的內(nèi)容.當(dāng)然,你要已經(jīng)用這個(gè)瀏覽器在該網(wǎng)站上完成注冊(cè).
w3m使用了一種不同的,更小巧的Cookie文件格式:
bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf(”%s=%s;”,$2,$3)} )
現(xiàn)在就可以用這種方法來(lái)下載了:
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.如何建立地址列表?
到現(xiàn)在為止我們下載的都是單個(gè)文件或者是整個(gè)網(wǎng)站.有的時(shí)候我們需要下載某個(gè)網(wǎng)頁(yè)上鏈接的大量文件,但沒(méi)有必要把它整個(gè)網(wǎng)站都鏡像下來(lái).比如說(shuō)我們想從一個(gè)依次排列的100首歌里面下載前20首.注意,這里”–accept”和”–reject”參數(shù)是不會(huì)起作用的,因?yàn)樗麄冎粚?duì)文件操作起作用.所以一定要用”lynx -dump”參數(shù)來(lái)代替.
bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep gz$ |tail -10 |awk {print $2} > urllist.txt
lynx的輸出結(jié)果可以被各種GNU文本處理工具過(guò)慮.在上面的例子里,我們的鏈接地址是以”gz”結(jié)尾的,并且把最后10個(gè)文件地址放到urllist.txt文件里.然后我們可以寫(xiě)一個(gè)簡(jiǎn)單的bash腳本來(lái)自動(dòng)下載這個(gè)文件里的目標(biāo)文件:
bash$ for x in $(cat urllist.txt)
> do
> wget $x
> done
這樣我們就能夠成功下載Linux Gazette網(wǎng)站(ftp://ftp.ssc.com/pub/lg/)上的最新10個(gè)論題.
H.擴(kuò)大使用的帶寬
如果你選擇下載一個(gè)受帶寬限制的文件,那你的下載會(huì)因?yàn)榉?wù)器端的限制而變得很慢.下面這個(gè)技巧會(huì)大大縮短下載的過(guò)程.但這個(gè)技巧需要你使用curl并且遠(yuǎn)程服務(wù)器有多個(gè)鏡像可以供你下載.例如,假設(shè)你想從下面的三個(gè)地址下載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
這個(gè)文件的長(zhǎng)度是677281792個(gè)字節(jié),所以用curl程序加”–range”參數(shù)來(lái)建立三個(gè)同時(shí)進(jìn)行的下載:
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 &
這樣就創(chuàng)建了三個(gè)后臺(tái)進(jìn)程.每個(gè)進(jìn)程從不同的服務(wù)器傳輸這個(gè)ISO文件的不同部分.這個(gè)”-r”參數(shù)指定目標(biāo)文件的字節(jié)范圍.當(dāng)這三個(gè)
進(jìn)程結(jié)束后,用一個(gè)簡(jiǎn)單的cat命令來(lái)把這三個(gè)文件銜接起來(lái)– cat mdk-iso.part? > mdk-80.iso.(強(qiáng)烈建議在刻盤(pán)之前先檢查md5)
你也可以用”–verbose”參數(shù)來(lái)使每個(gè)curl進(jìn)程都有自己的窗口來(lái)顯示傳輸?shù)倪^(guò)程.
下載到指定目錄
wget -P/tmp ftp://user:passwd@url/file
把文件file下載到/tmp目錄下??戳?ldquo;Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件”還想看:
,)} )現(xiàn)在就可以用這種方法來(lái)下載了:
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.如何建立地址列表?
到現(xiàn)在為止我們下載的都是單個(gè)文件或者是整個(gè)網(wǎng)站.有的時(shí)候我們需要下載某個(gè)網(wǎng)頁(yè)上鏈接的大量文件,但沒(méi)有必要把它整個(gè)網(wǎng)站都鏡像下來(lái).比如說(shuō)我們想從一個(gè)依次排列的100首歌里面下載前20首.注意,這里”–accept”和”–reject”參數(shù)是不會(huì)起作用的,因?yàn)樗麄冎粚?duì)文件操作起作用.所以一定要用”lynx -dump”參數(shù)來(lái)代替.
bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep gz$ |tail -10 |awk {print
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
wget的使用形式是:wget[參數(shù)列表]URL,接下來(lái)是小編為大家收集的Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件,歡迎大家閱讀:
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
首先來(lái)介紹一下wget的主要參數(shù):
· -b:讓wget在后臺(tái)運(yùn)行,記錄文件寫(xiě)在當(dāng)前目錄下”wget-log”文件中;
· -t [nuber of times]:嘗試次數(shù),當(dāng)wget無(wú)法與服務(wù)器建立連接時(shí),嘗試連接多少次 。比如”-t 120″表示嘗試120次。當(dāng)這一項(xiàng)為”0″的時(shí)候,指定嘗試無(wú)窮多次直到連接成功為止,這個(gè) 設(shè)置非常有用,當(dāng)對(duì)方服務(wù)器突然關(guān)機(jī)或者網(wǎng)絡(luò)突然中斷的時(shí)候,可以在恢復(fù)正常后繼續(xù) 下載沒(méi)有傳完的文件;
·-c:斷點(diǎn)續(xù)傳,這也是個(gè)非常有用的設(shè)置,特別當(dāng)下載比較大的文件的時(shí)候,如果中途意外中斷,那么連接恢復(fù)的時(shí)候會(huì)從上次沒(méi)傳完的地方接著傳,而不是又從頭開(kāi)始,使用這一項(xiàng)需要遠(yuǎn)程服務(wù)器也支持?jǐn)帱c(diǎn)續(xù)傳,一般來(lái)講,基于UNIX/Linux的Web/FTP服務(wù)器 都支持?jǐn)帱c(diǎn)續(xù)傳;
· -T [number of seconds]:超時(shí)時(shí)間,指定多長(zhǎng)時(shí)間遠(yuǎn)程服務(wù)器沒(méi)有響應(yīng)就中斷連接 ,開(kāi)始下一次嘗試。比如”-T 120″表示如果120秒以后遠(yuǎn)程服務(wù)器沒(méi)有發(fā)過(guò)來(lái)數(shù)據(jù),就重新嘗試連接。如果網(wǎng)絡(luò)速度比較快,這個(gè)時(shí)間可以設(shè)置的短些,相反,可以設(shè)置的長(zhǎng)一些,一般最多不超過(guò)900,通常也不少于60,一般設(shè)置在120左右比較合適;
· -w [number of seconds]:在兩次嘗試之間等待多少秒,比如”-w 100″表示兩次嘗試 之間等待100秒;
· -Y on/off:通過(guò)/不通過(guò)代理服務(wù)器進(jìn)行連接;
· -Q [byetes]:限制下載文件的總大小最多不能超過(guò)多少,比如”-Q2k”表示不能超過(guò)2K 字節(jié),”-Q3m”表示最多不能超過(guò)3M字節(jié),如果數(shù)字后面什么都不加,就表示是以字節(jié)為單 位,比如”-Q200″表示最多不能超過(guò)200字節(jié);
· -nd:不下載目錄結(jié)構(gòu),把從服務(wù)器所有指定目錄下載的文件都堆到當(dāng)前目錄里;
· -x:與”-nd”設(shè)置剛好相反,創(chuàng)建完整的目錄結(jié)構(gòu),例如”wget -x http://www.gnu.org”將在當(dāng)前目錄下創(chuàng)建”www.gnu.org”子目錄,然后按照服務(wù)器 實(shí)際的目錄結(jié)構(gòu)一級(jí)一級(jí)建下去,直到所有的文件都傳完為止;
· -nH:不創(chuàng)建以目標(biāo)主機(jī)域名為目錄名的目錄,將目標(biāo)主機(jī)的目錄結(jié)構(gòu)直接下到當(dāng)前目錄下;
· –http-user=username · –http-passwd=password:如果Web服務(wù)器需要指定用戶名和口令,用這兩項(xiàng)來(lái)設(shè)定;
· –proxy-user=username · –proxy-passwd=password:如果代理服務(wù)器需要輸入用戶名和口令,使用這兩個(gè)選項(xiàng) ;
· -r:在本機(jī)建立服務(wù)器端目錄結(jié)構(gòu);
· -l [depth]:下載遠(yuǎn)程服務(wù)器目錄結(jié)構(gòu)的深度,例如”-l 5″下載目錄深度小于或者等 于5以內(nèi)的目錄結(jié)構(gòu)或者文件;
· -m:做站點(diǎn)鏡像時(shí)的選項(xiàng),如果你想做一個(gè)站點(diǎn)的鏡像,使用這個(gè)選項(xiàng),它將自動(dòng)設(shè)定其他合適的選項(xiàng)以便于站點(diǎn)鏡像;
· -np:只下載目標(biāo)站點(diǎn)指定目錄及其子目錄的內(nèi)容。這也是一個(gè)非常有用的選項(xiàng),我們假設(shè)某個(gè)人的個(gè)人主頁(yè)里面有一個(gè)指向這個(gè)站點(diǎn)其他人個(gè)人主頁(yè)的連接,而我們只想下載這個(gè)人的個(gè)人主頁(yè),如果不設(shè)置這個(gè)選項(xiàng),甚至–有可能把整個(gè)站點(diǎn)給抓下來(lái),這顯然是我們通常不希望的;
ü 如何設(shè)定wget所使用的代理服務(wù)器 wget
可以使用用戶設(shè)置文件”.wgetrc”來(lái)讀取很多設(shè)置,我們這里主要利用這個(gè)文件來(lái)是
設(shè)置代理服務(wù)器。使用者用什么用戶登錄,那么什么用戶主目錄下的”.wgetrc”文件就起
作用。例如,”root”用戶如果想使用”.wgetrc”來(lái)設(shè)置代理服務(wù)器,”/root/.wgert”就起 作用,下面給出一個(gè)”.wge trc”文件的內(nèi)容,讀者可以參照這個(gè)例子來(lái)編寫(xiě)自己的”wgetrc”文件:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
這兩行的含義是,代理服務(wù)器IP地址為:111.111.111.111,端口號(hào)為:80。第一行指定 HTTP協(xié)議所使用的代理服務(wù)器,第二行指定FTP協(xié)議所使用的代理服務(wù)器。
下面就開(kāi)始實(shí)戰(zhàn)吧!
A.使用wget工具
linux所以的主要版本都自帶了wget這個(gè)下載工具.
bash$ wget http://place.your.url/here
它還能控制ftp來(lái)下載整個(gè)web站點(diǎn)的各級(jí)目錄,當(dāng)然,如果你不小心,可能會(huì)把整個(gè)網(wǎng)站以及其他和他做鏈接的網(wǎng)站全部下載下來(lái).
bash$ wget -m http://target.web.site/subdirectory
由于這個(gè)工具具有很強(qiáng)的下載能力,所以可以在服務(wù)器上把它用作鏡像網(wǎng)站的工具.讓它按照”robots.txt”的規(guī)定來(lái)執(zhí)行.
有很多參數(shù)用來(lái)控制它如何正確地做鏡像,可以限制鏈接的類型和下載文件的類型等等.例如:只下載有聯(lián)系的鏈接并且忽略GIF圖片:
bash$ wget -m -L –reject=gif http://target.web.site/subdirectory
wget也能夠?qū)崿F(xiàn)斷點(diǎn)續(xù)傳(-c參數(shù)),當(dāng)然,這種操作是需要遠(yuǎn)程服務(wù)器支持的.
bash$ wget -c http://the.url.of/incomplete/file
可以把斷點(diǎn)續(xù)傳和鏡像功能結(jié)合起來(lái),這樣可以在以前斷過(guò)多次的情況下繼續(xù)鏡像一個(gè)有大量選擇性文件的站點(diǎn).如何自動(dòng)實(shí)現(xiàn)這個(gè)目的我們?cè)诤竺鏁?huì)討論得更多.
如果你覺(jué)得下載時(shí)老是斷線會(huì)影響你辦公的話,你可以限制wget重試的次數(shù).
bash$ wget -t 5 http://place.your.url/here
這樣重試五次后就放棄了.用”-t inf”參數(shù)表示永遠(yuǎn)不放棄.不停地重試.
B.那對(duì)于代理服務(wù)該怎么辦呢?
可以使用http代理的參數(shù)或者在.wgetrc配置文件里指定一個(gè)如何通過(guò)代理去下載的途徑.但是有這么一個(gè)問(wèn)題,如果通過(guò)代理來(lái)進(jìn)行斷點(diǎn)續(xù)傳的話可能會(huì)有幾次失敗.如果有一次通過(guò)代理下載的過(guò)程發(fā)生中斷,那么代理服務(wù)器上緩存里保存是那個(gè)完整的文件拷貝.所以當(dāng)你用”wget -c”來(lái)下載剩余部分的時(shí)候代理服務(wù)器查看它的緩存,并錯(cuò)誤地認(rèn)為你已經(jīng)下載了整個(gè)文件.于是就發(fā)出了錯(cuò)誤的信號(hào).
這個(gè)時(shí)候你可以用添加一個(gè)特定的請(qǐng)求參數(shù)來(lái)促使代理服務(wù)器清除他們的緩存:
bash$ wget -c –header=”Pragma: no-cache” http://place.your.url/here
這個(gè)”–header”參數(shù)能夠以各種數(shù)字,各種方式添加。通過(guò)它我們可以更改web服務(wù)器或者代理服務(wù)器的某些屬性。有些站點(diǎn)不提供外部連接的文件服務(wù),只有通過(guò)同一個(gè)站點(diǎn)上其他的一些頁(yè)面時(shí)內(nèi)容才會(huì)被提交。這個(gè)時(shí)候你可以用加上”Referer:”參數(shù):
bash$ wget –header=”Referer: http://coming.from.this/page” http://surfing.to.this/page
有些特殊的網(wǎng)站只支持某種特定的瀏覽器,這個(gè)時(shí)候可以用”User-Agent:”參數(shù)
bash$ wget –header=”User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)” http://msie.only.url/here
C.那我怎么設(shè)定下載時(shí)間呢?
如果你需要在你的辦公電腦上通過(guò)和其他同事共享的一個(gè)連接來(lái)下載一些很大的文件,而且你希望你的同事不會(huì)因?yàn)榫W(wǎng)絡(luò)速度的減慢而收到影響,那你就應(yīng)該盡量避開(kāi)高峰時(shí)段。當(dāng)然,不需要在辦公室里等到所以人都走掉,也不需要在家里用完晚飯后還惦記著要上網(wǎng)下載一次。
用at來(lái)就可以很好的定制工作時(shí)間:
bash$ at 23:00
warning: commands will be executed using /bin/sh
at> wget http://place.your.url/here
at> press Ctrl-D
這樣,我們?cè)O(shè)定了下載工作在晚上11點(diǎn)進(jìn)行。為了使這個(gè)安排能夠正常進(jìn)行,請(qǐng)確
認(rèn)atd這個(gè)后臺(tái)程序正在運(yùn)行。
D.下載要花很多時(shí)間?
當(dāng)你需要下載大量的數(shù)據(jù),而且你又沒(méi)有享有足夠的帶寬,這個(gè)時(shí)候你會(huì)經(jīng)常發(fā)現(xiàn)在你安排的下載任務(wù)還沒(méi)有完成,一天的工作卻又要開(kāi)始了。
作為一個(gè)好同事,你只能停掉了這些任務(wù),而開(kāi)始另外的工作。然后你又需要反復(fù)地重復(fù)使用”wget -c”來(lái)完成你的下載。這樣肯定太繁瑣了,所以最好是用crontab來(lái)自動(dòng)執(zhí)行。創(chuàng)建一個(gè)純文本文件,叫做”crontab.txt”,包含下面的內(nèi)容:
0 23 * * 1-5 wget -c -N http://place.your.url/here
0 6 * * 1-5 killall wget
這個(gè)crontab文件指定某些任務(wù)定期地執(zhí)行。前五列聲明是什么時(shí)候執(zhí)行這個(gè)命令,而每行的剩余部分則告訴crontab執(zhí)行什么內(nèi)容。
前兩列指定了每天一到晚上11點(diǎn)就開(kāi)始用wget下載,一到早上6點(diǎn)就停止一切wget下載。第三四列的*表示每個(gè)月的每一天都執(zhí)行這個(gè)任務(wù)。第五列則指定了一個(gè)星期的哪幾天來(lái)執(zhí)行這個(gè)程序。 –”1-5″表示從星期一到星期五。
這樣在每個(gè)工作日的晚上11點(diǎn),下載工作開(kāi)始,到了上午的6點(diǎn),任何的wget任務(wù)就被停掉了。你可以用下面的命令來(lái)執(zhí)行crontab:bash$ crontab crontab.txt
wget的這個(gè)”-N”參數(shù)將會(huì)檢查目標(biāo)文件的時(shí)間戳,如果匹配了,下載程序就會(huì)停止,因?yàn)樗f(shuō)明整個(gè)文件已經(jīng)下載完全了。
用”crontab -r”可以刪除這個(gè)計(jì)劃安排。我已經(jīng)多次采用這種方法,通過(guò)共享的電話撥號(hào)來(lái)下載過(guò)很多的ISO鏡像文件,還是比較實(shí)用的。
E.如何下載動(dòng)態(tài)變化的網(wǎng)頁(yè)
有些網(wǎng)頁(yè)每天都要根據(jù)要求變化好幾次.所以從技術(shù)上講,目標(biāo)不再是一個(gè)文件,它沒(méi)有文件長(zhǎng)度.因此”-c”這個(gè)參數(shù)也就失去了意義.
例如:一個(gè)PHP寫(xiě)的并且經(jīng)常變動(dòng)的linux周末新聞網(wǎng)頁(yè):
bash$ wget http://lwn.net/bigpage.php3
我辦公室里的網(wǎng)絡(luò)條件經(jīng)常很差,給我的下載帶了很大的麻煩,所以我寫(xiě)了個(gè)簡(jiǎn)單的腳本來(lái)檢測(cè)動(dòng)態(tài)頁(yè)面是否已經(jīng)完全更新了.
#!/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
這個(gè)腳本能夠保證持續(xù)的下載該網(wǎng)頁(yè),直到網(wǎng)頁(yè)里面出現(xiàn)了" ",這就表示該文件已經(jīng)完全更新了.
F.對(duì)于ssl和Cookies怎么辦?
如果你要通過(guò)ssl來(lái)上網(wǎng),那么網(wǎng)站地址應(yīng)該是以”https://”來(lái)開(kāi)頭的.在這樣的情況下你就需要另外一種下載工具,叫做curl,它能夠很容易獲得.有些網(wǎng)站迫使網(wǎng)友在瀏覽的時(shí)候必須使用cookie.所以你必須從在網(wǎng)站上得到的那個(gè)Cookie里面得到”Cookie:”這個(gè)參數(shù).這樣才
能保證下載的參數(shù)正確.對(duì)于lynx和Mozilla的Cookie的文件格式,用下面的:
bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf(”%s=%s;”,$6,$7)} )
就可以構(gòu)造一個(gè)請(qǐng)求Cookie來(lái)下載http://www.nytimes.com上的內(nèi)容.當(dāng)然,你要已經(jīng)用這個(gè)瀏覽器在該網(wǎng)站上完成注冊(cè).
w3m使用了一種不同的,更小巧的Cookie文件格式:
bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf(”%s=%s;”,$2,$3)} )
現(xiàn)在就可以用這種方法來(lái)下載了:
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.如何建立地址列表?
到現(xiàn)在為止我們下載的都是單個(gè)文件或者是整個(gè)網(wǎng)站.有的時(shí)候我們需要下載某個(gè)網(wǎng)頁(yè)上鏈接的大量文件,但沒(méi)有必要把它整個(gè)網(wǎng)站都鏡像下來(lái).比如說(shuō)我們想從一個(gè)依次排列的100首歌里面下載前20首.注意,這里”–accept”和”–reject”參數(shù)是不會(huì)起作用的,因?yàn)樗麄冎粚?duì)文件操作起作用.所以一定要用”lynx -dump”參數(shù)來(lái)代替.
bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep gz$ |tail -10 |awk {print $2} > urllist.txt
lynx的輸出結(jié)果可以被各種GNU文本處理工具過(guò)慮.在上面的例子里,我們的鏈接地址是以”gz”結(jié)尾的,并且把最后10個(gè)文件地址放到urllist.txt文件里.然后我們可以寫(xiě)一個(gè)簡(jiǎn)單的bash腳本來(lái)自動(dòng)下載這個(gè)文件里的目標(biāo)文件:
bash$ for x in $(cat urllist.txt)
> do
> wget $x
> done
這樣我們就能夠成功下載Linux Gazette網(wǎng)站(ftp://ftp.ssc.com/pub/lg/)上的最新10個(gè)論題.
H.擴(kuò)大使用的帶寬
如果你選擇下載一個(gè)受帶寬限制的文件,那你的下載會(huì)因?yàn)榉?wù)器端的限制而變得很慢.下面這個(gè)技巧會(huì)大大縮短下載的過(guò)程.但這個(gè)技巧需要你使用curl并且遠(yuǎn)程服務(wù)器有多個(gè)鏡像可以供你下載.例如,假設(shè)你想從下面的三個(gè)地址下載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
這個(gè)文件的長(zhǎng)度是677281792個(gè)字節(jié),所以用curl程序加”–range”參數(shù)來(lái)建立三個(gè)同時(shí)進(jìn)行的下載:
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 &
這樣就創(chuàng)建了三個(gè)后臺(tái)進(jìn)程.每個(gè)進(jìn)程從不同的服務(wù)器傳輸這個(gè)ISO文件的不同部分.這個(gè)”-r”參數(shù)指定目標(biāo)文件的字節(jié)范圍.當(dāng)這三個(gè)
進(jìn)程結(jié)束后,用一個(gè)簡(jiǎn)單的cat命令來(lái)把這三個(gè)文件銜接起來(lái)– cat mdk-iso.part? > mdk-80.iso.(強(qiáng)烈建議在刻盤(pán)之前先檢查md5)
你也可以用”–verbose”參數(shù)來(lái)使每個(gè)curl進(jìn)程都有自己的窗口來(lái)顯示傳輸?shù)倪^(guò)程.
下載到指定目錄
wget -P/tmp ftp://user:passwd@url/file
把文件file下載到/tmp目錄下??戳?ldquo;Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件”還想看:
} > urllist.txtlynx的輸出結(jié)果可以被各種GNU文本處理工具過(guò)慮.在上面的例子里,我們的鏈接地址是以”gz”結(jié)尾的,并且把最后10個(gè)文件地址放到urllist.txt文件里.然后我們可以寫(xiě)一個(gè)簡(jiǎn)單的bash腳本來(lái)自動(dòng)下載這個(gè)文件里的目標(biāo)文件:
bash$ for x in $(cat urllist.txt)
> do
> wget $x
> done
這樣我們就能夠成功下載Linux Gazette網(wǎng)站(ftp://ftp.ssc.com/pub/lg/)上的最新10個(gè)論題.
H.擴(kuò)大使用的帶寬
如果你選擇下載一個(gè)受帶寬限制的文件,那你的下載會(huì)因?yàn)榉?wù)器端的限制而變得很慢.下面這個(gè)技巧會(huì)大大縮短下載的過(guò)程.但這個(gè)技巧需要你使用curl并且遠(yuǎn)程服務(wù)器有多個(gè)鏡像可以供你下載.例如,假設(shè)你想從下面的三個(gè)地址下載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
這個(gè)文件的長(zhǎng)度是677281792個(gè)字節(jié),所以用curl程序加”–range”參數(shù)來(lái)建立三個(gè)同時(shí)進(jìn)行的下載:
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 &
這樣就創(chuàng)建了三個(gè)后臺(tái)進(jìn)程.每個(gè)進(jìn)程從不同的服務(wù)器傳輸這個(gè)ISO文件的不同部分.這個(gè)”-r”參數(shù)指定目標(biāo)文件的字節(jié)范圍.當(dāng)這三個(gè)
進(jìn)程結(jié)束后,用一個(gè)簡(jiǎn)單的cat命令來(lái)把這三個(gè)文件銜接起來(lái)– cat mdk-iso.part? > mdk-80.iso.(強(qiáng)烈建議在刻盤(pán)之前先檢查md5)
你也可以用”–verbose”參數(shù)來(lái)使每個(gè)curl進(jìn)程都有自己的窗口來(lái)顯示傳輸?shù)倪^(guò)程.
下載到指定目錄
wget -P/tmp ftp://user:passwd@url/file
把文件file下載到/tmp目錄下??戳?ldquo;Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件”還想看:
,)} )現(xiàn)在就可以用這種方法來(lái)下載了:
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.如何建立地址列表?
到現(xiàn)在為止我們下載的都是單個(gè)文件或者是整個(gè)網(wǎng)站.有的時(shí)候我們需要下載某個(gè)網(wǎng)頁(yè)上鏈接的大量文件,但沒(méi)有必要把它整個(gè)網(wǎng)站都鏡像下來(lái).比如說(shuō)我們想從一個(gè)依次排列的100首歌里面下載前20首.注意,這里”–accept”和”–reject”參數(shù)是不會(huì)起作用的,因?yàn)樗麄冎粚?duì)文件操作起作用.所以一定要用”lynx -dump”參數(shù)來(lái)代替.
bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep gz$ |tail -10 |awk {print
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
wget的使用形式是:wget[參數(shù)列表]URL,接下來(lái)是小編為大家收集的Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件,歡迎大家閱讀:
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
首先來(lái)介紹一下wget的主要參數(shù):
· -b:讓wget在后臺(tái)運(yùn)行,記錄文件寫(xiě)在當(dāng)前目錄下”wget-log”文件中;
· -t [nuber of times]:嘗試次數(shù),當(dāng)wget無(wú)法與服務(wù)器建立連接時(shí),嘗試連接多少次 。比如”-t 120″表示嘗試120次。當(dāng)這一項(xiàng)為”0″的時(shí)候,指定嘗試無(wú)窮多次直到連接成功為止,這個(gè) 設(shè)置非常有用,當(dāng)對(duì)方服務(wù)器突然關(guān)機(jī)或者網(wǎng)絡(luò)突然中斷的時(shí)候,可以在恢復(fù)正常后繼續(xù) 下載沒(méi)有傳完的文件;
·-c:斷點(diǎn)續(xù)傳,這也是個(gè)非常有用的設(shè)置,特別當(dāng)下載比較大的文件的時(shí)候,如果中途意外中斷,那么連接恢復(fù)的時(shí)候會(huì)從上次沒(méi)傳完的地方接著傳,而不是又從頭開(kāi)始,使用這一項(xiàng)需要遠(yuǎn)程服務(wù)器也支持?jǐn)帱c(diǎn)續(xù)傳,一般來(lái)講,基于UNIX/Linux的Web/FTP服務(wù)器 都支持?jǐn)帱c(diǎn)續(xù)傳;
· -T [number of seconds]:超時(shí)時(shí)間,指定多長(zhǎng)時(shí)間遠(yuǎn)程服務(wù)器沒(méi)有響應(yīng)就中斷連接 ,開(kāi)始下一次嘗試。比如”-T 120″表示如果120秒以后遠(yuǎn)程服務(wù)器沒(méi)有發(fā)過(guò)來(lái)數(shù)據(jù),就重新嘗試連接。如果網(wǎng)絡(luò)速度比較快,這個(gè)時(shí)間可以設(shè)置的短些,相反,可以設(shè)置的長(zhǎng)一些,一般最多不超過(guò)900,通常也不少于60,一般設(shè)置在120左右比較合適;
· -w [number of seconds]:在兩次嘗試之間等待多少秒,比如”-w 100″表示兩次嘗試 之間等待100秒;
· -Y on/off:通過(guò)/不通過(guò)代理服務(wù)器進(jìn)行連接;
· -Q [byetes]:限制下載文件的總大小最多不能超過(guò)多少,比如”-Q2k”表示不能超過(guò)2K 字節(jié),”-Q3m”表示最多不能超過(guò)3M字節(jié),如果數(shù)字后面什么都不加,就表示是以字節(jié)為單 位,比如”-Q200″表示最多不能超過(guò)200字節(jié);
· -nd:不下載目錄結(jié)構(gòu),把從服務(wù)器所有指定目錄下載的文件都堆到當(dāng)前目錄里;
· -x:與”-nd”設(shè)置剛好相反,創(chuàng)建完整的目錄結(jié)構(gòu),例如”wget -x http://www.gnu.org”將在當(dāng)前目錄下創(chuàng)建”www.gnu.org”子目錄,然后按照服務(wù)器 實(shí)際的目錄結(jié)構(gòu)一級(jí)一級(jí)建下去,直到所有的文件都傳完為止;
· -nH:不創(chuàng)建以目標(biāo)主機(jī)域名為目錄名的目錄,將目標(biāo)主機(jī)的目錄結(jié)構(gòu)直接下到當(dāng)前目錄下;
· –http-user=username · –http-passwd=password:如果Web服務(wù)器需要指定用戶名和口令,用這兩項(xiàng)來(lái)設(shè)定;
· –proxy-user=username · –proxy-passwd=password:如果代理服務(wù)器需要輸入用戶名和口令,使用這兩個(gè)選項(xiàng) ;
· -r:在本機(jī)建立服務(wù)器端目錄結(jié)構(gòu);
· -l [depth]:下載遠(yuǎn)程服務(wù)器目錄結(jié)構(gòu)的深度,例如”-l 5″下載目錄深度小于或者等 于5以內(nèi)的目錄結(jié)構(gòu)或者文件;
· -m:做站點(diǎn)鏡像時(shí)的選項(xiàng),如果你想做一個(gè)站點(diǎn)的鏡像,使用這個(gè)選項(xiàng),它將自動(dòng)設(shè)定其他合適的選項(xiàng)以便于站點(diǎn)鏡像;
· -np:只下載目標(biāo)站點(diǎn)指定目錄及其子目錄的內(nèi)容。這也是一個(gè)非常有用的選項(xiàng),我們假設(shè)某個(gè)人的個(gè)人主頁(yè)里面有一個(gè)指向這個(gè)站點(diǎn)其他人個(gè)人主頁(yè)的連接,而我們只想下載這個(gè)人的個(gè)人主頁(yè),如果不設(shè)置這個(gè)選項(xiàng),甚至–有可能把整個(gè)站點(diǎn)給抓下來(lái),這顯然是我們通常不希望的;
ü 如何設(shè)定wget所使用的代理服務(wù)器 wget
可以使用用戶設(shè)置文件”.wgetrc”來(lái)讀取很多設(shè)置,我們這里主要利用這個(gè)文件來(lái)是
設(shè)置代理服務(wù)器。使用者用什么用戶登錄,那么什么用戶主目錄下的”.wgetrc”文件就起
作用。例如,”root”用戶如果想使用”.wgetrc”來(lái)設(shè)置代理服務(wù)器,”/root/.wgert”就起 作用,下面給出一個(gè)”.wge trc”文件的內(nèi)容,讀者可以參照這個(gè)例子來(lái)編寫(xiě)自己的”wgetrc”文件:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
這兩行的含義是,代理服務(wù)器IP地址為:111.111.111.111,端口號(hào)為:80。第一行指定 HTTP協(xié)議所使用的代理服務(wù)器,第二行指定FTP協(xié)議所使用的代理服務(wù)器。
下面就開(kāi)始實(shí)戰(zhàn)吧!
A.使用wget工具
linux所以的主要版本都自帶了wget這個(gè)下載工具.
bash$ wget http://place.your.url/here
它還能控制ftp來(lái)下載整個(gè)web站點(diǎn)的各級(jí)目錄,當(dāng)然,如果你不小心,可能會(huì)把整個(gè)網(wǎng)站以及其他和他做鏈接的網(wǎng)站全部下載下來(lái).
bash$ wget -m http://target.web.site/subdirectory
由于這個(gè)工具具有很強(qiáng)的下載能力,所以可以在服務(wù)器上把它用作鏡像網(wǎng)站的工具.讓它按照”robots.txt”的規(guī)定來(lái)執(zhí)行.
有很多參數(shù)用來(lái)控制它如何正確地做鏡像,可以限制鏈接的類型和下載文件的類型等等.例如:只下載有聯(lián)系的鏈接并且忽略GIF圖片:
bash$ wget -m -L –reject=gif http://target.web.site/subdirectory
wget也能夠?qū)崿F(xiàn)斷點(diǎn)續(xù)傳(-c參數(shù)),當(dāng)然,這種操作是需要遠(yuǎn)程服務(wù)器支持的.
bash$ wget -c http://the.url.of/incomplete/file
可以把斷點(diǎn)續(xù)傳和鏡像功能結(jié)合起來(lái),這樣可以在以前斷過(guò)多次的情況下繼續(xù)鏡像一個(gè)有大量選擇性文件的站點(diǎn).如何自動(dòng)實(shí)現(xiàn)這個(gè)目的我們?cè)诤竺鏁?huì)討論得更多.
如果你覺(jué)得下載時(shí)老是斷線會(huì)影響你辦公的話,你可以限制wget重試的次數(shù).
bash$ wget -t 5 http://place.your.url/here
這樣重試五次后就放棄了.用”-t inf”參數(shù)表示永遠(yuǎn)不放棄.不停地重試.
B.那對(duì)于代理服務(wù)該怎么辦呢?
可以使用http代理的參數(shù)或者在.wgetrc配置文件里指定一個(gè)如何通過(guò)代理去下載的途徑.但是有這么一個(gè)問(wèn)題,如果通過(guò)代理來(lái)進(jìn)行斷點(diǎn)續(xù)傳的話可能會(huì)有幾次失敗.如果有一次通過(guò)代理下載的過(guò)程發(fā)生中斷,那么代理服務(wù)器上緩存里保存是那個(gè)完整的文件拷貝.所以當(dāng)你用”wget -c”來(lái)下載剩余部分的時(shí)候代理服務(wù)器查看它的緩存,并錯(cuò)誤地認(rèn)為你已經(jīng)下載了整個(gè)文件.于是就發(fā)出了錯(cuò)誤的信號(hào).
這個(gè)時(shí)候你可以用添加一個(gè)特定的請(qǐng)求參數(shù)來(lái)促使代理服務(wù)器清除他們的緩存:
bash$ wget -c –header=”Pragma: no-cache” http://place.your.url/here
這個(gè)”–header”參數(shù)能夠以各種數(shù)字,各種方式添加。通過(guò)它我們可以更改web服務(wù)器或者代理服務(wù)器的某些屬性。有些站點(diǎn)不提供外部連接的文件服務(wù),只有通過(guò)同一個(gè)站點(diǎn)上其他的一些頁(yè)面時(shí)內(nèi)容才會(huì)被提交。這個(gè)時(shí)候你可以用加上”Referer:”參數(shù):
bash$ wget –header=”Referer: http://coming.from.this/page” http://surfing.to.this/page
有些特殊的網(wǎng)站只支持某種特定的瀏覽器,這個(gè)時(shí)候可以用”User-Agent:”參數(shù)
bash$ wget –header=”User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)” http://msie.only.url/here
C.那我怎么設(shè)定下載時(shí)間呢?
如果你需要在你的辦公電腦上通過(guò)和其他同事共享的一個(gè)連接來(lái)下載一些很大的文件,而且你希望你的同事不會(huì)因?yàn)榫W(wǎng)絡(luò)速度的減慢而收到影響,那你就應(yīng)該盡量避開(kāi)高峰時(shí)段。當(dāng)然,不需要在辦公室里等到所以人都走掉,也不需要在家里用完晚飯后還惦記著要上網(wǎng)下載一次。
用at來(lái)就可以很好的定制工作時(shí)間:
bash$ at 23:00
warning: commands will be executed using /bin/sh
at> wget http://place.your.url/here
at> press Ctrl-D
這樣,我們?cè)O(shè)定了下載工作在晚上11點(diǎn)進(jìn)行。為了使這個(gè)安排能夠正常進(jìn)行,請(qǐng)確
認(rèn)atd這個(gè)后臺(tái)程序正在運(yùn)行。
D.下載要花很多時(shí)間?
當(dāng)你需要下載大量的數(shù)據(jù),而且你又沒(méi)有享有足夠的帶寬,這個(gè)時(shí)候你會(huì)經(jīng)常發(fā)現(xiàn)在你安排的下載任務(wù)還沒(méi)有完成,一天的工作卻又要開(kāi)始了。
作為一個(gè)好同事,你只能停掉了這些任務(wù),而開(kāi)始另外的工作。然后你又需要反復(fù)地重復(fù)使用”wget -c”來(lái)完成你的下載。這樣肯定太繁瑣了,所以最好是用crontab來(lái)自動(dòng)執(zhí)行。創(chuàng)建一個(gè)純文本文件,叫做”crontab.txt”,包含下面的內(nèi)容:
0 23 * * 1-5 wget -c -N http://place.your.url/here
0 6 * * 1-5 killall wget
這個(gè)crontab文件指定某些任務(wù)定期地執(zhí)行。前五列聲明是什么時(shí)候執(zhí)行這個(gè)命令,而每行的剩余部分則告訴crontab執(zhí)行什么內(nèi)容。
前兩列指定了每天一到晚上11點(diǎn)就開(kāi)始用wget下載,一到早上6點(diǎn)就停止一切wget下載。第三四列的*表示每個(gè)月的每一天都執(zhí)行這個(gè)任務(wù)。第五列則指定了一個(gè)星期的哪幾天來(lái)執(zhí)行這個(gè)程序。 –”1-5″表示從星期一到星期五。
這樣在每個(gè)工作日的晚上11點(diǎn),下載工作開(kāi)始,到了上午的6點(diǎn),任何的wget任務(wù)就被停掉了。你可以用下面的命令來(lái)執(zhí)行crontab:bash$ crontab crontab.txt
wget的這個(gè)”-N”參數(shù)將會(huì)檢查目標(biāo)文件的時(shí)間戳,如果匹配了,下載程序就會(huì)停止,因?yàn)樗f(shuō)明整個(gè)文件已經(jīng)下載完全了。
用”crontab -r”可以刪除這個(gè)計(jì)劃安排。我已經(jīng)多次采用這種方法,通過(guò)共享的電話撥號(hào)來(lái)下載過(guò)很多的ISO鏡像文件,還是比較實(shí)用的。
E.如何下載動(dòng)態(tài)變化的網(wǎng)頁(yè)
有些網(wǎng)頁(yè)每天都要根據(jù)要求變化好幾次.所以從技術(shù)上講,目標(biāo)不再是一個(gè)文件,它沒(méi)有文件長(zhǎng)度.因此”-c”這個(gè)參數(shù)也就失去了意義.
例如:一個(gè)PHP寫(xiě)的并且經(jīng)常變動(dòng)的linux周末新聞網(wǎng)頁(yè):
bash$ wget http://lwn.net/bigpage.php3
我辦公室里的網(wǎng)絡(luò)條件經(jīng)常很差,給我的下載帶了很大的麻煩,所以我寫(xiě)了個(gè)簡(jiǎn)單的腳本來(lái)檢測(cè)動(dòng)態(tài)頁(yè)面是否已經(jīng)完全更新了.
#!/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
這個(gè)腳本能夠保證持續(xù)的下載該網(wǎng)頁(yè),直到網(wǎng)頁(yè)里面出現(xiàn)了" ",這就表示該文件已經(jīng)完全更新了.
F.對(duì)于ssl和Cookies怎么辦?
如果你要通過(guò)ssl來(lái)上網(wǎng),那么網(wǎng)站地址應(yīng)該是以”https://”來(lái)開(kāi)頭的.在這樣的情況下你就需要另外一種下載工具,叫做curl,它能夠很容易獲得.有些網(wǎng)站迫使網(wǎng)友在瀏覽的時(shí)候必須使用cookie.所以你必須從在網(wǎng)站上得到的那個(gè)Cookie里面得到”Cookie:”這個(gè)參數(shù).這樣才
能保證下載的參數(shù)正確.對(duì)于lynx和Mozilla的Cookie的文件格式,用下面的:
bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf(”%s=%s;”,,)} )
就可以構(gòu)造一個(gè)請(qǐng)求Cookie來(lái)下載http://www.nytimes.com上的內(nèi)容.當(dāng)然,你要已經(jīng)用這個(gè)瀏覽器在該網(wǎng)站上完成注冊(cè).
w3m使用了一種不同的,更小巧的Cookie文件格式:
bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf(”%s=%s;”,
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
wget的使用形式是:wget[參數(shù)列表]URL,接下來(lái)是小編為大家收集的Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件,歡迎大家閱讀:
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
首先來(lái)介紹一下wget的主要參數(shù):
· -b:讓wget在后臺(tái)運(yùn)行,記錄文件寫(xiě)在當(dāng)前目錄下”wget-log”文件中;
· -t [nuber of times]:嘗試次數(shù),當(dāng)wget無(wú)法與服務(wù)器建立連接時(shí),嘗試連接多少次 。比如”-t 120″表示嘗試120次。當(dāng)這一項(xiàng)為”0″的時(shí)候,指定嘗試無(wú)窮多次直到連接成功為止,這個(gè) 設(shè)置非常有用,當(dāng)對(duì)方服務(wù)器突然關(guān)機(jī)或者網(wǎng)絡(luò)突然中斷的時(shí)候,可以在恢復(fù)正常后繼續(xù) 下載沒(méi)有傳完的文件;
·-c:斷點(diǎn)續(xù)傳,這也是個(gè)非常有用的設(shè)置,特別當(dāng)下載比較大的文件的時(shí)候,如果中途意外中斷,那么連接恢復(fù)的時(shí)候會(huì)從上次沒(méi)傳完的地方接著傳,而不是又從頭開(kāi)始,使用這一項(xiàng)需要遠(yuǎn)程服務(wù)器也支持?jǐn)帱c(diǎn)續(xù)傳,一般來(lái)講,基于UNIX/Linux的Web/FTP服務(wù)器 都支持?jǐn)帱c(diǎn)續(xù)傳;
· -T [number of seconds]:超時(shí)時(shí)間,指定多長(zhǎng)時(shí)間遠(yuǎn)程服務(wù)器沒(méi)有響應(yīng)就中斷連接 ,開(kāi)始下一次嘗試。比如”-T 120″表示如果120秒以后遠(yuǎn)程服務(wù)器沒(méi)有發(fā)過(guò)來(lái)數(shù)據(jù),就重新嘗試連接。如果網(wǎng)絡(luò)速度比較快,這個(gè)時(shí)間可以設(shè)置的短些,相反,可以設(shè)置的長(zhǎng)一些,一般最多不超過(guò)900,通常也不少于60,一般設(shè)置在120左右比較合適;
· -w [number of seconds]:在兩次嘗試之間等待多少秒,比如”-w 100″表示兩次嘗試 之間等待100秒;
· -Y on/off:通過(guò)/不通過(guò)代理服務(wù)器進(jìn)行連接;
· -Q [byetes]:限制下載文件的總大小最多不能超過(guò)多少,比如”-Q2k”表示不能超過(guò)2K 字節(jié),”-Q3m”表示最多不能超過(guò)3M字節(jié),如果數(shù)字后面什么都不加,就表示是以字節(jié)為單 位,比如”-Q200″表示最多不能超過(guò)200字節(jié);
· -nd:不下載目錄結(jié)構(gòu),把從服務(wù)器所有指定目錄下載的文件都堆到當(dāng)前目錄里;
· -x:與”-nd”設(shè)置剛好相反,創(chuàng)建完整的目錄結(jié)構(gòu),例如”wget -x http://www.gnu.org”將在當(dāng)前目錄下創(chuàng)建”www.gnu.org”子目錄,然后按照服務(wù)器 實(shí)際的目錄結(jié)構(gòu)一級(jí)一級(jí)建下去,直到所有的文件都傳完為止;
· -nH:不創(chuàng)建以目標(biāo)主機(jī)域名為目錄名的目錄,將目標(biāo)主機(jī)的目錄結(jié)構(gòu)直接下到當(dāng)前目錄下;
· –http-user=username · –http-passwd=password:如果Web服務(wù)器需要指定用戶名和口令,用這兩項(xiàng)來(lái)設(shè)定;
· –proxy-user=username · –proxy-passwd=password:如果代理服務(wù)器需要輸入用戶名和口令,使用這兩個(gè)選項(xiàng) ;
· -r:在本機(jī)建立服務(wù)器端目錄結(jié)構(gòu);
· -l [depth]:下載遠(yuǎn)程服務(wù)器目錄結(jié)構(gòu)的深度,例如”-l 5″下載目錄深度小于或者等 于5以內(nèi)的目錄結(jié)構(gòu)或者文件;
· -m:做站點(diǎn)鏡像時(shí)的選項(xiàng),如果你想做一個(gè)站點(diǎn)的鏡像,使用這個(gè)選項(xiàng),它將自動(dòng)設(shè)定其他合適的選項(xiàng)以便于站點(diǎn)鏡像;
· -np:只下載目標(biāo)站點(diǎn)指定目錄及其子目錄的內(nèi)容。這也是一個(gè)非常有用的選項(xiàng),我們假設(shè)某個(gè)人的個(gè)人主頁(yè)里面有一個(gè)指向這個(gè)站點(diǎn)其他人個(gè)人主頁(yè)的連接,而我們只想下載這個(gè)人的個(gè)人主頁(yè),如果不設(shè)置這個(gè)選項(xiàng),甚至–有可能把整個(gè)站點(diǎn)給抓下來(lái),這顯然是我們通常不希望的;
ü 如何設(shè)定wget所使用的代理服務(wù)器 wget
可以使用用戶設(shè)置文件”.wgetrc”來(lái)讀取很多設(shè)置,我們這里主要利用這個(gè)文件來(lái)是
設(shè)置代理服務(wù)器。使用者用什么用戶登錄,那么什么用戶主目錄下的”.wgetrc”文件就起
作用。例如,”root”用戶如果想使用”.wgetrc”來(lái)設(shè)置代理服務(wù)器,”/root/.wgert”就起 作用,下面給出一個(gè)”.wge trc”文件的內(nèi)容,讀者可以參照這個(gè)例子來(lái)編寫(xiě)自己的”wgetrc”文件:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
這兩行的含義是,代理服務(wù)器IP地址為:111.111.111.111,端口號(hào)為:80。第一行指定 HTTP協(xié)議所使用的代理服務(wù)器,第二行指定FTP協(xié)議所使用的代理服務(wù)器。
下面就開(kāi)始實(shí)戰(zhàn)吧!
A.使用wget工具
linux所以的主要版本都自帶了wget這個(gè)下載工具.
bash$ wget http://place.your.url/here
它還能控制ftp來(lái)下載整個(gè)web站點(diǎn)的各級(jí)目錄,當(dāng)然,如果你不小心,可能會(huì)把整個(gè)網(wǎng)站以及其他和他做鏈接的網(wǎng)站全部下載下來(lái).
bash$ wget -m http://target.web.site/subdirectory
由于這個(gè)工具具有很強(qiáng)的下載能力,所以可以在服務(wù)器上把它用作鏡像網(wǎng)站的工具.讓它按照”robots.txt”的規(guī)定來(lái)執(zhí)行.
有很多參數(shù)用來(lái)控制它如何正確地做鏡像,可以限制鏈接的類型和下載文件的類型等等.例如:只下載有聯(lián)系的鏈接并且忽略GIF圖片:
bash$ wget -m -L –reject=gif http://target.web.site/subdirectory
wget也能夠?qū)崿F(xiàn)斷點(diǎn)續(xù)傳(-c參數(shù)),當(dāng)然,這種操作是需要遠(yuǎn)程服務(wù)器支持的.
bash$ wget -c http://the.url.of/incomplete/file
可以把斷點(diǎn)續(xù)傳和鏡像功能結(jié)合起來(lái),這樣可以在以前斷過(guò)多次的情況下繼續(xù)鏡像一個(gè)有大量選擇性文件的站點(diǎn).如何自動(dòng)實(shí)現(xiàn)這個(gè)目的我們?cè)诤竺鏁?huì)討論得更多.
如果你覺(jué)得下載時(shí)老是斷線會(huì)影響你辦公的話,你可以限制wget重試的次數(shù).
bash$ wget -t 5 http://place.your.url/here
這樣重試五次后就放棄了.用”-t inf”參數(shù)表示永遠(yuǎn)不放棄.不停地重試.
B.那對(duì)于代理服務(wù)該怎么辦呢?
可以使用http代理的參數(shù)或者在.wgetrc配置文件里指定一個(gè)如何通過(guò)代理去下載的途徑.但是有這么一個(gè)問(wèn)題,如果通過(guò)代理來(lái)進(jìn)行斷點(diǎn)續(xù)傳的話可能會(huì)有幾次失敗.如果有一次通過(guò)代理下載的過(guò)程發(fā)生中斷,那么代理服務(wù)器上緩存里保存是那個(gè)完整的文件拷貝.所以當(dāng)你用”wget -c”來(lái)下載剩余部分的時(shí)候代理服務(wù)器查看它的緩存,并錯(cuò)誤地認(rèn)為你已經(jīng)下載了整個(gè)文件.于是就發(fā)出了錯(cuò)誤的信號(hào).
這個(gè)時(shí)候你可以用添加一個(gè)特定的請(qǐng)求參數(shù)來(lái)促使代理服務(wù)器清除他們的緩存:
bash$ wget -c –header=”Pragma: no-cache” http://place.your.url/here
這個(gè)”–header”參數(shù)能夠以各種數(shù)字,各種方式添加。通過(guò)它我們可以更改web服務(wù)器或者代理服務(wù)器的某些屬性。有些站點(diǎn)不提供外部連接的文件服務(wù),只有通過(guò)同一個(gè)站點(diǎn)上其他的一些頁(yè)面時(shí)內(nèi)容才會(huì)被提交。這個(gè)時(shí)候你可以用加上”Referer:”參數(shù):
bash$ wget –header=”Referer: http://coming.from.this/page” http://surfing.to.this/page
有些特殊的網(wǎng)站只支持某種特定的瀏覽器,這個(gè)時(shí)候可以用”User-Agent:”參數(shù)
bash$ wget –header=”User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)” http://msie.only.url/here
C.那我怎么設(shè)定下載時(shí)間呢?
如果你需要在你的辦公電腦上通過(guò)和其他同事共享的一個(gè)連接來(lái)下載一些很大的文件,而且你希望你的同事不會(huì)因?yàn)榫W(wǎng)絡(luò)速度的減慢而收到影響,那你就應(yīng)該盡量避開(kāi)高峰時(shí)段。當(dāng)然,不需要在辦公室里等到所以人都走掉,也不需要在家里用完晚飯后還惦記著要上網(wǎng)下載一次。
用at來(lái)就可以很好的定制工作時(shí)間:
bash$ at 23:00
warning: commands will be executed using /bin/sh
at> wget http://place.your.url/here
at> press Ctrl-D
這樣,我們?cè)O(shè)定了下載工作在晚上11點(diǎn)進(jìn)行。為了使這個(gè)安排能夠正常進(jìn)行,請(qǐng)確
認(rèn)atd這個(gè)后臺(tái)程序正在運(yùn)行。
D.下載要花很多時(shí)間?
當(dāng)你需要下載大量的數(shù)據(jù),而且你又沒(méi)有享有足夠的帶寬,這個(gè)時(shí)候你會(huì)經(jīng)常發(fā)現(xiàn)在你安排的下載任務(wù)還沒(méi)有完成,一天的工作卻又要開(kāi)始了。
作為一個(gè)好同事,你只能停掉了這些任務(wù),而開(kāi)始另外的工作。然后你又需要反復(fù)地重復(fù)使用”wget -c”來(lái)完成你的下載。這樣肯定太繁瑣了,所以最好是用crontab來(lái)自動(dòng)執(zhí)行。創(chuàng)建一個(gè)純文本文件,叫做”crontab.txt”,包含下面的內(nèi)容:
0 23 * * 1-5 wget -c -N http://place.your.url/here
0 6 * * 1-5 killall wget
這個(gè)crontab文件指定某些任務(wù)定期地執(zhí)行。前五列聲明是什么時(shí)候執(zhí)行這個(gè)命令,而每行的剩余部分則告訴crontab執(zhí)行什么內(nèi)容。
前兩列指定了每天一到晚上11點(diǎn)就開(kāi)始用wget下載,一到早上6點(diǎn)就停止一切wget下載。第三四列的*表示每個(gè)月的每一天都執(zhí)行這個(gè)任務(wù)。第五列則指定了一個(gè)星期的哪幾天來(lái)執(zhí)行這個(gè)程序。 –”1-5″表示從星期一到星期五。
這樣在每個(gè)工作日的晚上11點(diǎn),下載工作開(kāi)始,到了上午的6點(diǎn),任何的wget任務(wù)就被停掉了。你可以用下面的命令來(lái)執(zhí)行crontab:bash$ crontab crontab.txt
wget的這個(gè)”-N”參數(shù)將會(huì)檢查目標(biāo)文件的時(shí)間戳,如果匹配了,下載程序就會(huì)停止,因?yàn)樗f(shuō)明整個(gè)文件已經(jīng)下載完全了。
用”crontab -r”可以刪除這個(gè)計(jì)劃安排。我已經(jīng)多次采用這種方法,通過(guò)共享的電話撥號(hào)來(lái)下載過(guò)很多的ISO鏡像文件,還是比較實(shí)用的。
E.如何下載動(dòng)態(tài)變化的網(wǎng)頁(yè)
有些網(wǎng)頁(yè)每天都要根據(jù)要求變化好幾次.所以從技術(shù)上講,目標(biāo)不再是一個(gè)文件,它沒(méi)有文件長(zhǎng)度.因此”-c”這個(gè)參數(shù)也就失去了意義.
例如:一個(gè)PHP寫(xiě)的并且經(jīng)常變動(dòng)的linux周末新聞網(wǎng)頁(yè):
bash$ wget http://lwn.net/bigpage.php3
我辦公室里的網(wǎng)絡(luò)條件經(jīng)常很差,給我的下載帶了很大的麻煩,所以我寫(xiě)了個(gè)簡(jiǎn)單的腳本來(lái)檢測(cè)動(dòng)態(tài)頁(yè)面是否已經(jīng)完全更新了.
#!/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
這個(gè)腳本能夠保證持續(xù)的下載該網(wǎng)頁(yè),直到網(wǎng)頁(yè)里面出現(xiàn)了" ",這就表示該文件已經(jīng)完全更新了.
F.對(duì)于ssl和Cookies怎么辦?
如果你要通過(guò)ssl來(lái)上網(wǎng),那么網(wǎng)站地址應(yīng)該是以”https://”來(lái)開(kāi)頭的.在這樣的情況下你就需要另外一種下載工具,叫做curl,它能夠很容易獲得.有些網(wǎng)站迫使網(wǎng)友在瀏覽的時(shí)候必須使用cookie.所以你必須從在網(wǎng)站上得到的那個(gè)Cookie里面得到”Cookie:”這個(gè)參數(shù).這樣才
能保證下載的參數(shù)正確.對(duì)于lynx和Mozilla的Cookie的文件格式,用下面的:
bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf(”%s=%s;”,$6,$7)} )
就可以構(gòu)造一個(gè)請(qǐng)求Cookie來(lái)下載http://www.nytimes.com上的內(nèi)容.當(dāng)然,你要已經(jīng)用這個(gè)瀏覽器在該網(wǎng)站上完成注冊(cè).
w3m使用了一種不同的,更小巧的Cookie文件格式:
bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf(”%s=%s;”,$2,$3)} )
現(xiàn)在就可以用這種方法來(lái)下載了:
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.如何建立地址列表?
到現(xiàn)在為止我們下載的都是單個(gè)文件或者是整個(gè)網(wǎng)站.有的時(shí)候我們需要下載某個(gè)網(wǎng)頁(yè)上鏈接的大量文件,但沒(méi)有必要把它整個(gè)網(wǎng)站都鏡像下來(lái).比如說(shuō)我們想從一個(gè)依次排列的100首歌里面下載前20首.注意,這里”–accept”和”–reject”參數(shù)是不會(huì)起作用的,因?yàn)樗麄冎粚?duì)文件操作起作用.所以一定要用”lynx -dump”參數(shù)來(lái)代替.
bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep gz$ |tail -10 |awk {print $2} > urllist.txt
lynx的輸出結(jié)果可以被各種GNU文本處理工具過(guò)慮.在上面的例子里,我們的鏈接地址是以”gz”結(jié)尾的,并且把最后10個(gè)文件地址放到urllist.txt文件里.然后我們可以寫(xiě)一個(gè)簡(jiǎn)單的bash腳本來(lái)自動(dòng)下載這個(gè)文件里的目標(biāo)文件:
bash$ for x in $(cat urllist.txt)
> do
> wget $x
> done
這樣我們就能夠成功下載Linux Gazette網(wǎng)站(ftp://ftp.ssc.com/pub/lg/)上的最新10個(gè)論題.
H.擴(kuò)大使用的帶寬
如果你選擇下載一個(gè)受帶寬限制的文件,那你的下載會(huì)因?yàn)榉?wù)器端的限制而變得很慢.下面這個(gè)技巧會(huì)大大縮短下載的過(guò)程.但這個(gè)技巧需要你使用curl并且遠(yuǎn)程服務(wù)器有多個(gè)鏡像可以供你下載.例如,假設(shè)你想從下面的三個(gè)地址下載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
這個(gè)文件的長(zhǎng)度是677281792個(gè)字節(jié),所以用curl程序加”–range”參數(shù)來(lái)建立三個(gè)同時(shí)進(jìn)行的下載:
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 &
這樣就創(chuàng)建了三個(gè)后臺(tái)進(jìn)程.每個(gè)進(jìn)程從不同的服務(wù)器傳輸這個(gè)ISO文件的不同部分.這個(gè)”-r”參數(shù)指定目標(biāo)文件的字節(jié)范圍.當(dāng)這三個(gè)
進(jìn)程結(jié)束后,用一個(gè)簡(jiǎn)單的cat命令來(lái)把這三個(gè)文件銜接起來(lái)– cat mdk-iso.part? > mdk-80.iso.(強(qiáng)烈建議在刻盤(pán)之前先檢查md5)
你也可以用”–verbose”參數(shù)來(lái)使每個(gè)curl進(jìn)程都有自己的窗口來(lái)顯示傳輸?shù)倪^(guò)程.
下載到指定目錄
wget -P/tmp ftp://user:passwd@url/file
把文件file下載到/tmp目錄下??戳?ldquo;Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件”還想看:
,)} )現(xiàn)在就可以用這種方法來(lái)下載了:
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.如何建立地址列表?
到現(xiàn)在為止我們下載的都是單個(gè)文件或者是整個(gè)網(wǎng)站.有的時(shí)候我們需要下載某個(gè)網(wǎng)頁(yè)上鏈接的大量文件,但沒(méi)有必要把它整個(gè)網(wǎng)站都鏡像下來(lái).比如說(shuō)我們想從一個(gè)依次排列的100首歌里面下載前20首.注意,這里”–accept”和”–reject”參數(shù)是不會(huì)起作用的,因?yàn)樗麄冎粚?duì)文件操作起作用.所以一定要用”lynx -dump”參數(shù)來(lái)代替.
bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep gz$ |tail -10 |awk {print
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
wget的使用形式是:wget[參數(shù)列表]URL,接下來(lái)是小編為大家收集的Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件,歡迎大家閱讀:
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
首先來(lái)介紹一下wget的主要參數(shù):
· -b:讓wget在后臺(tái)運(yùn)行,記錄文件寫(xiě)在當(dāng)前目錄下”wget-log”文件中;
· -t [nuber of times]:嘗試次數(shù),當(dāng)wget無(wú)法與服務(wù)器建立連接時(shí),嘗試連接多少次 。比如”-t 120″表示嘗試120次。當(dāng)這一項(xiàng)為”0″的時(shí)候,指定嘗試無(wú)窮多次直到連接成功為止,這個(gè) 設(shè)置非常有用,當(dāng)對(duì)方服務(wù)器突然關(guān)機(jī)或者網(wǎng)絡(luò)突然中斷的時(shí)候,可以在恢復(fù)正常后繼續(xù) 下載沒(méi)有傳完的文件;
·-c:斷點(diǎn)續(xù)傳,這也是個(gè)非常有用的設(shè)置,特別當(dāng)下載比較大的文件的時(shí)候,如果中途意外中斷,那么連接恢復(fù)的時(shí)候會(huì)從上次沒(méi)傳完的地方接著傳,而不是又從頭開(kāi)始,使用這一項(xiàng)需要遠(yuǎn)程服務(wù)器也支持?jǐn)帱c(diǎn)續(xù)傳,一般來(lái)講,基于UNIX/Linux的Web/FTP服務(wù)器 都支持?jǐn)帱c(diǎn)續(xù)傳;
· -T [number of seconds]:超時(shí)時(shí)間,指定多長(zhǎng)時(shí)間遠(yuǎn)程服務(wù)器沒(méi)有響應(yīng)就中斷連接 ,開(kāi)始下一次嘗試。比如”-T 120″表示如果120秒以后遠(yuǎn)程服務(wù)器沒(méi)有發(fā)過(guò)來(lái)數(shù)據(jù),就重新嘗試連接。如果網(wǎng)絡(luò)速度比較快,這個(gè)時(shí)間可以設(shè)置的短些,相反,可以設(shè)置的長(zhǎng)一些,一般最多不超過(guò)900,通常也不少于60,一般設(shè)置在120左右比較合適;
· -w [number of seconds]:在兩次嘗試之間等待多少秒,比如”-w 100″表示兩次嘗試 之間等待100秒;
· -Y on/off:通過(guò)/不通過(guò)代理服務(wù)器進(jìn)行連接;
· -Q [byetes]:限制下載文件的總大小最多不能超過(guò)多少,比如”-Q2k”表示不能超過(guò)2K 字節(jié),”-Q3m”表示最多不能超過(guò)3M字節(jié),如果數(shù)字后面什么都不加,就表示是以字節(jié)為單 位,比如”-Q200″表示最多不能超過(guò)200字節(jié);
· -nd:不下載目錄結(jié)構(gòu),把從服務(wù)器所有指定目錄下載的文件都堆到當(dāng)前目錄里;
· -x:與”-nd”設(shè)置剛好相反,創(chuàng)建完整的目錄結(jié)構(gòu),例如”wget -x http://www.gnu.org”將在當(dāng)前目錄下創(chuàng)建”www.gnu.org”子目錄,然后按照服務(wù)器 實(shí)際的目錄結(jié)構(gòu)一級(jí)一級(jí)建下去,直到所有的文件都傳完為止;
· -nH:不創(chuàng)建以目標(biāo)主機(jī)域名為目錄名的目錄,將目標(biāo)主機(jī)的目錄結(jié)構(gòu)直接下到當(dāng)前目錄下;
· –http-user=username · –http-passwd=password:如果Web服務(wù)器需要指定用戶名和口令,用這兩項(xiàng)來(lái)設(shè)定;
· –proxy-user=username · –proxy-passwd=password:如果代理服務(wù)器需要輸入用戶名和口令,使用這兩個(gè)選項(xiàng) ;
· -r:在本機(jī)建立服務(wù)器端目錄結(jié)構(gòu);
· -l [depth]:下載遠(yuǎn)程服務(wù)器目錄結(jié)構(gòu)的深度,例如”-l 5″下載目錄深度小于或者等 于5以內(nèi)的目錄結(jié)構(gòu)或者文件;
· -m:做站點(diǎn)鏡像時(shí)的選項(xiàng),如果你想做一個(gè)站點(diǎn)的鏡像,使用這個(gè)選項(xiàng),它將自動(dòng)設(shè)定其他合適的選項(xiàng)以便于站點(diǎn)鏡像;
· -np:只下載目標(biāo)站點(diǎn)指定目錄及其子目錄的內(nèi)容。這也是一個(gè)非常有用的選項(xiàng),我們假設(shè)某個(gè)人的個(gè)人主頁(yè)里面有一個(gè)指向這個(gè)站點(diǎn)其他人個(gè)人主頁(yè)的連接,而我們只想下載這個(gè)人的個(gè)人主頁(yè),如果不設(shè)置這個(gè)選項(xiàng),甚至–有可能把整個(gè)站點(diǎn)給抓下來(lái),這顯然是我們通常不希望的;
ü 如何設(shè)定wget所使用的代理服務(wù)器 wget
可以使用用戶設(shè)置文件”.wgetrc”來(lái)讀取很多設(shè)置,我們這里主要利用這個(gè)文件來(lái)是
設(shè)置代理服務(wù)器。使用者用什么用戶登錄,那么什么用戶主目錄下的”.wgetrc”文件就起
作用。例如,”root”用戶如果想使用”.wgetrc”來(lái)設(shè)置代理服務(wù)器,”/root/.wgert”就起 作用,下面給出一個(gè)”.wge trc”文件的內(nèi)容,讀者可以參照這個(gè)例子來(lái)編寫(xiě)自己的”wgetrc”文件:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
這兩行的含義是,代理服務(wù)器IP地址為:111.111.111.111,端口號(hào)為:80。第一行指定 HTTP協(xié)議所使用的代理服務(wù)器,第二行指定FTP協(xié)議所使用的代理服務(wù)器。
下面就開(kāi)始實(shí)戰(zhàn)吧!
A.使用wget工具
linux所以的主要版本都自帶了wget這個(gè)下載工具.
bash$ wget http://place.your.url/here
它還能控制ftp來(lái)下載整個(gè)web站點(diǎn)的各級(jí)目錄,當(dāng)然,如果你不小心,可能會(huì)把整個(gè)網(wǎng)站以及其他和他做鏈接的網(wǎng)站全部下載下來(lái).
bash$ wget -m http://target.web.site/subdirectory
由于這個(gè)工具具有很強(qiáng)的下載能力,所以可以在服務(wù)器上把它用作鏡像網(wǎng)站的工具.讓它按照”robots.txt”的規(guī)定來(lái)執(zhí)行.
有很多參數(shù)用來(lái)控制它如何正確地做鏡像,可以限制鏈接的類型和下載文件的類型等等.例如:只下載有聯(lián)系的鏈接并且忽略GIF圖片:
bash$ wget -m -L –reject=gif http://target.web.site/subdirectory
wget也能夠?qū)崿F(xiàn)斷點(diǎn)續(xù)傳(-c參數(shù)),當(dāng)然,這種操作是需要遠(yuǎn)程服務(wù)器支持的.
bash$ wget -c http://the.url.of/incomplete/file
可以把斷點(diǎn)續(xù)傳和鏡像功能結(jié)合起來(lái),這樣可以在以前斷過(guò)多次的情況下繼續(xù)鏡像一個(gè)有大量選擇性文件的站點(diǎn).如何自動(dòng)實(shí)現(xiàn)這個(gè)目的我們?cè)诤竺鏁?huì)討論得更多.
如果你覺(jué)得下載時(shí)老是斷線會(huì)影響你辦公的話,你可以限制wget重試的次數(shù).
bash$ wget -t 5 http://place.your.url/here
這樣重試五次后就放棄了.用”-t inf”參數(shù)表示永遠(yuǎn)不放棄.不停地重試.
B.那對(duì)于代理服務(wù)該怎么辦呢?
可以使用http代理的參數(shù)或者在.wgetrc配置文件里指定一個(gè)如何通過(guò)代理去下載的途徑.但是有這么一個(gè)問(wèn)題,如果通過(guò)代理來(lái)進(jìn)行斷點(diǎn)續(xù)傳的話可能會(huì)有幾次失敗.如果有一次通過(guò)代理下載的過(guò)程發(fā)生中斷,那么代理服務(wù)器上緩存里保存是那個(gè)完整的文件拷貝.所以當(dāng)你用”wget -c”來(lái)下載剩余部分的時(shí)候代理服務(wù)器查看它的緩存,并錯(cuò)誤地認(rèn)為你已經(jīng)下載了整個(gè)文件.于是就發(fā)出了錯(cuò)誤的信號(hào).
這個(gè)時(shí)候你可以用添加一個(gè)特定的請(qǐng)求參數(shù)來(lái)促使代理服務(wù)器清除他們的緩存:
bash$ wget -c –header=”Pragma: no-cache” http://place.your.url/here
這個(gè)”–header”參數(shù)能夠以各種數(shù)字,各種方式添加。通過(guò)它我們可以更改web服務(wù)器或者代理服務(wù)器的某些屬性。有些站點(diǎn)不提供外部連接的文件服務(wù),只有通過(guò)同一個(gè)站點(diǎn)上其他的一些頁(yè)面時(shí)內(nèi)容才會(huì)被提交。這個(gè)時(shí)候你可以用加上”Referer:”參數(shù):
bash$ wget –header=”Referer: http://coming.from.this/page” http://surfing.to.this/page
有些特殊的網(wǎng)站只支持某種特定的瀏覽器,這個(gè)時(shí)候可以用”User-Agent:”參數(shù)
bash$ wget –header=”User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)” http://msie.only.url/here
C.那我怎么設(shè)定下載時(shí)間呢?
如果你需要在你的辦公電腦上通過(guò)和其他同事共享的一個(gè)連接來(lái)下載一些很大的文件,而且你希望你的同事不會(huì)因?yàn)榫W(wǎng)絡(luò)速度的減慢而收到影響,那你就應(yīng)該盡量避開(kāi)高峰時(shí)段。當(dāng)然,不需要在辦公室里等到所以人都走掉,也不需要在家里用完晚飯后還惦記著要上網(wǎng)下載一次。
用at來(lái)就可以很好的定制工作時(shí)間:
bash$ at 23:00
warning: commands will be executed using /bin/sh
at> wget http://place.your.url/here
at> press Ctrl-D
這樣,我們?cè)O(shè)定了下載工作在晚上11點(diǎn)進(jìn)行。為了使這個(gè)安排能夠正常進(jìn)行,請(qǐng)確
認(rèn)atd這個(gè)后臺(tái)程序正在運(yùn)行。
D.下載要花很多時(shí)間?
當(dāng)你需要下載大量的數(shù)據(jù),而且你又沒(méi)有享有足夠的帶寬,這個(gè)時(shí)候你會(huì)經(jīng)常發(fā)現(xiàn)在你安排的下載任務(wù)還沒(méi)有完成,一天的工作卻又要開(kāi)始了。
作為一個(gè)好同事,你只能停掉了這些任務(wù),而開(kāi)始另外的工作。然后你又需要反復(fù)地重復(fù)使用”wget -c”來(lái)完成你的下載。這樣肯定太繁瑣了,所以最好是用crontab來(lái)自動(dòng)執(zhí)行。創(chuàng)建一個(gè)純文本文件,叫做”crontab.txt”,包含下面的內(nèi)容:
0 23 * * 1-5 wget -c -N http://place.your.url/here
0 6 * * 1-5 killall wget
這個(gè)crontab文件指定某些任務(wù)定期地執(zhí)行。前五列聲明是什么時(shí)候執(zhí)行這個(gè)命令,而每行的剩余部分則告訴crontab執(zhí)行什么內(nèi)容。
前兩列指定了每天一到晚上11點(diǎn)就開(kāi)始用wget下載,一到早上6點(diǎn)就停止一切wget下載。第三四列的*表示每個(gè)月的每一天都執(zhí)行這個(gè)任務(wù)。第五列則指定了一個(gè)星期的哪幾天來(lái)執(zhí)行這個(gè)程序。 –”1-5″表示從星期一到星期五。
這樣在每個(gè)工作日的晚上11點(diǎn),下載工作開(kāi)始,到了上午的6點(diǎn),任何的wget任務(wù)就被停掉了。你可以用下面的命令來(lái)執(zhí)行crontab:bash$ crontab crontab.txt
wget的這個(gè)”-N”參數(shù)將會(huì)檢查目標(biāo)文件的時(shí)間戳,如果匹配了,下載程序就會(huì)停止,因?yàn)樗f(shuō)明整個(gè)文件已經(jīng)下載完全了。
用”crontab -r”可以刪除這個(gè)計(jì)劃安排。我已經(jīng)多次采用這種方法,通過(guò)共享的電話撥號(hào)來(lái)下載過(guò)很多的ISO鏡像文件,還是比較實(shí)用的。
E.如何下載動(dòng)態(tài)變化的網(wǎng)頁(yè)
有些網(wǎng)頁(yè)每天都要根據(jù)要求變化好幾次.所以從技術(shù)上講,目標(biāo)不再是一個(gè)文件,它沒(méi)有文件長(zhǎng)度.因此”-c”這個(gè)參數(shù)也就失去了意義.
例如:一個(gè)PHP寫(xiě)的并且經(jīng)常變動(dòng)的linux周末新聞網(wǎng)頁(yè):
bash$ wget http://lwn.net/bigpage.php3
我辦公室里的網(wǎng)絡(luò)條件經(jīng)常很差,給我的下載帶了很大的麻煩,所以我寫(xiě)了個(gè)簡(jiǎn)單的腳本來(lái)檢測(cè)動(dòng)態(tài)頁(yè)面是否已經(jīng)完全更新了.
#!/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
這個(gè)腳本能夠保證持續(xù)的下載該網(wǎng)頁(yè),直到網(wǎng)頁(yè)里面出現(xiàn)了" ",這就表示該文件已經(jīng)完全更新了.
F.對(duì)于ssl和Cookies怎么辦?
如果你要通過(guò)ssl來(lái)上網(wǎng),那么網(wǎng)站地址應(yīng)該是以”https://”來(lái)開(kāi)頭的.在這樣的情況下你就需要另外一種下載工具,叫做curl,它能夠很容易獲得.有些網(wǎng)站迫使網(wǎng)友在瀏覽的時(shí)候必須使用cookie.所以你必須從在網(wǎng)站上得到的那個(gè)Cookie里面得到”Cookie:”這個(gè)參數(shù).這樣才
能保證下載的參數(shù)正確.對(duì)于lynx和Mozilla的Cookie的文件格式,用下面的:
bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf(”%s=%s;”,$6,$7)} )
就可以構(gòu)造一個(gè)請(qǐng)求Cookie來(lái)下載http://www.nytimes.com上的內(nèi)容.當(dāng)然,你要已經(jīng)用這個(gè)瀏覽器在該網(wǎng)站上完成注冊(cè).
w3m使用了一種不同的,更小巧的Cookie文件格式:
bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf(”%s=%s;”,$2,$3)} )
現(xiàn)在就可以用這種方法來(lái)下載了:
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.如何建立地址列表?
到現(xiàn)在為止我們下載的都是單個(gè)文件或者是整個(gè)網(wǎng)站.有的時(shí)候我們需要下載某個(gè)網(wǎng)頁(yè)上鏈接的大量文件,但沒(méi)有必要把它整個(gè)網(wǎng)站都鏡像下來(lái).比如說(shuō)我們想從一個(gè)依次排列的100首歌里面下載前20首.注意,這里”–accept”和”–reject”參數(shù)是不會(huì)起作用的,因?yàn)樗麄冎粚?duì)文件操作起作用.所以一定要用”lynx -dump”參數(shù)來(lái)代替.
bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep gz$ |tail -10 |awk {print $2} > urllist.txt
lynx的輸出結(jié)果可以被各種GNU文本處理工具過(guò)慮.在上面的例子里,我們的鏈接地址是以”gz”結(jié)尾的,并且把最后10個(gè)文件地址放到urllist.txt文件里.然后我們可以寫(xiě)一個(gè)簡(jiǎn)單的bash腳本來(lái)自動(dòng)下載這個(gè)文件里的目標(biāo)文件:
bash$ for x in $(cat urllist.txt)
> do
> wget $x
> done
這樣我們就能夠成功下載Linux Gazette網(wǎng)站(ftp://ftp.ssc.com/pub/lg/)上的最新10個(gè)論題.
H.擴(kuò)大使用的帶寬
如果你選擇下載一個(gè)受帶寬限制的文件,那你的下載會(huì)因?yàn)榉?wù)器端的限制而變得很慢.下面這個(gè)技巧會(huì)大大縮短下載的過(guò)程.但這個(gè)技巧需要你使用curl并且遠(yuǎn)程服務(wù)器有多個(gè)鏡像可以供你下載.例如,假設(shè)你想從下面的三個(gè)地址下載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
這個(gè)文件的長(zhǎng)度是677281792個(gè)字節(jié),所以用curl程序加”–range”參數(shù)來(lái)建立三個(gè)同時(shí)進(jìn)行的下載:
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 &
這樣就創(chuàng)建了三個(gè)后臺(tái)進(jìn)程.每個(gè)進(jìn)程從不同的服務(wù)器傳輸這個(gè)ISO文件的不同部分.這個(gè)”-r”參數(shù)指定目標(biāo)文件的字節(jié)范圍.當(dāng)這三個(gè)
進(jìn)程結(jié)束后,用一個(gè)簡(jiǎn)單的cat命令來(lái)把這三個(gè)文件銜接起來(lái)– cat mdk-iso.part? > mdk-80.iso.(強(qiáng)烈建議在刻盤(pán)之前先檢查md5)
你也可以用”–verbose”參數(shù)來(lái)使每個(gè)curl進(jìn)程都有自己的窗口來(lái)顯示傳輸?shù)倪^(guò)程.
下載到指定目錄
wget -P/tmp ftp://user:passwd@url/file
把文件file下載到/tmp目錄下??戳?ldquo;Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件”還想看:
} > urllist.txtlynx的輸出結(jié)果可以被各種GNU文本處理工具過(guò)慮.在上面的例子里,我們的鏈接地址是以”gz”結(jié)尾的,并且把最后10個(gè)文件地址放到urllist.txt文件里.然后我們可以寫(xiě)一個(gè)簡(jiǎn)單的bash腳本來(lái)自動(dòng)下載這個(gè)文件里的目標(biāo)文件:
bash$ for x in $(cat urllist.txt)
> do
> wget $x
> done
這樣我們就能夠成功下載Linux Gazette網(wǎng)站(ftp://ftp.ssc.com/pub/lg/)上的最新10個(gè)論題.
H.擴(kuò)大使用的帶寬
如果你選擇下載一個(gè)受帶寬限制的文件,那你的下載會(huì)因?yàn)榉?wù)器端的限制而變得很慢.下面這個(gè)技巧會(huì)大大縮短下載的過(guò)程.但這個(gè)技巧需要你使用curl并且遠(yuǎn)程服務(wù)器有多個(gè)鏡像可以供你下載.例如,假設(shè)你想從下面的三個(gè)地址下載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
這個(gè)文件的長(zhǎng)度是677281792個(gè)字節(jié),所以用curl程序加”–range”參數(shù)來(lái)建立三個(gè)同時(shí)進(jìn)行的下載:
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 &
這樣就創(chuàng)建了三個(gè)后臺(tái)進(jìn)程.每個(gè)進(jìn)程從不同的服務(wù)器傳輸這個(gè)ISO文件的不同部分.這個(gè)”-r”參數(shù)指定目標(biāo)文件的字節(jié)范圍.當(dāng)這三個(gè)
進(jìn)程結(jié)束后,用一個(gè)簡(jiǎn)單的cat命令來(lái)把這三個(gè)文件銜接起來(lái)– cat mdk-iso.part? > mdk-80.iso.(強(qiáng)烈建議在刻盤(pán)之前先檢查md5)
你也可以用”–verbose”參數(shù)來(lái)使每個(gè)curl進(jìn)程都有自己的窗口來(lái)顯示傳輸?shù)倪^(guò)程.
下載到指定目錄
wget -P/tmp ftp://user:passwd@url/file
把文件file下載到/tmp目錄下??戳?ldquo;Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件”還想看:
} > urllist.txtlynx的輸出結(jié)果可以被各種GNU文本處理工具過(guò)慮.在上面的例子里,我們的鏈接地址是以”gz”結(jié)尾的,并且把最后10個(gè)文件地址放到urllist.txt文件里.然后我們可以寫(xiě)一個(gè)簡(jiǎn)單的bash腳本來(lái)自動(dòng)下載這個(gè)文件里的目標(biāo)文件:
bash$ for x in $(cat urllist.txt)
> do
> wget $x
> done
這樣我們就能夠成功下載Linux Gazette網(wǎng)站(ftp://ftp.ssc.com/pub/lg/)上的最新10個(gè)論題.
H.擴(kuò)大使用的帶寬
如果你選擇下載一個(gè)受帶寬限制的文件,那你的下載會(huì)因?yàn)榉?wù)器端的限制而變得很慢.下面這個(gè)技巧會(huì)大大縮短下載的過(guò)程.但這個(gè)技巧需要你使用curl并且遠(yuǎn)程服務(wù)器有多個(gè)鏡像可以供你下載.例如,假設(shè)你想從下面的三個(gè)地址下載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
這個(gè)文件的長(zhǎng)度是677281792個(gè)字節(jié),所以用curl程序加”–range”參數(shù)來(lái)建立三個(gè)同時(shí)進(jìn)行的下載:
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 &
這樣就創(chuàng)建了三個(gè)后臺(tái)進(jìn)程.每個(gè)進(jìn)程從不同的服務(wù)器傳輸這個(gè)ISO文件的不同部分.這個(gè)”-r”參數(shù)指定目標(biāo)文件的字節(jié)范圍.當(dāng)這三個(gè)
進(jìn)程結(jié)束后,用一個(gè)簡(jiǎn)單的cat命令來(lái)把這三個(gè)文件銜接起來(lái)– cat mdk-iso.part? > mdk-80.iso.(強(qiáng)烈建議在刻盤(pán)之前先檢查md5)
你也可以用”–verbose”參數(shù)來(lái)使每個(gè)curl進(jìn)程都有自己的窗口來(lái)顯示傳輸?shù)倪^(guò)程.
下載到指定目錄
wget -P/tmp ftp://user:passwd@url/file
把文件file下載到/tmp目錄下。看了“Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件”還想看:
,)} )現(xiàn)在就可以用這種方法來(lái)下載了:
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.如何建立地址列表?
到現(xiàn)在為止我們下載的都是單個(gè)文件或者是整個(gè)網(wǎng)站.有的時(shí)候我們需要下載某個(gè)網(wǎng)頁(yè)上鏈接的大量文件,但沒(méi)有必要把它整個(gè)網(wǎng)站都鏡像下來(lái).比如說(shuō)我們想從一個(gè)依次排列的100首歌里面下載前20首.注意,這里”–accept”和”–reject”參數(shù)是不會(huì)起作用的,因?yàn)樗麄冎粚?duì)文件操作起作用.所以一定要用”lynx -dump”參數(shù)來(lái)代替.
bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep gz$ |tail -10 |awk {print
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
wget的使用形式是:wget[參數(shù)列表]URL,接下來(lái)是小編為大家收集的Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件,歡迎大家閱讀:
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
首先來(lái)介紹一下wget的主要參數(shù):
· -b:讓wget在后臺(tái)運(yùn)行,記錄文件寫(xiě)在當(dāng)前目錄下”wget-log”文件中;
· -t [nuber of times]:嘗試次數(shù),當(dāng)wget無(wú)法與服務(wù)器建立連接時(shí),嘗試連接多少次 。比如”-t 120″表示嘗試120次。當(dāng)這一項(xiàng)為”0″的時(shí)候,指定嘗試無(wú)窮多次直到連接成功為止,這個(gè) 設(shè)置非常有用,當(dāng)對(duì)方服務(wù)器突然關(guān)機(jī)或者網(wǎng)絡(luò)突然中斷的時(shí)候,可以在恢復(fù)正常后繼續(xù) 下載沒(méi)有傳完的文件;
·-c:斷點(diǎn)續(xù)傳,這也是個(gè)非常有用的設(shè)置,特別當(dāng)下載比較大的文件的時(shí)候,如果中途意外中斷,那么連接恢復(fù)的時(shí)候會(huì)從上次沒(méi)傳完的地方接著傳,而不是又從頭開(kāi)始,使用這一項(xiàng)需要遠(yuǎn)程服務(wù)器也支持?jǐn)帱c(diǎn)續(xù)傳,一般來(lái)講,基于UNIX/Linux的Web/FTP服務(wù)器 都支持?jǐn)帱c(diǎn)續(xù)傳;
· -T [number of seconds]:超時(shí)時(shí)間,指定多長(zhǎng)時(shí)間遠(yuǎn)程服務(wù)器沒(méi)有響應(yīng)就中斷連接 ,開(kāi)始下一次嘗試。比如”-T 120″表示如果120秒以后遠(yuǎn)程服務(wù)器沒(méi)有發(fā)過(guò)來(lái)數(shù)據(jù),就重新嘗試連接。如果網(wǎng)絡(luò)速度比較快,這個(gè)時(shí)間可以設(shè)置的短些,相反,可以設(shè)置的長(zhǎng)一些,一般最多不超過(guò)900,通常也不少于60,一般設(shè)置在120左右比較合適;
· -w [number of seconds]:在兩次嘗試之間等待多少秒,比如”-w 100″表示兩次嘗試 之間等待100秒;
· -Y on/off:通過(guò)/不通過(guò)代理服務(wù)器進(jìn)行連接;
· -Q [byetes]:限制下載文件的總大小最多不能超過(guò)多少,比如”-Q2k”表示不能超過(guò)2K 字節(jié),”-Q3m”表示最多不能超過(guò)3M字節(jié),如果數(shù)字后面什么都不加,就表示是以字節(jié)為單 位,比如”-Q200″表示最多不能超過(guò)200字節(jié);
· -nd:不下載目錄結(jié)構(gòu),把從服務(wù)器所有指定目錄下載的文件都堆到當(dāng)前目錄里;
· -x:與”-nd”設(shè)置剛好相反,創(chuàng)建完整的目錄結(jié)構(gòu),例如”wget -x http://www.gnu.org”將在當(dāng)前目錄下創(chuàng)建”www.gnu.org”子目錄,然后按照服務(wù)器 實(shí)際的目錄結(jié)構(gòu)一級(jí)一級(jí)建下去,直到所有的文件都傳完為止;
· -nH:不創(chuàng)建以目標(biāo)主機(jī)域名為目錄名的目錄,將目標(biāo)主機(jī)的目錄結(jié)構(gòu)直接下到當(dāng)前目錄下;
· –http-user=username · –http-passwd=password:如果Web服務(wù)器需要指定用戶名和口令,用這兩項(xiàng)來(lái)設(shè)定;
· –proxy-user=username · –proxy-passwd=password:如果代理服務(wù)器需要輸入用戶名和口令,使用這兩個(gè)選項(xiàng) ;
· -r:在本機(jī)建立服務(wù)器端目錄結(jié)構(gòu);
· -l [depth]:下載遠(yuǎn)程服務(wù)器目錄結(jié)構(gòu)的深度,例如”-l 5″下載目錄深度小于或者等 于5以內(nèi)的目錄結(jié)構(gòu)或者文件;
· -m:做站點(diǎn)鏡像時(shí)的選項(xiàng),如果你想做一個(gè)站點(diǎn)的鏡像,使用這個(gè)選項(xiàng),它將自動(dòng)設(shè)定其他合適的選項(xiàng)以便于站點(diǎn)鏡像;
· -np:只下載目標(biāo)站點(diǎn)指定目錄及其子目錄的內(nèi)容。這也是一個(gè)非常有用的選項(xiàng),我們假設(shè)某個(gè)人的個(gè)人主頁(yè)里面有一個(gè)指向這個(gè)站點(diǎn)其他人個(gè)人主頁(yè)的連接,而我們只想下載這個(gè)人的個(gè)人主頁(yè),如果不設(shè)置這個(gè)選項(xiàng),甚至–有可能把整個(gè)站點(diǎn)給抓下來(lái),這顯然是我們通常不希望的;
ü 如何設(shè)定wget所使用的代理服務(wù)器 wget
可以使用用戶設(shè)置文件”.wgetrc”來(lái)讀取很多設(shè)置,我們這里主要利用這個(gè)文件來(lái)是
設(shè)置代理服務(wù)器。使用者用什么用戶登錄,那么什么用戶主目錄下的”.wgetrc”文件就起
作用。例如,”root”用戶如果想使用”.wgetrc”來(lái)設(shè)置代理服務(wù)器,”/root/.wgert”就起 作用,下面給出一個(gè)”.wge trc”文件的內(nèi)容,讀者可以參照這個(gè)例子來(lái)編寫(xiě)自己的”wgetrc”文件:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
這兩行的含義是,代理服務(wù)器IP地址為:111.111.111.111,端口號(hào)為:80。第一行指定 HTTP協(xié)議所使用的代理服務(wù)器,第二行指定FTP協(xié)議所使用的代理服務(wù)器。
下面就開(kāi)始實(shí)戰(zhàn)吧!
A.使用wget工具
linux所以的主要版本都自帶了wget這個(gè)下載工具.
bash$ wget http://place.your.url/here
它還能控制ftp來(lái)下載整個(gè)web站點(diǎn)的各級(jí)目錄,當(dāng)然,如果你不小心,可能會(huì)把整個(gè)網(wǎng)站以及其他和他做鏈接的網(wǎng)站全部下載下來(lái).
bash$ wget -m http://target.web.site/subdirectory
由于這個(gè)工具具有很強(qiáng)的下載能力,所以可以在服務(wù)器上把它用作鏡像網(wǎng)站的工具.讓它按照”robots.txt”的規(guī)定來(lái)執(zhí)行.
有很多參數(shù)用來(lái)控制它如何正確地做鏡像,可以限制鏈接的類型和下載文件的類型等等.例如:只下載有聯(lián)系的鏈接并且忽略GIF圖片:
bash$ wget -m -L –reject=gif http://target.web.site/subdirectory
wget也能夠?qū)崿F(xiàn)斷點(diǎn)續(xù)傳(-c參數(shù)),當(dāng)然,這種操作是需要遠(yuǎn)程服務(wù)器支持的.
bash$ wget -c http://the.url.of/incomplete/file
可以把斷點(diǎn)續(xù)傳和鏡像功能結(jié)合起來(lái),這樣可以在以前斷過(guò)多次的情況下繼續(xù)鏡像一個(gè)有大量選擇性文件的站點(diǎn).如何自動(dòng)實(shí)現(xiàn)這個(gè)目的我們?cè)诤竺鏁?huì)討論得更多.
如果你覺(jué)得下載時(shí)老是斷線會(huì)影響你辦公的話,你可以限制wget重試的次數(shù).
bash$ wget -t 5 http://place.your.url/here
這樣重試五次后就放棄了.用”-t inf”參數(shù)表示永遠(yuǎn)不放棄.不停地重試.
B.那對(duì)于代理服務(wù)該怎么辦呢?
可以使用http代理的參數(shù)或者在.wgetrc配置文件里指定一個(gè)如何通過(guò)代理去下載的途徑.但是有這么一個(gè)問(wèn)題,如果通過(guò)代理來(lái)進(jìn)行斷點(diǎn)續(xù)傳的話可能會(huì)有幾次失敗.如果有一次通過(guò)代理下載的過(guò)程發(fā)生中斷,那么代理服務(wù)器上緩存里保存是那個(gè)完整的文件拷貝.所以當(dāng)你用”wget -c”來(lái)下載剩余部分的時(shí)候代理服務(wù)器查看它的緩存,并錯(cuò)誤地認(rèn)為你已經(jīng)下載了整個(gè)文件.于是就發(fā)出了錯(cuò)誤的信號(hào).
這個(gè)時(shí)候你可以用添加一個(gè)特定的請(qǐng)求參數(shù)來(lái)促使代理服務(wù)器清除他們的緩存:
bash$ wget -c –header=”Pragma: no-cache” http://place.your.url/here
這個(gè)”–header”參數(shù)能夠以各種數(shù)字,各種方式添加。通過(guò)它我們可以更改web服務(wù)器或者代理服務(wù)器的某些屬性。有些站點(diǎn)不提供外部連接的文件服務(wù),只有通過(guò)同一個(gè)站點(diǎn)上其他的一些頁(yè)面時(shí)內(nèi)容才會(huì)被提交。這個(gè)時(shí)候你可以用加上”Referer:”參數(shù):
bash$ wget –header=”Referer: http://coming.from.this/page” http://surfing.to.this/page
有些特殊的網(wǎng)站只支持某種特定的瀏覽器,這個(gè)時(shí)候可以用”User-Agent:”參數(shù)
bash$ wget –header=”User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)” http://msie.only.url/here
C.那我怎么設(shè)定下載時(shí)間呢?
如果你需要在你的辦公電腦上通過(guò)和其他同事共享的一個(gè)連接來(lái)下載一些很大的文件,而且你希望你的同事不會(huì)因?yàn)榫W(wǎng)絡(luò)速度的減慢而收到影響,那你就應(yīng)該盡量避開(kāi)高峰時(shí)段。當(dāng)然,不需要在辦公室里等到所以人都走掉,也不需要在家里用完晚飯后還惦記著要上網(wǎng)下載一次。
用at來(lái)就可以很好的定制工作時(shí)間:
bash$ at 23:00
warning: commands will be executed using /bin/sh
at> wget http://place.your.url/here
at> press Ctrl-D
這樣,我們?cè)O(shè)定了下載工作在晚上11點(diǎn)進(jìn)行。為了使這個(gè)安排能夠正常進(jìn)行,請(qǐng)確
認(rèn)atd這個(gè)后臺(tái)程序正在運(yùn)行。
D.下載要花很多時(shí)間?
當(dāng)你需要下載大量的數(shù)據(jù),而且你又沒(méi)有享有足夠的帶寬,這個(gè)時(shí)候你會(huì)經(jīng)常發(fā)現(xiàn)在你安排的下載任務(wù)還沒(méi)有完成,一天的工作卻又要開(kāi)始了。
作為一個(gè)好同事,你只能停掉了這些任務(wù),而開(kāi)始另外的工作。然后你又需要反復(fù)地重復(fù)使用”wget -c”來(lái)完成你的下載。這樣肯定太繁瑣了,所以最好是用crontab來(lái)自動(dòng)執(zhí)行。創(chuàng)建一個(gè)純文本文件,叫做”crontab.txt”,包含下面的內(nèi)容:
0 23 * * 1-5 wget -c -N http://place.your.url/here
0 6 * * 1-5 killall wget
這個(gè)crontab文件指定某些任務(wù)定期地執(zhí)行。前五列聲明是什么時(shí)候執(zhí)行這個(gè)命令,而每行的剩余部分則告訴crontab執(zhí)行什么內(nèi)容。
前兩列指定了每天一到晚上11點(diǎn)就開(kāi)始用wget下載,一到早上6點(diǎn)就停止一切wget下載。第三四列的*表示每個(gè)月的每一天都執(zhí)行這個(gè)任務(wù)。第五列則指定了一個(gè)星期的哪幾天來(lái)執(zhí)行這個(gè)程序。 –”1-5″表示從星期一到星期五。
這樣在每個(gè)工作日的晚上11點(diǎn),下載工作開(kāi)始,到了上午的6點(diǎn),任何的wget任務(wù)就被停掉了。你可以用下面的命令來(lái)執(zhí)行crontab:bash$ crontab crontab.txt
wget的這個(gè)”-N”參數(shù)將會(huì)檢查目標(biāo)文件的時(shí)間戳,如果匹配了,下載程序就會(huì)停止,因?yàn)樗f(shuō)明整個(gè)文件已經(jīng)下載完全了。
用”crontab -r”可以刪除這個(gè)計(jì)劃安排。我已經(jīng)多次采用這種方法,通過(guò)共享的電話撥號(hào)來(lái)下載過(guò)很多的ISO鏡像文件,還是比較實(shí)用的。
E.如何下載動(dòng)態(tài)變化的網(wǎng)頁(yè)
有些網(wǎng)頁(yè)每天都要根據(jù)要求變化好幾次.所以從技術(shù)上講,目標(biāo)不再是一個(gè)文件,它沒(méi)有文件長(zhǎng)度.因此”-c”這個(gè)參數(shù)也就失去了意義.
例如:一個(gè)PHP寫(xiě)的并且經(jīng)常變動(dòng)的linux周末新聞網(wǎng)頁(yè):
bash$ wget http://lwn.net/bigpage.php3
我辦公室里的網(wǎng)絡(luò)條件經(jīng)常很差,給我的下載帶了很大的麻煩,所以我寫(xiě)了個(gè)簡(jiǎn)單的腳本來(lái)檢測(cè)動(dòng)態(tài)頁(yè)面是否已經(jīng)完全更新了.
#!/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
這個(gè)腳本能夠保證持續(xù)的下載該網(wǎng)頁(yè),直到網(wǎng)頁(yè)里面出現(xiàn)了" ",這就表示該文件已經(jīng)完全更新了.
F.對(duì)于ssl和Cookies怎么辦?
如果你要通過(guò)ssl來(lái)上網(wǎng),那么網(wǎng)站地址應(yīng)該是以”https://”來(lái)開(kāi)頭的.在這樣的情況下你就需要另外一種下載工具,叫做curl,它能夠很容易獲得.有些網(wǎng)站迫使網(wǎng)友在瀏覽的時(shí)候必須使用cookie.所以你必須從在網(wǎng)站上得到的那個(gè)Cookie里面得到”Cookie:”這個(gè)參數(shù).這樣才
能保證下載的參數(shù)正確.對(duì)于lynx和Mozilla的Cookie的文件格式,用下面的:
bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf(”%s=%s;”,,)} )
就可以構(gòu)造一個(gè)請(qǐng)求Cookie來(lái)下載http://www.nytimes.com上的內(nèi)容.當(dāng)然,你要已經(jīng)用這個(gè)瀏覽器在該網(wǎng)站上完成注冊(cè).
w3m使用了一種不同的,更小巧的Cookie文件格式:
bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf(”%s=%s;”,
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
wget的使用形式是:wget[參數(shù)列表]URL,接下來(lái)是小編為大家收集的Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件,歡迎大家閱讀:
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
首先來(lái)介紹一下wget的主要參數(shù):
· -b:讓wget在后臺(tái)運(yùn)行,記錄文件寫(xiě)在當(dāng)前目錄下”wget-log”文件中;
· -t [nuber of times]:嘗試次數(shù),當(dāng)wget無(wú)法與服務(wù)器建立連接時(shí),嘗試連接多少次 。比如”-t 120″表示嘗試120次。當(dāng)這一項(xiàng)為”0″的時(shí)候,指定嘗試無(wú)窮多次直到連接成功為止,這個(gè) 設(shè)置非常有用,當(dāng)對(duì)方服務(wù)器突然關(guān)機(jī)或者網(wǎng)絡(luò)突然中斷的時(shí)候,可以在恢復(fù)正常后繼續(xù) 下載沒(méi)有傳完的文件;
·-c:斷點(diǎn)續(xù)傳,這也是個(gè)非常有用的設(shè)置,特別當(dāng)下載比較大的文件的時(shí)候,如果中途意外中斷,那么連接恢復(fù)的時(shí)候會(huì)從上次沒(méi)傳完的地方接著傳,而不是又從頭開(kāi)始,使用這一項(xiàng)需要遠(yuǎn)程服務(wù)器也支持?jǐn)帱c(diǎn)續(xù)傳,一般來(lái)講,基于UNIX/Linux的Web/FTP服務(wù)器 都支持?jǐn)帱c(diǎn)續(xù)傳;
· -T [number of seconds]:超時(shí)時(shí)間,指定多長(zhǎng)時(shí)間遠(yuǎn)程服務(wù)器沒(méi)有響應(yīng)就中斷連接 ,開(kāi)始下一次嘗試。比如”-T 120″表示如果120秒以后遠(yuǎn)程服務(wù)器沒(méi)有發(fā)過(guò)來(lái)數(shù)據(jù),就重新嘗試連接。如果網(wǎng)絡(luò)速度比較快,這個(gè)時(shí)間可以設(shè)置的短些,相反,可以設(shè)置的長(zhǎng)一些,一般最多不超過(guò)900,通常也不少于60,一般設(shè)置在120左右比較合適;
· -w [number of seconds]:在兩次嘗試之間等待多少秒,比如”-w 100″表示兩次嘗試 之間等待100秒;
· -Y on/off:通過(guò)/不通過(guò)代理服務(wù)器進(jìn)行連接;
· -Q [byetes]:限制下載文件的總大小最多不能超過(guò)多少,比如”-Q2k”表示不能超過(guò)2K 字節(jié),”-Q3m”表示最多不能超過(guò)3M字節(jié),如果數(shù)字后面什么都不加,就表示是以字節(jié)為單 位,比如”-Q200″表示最多不能超過(guò)200字節(jié);
· -nd:不下載目錄結(jié)構(gòu),把從服務(wù)器所有指定目錄下載的文件都堆到當(dāng)前目錄里;
· -x:與”-nd”設(shè)置剛好相反,創(chuàng)建完整的目錄結(jié)構(gòu),例如”wget -x http://www.gnu.org”將在當(dāng)前目錄下創(chuàng)建”www.gnu.org”子目錄,然后按照服務(wù)器 實(shí)際的目錄結(jié)構(gòu)一級(jí)一級(jí)建下去,直到所有的文件都傳完為止;
· -nH:不創(chuàng)建以目標(biāo)主機(jī)域名為目錄名的目錄,將目標(biāo)主機(jī)的目錄結(jié)構(gòu)直接下到當(dāng)前目錄下;
· –http-user=username · –http-passwd=password:如果Web服務(wù)器需要指定用戶名和口令,用這兩項(xiàng)來(lái)設(shè)定;
· –proxy-user=username · –proxy-passwd=password:如果代理服務(wù)器需要輸入用戶名和口令,使用這兩個(gè)選項(xiàng) ;
· -r:在本機(jī)建立服務(wù)器端目錄結(jié)構(gòu);
· -l [depth]:下載遠(yuǎn)程服務(wù)器目錄結(jié)構(gòu)的深度,例如”-l 5″下載目錄深度小于或者等 于5以內(nèi)的目錄結(jié)構(gòu)或者文件;
· -m:做站點(diǎn)鏡像時(shí)的選項(xiàng),如果你想做一個(gè)站點(diǎn)的鏡像,使用這個(gè)選項(xiàng),它將自動(dòng)設(shè)定其他合適的選項(xiàng)以便于站點(diǎn)鏡像;
· -np:只下載目標(biāo)站點(diǎn)指定目錄及其子目錄的內(nèi)容。這也是一個(gè)非常有用的選項(xiàng),我們假設(shè)某個(gè)人的個(gè)人主頁(yè)里面有一個(gè)指向這個(gè)站點(diǎn)其他人個(gè)人主頁(yè)的連接,而我們只想下載這個(gè)人的個(gè)人主頁(yè),如果不設(shè)置這個(gè)選項(xiàng),甚至–有可能把整個(gè)站點(diǎn)給抓下來(lái),這顯然是我們通常不希望的;
ü 如何設(shè)定wget所使用的代理服務(wù)器 wget
可以使用用戶設(shè)置文件”.wgetrc”來(lái)讀取很多設(shè)置,我們這里主要利用這個(gè)文件來(lái)是
設(shè)置代理服務(wù)器。使用者用什么用戶登錄,那么什么用戶主目錄下的”.wgetrc”文件就起
作用。例如,”root”用戶如果想使用”.wgetrc”來(lái)設(shè)置代理服務(wù)器,”/root/.wgert”就起 作用,下面給出一個(gè)”.wge trc”文件的內(nèi)容,讀者可以參照這個(gè)例子來(lái)編寫(xiě)自己的”wgetrc”文件:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
這兩行的含義是,代理服務(wù)器IP地址為:111.111.111.111,端口號(hào)為:80。第一行指定 HTTP協(xié)議所使用的代理服務(wù)器,第二行指定FTP協(xié)議所使用的代理服務(wù)器。
下面就開(kāi)始實(shí)戰(zhàn)吧!
A.使用wget工具
linux所以的主要版本都自帶了wget這個(gè)下載工具.
bash$ wget http://place.your.url/here
它還能控制ftp來(lái)下載整個(gè)web站點(diǎn)的各級(jí)目錄,當(dāng)然,如果你不小心,可能會(huì)把整個(gè)網(wǎng)站以及其他和他做鏈接的網(wǎng)站全部下載下來(lái).
bash$ wget -m http://target.web.site/subdirectory
由于這個(gè)工具具有很強(qiáng)的下載能力,所以可以在服務(wù)器上把它用作鏡像網(wǎng)站的工具.讓它按照”robots.txt”的規(guī)定來(lái)執(zhí)行.
有很多參數(shù)用來(lái)控制它如何正確地做鏡像,可以限制鏈接的類型和下載文件的類型等等.例如:只下載有聯(lián)系的鏈接并且忽略GIF圖片:
bash$ wget -m -L –reject=gif http://target.web.site/subdirectory
wget也能夠?qū)崿F(xiàn)斷點(diǎn)續(xù)傳(-c參數(shù)),當(dāng)然,這種操作是需要遠(yuǎn)程服務(wù)器支持的.
bash$ wget -c http://the.url.of/incomplete/file
可以把斷點(diǎn)續(xù)傳和鏡像功能結(jié)合起來(lái),這樣可以在以前斷過(guò)多次的情況下繼續(xù)鏡像一個(gè)有大量選擇性文件的站點(diǎn).如何自動(dòng)實(shí)現(xiàn)這個(gè)目的我們?cè)诤竺鏁?huì)討論得更多.
如果你覺(jué)得下載時(shí)老是斷線會(huì)影響你辦公的話,你可以限制wget重試的次數(shù).
bash$ wget -t 5 http://place.your.url/here
這樣重試五次后就放棄了.用”-t inf”參數(shù)表示永遠(yuǎn)不放棄.不停地重試.
B.那對(duì)于代理服務(wù)該怎么辦呢?
可以使用http代理的參數(shù)或者在.wgetrc配置文件里指定一個(gè)如何通過(guò)代理去下載的途徑.但是有這么一個(gè)問(wèn)題,如果通過(guò)代理來(lái)進(jìn)行斷點(diǎn)續(xù)傳的話可能會(huì)有幾次失敗.如果有一次通過(guò)代理下載的過(guò)程發(fā)生中斷,那么代理服務(wù)器上緩存里保存是那個(gè)完整的文件拷貝.所以當(dāng)你用”wget -c”來(lái)下載剩余部分的時(shí)候代理服務(wù)器查看它的緩存,并錯(cuò)誤地認(rèn)為你已經(jīng)下載了整個(gè)文件.于是就發(fā)出了錯(cuò)誤的信號(hào).
這個(gè)時(shí)候你可以用添加一個(gè)特定的請(qǐng)求參數(shù)來(lái)促使代理服務(wù)器清除他們的緩存:
bash$ wget -c –header=”Pragma: no-cache” http://place.your.url/here
這個(gè)”–header”參數(shù)能夠以各種數(shù)字,各種方式添加。通過(guò)它我們可以更改web服務(wù)器或者代理服務(wù)器的某些屬性。有些站點(diǎn)不提供外部連接的文件服務(wù),只有通過(guò)同一個(gè)站點(diǎn)上其他的一些頁(yè)面時(shí)內(nèi)容才會(huì)被提交。這個(gè)時(shí)候你可以用加上”Referer:”參數(shù):
bash$ wget –header=”Referer: http://coming.from.this/page” http://surfing.to.this/page
有些特殊的網(wǎng)站只支持某種特定的瀏覽器,這個(gè)時(shí)候可以用”User-Agent:”參數(shù)
bash$ wget –header=”User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)” http://msie.only.url/here
C.那我怎么設(shè)定下載時(shí)間呢?
如果你需要在你的辦公電腦上通過(guò)和其他同事共享的一個(gè)連接來(lái)下載一些很大的文件,而且你希望你的同事不會(huì)因?yàn)榫W(wǎng)絡(luò)速度的減慢而收到影響,那你就應(yīng)該盡量避開(kāi)高峰時(shí)段。當(dāng)然,不需要在辦公室里等到所以人都走掉,也不需要在家里用完晚飯后還惦記著要上網(wǎng)下載一次。
用at來(lái)就可以很好的定制工作時(shí)間:
bash$ at 23:00
warning: commands will be executed using /bin/sh
at> wget http://place.your.url/here
at> press Ctrl-D
這樣,我們?cè)O(shè)定了下載工作在晚上11點(diǎn)進(jìn)行。為了使這個(gè)安排能夠正常進(jìn)行,請(qǐng)確
認(rèn)atd這個(gè)后臺(tái)程序正在運(yùn)行。
D.下載要花很多時(shí)間?
當(dāng)你需要下載大量的數(shù)據(jù),而且你又沒(méi)有享有足夠的帶寬,這個(gè)時(shí)候你會(huì)經(jīng)常發(fā)現(xiàn)在你安排的下載任務(wù)還沒(méi)有完成,一天的工作卻又要開(kāi)始了。
作為一個(gè)好同事,你只能停掉了這些任務(wù),而開(kāi)始另外的工作。然后你又需要反復(fù)地重復(fù)使用”wget -c”來(lái)完成你的下載。這樣肯定太繁瑣了,所以最好是用crontab來(lái)自動(dòng)執(zhí)行。創(chuàng)建一個(gè)純文本文件,叫做”crontab.txt”,包含下面的內(nèi)容:
0 23 * * 1-5 wget -c -N http://place.your.url/here
0 6 * * 1-5 killall wget
這個(gè)crontab文件指定某些任務(wù)定期地執(zhí)行。前五列聲明是什么時(shí)候執(zhí)行這個(gè)命令,而每行的剩余部分則告訴crontab執(zhí)行什么內(nèi)容。
前兩列指定了每天一到晚上11點(diǎn)就開(kāi)始用wget下載,一到早上6點(diǎn)就停止一切wget下載。第三四列的*表示每個(gè)月的每一天都執(zhí)行這個(gè)任務(wù)。第五列則指定了一個(gè)星期的哪幾天來(lái)執(zhí)行這個(gè)程序。 –”1-5″表示從星期一到星期五。
這樣在每個(gè)工作日的晚上11點(diǎn),下載工作開(kāi)始,到了上午的6點(diǎn),任何的wget任務(wù)就被停掉了。你可以用下面的命令來(lái)執(zhí)行crontab:bash$ crontab crontab.txt
wget的這個(gè)”-N”參數(shù)將會(huì)檢查目標(biāo)文件的時(shí)間戳,如果匹配了,下載程序就會(huì)停止,因?yàn)樗f(shuō)明整個(gè)文件已經(jīng)下載完全了。
用”crontab -r”可以刪除這個(gè)計(jì)劃安排。我已經(jīng)多次采用這種方法,通過(guò)共享的電話撥號(hào)來(lái)下載過(guò)很多的ISO鏡像文件,還是比較實(shí)用的。
E.如何下載動(dòng)態(tài)變化的網(wǎng)頁(yè)
有些網(wǎng)頁(yè)每天都要根據(jù)要求變化好幾次.所以從技術(shù)上講,目標(biāo)不再是一個(gè)文件,它沒(méi)有文件長(zhǎng)度.因此”-c”這個(gè)參數(shù)也就失去了意義.
例如:一個(gè)PHP寫(xiě)的并且經(jīng)常變動(dòng)的linux周末新聞網(wǎng)頁(yè):
bash$ wget http://lwn.net/bigpage.php3
我辦公室里的網(wǎng)絡(luò)條件經(jīng)常很差,給我的下載帶了很大的麻煩,所以我寫(xiě)了個(gè)簡(jiǎn)單的腳本來(lái)檢測(cè)動(dòng)態(tài)頁(yè)面是否已經(jīng)完全更新了.
#!/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
這個(gè)腳本能夠保證持續(xù)的下載該網(wǎng)頁(yè),直到網(wǎng)頁(yè)里面出現(xiàn)了" ",這就表示該文件已經(jīng)完全更新了.
F.對(duì)于ssl和Cookies怎么辦?
如果你要通過(guò)ssl來(lái)上網(wǎng),那么網(wǎng)站地址應(yīng)該是以”https://”來(lái)開(kāi)頭的.在這樣的情況下你就需要另外一種下載工具,叫做curl,它能夠很容易獲得.有些網(wǎng)站迫使網(wǎng)友在瀏覽的時(shí)候必須使用cookie.所以你必須從在網(wǎng)站上得到的那個(gè)Cookie里面得到”Cookie:”這個(gè)參數(shù).這樣才
能保證下載的參數(shù)正確.對(duì)于lynx和Mozilla的Cookie的文件格式,用下面的:
bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf(”%s=%s;”,,)} )
就可以構(gòu)造一個(gè)請(qǐng)求Cookie來(lái)下載http://www.nytimes.com上的內(nèi)容.當(dāng)然,你要已經(jīng)用這個(gè)瀏覽器在該網(wǎng)站上完成注冊(cè).
w3m使用了一種不同的,更小巧的Cookie文件格式:
bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf(”%s=%s;”,
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
wget的使用形式是:wget[參數(shù)列表]URL,接下來(lái)是小編為大家收集的Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件,歡迎大家閱讀:
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
首先來(lái)介紹一下wget的主要參數(shù):
· -b:讓wget在后臺(tái)運(yùn)行,記錄文件寫(xiě)在當(dāng)前目錄下”wget-log”文件中;
· -t [nuber of times]:嘗試次數(shù),當(dāng)wget無(wú)法與服務(wù)器建立連接時(shí),嘗試連接多少次 。比如”-t 120″表示嘗試120次。當(dāng)這一項(xiàng)為”0″的時(shí)候,指定嘗試無(wú)窮多次直到連接成功為止,這個(gè) 設(shè)置非常有用,當(dāng)對(duì)方服務(wù)器突然關(guān)機(jī)或者網(wǎng)絡(luò)突然中斷的時(shí)候,可以在恢復(fù)正常后繼續(xù) 下載沒(méi)有傳完的文件;
·-c:斷點(diǎn)續(xù)傳,這也是個(gè)非常有用的設(shè)置,特別當(dāng)下載比較大的文件的時(shí)候,如果中途意外中斷,那么連接恢復(fù)的時(shí)候會(huì)從上次沒(méi)傳完的地方接著傳,而不是又從頭開(kāi)始,使用這一項(xiàng)需要遠(yuǎn)程服務(wù)器也支持?jǐn)帱c(diǎn)續(xù)傳,一般來(lái)講,基于UNIX/Linux的Web/FTP服務(wù)器 都支持?jǐn)帱c(diǎn)續(xù)傳;
· -T [number of seconds]:超時(shí)時(shí)間,指定多長(zhǎng)時(shí)間遠(yuǎn)程服務(wù)器沒(méi)有響應(yīng)就中斷連接 ,開(kāi)始下一次嘗試。比如”-T 120″表示如果120秒以后遠(yuǎn)程服務(wù)器沒(méi)有發(fā)過(guò)來(lái)數(shù)據(jù),就重新嘗試連接。如果網(wǎng)絡(luò)速度比較快,這個(gè)時(shí)間可以設(shè)置的短些,相反,可以設(shè)置的長(zhǎng)一些,一般最多不超過(guò)900,通常也不少于60,一般設(shè)置在120左右比較合適;
· -w [number of seconds]:在兩次嘗試之間等待多少秒,比如”-w 100″表示兩次嘗試 之間等待100秒;
· -Y on/off:通過(guò)/不通過(guò)代理服務(wù)器進(jìn)行連接;
· -Q [byetes]:限制下載文件的總大小最多不能超過(guò)多少,比如”-Q2k”表示不能超過(guò)2K 字節(jié),”-Q3m”表示最多不能超過(guò)3M字節(jié),如果數(shù)字后面什么都不加,就表示是以字節(jié)為單 位,比如”-Q200″表示最多不能超過(guò)200字節(jié);
· -nd:不下載目錄結(jié)構(gòu),把從服務(wù)器所有指定目錄下載的文件都堆到當(dāng)前目錄里;
· -x:與”-nd”設(shè)置剛好相反,創(chuàng)建完整的目錄結(jié)構(gòu),例如”wget -x http://www.gnu.org”將在當(dāng)前目錄下創(chuàng)建”www.gnu.org”子目錄,然后按照服務(wù)器 實(shí)際的目錄結(jié)構(gòu)一級(jí)一級(jí)建下去,直到所有的文件都傳完為止;
· -nH:不創(chuàng)建以目標(biāo)主機(jī)域名為目錄名的目錄,將目標(biāo)主機(jī)的目錄結(jié)構(gòu)直接下到當(dāng)前目錄下;
· –http-user=username · –http-passwd=password:如果Web服務(wù)器需要指定用戶名和口令,用這兩項(xiàng)來(lái)設(shè)定;
· –proxy-user=username · –proxy-passwd=password:如果代理服務(wù)器需要輸入用戶名和口令,使用這兩個(gè)選項(xiàng) ;
· -r:在本機(jī)建立服務(wù)器端目錄結(jié)構(gòu);
· -l [depth]:下載遠(yuǎn)程服務(wù)器目錄結(jié)構(gòu)的深度,例如”-l 5″下載目錄深度小于或者等 于5以內(nèi)的目錄結(jié)構(gòu)或者文件;
· -m:做站點(diǎn)鏡像時(shí)的選項(xiàng),如果你想做一個(gè)站點(diǎn)的鏡像,使用這個(gè)選項(xiàng),它將自動(dòng)設(shè)定其他合適的選項(xiàng)以便于站點(diǎn)鏡像;
· -np:只下載目標(biāo)站點(diǎn)指定目錄及其子目錄的內(nèi)容。這也是一個(gè)非常有用的選項(xiàng),我們假設(shè)某個(gè)人的個(gè)人主頁(yè)里面有一個(gè)指向這個(gè)站點(diǎn)其他人個(gè)人主頁(yè)的連接,而我們只想下載這個(gè)人的個(gè)人主頁(yè),如果不設(shè)置這個(gè)選項(xiàng),甚至–有可能把整個(gè)站點(diǎn)給抓下來(lái),這顯然是我們通常不希望的;
ü 如何設(shè)定wget所使用的代理服務(wù)器 wget
可以使用用戶設(shè)置文件”.wgetrc”來(lái)讀取很多設(shè)置,我們這里主要利用這個(gè)文件來(lái)是
設(shè)置代理服務(wù)器。使用者用什么用戶登錄,那么什么用戶主目錄下的”.wgetrc”文件就起
作用。例如,”root”用戶如果想使用”.wgetrc”來(lái)設(shè)置代理服務(wù)器,”/root/.wgert”就起 作用,下面給出一個(gè)”.wge trc”文件的內(nèi)容,讀者可以參照這個(gè)例子來(lái)編寫(xiě)自己的”wgetrc”文件:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
這兩行的含義是,代理服務(wù)器IP地址為:111.111.111.111,端口號(hào)為:80。第一行指定 HTTP協(xié)議所使用的代理服務(wù)器,第二行指定FTP協(xié)議所使用的代理服務(wù)器。
下面就開(kāi)始實(shí)戰(zhàn)吧!
A.使用wget工具
linux所以的主要版本都自帶了wget這個(gè)下載工具.
bash$ wget http://place.your.url/here
它還能控制ftp來(lái)下載整個(gè)web站點(diǎn)的各級(jí)目錄,當(dāng)然,如果你不小心,可能會(huì)把整個(gè)網(wǎng)站以及其他和他做鏈接的網(wǎng)站全部下載下來(lái).
bash$ wget -m http://target.web.site/subdirectory
由于這個(gè)工具具有很強(qiáng)的下載能力,所以可以在服務(wù)器上把它用作鏡像網(wǎng)站的工具.讓它按照”robots.txt”的規(guī)定來(lái)執(zhí)行.
有很多參數(shù)用來(lái)控制它如何正確地做鏡像,可以限制鏈接的類型和下載文件的類型等等.例如:只下載有聯(lián)系的鏈接并且忽略GIF圖片:
bash$ wget -m -L –reject=gif http://target.web.site/subdirectory
wget也能夠?qū)崿F(xiàn)斷點(diǎn)續(xù)傳(-c參數(shù)),當(dāng)然,這種操作是需要遠(yuǎn)程服務(wù)器支持的.
bash$ wget -c http://the.url.of/incomplete/file
可以把斷點(diǎn)續(xù)傳和鏡像功能結(jié)合起來(lái),這樣可以在以前斷過(guò)多次的情況下繼續(xù)鏡像一個(gè)有大量選擇性文件的站點(diǎn).如何自動(dòng)實(shí)現(xiàn)這個(gè)目的我們?cè)诤竺鏁?huì)討論得更多.
如果你覺(jué)得下載時(shí)老是斷線會(huì)影響你辦公的話,你可以限制wget重試的次數(shù).
bash$ wget -t 5 http://place.your.url/here
這樣重試五次后就放棄了.用”-t inf”參數(shù)表示永遠(yuǎn)不放棄.不停地重試.
B.那對(duì)于代理服務(wù)該怎么辦呢?
可以使用http代理的參數(shù)或者在.wgetrc配置文件里指定一個(gè)如何通過(guò)代理去下載的途徑.但是有這么一個(gè)問(wèn)題,如果通過(guò)代理來(lái)進(jìn)行斷點(diǎn)續(xù)傳的話可能會(huì)有幾次失敗.如果有一次通過(guò)代理下載的過(guò)程發(fā)生中斷,那么代理服務(wù)器上緩存里保存是那個(gè)完整的文件拷貝.所以當(dāng)你用”wget -c”來(lái)下載剩余部分的時(shí)候代理服務(wù)器查看它的緩存,并錯(cuò)誤地認(rèn)為你已經(jīng)下載了整個(gè)文件.于是就發(fā)出了錯(cuò)誤的信號(hào).
這個(gè)時(shí)候你可以用添加一個(gè)特定的請(qǐng)求參數(shù)來(lái)促使代理服務(wù)器清除他們的緩存:
bash$ wget -c –header=”Pragma: no-cache” http://place.your.url/here
這個(gè)”–header”參數(shù)能夠以各種數(shù)字,各種方式添加。通過(guò)它我們可以更改web服務(wù)器或者代理服務(wù)器的某些屬性。有些站點(diǎn)不提供外部連接的文件服務(wù),只有通過(guò)同一個(gè)站點(diǎn)上其他的一些頁(yè)面時(shí)內(nèi)容才會(huì)被提交。這個(gè)時(shí)候你可以用加上”Referer:”參數(shù):
bash$ wget –header=”Referer: http://coming.from.this/page” http://surfing.to.this/page
有些特殊的網(wǎng)站只支持某種特定的瀏覽器,這個(gè)時(shí)候可以用”User-Agent:”參數(shù)
bash$ wget –header=”User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)” http://msie.only.url/here
C.那我怎么設(shè)定下載時(shí)間呢?
如果你需要在你的辦公電腦上通過(guò)和其他同事共享的一個(gè)連接來(lái)下載一些很大的文件,而且你希望你的同事不會(huì)因?yàn)榫W(wǎng)絡(luò)速度的減慢而收到影響,那你就應(yīng)該盡量避開(kāi)高峰時(shí)段。當(dāng)然,不需要在辦公室里等到所以人都走掉,也不需要在家里用完晚飯后還惦記著要上網(wǎng)下載一次。
用at來(lái)就可以很好的定制工作時(shí)間:
bash$ at 23:00
warning: commands will be executed using /bin/sh
at> wget http://place.your.url/here
at> press Ctrl-D
這樣,我們?cè)O(shè)定了下載工作在晚上11點(diǎn)進(jìn)行。為了使這個(gè)安排能夠正常進(jìn)行,請(qǐng)確
認(rèn)atd這個(gè)后臺(tái)程序正在運(yùn)行。
D.下載要花很多時(shí)間?
當(dāng)你需要下載大量的數(shù)據(jù),而且你又沒(méi)有享有足夠的帶寬,這個(gè)時(shí)候你會(huì)經(jīng)常發(fā)現(xiàn)在你安排的下載任務(wù)還沒(méi)有完成,一天的工作卻又要開(kāi)始了。
作為一個(gè)好同事,你只能停掉了這些任務(wù),而開(kāi)始另外的工作。然后你又需要反復(fù)地重復(fù)使用”wget -c”來(lái)完成你的下載。這樣肯定太繁瑣了,所以最好是用crontab來(lái)自動(dòng)執(zhí)行。創(chuàng)建一個(gè)純文本文件,叫做”crontab.txt”,包含下面的內(nèi)容:
0 23 * * 1-5 wget -c -N http://place.your.url/here
0 6 * * 1-5 killall wget
這個(gè)crontab文件指定某些任務(wù)定期地執(zhí)行。前五列聲明是什么時(shí)候執(zhí)行這個(gè)命令,而每行的剩余部分則告訴crontab執(zhí)行什么內(nèi)容。
前兩列指定了每天一到晚上11點(diǎn)就開(kāi)始用wget下載,一到早上6點(diǎn)就停止一切wget下載。第三四列的*表示每個(gè)月的每一天都執(zhí)行這個(gè)任務(wù)。第五列則指定了一個(gè)星期的哪幾天來(lái)執(zhí)行這個(gè)程序。 –”1-5″表示從星期一到星期五。
這樣在每個(gè)工作日的晚上11點(diǎn),下載工作開(kāi)始,到了上午的6點(diǎn),任何的wget任務(wù)就被停掉了。你可以用下面的命令來(lái)執(zhí)行crontab:bash$ crontab crontab.txt
wget的這個(gè)”-N”參數(shù)將會(huì)檢查目標(biāo)文件的時(shí)間戳,如果匹配了,下載程序就會(huì)停止,因?yàn)樗f(shuō)明整個(gè)文件已經(jīng)下載完全了。
用”crontab -r”可以刪除這個(gè)計(jì)劃安排。我已經(jīng)多次采用這種方法,通過(guò)共享的電話撥號(hào)來(lái)下載過(guò)很多的ISO鏡像文件,還是比較實(shí)用的。
E.如何下載動(dòng)態(tài)變化的網(wǎng)頁(yè)
有些網(wǎng)頁(yè)每天都要根據(jù)要求變化好幾次.所以從技術(shù)上講,目標(biāo)不再是一個(gè)文件,它沒(méi)有文件長(zhǎng)度.因此”-c”這個(gè)參數(shù)也就失去了意義.
例如:一個(gè)PHP寫(xiě)的并且經(jīng)常變動(dòng)的linux周末新聞網(wǎng)頁(yè):
bash$ wget http://lwn.net/bigpage.php3
我辦公室里的網(wǎng)絡(luò)條件經(jīng)常很差,給我的下載帶了很大的麻煩,所以我寫(xiě)了個(gè)簡(jiǎn)單的腳本來(lái)檢測(cè)動(dòng)態(tài)頁(yè)面是否已經(jīng)完全更新了.
#!/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
這個(gè)腳本能夠保證持續(xù)的下載該網(wǎng)頁(yè),直到網(wǎng)頁(yè)里面出現(xiàn)了" ",這就表示該文件已經(jīng)完全更新了.
F.對(duì)于ssl和Cookies怎么辦?
如果你要通過(guò)ssl來(lái)上網(wǎng),那么網(wǎng)站地址應(yīng)該是以”https://”來(lái)開(kāi)頭的.在這樣的情況下你就需要另外一種下載工具,叫做curl,它能夠很容易獲得.有些網(wǎng)站迫使網(wǎng)友在瀏覽的時(shí)候必須使用cookie.所以你必須從在網(wǎng)站上得到的那個(gè)Cookie里面得到”Cookie:”這個(gè)參數(shù).這樣才
能保證下載的參數(shù)正確.對(duì)于lynx和Mozilla的Cookie的文件格式,用下面的:
bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf(”%s=%s;”,$6,$7)} )
就可以構(gòu)造一個(gè)請(qǐng)求Cookie來(lái)下載http://www.nytimes.com上的內(nèi)容.當(dāng)然,你要已經(jīng)用這個(gè)瀏覽器在該網(wǎng)站上完成注冊(cè).
w3m使用了一種不同的,更小巧的Cookie文件格式:
bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf(”%s=%s;”,$2,$3)} )
現(xiàn)在就可以用這種方法來(lái)下載了:
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.如何建立地址列表?
到現(xiàn)在為止我們下載的都是單個(gè)文件或者是整個(gè)網(wǎng)站.有的時(shí)候我們需要下載某個(gè)網(wǎng)頁(yè)上鏈接的大量文件,但沒(méi)有必要把它整個(gè)網(wǎng)站都鏡像下來(lái).比如說(shuō)我們想從一個(gè)依次排列的100首歌里面下載前20首.注意,這里”–accept”和”–reject”參數(shù)是不會(huì)起作用的,因?yàn)樗麄冎粚?duì)文件操作起作用.所以一定要用”lynx -dump”參數(shù)來(lái)代替.
bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep gz$ |tail -10 |awk {print $2} > urllist.txt
lynx的輸出結(jié)果可以被各種GNU文本處理工具過(guò)慮.在上面的例子里,我們的鏈接地址是以”gz”結(jié)尾的,并且把最后10個(gè)文件地址放到urllist.txt文件里.然后我們可以寫(xiě)一個(gè)簡(jiǎn)單的bash腳本來(lái)自動(dòng)下載這個(gè)文件里的目標(biāo)文件:
bash$ for x in $(cat urllist.txt)
> do
> wget $x
> done
這樣我們就能夠成功下載Linux Gazette網(wǎng)站(ftp://ftp.ssc.com/pub/lg/)上的最新10個(gè)論題.
H.擴(kuò)大使用的帶寬
如果你選擇下載一個(gè)受帶寬限制的文件,那你的下載會(huì)因?yàn)榉?wù)器端的限制而變得很慢.下面這個(gè)技巧會(huì)大大縮短下載的過(guò)程.但這個(gè)技巧需要你使用curl并且遠(yuǎn)程服務(wù)器有多個(gè)鏡像可以供你下載.例如,假設(shè)你想從下面的三個(gè)地址下載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
這個(gè)文件的長(zhǎng)度是677281792個(gè)字節(jié),所以用curl程序加”–range”參數(shù)來(lái)建立三個(gè)同時(shí)進(jìn)行的下載:
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 &
這樣就創(chuàng)建了三個(gè)后臺(tái)進(jìn)程.每個(gè)進(jìn)程從不同的服務(wù)器傳輸這個(gè)ISO文件的不同部分.這個(gè)”-r”參數(shù)指定目標(biāo)文件的字節(jié)范圍.當(dāng)這三個(gè)
進(jìn)程結(jié)束后,用一個(gè)簡(jiǎn)單的cat命令來(lái)把這三個(gè)文件銜接起來(lái)– cat mdk-iso.part? > mdk-80.iso.(強(qiáng)烈建議在刻盤(pán)之前先檢查md5)
你也可以用”–verbose”參數(shù)來(lái)使每個(gè)curl進(jìn)程都有自己的窗口來(lái)顯示傳輸?shù)倪^(guò)程.
下載到指定目錄
wget -P/tmp ftp://user:passwd@url/file
把文件file下載到/tmp目錄下??戳?ldquo;Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件”還想看:
,)} )現(xiàn)在就可以用這種方法來(lái)下載了:
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.如何建立地址列表?
到現(xiàn)在為止我們下載的都是單個(gè)文件或者是整個(gè)網(wǎng)站.有的時(shí)候我們需要下載某個(gè)網(wǎng)頁(yè)上鏈接的大量文件,但沒(méi)有必要把它整個(gè)網(wǎng)站都鏡像下來(lái).比如說(shuō)我們想從一個(gè)依次排列的100首歌里面下載前20首.注意,這里”–accept”和”–reject”參數(shù)是不會(huì)起作用的,因?yàn)樗麄冎粚?duì)文件操作起作用.所以一定要用”lynx -dump”參數(shù)來(lái)代替.
bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep gz$ |tail -10 |awk {print
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
wget的使用形式是:wget[參數(shù)列表]URL,接下來(lái)是小編為大家收集的Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件,歡迎大家閱讀:
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
首先來(lái)介紹一下wget的主要參數(shù):
· -b:讓wget在后臺(tái)運(yùn)行,記錄文件寫(xiě)在當(dāng)前目錄下”wget-log”文件中;
· -t [nuber of times]:嘗試次數(shù),當(dāng)wget無(wú)法與服務(wù)器建立連接時(shí),嘗試連接多少次 。比如”-t 120″表示嘗試120次。當(dāng)這一項(xiàng)為”0″的時(shí)候,指定嘗試無(wú)窮多次直到連接成功為止,這個(gè) 設(shè)置非常有用,當(dāng)對(duì)方服務(wù)器突然關(guān)機(jī)或者網(wǎng)絡(luò)突然中斷的時(shí)候,可以在恢復(fù)正常后繼續(xù) 下載沒(méi)有傳完的文件;
·-c:斷點(diǎn)續(xù)傳,這也是個(gè)非常有用的設(shè)置,特別當(dāng)下載比較大的文件的時(shí)候,如果中途意外中斷,那么連接恢復(fù)的時(shí)候會(huì)從上次沒(méi)傳完的地方接著傳,而不是又從頭開(kāi)始,使用這一項(xiàng)需要遠(yuǎn)程服務(wù)器也支持?jǐn)帱c(diǎn)續(xù)傳,一般來(lái)講,基于UNIX/Linux的Web/FTP服務(wù)器 都支持?jǐn)帱c(diǎn)續(xù)傳;
· -T [number of seconds]:超時(shí)時(shí)間,指定多長(zhǎng)時(shí)間遠(yuǎn)程服務(wù)器沒(méi)有響應(yīng)就中斷連接 ,開(kāi)始下一次嘗試。比如”-T 120″表示如果120秒以后遠(yuǎn)程服務(wù)器沒(méi)有發(fā)過(guò)來(lái)數(shù)據(jù),就重新嘗試連接。如果網(wǎng)絡(luò)速度比較快,這個(gè)時(shí)間可以設(shè)置的短些,相反,可以設(shè)置的長(zhǎng)一些,一般最多不超過(guò)900,通常也不少于60,一般設(shè)置在120左右比較合適;
· -w [number of seconds]:在兩次嘗試之間等待多少秒,比如”-w 100″表示兩次嘗試 之間等待100秒;
· -Y on/off:通過(guò)/不通過(guò)代理服務(wù)器進(jìn)行連接;
· -Q [byetes]:限制下載文件的總大小最多不能超過(guò)多少,比如”-Q2k”表示不能超過(guò)2K 字節(jié),”-Q3m”表示最多不能超過(guò)3M字節(jié),如果數(shù)字后面什么都不加,就表示是以字節(jié)為單 位,比如”-Q200″表示最多不能超過(guò)200字節(jié);
· -nd:不下載目錄結(jié)構(gòu),把從服務(wù)器所有指定目錄下載的文件都堆到當(dāng)前目錄里;
· -x:與”-nd”設(shè)置剛好相反,創(chuàng)建完整的目錄結(jié)構(gòu),例如”wget -x http://www.gnu.org”將在當(dāng)前目錄下創(chuàng)建”www.gnu.org”子目錄,然后按照服務(wù)器 實(shí)際的目錄結(jié)構(gòu)一級(jí)一級(jí)建下去,直到所有的文件都傳完為止;
· -nH:不創(chuàng)建以目標(biāo)主機(jī)域名為目錄名的目錄,將目標(biāo)主機(jī)的目錄結(jié)構(gòu)直接下到當(dāng)前目錄下;
· –http-user=username · –http-passwd=password:如果Web服務(wù)器需要指定用戶名和口令,用這兩項(xiàng)來(lái)設(shè)定;
· –proxy-user=username · –proxy-passwd=password:如果代理服務(wù)器需要輸入用戶名和口令,使用這兩個(gè)選項(xiàng) ;
· -r:在本機(jī)建立服務(wù)器端目錄結(jié)構(gòu);
· -l [depth]:下載遠(yuǎn)程服務(wù)器目錄結(jié)構(gòu)的深度,例如”-l 5″下載目錄深度小于或者等 于5以內(nèi)的目錄結(jié)構(gòu)或者文件;
· -m:做站點(diǎn)鏡像時(shí)的選項(xiàng),如果你想做一個(gè)站點(diǎn)的鏡像,使用這個(gè)選項(xiàng),它將自動(dòng)設(shè)定其他合適的選項(xiàng)以便于站點(diǎn)鏡像;
· -np:只下載目標(biāo)站點(diǎn)指定目錄及其子目錄的內(nèi)容。這也是一個(gè)非常有用的選項(xiàng),我們假設(shè)某個(gè)人的個(gè)人主頁(yè)里面有一個(gè)指向這個(gè)站點(diǎn)其他人個(gè)人主頁(yè)的連接,而我們只想下載這個(gè)人的個(gè)人主頁(yè),如果不設(shè)置這個(gè)選項(xiàng),甚至–有可能把整個(gè)站點(diǎn)給抓下來(lái),這顯然是我們通常不希望的;
ü 如何設(shè)定wget所使用的代理服務(wù)器 wget
可以使用用戶設(shè)置文件”.wgetrc”來(lái)讀取很多設(shè)置,我們這里主要利用這個(gè)文件來(lái)是
設(shè)置代理服務(wù)器。使用者用什么用戶登錄,那么什么用戶主目錄下的”.wgetrc”文件就起
作用。例如,”root”用戶如果想使用”.wgetrc”來(lái)設(shè)置代理服務(wù)器,”/root/.wgert”就起 作用,下面給出一個(gè)”.wge trc”文件的內(nèi)容,讀者可以參照這個(gè)例子來(lái)編寫(xiě)自己的”wgetrc”文件:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
這兩行的含義是,代理服務(wù)器IP地址為:111.111.111.111,端口號(hào)為:80。第一行指定 HTTP協(xié)議所使用的代理服務(wù)器,第二行指定FTP協(xié)議所使用的代理服務(wù)器。
下面就開(kāi)始實(shí)戰(zhàn)吧!
A.使用wget工具
linux所以的主要版本都自帶了wget這個(gè)下載工具.
bash$ wget http://place.your.url/here
它還能控制ftp來(lái)下載整個(gè)web站點(diǎn)的各級(jí)目錄,當(dāng)然,如果你不小心,可能會(huì)把整個(gè)網(wǎng)站以及其他和他做鏈接的網(wǎng)站全部下載下來(lái).
bash$ wget -m http://target.web.site/subdirectory
由于這個(gè)工具具有很強(qiáng)的下載能力,所以可以在服務(wù)器上把它用作鏡像網(wǎng)站的工具.讓它按照”robots.txt”的規(guī)定來(lái)執(zhí)行.
有很多參數(shù)用來(lái)控制它如何正確地做鏡像,可以限制鏈接的類型和下載文件的類型等等.例如:只下載有聯(lián)系的鏈接并且忽略GIF圖片:
bash$ wget -m -L –reject=gif http://target.web.site/subdirectory
wget也能夠?qū)崿F(xiàn)斷點(diǎn)續(xù)傳(-c參數(shù)),當(dāng)然,這種操作是需要遠(yuǎn)程服務(wù)器支持的.
bash$ wget -c http://the.url.of/incomplete/file
可以把斷點(diǎn)續(xù)傳和鏡像功能結(jié)合起來(lái),這樣可以在以前斷過(guò)多次的情況下繼續(xù)鏡像一個(gè)有大量選擇性文件的站點(diǎn).如何自動(dòng)實(shí)現(xiàn)這個(gè)目的我們?cè)诤竺鏁?huì)討論得更多.
如果你覺(jué)得下載時(shí)老是斷線會(huì)影響你辦公的話,你可以限制wget重試的次數(shù).
bash$ wget -t 5 http://place.your.url/here
這樣重試五次后就放棄了.用”-t inf”參數(shù)表示永遠(yuǎn)不放棄.不停地重試.
B.那對(duì)于代理服務(wù)該怎么辦呢?
可以使用http代理的參數(shù)或者在.wgetrc配置文件里指定一個(gè)如何通過(guò)代理去下載的途徑.但是有這么一個(gè)問(wèn)題,如果通過(guò)代理來(lái)進(jìn)行斷點(diǎn)續(xù)傳的話可能會(huì)有幾次失敗.如果有一次通過(guò)代理下載的過(guò)程發(fā)生中斷,那么代理服務(wù)器上緩存里保存是那個(gè)完整的文件拷貝.所以當(dāng)你用”wget -c”來(lái)下載剩余部分的時(shí)候代理服務(wù)器查看它的緩存,并錯(cuò)誤地認(rèn)為你已經(jīng)下載了整個(gè)文件.于是就發(fā)出了錯(cuò)誤的信號(hào).
這個(gè)時(shí)候你可以用添加一個(gè)特定的請(qǐng)求參數(shù)來(lái)促使代理服務(wù)器清除他們的緩存:
bash$ wget -c –header=”Pragma: no-cache” http://place.your.url/here
這個(gè)”–header”參數(shù)能夠以各種數(shù)字,各種方式添加。通過(guò)它我們可以更改web服務(wù)器或者代理服務(wù)器的某些屬性。有些站點(diǎn)不提供外部連接的文件服務(wù),只有通過(guò)同一個(gè)站點(diǎn)上其他的一些頁(yè)面時(shí)內(nèi)容才會(huì)被提交。這個(gè)時(shí)候你可以用加上”Referer:”參數(shù):
bash$ wget –header=”Referer: http://coming.from.this/page” http://surfing.to.this/page
有些特殊的網(wǎng)站只支持某種特定的瀏覽器,這個(gè)時(shí)候可以用”User-Agent:”參數(shù)
bash$ wget –header=”User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)” http://msie.only.url/here
C.那我怎么設(shè)定下載時(shí)間呢?
如果你需要在你的辦公電腦上通過(guò)和其他同事共享的一個(gè)連接來(lái)下載一些很大的文件,而且你希望你的同事不會(huì)因?yàn)榫W(wǎng)絡(luò)速度的減慢而收到影響,那你就應(yīng)該盡量避開(kāi)高峰時(shí)段。當(dāng)然,不需要在辦公室里等到所以人都走掉,也不需要在家里用完晚飯后還惦記著要上網(wǎng)下載一次。
用at來(lái)就可以很好的定制工作時(shí)間:
bash$ at 23:00
warning: commands will be executed using /bin/sh
at> wget http://place.your.url/here
at> press Ctrl-D
這樣,我們?cè)O(shè)定了下載工作在晚上11點(diǎn)進(jìn)行。為了使這個(gè)安排能夠正常進(jìn)行,請(qǐng)確
認(rèn)atd這個(gè)后臺(tái)程序正在運(yùn)行。
D.下載要花很多時(shí)間?
當(dāng)你需要下載大量的數(shù)據(jù),而且你又沒(méi)有享有足夠的帶寬,這個(gè)時(shí)候你會(huì)經(jīng)常發(fā)現(xiàn)在你安排的下載任務(wù)還沒(méi)有完成,一天的工作卻又要開(kāi)始了。
作為一個(gè)好同事,你只能停掉了這些任務(wù),而開(kāi)始另外的工作。然后你又需要反復(fù)地重復(fù)使用”wget -c”來(lái)完成你的下載。這樣肯定太繁瑣了,所以最好是用crontab來(lái)自動(dòng)執(zhí)行。創(chuàng)建一個(gè)純文本文件,叫做”crontab.txt”,包含下面的內(nèi)容:
0 23 * * 1-5 wget -c -N http://place.your.url/here
0 6 * * 1-5 killall wget
這個(gè)crontab文件指定某些任務(wù)定期地執(zhí)行。前五列聲明是什么時(shí)候執(zhí)行這個(gè)命令,而每行的剩余部分則告訴crontab執(zhí)行什么內(nèi)容。
前兩列指定了每天一到晚上11點(diǎn)就開(kāi)始用wget下載,一到早上6點(diǎn)就停止一切wget下載。第三四列的*表示每個(gè)月的每一天都執(zhí)行這個(gè)任務(wù)。第五列則指定了一個(gè)星期的哪幾天來(lái)執(zhí)行這個(gè)程序。 –”1-5″表示從星期一到星期五。
這樣在每個(gè)工作日的晚上11點(diǎn),下載工作開(kāi)始,到了上午的6點(diǎn),任何的wget任務(wù)就被停掉了。你可以用下面的命令來(lái)執(zhí)行crontab:bash$ crontab crontab.txt
wget的這個(gè)”-N”參數(shù)將會(huì)檢查目標(biāo)文件的時(shí)間戳,如果匹配了,下載程序就會(huì)停止,因?yàn)樗f(shuō)明整個(gè)文件已經(jīng)下載完全了。
用”crontab -r”可以刪除這個(gè)計(jì)劃安排。我已經(jīng)多次采用這種方法,通過(guò)共享的電話撥號(hào)來(lái)下載過(guò)很多的ISO鏡像文件,還是比較實(shí)用的。
E.如何下載動(dòng)態(tài)變化的網(wǎng)頁(yè)
有些網(wǎng)頁(yè)每天都要根據(jù)要求變化好幾次.所以從技術(shù)上講,目標(biāo)不再是一個(gè)文件,它沒(méi)有文件長(zhǎng)度.因此”-c”這個(gè)參數(shù)也就失去了意義.
例如:一個(gè)PHP寫(xiě)的并且經(jīng)常變動(dòng)的linux周末新聞網(wǎng)頁(yè):
bash$ wget http://lwn.net/bigpage.php3
我辦公室里的網(wǎng)絡(luò)條件經(jīng)常很差,給我的下載帶了很大的麻煩,所以我寫(xiě)了個(gè)簡(jiǎn)單的腳本來(lái)檢測(cè)動(dòng)態(tài)頁(yè)面是否已經(jīng)完全更新了.
#!/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
這個(gè)腳本能夠保證持續(xù)的下載該網(wǎng)頁(yè),直到網(wǎng)頁(yè)里面出現(xiàn)了" ",這就表示該文件已經(jīng)完全更新了.
F.對(duì)于ssl和Cookies怎么辦?
如果你要通過(guò)ssl來(lái)上網(wǎng),那么網(wǎng)站地址應(yīng)該是以”https://”來(lái)開(kāi)頭的.在這樣的情況下你就需要另外一種下載工具,叫做curl,它能夠很容易獲得.有些網(wǎng)站迫使網(wǎng)友在瀏覽的時(shí)候必須使用cookie.所以你必須從在網(wǎng)站上得到的那個(gè)Cookie里面得到”Cookie:”這個(gè)參數(shù).這樣才
能保證下載的參數(shù)正確.對(duì)于lynx和Mozilla的Cookie的文件格式,用下面的:
bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf(”%s=%s;”,$6,$7)} )
就可以構(gòu)造一個(gè)請(qǐng)求Cookie來(lái)下載http://www.nytimes.com上的內(nèi)容.當(dāng)然,你要已經(jīng)用這個(gè)瀏覽器在該網(wǎng)站上完成注冊(cè).
w3m使用了一種不同的,更小巧的Cookie文件格式:
bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf(”%s=%s;”,$2,$3)} )
現(xiàn)在就可以用這種方法來(lái)下載了:
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.如何建立地址列表?
到現(xiàn)在為止我們下載的都是單個(gè)文件或者是整個(gè)網(wǎng)站.有的時(shí)候我們需要下載某個(gè)網(wǎng)頁(yè)上鏈接的大量文件,但沒(méi)有必要把它整個(gè)網(wǎng)站都鏡像下來(lái).比如說(shuō)我們想從一個(gè)依次排列的100首歌里面下載前20首.注意,這里”–accept”和”–reject”參數(shù)是不會(huì)起作用的,因?yàn)樗麄冎粚?duì)文件操作起作用.所以一定要用”lynx -dump”參數(shù)來(lái)代替.
bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep gz$ |tail -10 |awk {print $2} > urllist.txt
lynx的輸出結(jié)果可以被各種GNU文本處理工具過(guò)慮.在上面的例子里,我們的鏈接地址是以”gz”結(jié)尾的,并且把最后10個(gè)文件地址放到urllist.txt文件里.然后我們可以寫(xiě)一個(gè)簡(jiǎn)單的bash腳本來(lái)自動(dòng)下載這個(gè)文件里的目標(biāo)文件:
bash$ for x in $(cat urllist.txt)
> do
> wget $x
> done
這樣我們就能夠成功下載Linux Gazette網(wǎng)站(ftp://ftp.ssc.com/pub/lg/)上的最新10個(gè)論題.
H.擴(kuò)大使用的帶寬
如果你選擇下載一個(gè)受帶寬限制的文件,那你的下載會(huì)因?yàn)榉?wù)器端的限制而變得很慢.下面這個(gè)技巧會(huì)大大縮短下載的過(guò)程.但這個(gè)技巧需要你使用curl并且遠(yuǎn)程服務(wù)器有多個(gè)鏡像可以供你下載.例如,假設(shè)你想從下面的三個(gè)地址下載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
這個(gè)文件的長(zhǎng)度是677281792個(gè)字節(jié),所以用curl程序加”–range”參數(shù)來(lái)建立三個(gè)同時(shí)進(jìn)行的下載:
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 &
這樣就創(chuàng)建了三個(gè)后臺(tái)進(jìn)程.每個(gè)進(jìn)程從不同的服務(wù)器傳輸這個(gè)ISO文件的不同部分.這個(gè)”-r”參數(shù)指定目標(biāo)文件的字節(jié)范圍.當(dāng)這三個(gè)
進(jìn)程結(jié)束后,用一個(gè)簡(jiǎn)單的cat命令來(lái)把這三個(gè)文件銜接起來(lái)– cat mdk-iso.part? > mdk-80.iso.(強(qiáng)烈建議在刻盤(pán)之前先檢查md5)
你也可以用”–verbose”參數(shù)來(lái)使每個(gè)curl進(jìn)程都有自己的窗口來(lái)顯示傳輸?shù)倪^(guò)程.
下載到指定目錄
wget -P/tmp ftp://user:passwd@url/file
把文件file下載到/tmp目錄下??戳?ldquo;Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件”還想看:
} > urllist.txtlynx的輸出結(jié)果可以被各種GNU文本處理工具過(guò)慮.在上面的例子里,我們的鏈接地址是以”gz”結(jié)尾的,并且把最后10個(gè)文件地址放到urllist.txt文件里.然后我們可以寫(xiě)一個(gè)簡(jiǎn)單的bash腳本來(lái)自動(dòng)下載這個(gè)文件里的目標(biāo)文件:
bash$ for x in $(cat urllist.txt)
> do
> wget $x
> done
這樣我們就能夠成功下載Linux Gazette網(wǎng)站(ftp://ftp.ssc.com/pub/lg/)上的最新10個(gè)論題.
H.擴(kuò)大使用的帶寬
如果你選擇下載一個(gè)受帶寬限制的文件,那你的下載會(huì)因?yàn)榉?wù)器端的限制而變得很慢.下面這個(gè)技巧會(huì)大大縮短下載的過(guò)程.但這個(gè)技巧需要你使用curl并且遠(yuǎn)程服務(wù)器有多個(gè)鏡像可以供你下載.例如,假設(shè)你想從下面的三個(gè)地址下載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
這個(gè)文件的長(zhǎng)度是677281792個(gè)字節(jié),所以用curl程序加”–range”參數(shù)來(lái)建立三個(gè)同時(shí)進(jìn)行的下載:
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 &
這樣就創(chuàng)建了三個(gè)后臺(tái)進(jìn)程.每個(gè)進(jìn)程從不同的服務(wù)器傳輸這個(gè)ISO文件的不同部分.這個(gè)”-r”參數(shù)指定目標(biāo)文件的字節(jié)范圍.當(dāng)這三個(gè)
進(jìn)程結(jié)束后,用一個(gè)簡(jiǎn)單的cat命令來(lái)把這三個(gè)文件銜接起來(lái)– cat mdk-iso.part? > mdk-80.iso.(強(qiáng)烈建議在刻盤(pán)之前先檢查md5)
你也可以用”–verbose”參數(shù)來(lái)使每個(gè)curl進(jìn)程都有自己的窗口來(lái)顯示傳輸?shù)倪^(guò)程.
下載到指定目錄
wget -P/tmp ftp://user:passwd@url/file
把文件file下載到/tmp目錄下??戳?ldquo;Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件”還想看:
,)} )現(xiàn)在就可以用這種方法來(lái)下載了:
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.如何建立地址列表?
到現(xiàn)在為止我們下載的都是單個(gè)文件或者是整個(gè)網(wǎng)站.有的時(shí)候我們需要下載某個(gè)網(wǎng)頁(yè)上鏈接的大量文件,但沒(méi)有必要把它整個(gè)網(wǎng)站都鏡像下來(lái).比如說(shuō)我們想從一個(gè)依次排列的100首歌里面下載前20首.注意,這里”–accept”和”–reject”參數(shù)是不會(huì)起作用的,因?yàn)樗麄冎粚?duì)文件操作起作用.所以一定要用”lynx -dump”參數(shù)來(lái)代替.
bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep gz$ |tail -10 |awk {print
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
wget的使用形式是:wget[參數(shù)列表]URL,接下來(lái)是小編為大家收集的Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件,歡迎大家閱讀:
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
首先來(lái)介紹一下wget的主要參數(shù):
· -b:讓wget在后臺(tái)運(yùn)行,記錄文件寫(xiě)在當(dāng)前目錄下”wget-log”文件中;
· -t [nuber of times]:嘗試次數(shù),當(dāng)wget無(wú)法與服務(wù)器建立連接時(shí),嘗試連接多少次 。比如”-t 120″表示嘗試120次。當(dāng)這一項(xiàng)為”0″的時(shí)候,指定嘗試無(wú)窮多次直到連接成功為止,這個(gè) 設(shè)置非常有用,當(dāng)對(duì)方服務(wù)器突然關(guān)機(jī)或者網(wǎng)絡(luò)突然中斷的時(shí)候,可以在恢復(fù)正常后繼續(xù) 下載沒(méi)有傳完的文件;
·-c:斷點(diǎn)續(xù)傳,這也是個(gè)非常有用的設(shè)置,特別當(dāng)下載比較大的文件的時(shí)候,如果中途意外中斷,那么連接恢復(fù)的時(shí)候會(huì)從上次沒(méi)傳完的地方接著傳,而不是又從頭開(kāi)始,使用這一項(xiàng)需要遠(yuǎn)程服務(wù)器也支持?jǐn)帱c(diǎn)續(xù)傳,一般來(lái)講,基于UNIX/Linux的Web/FTP服務(wù)器 都支持?jǐn)帱c(diǎn)續(xù)傳;
· -T [number of seconds]:超時(shí)時(shí)間,指定多長(zhǎng)時(shí)間遠(yuǎn)程服務(wù)器沒(méi)有響應(yīng)就中斷連接 ,開(kāi)始下一次嘗試。比如”-T 120″表示如果120秒以后遠(yuǎn)程服務(wù)器沒(méi)有發(fā)過(guò)來(lái)數(shù)據(jù),就重新嘗試連接。如果網(wǎng)絡(luò)速度比較快,這個(gè)時(shí)間可以設(shè)置的短些,相反,可以設(shè)置的長(zhǎng)一些,一般最多不超過(guò)900,通常也不少于60,一般設(shè)置在120左右比較合適;
· -w [number of seconds]:在兩次嘗試之間等待多少秒,比如”-w 100″表示兩次嘗試 之間等待100秒;
· -Y on/off:通過(guò)/不通過(guò)代理服務(wù)器進(jìn)行連接;
· -Q [byetes]:限制下載文件的總大小最多不能超過(guò)多少,比如”-Q2k”表示不能超過(guò)2K 字節(jié),”-Q3m”表示最多不能超過(guò)3M字節(jié),如果數(shù)字后面什么都不加,就表示是以字節(jié)為單 位,比如”-Q200″表示最多不能超過(guò)200字節(jié);
· -nd:不下載目錄結(jié)構(gòu),把從服務(wù)器所有指定目錄下載的文件都堆到當(dāng)前目錄里;
· -x:與”-nd”設(shè)置剛好相反,創(chuàng)建完整的目錄結(jié)構(gòu),例如”wget -x http://www.gnu.org”將在當(dāng)前目錄下創(chuàng)建”www.gnu.org”子目錄,然后按照服務(wù)器 實(shí)際的目錄結(jié)構(gòu)一級(jí)一級(jí)建下去,直到所有的文件都傳完為止;
· -nH:不創(chuàng)建以目標(biāo)主機(jī)域名為目錄名的目錄,將目標(biāo)主機(jī)的目錄結(jié)構(gòu)直接下到當(dāng)前目錄下;
· –http-user=username · –http-passwd=password:如果Web服務(wù)器需要指定用戶名和口令,用這兩項(xiàng)來(lái)設(shè)定;
· –proxy-user=username · –proxy-passwd=password:如果代理服務(wù)器需要輸入用戶名和口令,使用這兩個(gè)選項(xiàng) ;
· -r:在本機(jī)建立服務(wù)器端目錄結(jié)構(gòu);
· -l [depth]:下載遠(yuǎn)程服務(wù)器目錄結(jié)構(gòu)的深度,例如”-l 5″下載目錄深度小于或者等 于5以內(nèi)的目錄結(jié)構(gòu)或者文件;
· -m:做站點(diǎn)鏡像時(shí)的選項(xiàng),如果你想做一個(gè)站點(diǎn)的鏡像,使用這個(gè)選項(xiàng),它將自動(dòng)設(shè)定其他合適的選項(xiàng)以便于站點(diǎn)鏡像;
· -np:只下載目標(biāo)站點(diǎn)指定目錄及其子目錄的內(nèi)容。這也是一個(gè)非常有用的選項(xiàng),我們假設(shè)某個(gè)人的個(gè)人主頁(yè)里面有一個(gè)指向這個(gè)站點(diǎn)其他人個(gè)人主頁(yè)的連接,而我們只想下載這個(gè)人的個(gè)人主頁(yè),如果不設(shè)置這個(gè)選項(xiàng),甚至–有可能把整個(gè)站點(diǎn)給抓下來(lái),這顯然是我們通常不希望的;
ü 如何設(shè)定wget所使用的代理服務(wù)器 wget
可以使用用戶設(shè)置文件”.wgetrc”來(lái)讀取很多設(shè)置,我們這里主要利用這個(gè)文件來(lái)是
設(shè)置代理服務(wù)器。使用者用什么用戶登錄,那么什么用戶主目錄下的”.wgetrc”文件就起
作用。例如,”root”用戶如果想使用”.wgetrc”來(lái)設(shè)置代理服務(wù)器,”/root/.wgert”就起 作用,下面給出一個(gè)”.wge trc”文件的內(nèi)容,讀者可以參照這個(gè)例子來(lái)編寫(xiě)自己的”wgetrc”文件:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
這兩行的含義是,代理服務(wù)器IP地址為:111.111.111.111,端口號(hào)為:80。第一行指定 HTTP協(xié)議所使用的代理服務(wù)器,第二行指定FTP協(xié)議所使用的代理服務(wù)器。
下面就開(kāi)始實(shí)戰(zhàn)吧!
A.使用wget工具
linux所以的主要版本都自帶了wget這個(gè)下載工具.
bash$ wget http://place.your.url/here
它還能控制ftp來(lái)下載整個(gè)web站點(diǎn)的各級(jí)目錄,當(dāng)然,如果你不小心,可能會(huì)把整個(gè)網(wǎng)站以及其他和他做鏈接的網(wǎng)站全部下載下來(lái).
bash$ wget -m http://target.web.site/subdirectory
由于這個(gè)工具具有很強(qiáng)的下載能力,所以可以在服務(wù)器上把它用作鏡像網(wǎng)站的工具.讓它按照”robots.txt”的規(guī)定來(lái)執(zhí)行.
有很多參數(shù)用來(lái)控制它如何正確地做鏡像,可以限制鏈接的類型和下載文件的類型等等.例如:只下載有聯(lián)系的鏈接并且忽略GIF圖片:
bash$ wget -m -L –reject=gif http://target.web.site/subdirectory
wget也能夠?qū)崿F(xiàn)斷點(diǎn)續(xù)傳(-c參數(shù)),當(dāng)然,這種操作是需要遠(yuǎn)程服務(wù)器支持的.
bash$ wget -c http://the.url.of/incomplete/file
可以把斷點(diǎn)續(xù)傳和鏡像功能結(jié)合起來(lái),這樣可以在以前斷過(guò)多次的情況下繼續(xù)鏡像一個(gè)有大量選擇性文件的站點(diǎn).如何自動(dòng)實(shí)現(xiàn)這個(gè)目的我們?cè)诤竺鏁?huì)討論得更多.
如果你覺(jué)得下載時(shí)老是斷線會(huì)影響你辦公的話,你可以限制wget重試的次數(shù).
bash$ wget -t 5 http://place.your.url/here
這樣重試五次后就放棄了.用”-t inf”參數(shù)表示永遠(yuǎn)不放棄.不停地重試.
B.那對(duì)于代理服務(wù)該怎么辦呢?
可以使用http代理的參數(shù)或者在.wgetrc配置文件里指定一個(gè)如何通過(guò)代理去下載的途徑.但是有這么一個(gè)問(wèn)題,如果通過(guò)代理來(lái)進(jìn)行斷點(diǎn)續(xù)傳的話可能會(huì)有幾次失敗.如果有一次通過(guò)代理下載的過(guò)程發(fā)生中斷,那么代理服務(wù)器上緩存里保存是那個(gè)完整的文件拷貝.所以當(dāng)你用”wget -c”來(lái)下載剩余部分的時(shí)候代理服務(wù)器查看它的緩存,并錯(cuò)誤地認(rèn)為你已經(jīng)下載了整個(gè)文件.于是就發(fā)出了錯(cuò)誤的信號(hào).
這個(gè)時(shí)候你可以用添加一個(gè)特定的請(qǐng)求參數(shù)來(lái)促使代理服務(wù)器清除他們的緩存:
bash$ wget -c –header=”Pragma: no-cache” http://place.your.url/here
這個(gè)”–header”參數(shù)能夠以各種數(shù)字,各種方式添加。通過(guò)它我們可以更改web服務(wù)器或者代理服務(wù)器的某些屬性。有些站點(diǎn)不提供外部連接的文件服務(wù),只有通過(guò)同一個(gè)站點(diǎn)上其他的一些頁(yè)面時(shí)內(nèi)容才會(huì)被提交。這個(gè)時(shí)候你可以用加上”Referer:”參數(shù):
bash$ wget –header=”Referer: http://coming.from.this/page” http://surfing.to.this/page
有些特殊的網(wǎng)站只支持某種特定的瀏覽器,這個(gè)時(shí)候可以用”User-Agent:”參數(shù)
bash$ wget –header=”User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)” http://msie.only.url/here
C.那我怎么設(shè)定下載時(shí)間呢?
如果你需要在你的辦公電腦上通過(guò)和其他同事共享的一個(gè)連接來(lái)下載一些很大的文件,而且你希望你的同事不會(huì)因?yàn)榫W(wǎng)絡(luò)速度的減慢而收到影響,那你就應(yīng)該盡量避開(kāi)高峰時(shí)段。當(dāng)然,不需要在辦公室里等到所以人都走掉,也不需要在家里用完晚飯后還惦記著要上網(wǎng)下載一次。
用at來(lái)就可以很好的定制工作時(shí)間:
bash$ at 23:00
warning: commands will be executed using /bin/sh
at> wget http://place.your.url/here
at> press Ctrl-D
這樣,我們?cè)O(shè)定了下載工作在晚上11點(diǎn)進(jìn)行。為了使這個(gè)安排能夠正常進(jìn)行,請(qǐng)確
認(rèn)atd這個(gè)后臺(tái)程序正在運(yùn)行。
D.下載要花很多時(shí)間?
當(dāng)你需要下載大量的數(shù)據(jù),而且你又沒(méi)有享有足夠的帶寬,這個(gè)時(shí)候你會(huì)經(jīng)常發(fā)現(xiàn)在你安排的下載任務(wù)還沒(méi)有完成,一天的工作卻又要開(kāi)始了。
作為一個(gè)好同事,你只能停掉了這些任務(wù),而開(kāi)始另外的工作。然后你又需要反復(fù)地重復(fù)使用”wget -c”來(lái)完成你的下載。這樣肯定太繁瑣了,所以最好是用crontab來(lái)自動(dòng)執(zhí)行。創(chuàng)建一個(gè)純文本文件,叫做”crontab.txt”,包含下面的內(nèi)容:
0 23 * * 1-5 wget -c -N http://place.your.url/here
0 6 * * 1-5 killall wget
這個(gè)crontab文件指定某些任務(wù)定期地執(zhí)行。前五列聲明是什么時(shí)候執(zhí)行這個(gè)命令,而每行的剩余部分則告訴crontab執(zhí)行什么內(nèi)容。
前兩列指定了每天一到晚上11點(diǎn)就開(kāi)始用wget下載,一到早上6點(diǎn)就停止一切wget下載。第三四列的*表示每個(gè)月的每一天都執(zhí)行這個(gè)任務(wù)。第五列則指定了一個(gè)星期的哪幾天來(lái)執(zhí)行這個(gè)程序。 –”1-5″表示從星期一到星期五。
這樣在每個(gè)工作日的晚上11點(diǎn),下載工作開(kāi)始,到了上午的6點(diǎn),任何的wget任務(wù)就被停掉了。你可以用下面的命令來(lái)執(zhí)行crontab:bash$ crontab crontab.txt
wget的這個(gè)”-N”參數(shù)將會(huì)檢查目標(biāo)文件的時(shí)間戳,如果匹配了,下載程序就會(huì)停止,因?yàn)樗f(shuō)明整個(gè)文件已經(jīng)下載完全了。
用”crontab -r”可以刪除這個(gè)計(jì)劃安排。我已經(jīng)多次采用這種方法,通過(guò)共享的電話撥號(hào)來(lái)下載過(guò)很多的ISO鏡像文件,還是比較實(shí)用的。
E.如何下載動(dòng)態(tài)變化的網(wǎng)頁(yè)
有些網(wǎng)頁(yè)每天都要根據(jù)要求變化好幾次.所以從技術(shù)上講,目標(biāo)不再是一個(gè)文件,它沒(méi)有文件長(zhǎng)度.因此”-c”這個(gè)參數(shù)也就失去了意義.
例如:一個(gè)PHP寫(xiě)的并且經(jīng)常變動(dòng)的linux周末新聞網(wǎng)頁(yè):
bash$ wget http://lwn.net/bigpage.php3
我辦公室里的網(wǎng)絡(luò)條件經(jīng)常很差,給我的下載帶了很大的麻煩,所以我寫(xiě)了個(gè)簡(jiǎn)單的腳本來(lái)檢測(cè)動(dòng)態(tài)頁(yè)面是否已經(jīng)完全更新了.
#!/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
這個(gè)腳本能夠保證持續(xù)的下載該網(wǎng)頁(yè),直到網(wǎng)頁(yè)里面出現(xiàn)了" ",這就表示該文件已經(jīng)完全更新了.
F.對(duì)于ssl和Cookies怎么辦?
如果你要通過(guò)ssl來(lái)上網(wǎng),那么網(wǎng)站地址應(yīng)該是以”https://”來(lái)開(kāi)頭的.在這樣的情況下你就需要另外一種下載工具,叫做curl,它能夠很容易獲得.有些網(wǎng)站迫使網(wǎng)友在瀏覽的時(shí)候必須使用cookie.所以你必須從在網(wǎng)站上得到的那個(gè)Cookie里面得到”Cookie:”這個(gè)參數(shù).這樣才
能保證下載的參數(shù)正確.對(duì)于lynx和Mozilla的Cookie的文件格式,用下面的:
bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf(”%s=%s;”,,)} )
就可以構(gòu)造一個(gè)請(qǐng)求Cookie來(lái)下載http://www.nytimes.com上的內(nèi)容.當(dāng)然,你要已經(jīng)用這個(gè)瀏覽器在該網(wǎng)站上完成注冊(cè).
w3m使用了一種不同的,更小巧的Cookie文件格式:
bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf(”%s=%s;”,
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
wget的使用形式是:wget[參數(shù)列表]URL,接下來(lái)是小編為大家收集的Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件,歡迎大家閱讀:
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
首先來(lái)介紹一下wget的主要參數(shù):
· -b:讓wget在后臺(tái)運(yùn)行,記錄文件寫(xiě)在當(dāng)前目錄下”wget-log”文件中;
· -t [nuber of times]:嘗試次數(shù),當(dāng)wget無(wú)法與服務(wù)器建立連接時(shí),嘗試連接多少次 。比如”-t 120″表示嘗試120次。當(dāng)這一項(xiàng)為”0″的時(shí)候,指定嘗試無(wú)窮多次直到連接成功為止,這個(gè) 設(shè)置非常有用,當(dāng)對(duì)方服務(wù)器突然關(guān)機(jī)或者網(wǎng)絡(luò)突然中斷的時(shí)候,可以在恢復(fù)正常后繼續(xù) 下載沒(méi)有傳完的文件;
·-c:斷點(diǎn)續(xù)傳,這也是個(gè)非常有用的設(shè)置,特別當(dāng)下載比較大的文件的時(shí)候,如果中途意外中斷,那么連接恢復(fù)的時(shí)候會(huì)從上次沒(méi)傳完的地方接著傳,而不是又從頭開(kāi)始,使用這一項(xiàng)需要遠(yuǎn)程服務(wù)器也支持?jǐn)帱c(diǎn)續(xù)傳,一般來(lái)講,基于UNIX/Linux的Web/FTP服務(wù)器 都支持?jǐn)帱c(diǎn)續(xù)傳;
· -T [number of seconds]:超時(shí)時(shí)間,指定多長(zhǎng)時(shí)間遠(yuǎn)程服務(wù)器沒(méi)有響應(yīng)就中斷連接 ,開(kāi)始下一次嘗試。比如”-T 120″表示如果120秒以后遠(yuǎn)程服務(wù)器沒(méi)有發(fā)過(guò)來(lái)數(shù)據(jù),就重新嘗試連接。如果網(wǎng)絡(luò)速度比較快,這個(gè)時(shí)間可以設(shè)置的短些,相反,可以設(shè)置的長(zhǎng)一些,一般最多不超過(guò)900,通常也不少于60,一般設(shè)置在120左右比較合適;
· -w [number of seconds]:在兩次嘗試之間等待多少秒,比如”-w 100″表示兩次嘗試 之間等待100秒;
· -Y on/off:通過(guò)/不通過(guò)代理服務(wù)器進(jìn)行連接;
· -Q [byetes]:限制下載文件的總大小最多不能超過(guò)多少,比如”-Q2k”表示不能超過(guò)2K 字節(jié),”-Q3m”表示最多不能超過(guò)3M字節(jié),如果數(shù)字后面什么都不加,就表示是以字節(jié)為單 位,比如”-Q200″表示最多不能超過(guò)200字節(jié);
· -nd:不下載目錄結(jié)構(gòu),把從服務(wù)器所有指定目錄下載的文件都堆到當(dāng)前目錄里;
· -x:與”-nd”設(shè)置剛好相反,創(chuàng)建完整的目錄結(jié)構(gòu),例如”wget -x http://www.gnu.org”將在當(dāng)前目錄下創(chuàng)建”www.gnu.org”子目錄,然后按照服務(wù)器 實(shí)際的目錄結(jié)構(gòu)一級(jí)一級(jí)建下去,直到所有的文件都傳完為止;
· -nH:不創(chuàng)建以目標(biāo)主機(jī)域名為目錄名的目錄,將目標(biāo)主機(jī)的目錄結(jié)構(gòu)直接下到當(dāng)前目錄下;
· –http-user=username · –http-passwd=password:如果Web服務(wù)器需要指定用戶名和口令,用這兩項(xiàng)來(lái)設(shè)定;
· –proxy-user=username · –proxy-passwd=password:如果代理服務(wù)器需要輸入用戶名和口令,使用這兩個(gè)選項(xiàng) ;
· -r:在本機(jī)建立服務(wù)器端目錄結(jié)構(gòu);
· -l [depth]:下載遠(yuǎn)程服務(wù)器目錄結(jié)構(gòu)的深度,例如”-l 5″下載目錄深度小于或者等 于5以內(nèi)的目錄結(jié)構(gòu)或者文件;
· -m:做站點(diǎn)鏡像時(shí)的選項(xiàng),如果你想做一個(gè)站點(diǎn)的鏡像,使用這個(gè)選項(xiàng),它將自動(dòng)設(shè)定其他合適的選項(xiàng)以便于站點(diǎn)鏡像;
· -np:只下載目標(biāo)站點(diǎn)指定目錄及其子目錄的內(nèi)容。這也是一個(gè)非常有用的選項(xiàng),我們假設(shè)某個(gè)人的個(gè)人主頁(yè)里面有一個(gè)指向這個(gè)站點(diǎn)其他人個(gè)人主頁(yè)的連接,而我們只想下載這個(gè)人的個(gè)人主頁(yè),如果不設(shè)置這個(gè)選項(xiàng),甚至–有可能把整個(gè)站點(diǎn)給抓下來(lái),這顯然是我們通常不希望的;
ü 如何設(shè)定wget所使用的代理服務(wù)器 wget
可以使用用戶設(shè)置文件”.wgetrc”來(lái)讀取很多設(shè)置,我們這里主要利用這個(gè)文件來(lái)是
設(shè)置代理服務(wù)器。使用者用什么用戶登錄,那么什么用戶主目錄下的”.wgetrc”文件就起
作用。例如,”root”用戶如果想使用”.wgetrc”來(lái)設(shè)置代理服務(wù)器,”/root/.wgert”就起 作用,下面給出一個(gè)”.wge trc”文件的內(nèi)容,讀者可以參照這個(gè)例子來(lái)編寫(xiě)自己的”wgetrc”文件:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
這兩行的含義是,代理服務(wù)器IP地址為:111.111.111.111,端口號(hào)為:80。第一行指定 HTTP協(xié)議所使用的代理服務(wù)器,第二行指定FTP協(xié)議所使用的代理服務(wù)器。
下面就開(kāi)始實(shí)戰(zhàn)吧!
A.使用wget工具
linux所以的主要版本都自帶了wget這個(gè)下載工具.
bash$ wget http://place.your.url/here
它還能控制ftp來(lái)下載整個(gè)web站點(diǎn)的各級(jí)目錄,當(dāng)然,如果你不小心,可能會(huì)把整個(gè)網(wǎng)站以及其他和他做鏈接的網(wǎng)站全部下載下來(lái).
bash$ wget -m http://target.web.site/subdirectory
由于這個(gè)工具具有很強(qiáng)的下載能力,所以可以在服務(wù)器上把它用作鏡像網(wǎng)站的工具.讓它按照”robots.txt”的規(guī)定來(lái)執(zhí)行.
有很多參數(shù)用來(lái)控制它如何正確地做鏡像,可以限制鏈接的類型和下載文件的類型等等.例如:只下載有聯(lián)系的鏈接并且忽略GIF圖片:
bash$ wget -m -L –reject=gif http://target.web.site/subdirectory
wget也能夠?qū)崿F(xiàn)斷點(diǎn)續(xù)傳(-c參數(shù)),當(dāng)然,這種操作是需要遠(yuǎn)程服務(wù)器支持的.
bash$ wget -c http://the.url.of/incomplete/file
可以把斷點(diǎn)續(xù)傳和鏡像功能結(jié)合起來(lái),這樣可以在以前斷過(guò)多次的情況下繼續(xù)鏡像一個(gè)有大量選擇性文件的站點(diǎn).如何自動(dòng)實(shí)現(xiàn)這個(gè)目的我們?cè)诤竺鏁?huì)討論得更多.
如果你覺(jué)得下載時(shí)老是斷線會(huì)影響你辦公的話,你可以限制wget重試的次數(shù).
bash$ wget -t 5 http://place.your.url/here
這樣重試五次后就放棄了.用”-t inf”參數(shù)表示永遠(yuǎn)不放棄.不停地重試.
B.那對(duì)于代理服務(wù)該怎么辦呢?
可以使用http代理的參數(shù)或者在.wgetrc配置文件里指定一個(gè)如何通過(guò)代理去下載的途徑.但是有這么一個(gè)問(wèn)題,如果通過(guò)代理來(lái)進(jìn)行斷點(diǎn)續(xù)傳的話可能會(huì)有幾次失敗.如果有一次通過(guò)代理下載的過(guò)程發(fā)生中斷,那么代理服務(wù)器上緩存里保存是那個(gè)完整的文件拷貝.所以當(dāng)你用”wget -c”來(lái)下載剩余部分的時(shí)候代理服務(wù)器查看它的緩存,并錯(cuò)誤地認(rèn)為你已經(jīng)下載了整個(gè)文件.于是就發(fā)出了錯(cuò)誤的信號(hào).
這個(gè)時(shí)候你可以用添加一個(gè)特定的請(qǐng)求參數(shù)來(lái)促使代理服務(wù)器清除他們的緩存:
bash$ wget -c –header=”Pragma: no-cache” http://place.your.url/here
這個(gè)”–header”參數(shù)能夠以各種數(shù)字,各種方式添加。通過(guò)它我們可以更改web服務(wù)器或者代理服務(wù)器的某些屬性。有些站點(diǎn)不提供外部連接的文件服務(wù),只有通過(guò)同一個(gè)站點(diǎn)上其他的一些頁(yè)面時(shí)內(nèi)容才會(huì)被提交。這個(gè)時(shí)候你可以用加上”Referer:”參數(shù):
bash$ wget –header=”Referer: http://coming.from.this/page” http://surfing.to.this/page
有些特殊的網(wǎng)站只支持某種特定的瀏覽器,這個(gè)時(shí)候可以用”User-Agent:”參數(shù)
bash$ wget –header=”User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)” http://msie.only.url/here
C.那我怎么設(shè)定下載時(shí)間呢?
如果你需要在你的辦公電腦上通過(guò)和其他同事共享的一個(gè)連接來(lái)下載一些很大的文件,而且你希望你的同事不會(huì)因?yàn)榫W(wǎng)絡(luò)速度的減慢而收到影響,那你就應(yīng)該盡量避開(kāi)高峰時(shí)段。當(dāng)然,不需要在辦公室里等到所以人都走掉,也不需要在家里用完晚飯后還惦記著要上網(wǎng)下載一次。
用at來(lái)就可以很好的定制工作時(shí)間:
bash$ at 23:00
warning: commands will be executed using /bin/sh
at> wget http://place.your.url/here
at> press Ctrl-D
這樣,我們?cè)O(shè)定了下載工作在晚上11點(diǎn)進(jìn)行。為了使這個(gè)安排能夠正常進(jìn)行,請(qǐng)確
認(rèn)atd這個(gè)后臺(tái)程序正在運(yùn)行。
D.下載要花很多時(shí)間?
當(dāng)你需要下載大量的數(shù)據(jù),而且你又沒(méi)有享有足夠的帶寬,這個(gè)時(shí)候你會(huì)經(jīng)常發(fā)現(xiàn)在你安排的下載任務(wù)還沒(méi)有完成,一天的工作卻又要開(kāi)始了。
作為一個(gè)好同事,你只能停掉了這些任務(wù),而開(kāi)始另外的工作。然后你又需要反復(fù)地重復(fù)使用”wget -c”來(lái)完成你的下載。這樣肯定太繁瑣了,所以最好是用crontab來(lái)自動(dòng)執(zhí)行。創(chuàng)建一個(gè)純文本文件,叫做”crontab.txt”,包含下面的內(nèi)容:
0 23 * * 1-5 wget -c -N http://place.your.url/here
0 6 * * 1-5 killall wget
這個(gè)crontab文件指定某些任務(wù)定期地執(zhí)行。前五列聲明是什么時(shí)候執(zhí)行這個(gè)命令,而每行的剩余部分則告訴crontab執(zhí)行什么內(nèi)容。
前兩列指定了每天一到晚上11點(diǎn)就開(kāi)始用wget下載,一到早上6點(diǎn)就停止一切wget下載。第三四列的*表示每個(gè)月的每一天都執(zhí)行這個(gè)任務(wù)。第五列則指定了一個(gè)星期的哪幾天來(lái)執(zhí)行這個(gè)程序。 –”1-5″表示從星期一到星期五。
這樣在每個(gè)工作日的晚上11點(diǎn),下載工作開(kāi)始,到了上午的6點(diǎn),任何的wget任務(wù)就被停掉了。你可以用下面的命令來(lái)執(zhí)行crontab:bash$ crontab crontab.txt
wget的這個(gè)”-N”參數(shù)將會(huì)檢查目標(biāo)文件的時(shí)間戳,如果匹配了,下載程序就會(huì)停止,因?yàn)樗f(shuō)明整個(gè)文件已經(jīng)下載完全了。
用”crontab -r”可以刪除這個(gè)計(jì)劃安排。我已經(jīng)多次采用這種方法,通過(guò)共享的電話撥號(hào)來(lái)下載過(guò)很多的ISO鏡像文件,還是比較實(shí)用的。
E.如何下載動(dòng)態(tài)變化的網(wǎng)頁(yè)
有些網(wǎng)頁(yè)每天都要根據(jù)要求變化好幾次.所以從技術(shù)上講,目標(biāo)不再是一個(gè)文件,它沒(méi)有文件長(zhǎng)度.因此”-c”這個(gè)參數(shù)也就失去了意義.
例如:一個(gè)PHP寫(xiě)的并且經(jīng)常變動(dòng)的linux周末新聞網(wǎng)頁(yè):
bash$ wget http://lwn.net/bigpage.php3
我辦公室里的網(wǎng)絡(luò)條件經(jīng)常很差,給我的下載帶了很大的麻煩,所以我寫(xiě)了個(gè)簡(jiǎn)單的腳本來(lái)檢測(cè)動(dòng)態(tài)頁(yè)面是否已經(jīng)完全更新了.
#!/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
這個(gè)腳本能夠保證持續(xù)的下載該網(wǎng)頁(yè),直到網(wǎng)頁(yè)里面出現(xiàn)了" ",這就表示該文件已經(jīng)完全更新了.
F.對(duì)于ssl和Cookies怎么辦?
如果你要通過(guò)ssl來(lái)上網(wǎng),那么網(wǎng)站地址應(yīng)該是以”https://”來(lái)開(kāi)頭的.在這樣的情況下你就需要另外一種下載工具,叫做curl,它能夠很容易獲得.有些網(wǎng)站迫使網(wǎng)友在瀏覽的時(shí)候必須使用cookie.所以你必須從在網(wǎng)站上得到的那個(gè)Cookie里面得到”Cookie:”這個(gè)參數(shù).這樣才
能保證下載的參數(shù)正確.對(duì)于lynx和Mozilla的Cookie的文件格式,用下面的:
bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf(”%s=%s;”,$6,$7)} )
就可以構(gòu)造一個(gè)請(qǐng)求Cookie來(lái)下載http://www.nytimes.com上的內(nèi)容.當(dāng)然,你要已經(jīng)用這個(gè)瀏覽器在該網(wǎng)站上完成注冊(cè).
w3m使用了一種不同的,更小巧的Cookie文件格式:
bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf(”%s=%s;”,$2,$3)} )
現(xiàn)在就可以用這種方法來(lái)下載了:
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.如何建立地址列表?
到現(xiàn)在為止我們下載的都是單個(gè)文件或者是整個(gè)網(wǎng)站.有的時(shí)候我們需要下載某個(gè)網(wǎng)頁(yè)上鏈接的大量文件,但沒(méi)有必要把它整個(gè)網(wǎng)站都鏡像下來(lái).比如說(shuō)我們想從一個(gè)依次排列的100首歌里面下載前20首.注意,這里”–accept”和”–reject”參數(shù)是不會(huì)起作用的,因?yàn)樗麄冎粚?duì)文件操作起作用.所以一定要用”lynx -dump”參數(shù)來(lái)代替.
bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep gz$ |tail -10 |awk {print $2} > urllist.txt
lynx的輸出結(jié)果可以被各種GNU文本處理工具過(guò)慮.在上面的例子里,我們的鏈接地址是以”gz”結(jié)尾的,并且把最后10個(gè)文件地址放到urllist.txt文件里.然后我們可以寫(xiě)一個(gè)簡(jiǎn)單的bash腳本來(lái)自動(dòng)下載這個(gè)文件里的目標(biāo)文件:
bash$ for x in $(cat urllist.txt)
> do
> wget $x
> done
這樣我們就能夠成功下載Linux Gazette網(wǎng)站(ftp://ftp.ssc.com/pub/lg/)上的最新10個(gè)論題.
H.擴(kuò)大使用的帶寬
如果你選擇下載一個(gè)受帶寬限制的文件,那你的下載會(huì)因?yàn)榉?wù)器端的限制而變得很慢.下面這個(gè)技巧會(huì)大大縮短下載的過(guò)程.但這個(gè)技巧需要你使用curl并且遠(yuǎn)程服務(wù)器有多個(gè)鏡像可以供你下載.例如,假設(shè)你想從下面的三個(gè)地址下載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
這個(gè)文件的長(zhǎng)度是677281792個(gè)字節(jié),所以用curl程序加”–range”參數(shù)來(lái)建立三個(gè)同時(shí)進(jìn)行的下載:
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 &
這樣就創(chuàng)建了三個(gè)后臺(tái)進(jìn)程.每個(gè)進(jìn)程從不同的服務(wù)器傳輸這個(gè)ISO文件的不同部分.這個(gè)”-r”參數(shù)指定目標(biāo)文件的字節(jié)范圍.當(dāng)這三個(gè)
進(jìn)程結(jié)束后,用一個(gè)簡(jiǎn)單的cat命令來(lái)把這三個(gè)文件銜接起來(lái)– cat mdk-iso.part? > mdk-80.iso.(強(qiáng)烈建議在刻盤(pán)之前先檢查md5)
你也可以用”–verbose”參數(shù)來(lái)使每個(gè)curl進(jìn)程都有自己的窗口來(lái)顯示傳輸?shù)倪^(guò)程.
下載到指定目錄
wget -P/tmp ftp://user:passwd@url/file
把文件file下載到/tmp目錄下。看了“Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件”還想看:
,)} )現(xiàn)在就可以用這種方法來(lái)下載了:
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.如何建立地址列表?
到現(xiàn)在為止我們下載的都是單個(gè)文件或者是整個(gè)網(wǎng)站.有的時(shí)候我們需要下載某個(gè)網(wǎng)頁(yè)上鏈接的大量文件,但沒(méi)有必要把它整個(gè)網(wǎng)站都鏡像下來(lái).比如說(shuō)我們想從一個(gè)依次排列的100首歌里面下載前20首.注意,這里”–accept”和”–reject”參數(shù)是不會(huì)起作用的,因?yàn)樗麄冎粚?duì)文件操作起作用.所以一定要用”lynx -dump”參數(shù)來(lái)代替.
bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep gz$ |tail -10 |awk {print
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
wget的使用形式是:wget[參數(shù)列表]URL,接下來(lái)是小編為大家收集的Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件,歡迎大家閱讀:
Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件
首先來(lái)介紹一下wget的主要參數(shù):
· -b:讓wget在后臺(tái)運(yùn)行,記錄文件寫(xiě)在當(dāng)前目錄下”wget-log”文件中;
· -t [nuber of times]:嘗試次數(shù),當(dāng)wget無(wú)法與服務(wù)器建立連接時(shí),嘗試連接多少次 。比如”-t 120″表示嘗試120次。當(dāng)這一項(xiàng)為”0″的時(shí)候,指定嘗試無(wú)窮多次直到連接成功為止,這個(gè) 設(shè)置非常有用,當(dāng)對(duì)方服務(wù)器突然關(guān)機(jī)或者網(wǎng)絡(luò)突然中斷的時(shí)候,可以在恢復(fù)正常后繼續(xù) 下載沒(méi)有傳完的文件;
·-c:斷點(diǎn)續(xù)傳,這也是個(gè)非常有用的設(shè)置,特別當(dāng)下載比較大的文件的時(shí)候,如果中途意外中斷,那么連接恢復(fù)的時(shí)候會(huì)從上次沒(méi)傳完的地方接著傳,而不是又從頭開(kāi)始,使用這一項(xiàng)需要遠(yuǎn)程服務(wù)器也支持?jǐn)帱c(diǎn)續(xù)傳,一般來(lái)講,基于UNIX/Linux的Web/FTP服務(wù)器 都支持?jǐn)帱c(diǎn)續(xù)傳;
· -T [number of seconds]:超時(shí)時(shí)間,指定多長(zhǎng)時(shí)間遠(yuǎn)程服務(wù)器沒(méi)有響應(yīng)就中斷連接 ,開(kāi)始下一次嘗試。比如”-T 120″表示如果120秒以后遠(yuǎn)程服務(wù)器沒(méi)有發(fā)過(guò)來(lái)數(shù)據(jù),就重新嘗試連接。如果網(wǎng)絡(luò)速度比較快,這個(gè)時(shí)間可以設(shè)置的短些,相反,可以設(shè)置的長(zhǎng)一些,一般最多不超過(guò)900,通常也不少于60,一般設(shè)置在120左右比較合適;
· -w [number of seconds]:在兩次嘗試之間等待多少秒,比如”-w 100″表示兩次嘗試 之間等待100秒;
· -Y on/off:通過(guò)/不通過(guò)代理服務(wù)器進(jìn)行連接;
· -Q [byetes]:限制下載文件的總大小最多不能超過(guò)多少,比如”-Q2k”表示不能超過(guò)2K 字節(jié),”-Q3m”表示最多不能超過(guò)3M字節(jié),如果數(shù)字后面什么都不加,就表示是以字節(jié)為單 位,比如”-Q200″表示最多不能超過(guò)200字節(jié);
· -nd:不下載目錄結(jié)構(gòu),把從服務(wù)器所有指定目錄下載的文件都堆到當(dāng)前目錄里;
· -x:與”-nd”設(shè)置剛好相反,創(chuàng)建完整的目錄結(jié)構(gòu),例如”wget -x http://www.gnu.org”將在當(dāng)前目錄下創(chuàng)建”www.gnu.org”子目錄,然后按照服務(wù)器 實(shí)際的目錄結(jié)構(gòu)一級(jí)一級(jí)建下去,直到所有的文件都傳完為止;
· -nH:不創(chuàng)建以目標(biāo)主機(jī)域名為目錄名的目錄,將目標(biāo)主機(jī)的目錄結(jié)構(gòu)直接下到當(dāng)前目錄下;
· –http-user=username · –http-passwd=password:如果Web服務(wù)器需要指定用戶名和口令,用這兩項(xiàng)來(lái)設(shè)定;
· –proxy-user=username · –proxy-passwd=password:如果代理服務(wù)器需要輸入用戶名和口令,使用這兩個(gè)選項(xiàng) ;
· -r:在本機(jī)建立服務(wù)器端目錄結(jié)構(gòu);
· -l [depth]:下載遠(yuǎn)程服務(wù)器目錄結(jié)構(gòu)的深度,例如”-l 5″下載目錄深度小于或者等 于5以內(nèi)的目錄結(jié)構(gòu)或者文件;
· -m:做站點(diǎn)鏡像時(shí)的選項(xiàng),如果你想做一個(gè)站點(diǎn)的鏡像,使用這個(gè)選項(xiàng),它將自動(dòng)設(shè)定其他合適的選項(xiàng)以便于站點(diǎn)鏡像;
· -np:只下載目標(biāo)站點(diǎn)指定目錄及其子目錄的內(nèi)容。這也是一個(gè)非常有用的選項(xiàng),我們假設(shè)某個(gè)人的個(gè)人主頁(yè)里面有一個(gè)指向這個(gè)站點(diǎn)其他人個(gè)人主頁(yè)的連接,而我們只想下載這個(gè)人的個(gè)人主頁(yè),如果不設(shè)置這個(gè)選項(xiàng),甚至–有可能把整個(gè)站點(diǎn)給抓下來(lái),這顯然是我們通常不希望的;
ü 如何設(shè)定wget所使用的代理服務(wù)器 wget
可以使用用戶設(shè)置文件”.wgetrc”來(lái)讀取很多設(shè)置,我們這里主要利用這個(gè)文件來(lái)是
設(shè)置代理服務(wù)器。使用者用什么用戶登錄,那么什么用戶主目錄下的”.wgetrc”文件就起
作用。例如,”root”用戶如果想使用”.wgetrc”來(lái)設(shè)置代理服務(wù)器,”/root/.wgert”就起 作用,下面給出一個(gè)”.wge trc”文件的內(nèi)容,讀者可以參照這個(gè)例子來(lái)編寫(xiě)自己的”wgetrc”文件:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
這兩行的含義是,代理服務(wù)器IP地址為:111.111.111.111,端口號(hào)為:80。第一行指定 HTTP協(xié)議所使用的代理服務(wù)器,第二行指定FTP協(xié)議所使用的代理服務(wù)器。
下面就開(kāi)始實(shí)戰(zhàn)吧!
A.使用wget工具
linux所以的主要版本都自帶了wget這個(gè)下載工具.
bash$ wget http://place.your.url/here
它還能控制ftp來(lái)下載整個(gè)web站點(diǎn)的各級(jí)目錄,當(dāng)然,如果你不小心,可能會(huì)把整個(gè)網(wǎng)站以及其他和他做鏈接的網(wǎng)站全部下載下來(lái).
bash$ wget -m http://target.web.site/subdirectory
由于這個(gè)工具具有很強(qiáng)的下載能力,所以可以在服務(wù)器上把它用作鏡像網(wǎng)站的工具.讓它按照”robots.txt”的規(guī)定來(lái)執(zhí)行.
有很多參數(shù)用來(lái)控制它如何正確地做鏡像,可以限制鏈接的類型和下載文件的類型等等.例如:只下載有聯(lián)系的鏈接并且忽略GIF圖片:
bash$ wget -m -L –reject=gif http://target.web.site/subdirectory
wget也能夠?qū)崿F(xiàn)斷點(diǎn)續(xù)傳(-c參數(shù)),當(dāng)然,這種操作是需要遠(yuǎn)程服務(wù)器支持的.
bash$ wget -c http://the.url.of/incomplete/file
可以把斷點(diǎn)續(xù)傳和鏡像功能結(jié)合起來(lái),這樣可以在以前斷過(guò)多次的情況下繼續(xù)鏡像一個(gè)有大量選擇性文件的站點(diǎn).如何自動(dòng)實(shí)現(xiàn)這個(gè)目的我們?cè)诤竺鏁?huì)討論得更多.
如果你覺(jué)得下載時(shí)老是斷線會(huì)影響你辦公的話,你可以限制wget重試的次數(shù).
bash$ wget -t 5 http://place.your.url/here
這樣重試五次后就放棄了.用”-t inf”參數(shù)表示永遠(yuǎn)不放棄.不停地重試.
B.那對(duì)于代理服務(wù)該怎么辦呢?
可以使用http代理的參數(shù)或者在.wgetrc配置文件里指定一個(gè)如何通過(guò)代理去下載的途徑.但是有這么一個(gè)問(wèn)題,如果通過(guò)代理來(lái)進(jìn)行斷點(diǎn)續(xù)傳的話可能會(huì)有幾次失敗.如果有一次通過(guò)代理下載的過(guò)程發(fā)生中斷,那么代理服務(wù)器上緩存里保存是那個(gè)完整的文件拷貝.所以當(dāng)你用”wget -c”來(lái)下載剩余部分的時(shí)候代理服務(wù)器查看它的緩存,并錯(cuò)誤地認(rèn)為你已經(jīng)下載了整個(gè)文件.于是就發(fā)出了錯(cuò)誤的信號(hào).
這個(gè)時(shí)候你可以用添加一個(gè)特定的請(qǐng)求參數(shù)來(lái)促使代理服務(wù)器清除他們的緩存:
bash$ wget -c –header=”Pragma: no-cache” http://place.your.url/here
這個(gè)”–header”參數(shù)能夠以各種數(shù)字,各種方式添加。通過(guò)它我們可以更改web服務(wù)器或者代理服務(wù)器的某些屬性。有些站點(diǎn)不提供外部連接的文件服務(wù),只有通過(guò)同一個(gè)站點(diǎn)上其他的一些頁(yè)面時(shí)內(nèi)容才會(huì)被提交。這個(gè)時(shí)候你可以用加上”Referer:”參數(shù):
bash$ wget –header=”Referer: http://coming.from.this/page” http://surfing.to.this/page
有些特殊的網(wǎng)站只支持某種特定的瀏覽器,這個(gè)時(shí)候可以用”User-Agent:”參數(shù)
bash$ wget –header=”User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)” http://msie.only.url/here
C.那我怎么設(shè)定下載時(shí)間呢?
如果你需要在你的辦公電腦上通過(guò)和其他同事共享的一個(gè)連接來(lái)下載一些很大的文件,而且你希望你的同事不會(huì)因?yàn)榫W(wǎng)絡(luò)速度的減慢而收到影響,那你就應(yīng)該盡量避開(kāi)高峰時(shí)段。當(dāng)然,不需要在辦公室里等到所以人都走掉,也不需要在家里用完晚飯后還惦記著要上網(wǎng)下載一次。
用at來(lái)就可以很好的定制工作時(shí)間:
bash$ at 23:00
warning: commands will be executed using /bin/sh
at> wget http://place.your.url/here
at> press Ctrl-D
這樣,我們?cè)O(shè)定了下載工作在晚上11點(diǎn)進(jìn)行。為了使這個(gè)安排能夠正常進(jìn)行,請(qǐng)確
認(rèn)atd這個(gè)后臺(tái)程序正在運(yùn)行。
D.下載要花很多時(shí)間?
當(dāng)你需要下載大量的數(shù)據(jù),而且你又沒(méi)有享有足夠的帶寬,這個(gè)時(shí)候你會(huì)經(jīng)常發(fā)現(xiàn)在你安排的下載任務(wù)還沒(méi)有完成,一天的工作卻又要開(kāi)始了。
作為一個(gè)好同事,你只能停掉了這些任務(wù),而開(kāi)始另外的工作。然后你又需要反復(fù)地重復(fù)使用”wget -c”來(lái)完成你的下載。這樣肯定太繁瑣了,所以最好是用crontab來(lái)自動(dòng)執(zhí)行。創(chuàng)建一個(gè)純文本文件,叫做”crontab.txt”,包含下面的內(nèi)容:
0 23 * * 1-5 wget -c -N http://place.your.url/here
0 6 * * 1-5 killall wget
這個(gè)crontab文件指定某些任務(wù)定期地執(zhí)行。前五列聲明是什么時(shí)候執(zhí)行這個(gè)命令,而每行的剩余部分則告訴crontab執(zhí)行什么內(nèi)容。
前兩列指定了每天一到晚上11點(diǎn)就開(kāi)始用wget下載,一到早上6點(diǎn)就停止一切wget下載。第三四列的*表示每個(gè)月的每一天都執(zhí)行這個(gè)任務(wù)。第五列則指定了一個(gè)星期的哪幾天來(lái)執(zhí)行這個(gè)程序。 –”1-5″表示從星期一到星期五。
這樣在每個(gè)工作日的晚上11點(diǎn),下載工作開(kāi)始,到了上午的6點(diǎn),任何的wget任務(wù)就被停掉了。你可以用下面的命令來(lái)執(zhí)行crontab:bash$ crontab crontab.txt
wget的這個(gè)”-N”參數(shù)將會(huì)檢查目標(biāo)文件的時(shí)間戳,如果匹配了,下載程序就會(huì)停止,因?yàn)樗f(shuō)明整個(gè)文件已經(jīng)下載完全了。
用”crontab -r”可以刪除這個(gè)計(jì)劃安排。我已經(jīng)多次采用這種方法,通過(guò)共享的電話撥號(hào)來(lái)下載過(guò)很多的ISO鏡像文件,還是比較實(shí)用的。
E.如何下載動(dòng)態(tài)變化的網(wǎng)頁(yè)
有些網(wǎng)頁(yè)每天都要根據(jù)要求變化好幾次.所以從技術(shù)上講,目標(biāo)不再是一個(gè)文件,它沒(méi)有文件長(zhǎng)度.因此”-c”這個(gè)參數(shù)也就失去了意義.
例如:一個(gè)PHP寫(xiě)的并且經(jīng)常變動(dòng)的linux周末新聞網(wǎng)頁(yè):
bash$ wget http://lwn.net/bigpage.php3
我辦公室里的網(wǎng)絡(luò)條件經(jīng)常很差,給我的下載帶了很大的麻煩,所以我寫(xiě)了個(gè)簡(jiǎn)單的腳本來(lái)檢測(cè)動(dòng)態(tài)頁(yè)面是否已經(jīng)完全更新了.
#!/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
這個(gè)腳本能夠保證持續(xù)的下載該網(wǎng)頁(yè),直到網(wǎng)頁(yè)里面出現(xiàn)了" ",這就表示該文件已經(jīng)完全更新了.
F.對(duì)于ssl和Cookies怎么辦?
如果你要通過(guò)ssl來(lái)上網(wǎng),那么網(wǎng)站地址應(yīng)該是以”https://”來(lái)開(kāi)頭的.在這樣的情況下你就需要另外一種下載工具,叫做curl,它能夠很容易獲得.有些網(wǎng)站迫使網(wǎng)友在瀏覽的時(shí)候必須使用cookie.所以你必須從在網(wǎng)站上得到的那個(gè)Cookie里面得到”Cookie:”這個(gè)參數(shù).這樣才
能保證下載的參數(shù)正確.對(duì)于lynx和Mozilla的Cookie的文件格式,用下面的:
bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf(”%s=%s;”,$6,$7)} )
就可以構(gòu)造一個(gè)請(qǐng)求Cookie來(lái)下載http://www.nytimes.com上的內(nèi)容.當(dāng)然,你要已經(jīng)用這個(gè)瀏覽器在該網(wǎng)站上完成注冊(cè).
w3m使用了一種不同的,更小巧的Cookie文件格式:
bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf(”%s=%s;”,$2,$3)} )
現(xiàn)在就可以用這種方法來(lái)下載了:
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.如何建立地址列表?
到現(xiàn)在為止我們下載的都是單個(gè)文件或者是整個(gè)網(wǎng)站.有的時(shí)候我們需要下載某個(gè)網(wǎng)頁(yè)上鏈接的大量文件,但沒(méi)有必要把它整個(gè)網(wǎng)站都鏡像下來(lái).比如說(shuō)我們想從一個(gè)依次排列的100首歌里面下載前20首.注意,這里”–accept”和”–reject”參數(shù)是不會(huì)起作用的,因?yàn)樗麄冎粚?duì)文件操作起作用.所以一定要用”lynx -dump”參數(shù)來(lái)代替.
bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep gz$ |tail -10 |awk {print $2} > urllist.txt
lynx的輸出結(jié)果可以被各種GNU文本處理工具過(guò)慮.在上面的例子里,我們的鏈接地址是以”gz”結(jié)尾的,并且把最后10個(gè)文件地址放到urllist.txt文件里.然后我們可以寫(xiě)一個(gè)簡(jiǎn)單的bash腳本來(lái)自動(dòng)下載這個(gè)文件里的目標(biāo)文件:
bash$ for x in $(cat urllist.txt)
> do
> wget $x
> done
這樣我們就能夠成功下載Linux Gazette網(wǎng)站(ftp://ftp.ssc.com/pub/lg/)上的最新10個(gè)論題.
H.擴(kuò)大使用的帶寬
如果你選擇下載一個(gè)受帶寬限制的文件,那你的下載會(huì)因?yàn)榉?wù)器端的限制而變得很慢.下面這個(gè)技巧會(huì)大大縮短下載的過(guò)程.但這個(gè)技巧需要你使用curl并且遠(yuǎn)程服務(wù)器有多個(gè)鏡像可以供你下載.例如,假設(shè)你想從下面的三個(gè)地址下載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
這個(gè)文件的長(zhǎng)度是677281792個(gè)字節(jié),所以用curl程序加”–range”參數(shù)來(lái)建立三個(gè)同時(shí)進(jìn)行的下載:
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 &
這樣就創(chuàng)建了三個(gè)后臺(tái)進(jìn)程.每個(gè)進(jìn)程從不同的服務(wù)器傳輸這個(gè)ISO文件的不同部分.這個(gè)”-r”參數(shù)指定目標(biāo)文件的字節(jié)范圍.當(dāng)這三個(gè)
進(jìn)程結(jié)束后,用一個(gè)簡(jiǎn)單的cat命令來(lái)把這三個(gè)文件銜接起來(lái)– cat mdk-iso.part? > mdk-80.iso.(強(qiáng)烈建議在刻盤(pán)之前先檢查md5)
你也可以用”–verbose”參數(shù)來(lái)使每個(gè)curl進(jìn)程都有自己的窗口來(lái)顯示傳輸?shù)倪^(guò)程.
下載到指定目錄
wget -P/tmp ftp://user:passwd@url/file
把文件file下載到/tmp目錄下??戳?ldquo;Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件”還想看:
} > urllist.txtlynx的輸出結(jié)果可以被各種GNU文本處理工具過(guò)慮.在上面的例子里,我們的鏈接地址是以”gz”結(jié)尾的,并且把最后10個(gè)文件地址放到urllist.txt文件里.然后我們可以寫(xiě)一個(gè)簡(jiǎn)單的bash腳本來(lái)自動(dòng)下載這個(gè)文件里的目標(biāo)文件:
bash$ for x in $(cat urllist.txt)
> do
> wget $x
> done
這樣我們就能夠成功下載Linux Gazette網(wǎng)站(ftp://ftp.ssc.com/pub/lg/)上的最新10個(gè)論題.
H.擴(kuò)大使用的帶寬
如果你選擇下載一個(gè)受帶寬限制的文件,那你的下載會(huì)因?yàn)榉?wù)器端的限制而變得很慢.下面這個(gè)技巧會(huì)大大縮短下載的過(guò)程.但這個(gè)技巧需要你使用curl并且遠(yuǎn)程服務(wù)器有多個(gè)鏡像可以供你下載.例如,假設(shè)你想從下面的三個(gè)地址下載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
這個(gè)文件的長(zhǎng)度是677281792個(gè)字節(jié),所以用curl程序加”–range”參數(shù)來(lái)建立三個(gè)同時(shí)進(jìn)行的下載:
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 &
這樣就創(chuàng)建了三個(gè)后臺(tái)進(jìn)程.每個(gè)進(jìn)程從不同的服務(wù)器傳輸這個(gè)ISO文件的不同部分.這個(gè)”-r”參數(shù)指定目標(biāo)文件的字節(jié)范圍.當(dāng)這三個(gè)
進(jìn)程結(jié)束后,用一個(gè)簡(jiǎn)單的cat命令來(lái)把這三個(gè)文件銜接起來(lái)– cat mdk-iso.part? > mdk-80.iso.(強(qiáng)烈建議在刻盤(pán)之前先檢查md5)
你也可以用”–verbose”參數(shù)來(lái)使每個(gè)curl進(jìn)程都有自己的窗口來(lái)顯示傳輸?shù)倪^(guò)程.
下載到指定目錄
wget -P/tmp ftp://user:passwd@url/file
把文件file下載到/tmp目錄下??戳?ldquo;Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件”還想看:
} > urllist.txtlynx的輸出結(jié)果可以被各種GNU文本處理工具過(guò)慮.在上面的例子里,我們的鏈接地址是以”gz”結(jié)尾的,并且把最后10個(gè)文件地址放到urllist.txt文件里.然后我們可以寫(xiě)一個(gè)簡(jiǎn)單的bash腳本來(lái)自動(dòng)下載這個(gè)文件里的目標(biāo)文件:
bash$ for x in $(cat urllist.txt)
> do
> wget $x
> done
這樣我們就能夠成功下載Linux Gazette網(wǎng)站(ftp://ftp.ssc.com/pub/lg/)上的最新10個(gè)論題.
H.擴(kuò)大使用的帶寬
如果你選擇下載一個(gè)受帶寬限制的文件,那你的下載會(huì)因?yàn)榉?wù)器端的限制而變得很慢.下面這個(gè)技巧會(huì)大大縮短下載的過(guò)程.但這個(gè)技巧需要你使用curl并且遠(yuǎn)程服務(wù)器有多個(gè)鏡像可以供你下載.例如,假設(shè)你想從下面的三個(gè)地址下載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
這個(gè)文件的長(zhǎng)度是677281792個(gè)字節(jié),所以用curl程序加”–range”參數(shù)來(lái)建立三個(gè)同時(shí)進(jìn)行的下載:
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 &
這樣就創(chuàng)建了三個(gè)后臺(tái)進(jìn)程.每個(gè)進(jìn)程從不同的服務(wù)器傳輸這個(gè)ISO文件的不同部分.這個(gè)”-r”參數(shù)指定目標(biāo)文件的字節(jié)范圍.當(dāng)這三個(gè)
進(jìn)程結(jié)束后,用一個(gè)簡(jiǎn)單的cat命令來(lái)把這三個(gè)文件銜接起來(lái)– cat mdk-iso.part? > mdk-80.iso.(強(qiáng)烈建議在刻盤(pán)之前先檢查md5)
你也可以用”–verbose”參數(shù)來(lái)使每個(gè)curl進(jìn)程都有自己的窗口來(lái)顯示傳輸?shù)倪^(guò)程.
下載到指定目錄
wget -P/tmp ftp://user:passwd@url/file
把文件file下載到/tmp目錄下??戳?ldquo;Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件”還想看:
} > urllist.txtlynx的輸出結(jié)果可以被各種GNU文本處理工具過(guò)慮.在上面的例子里,我們的鏈接地址是以”gz”結(jié)尾的,并且把最后10個(gè)文件地址放到urllist.txt文件里.然后我們可以寫(xiě)一個(gè)簡(jiǎn)單的bash腳本來(lái)自動(dòng)下載這個(gè)文件里的目標(biāo)文件:
bash$ for x in $(cat urllist.txt)
> do
> wget $x
> done
這樣我們就能夠成功下載Linux Gazette網(wǎng)站(ftp://ftp.ssc.com/pub/lg/)上的最新10個(gè)論題.
H.擴(kuò)大使用的帶寬
如果你選擇下載一個(gè)受帶寬限制的文件,那你的下載會(huì)因?yàn)榉?wù)器端的限制而變得很慢.下面這個(gè)技巧會(huì)大大縮短下載的過(guò)程.但這個(gè)技巧需要你使用curl并且遠(yuǎn)程服務(wù)器有多個(gè)鏡像可以供你下載.例如,假設(shè)你想從下面的三個(gè)地址下載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
這個(gè)文件的長(zhǎng)度是677281792個(gè)字節(jié),所以用curl程序加”–range”參數(shù)來(lái)建立三個(gè)同時(shí)進(jìn)行的下載:
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 &
這樣就創(chuàng)建了三個(gè)后臺(tái)進(jìn)程.每個(gè)進(jìn)程從不同的服務(wù)器傳輸這個(gè)ISO文件的不同部分.這個(gè)”-r”參數(shù)指定目標(biāo)文件的字節(jié)范圍.當(dāng)這三個(gè)
進(jìn)程結(jié)束后,用一個(gè)簡(jiǎn)單的cat命令來(lái)把這三個(gè)文件銜接起來(lái)– cat mdk-iso.part? > mdk-80.iso.(強(qiáng)烈建議在刻盤(pán)之前先檢查md5)
你也可以用”–verbose”參數(shù)來(lái)使每個(gè)curl進(jìn)程都有自己的窗口來(lái)顯示傳輸?shù)倪^(guò)程.
下載到指定目錄
wget -P/tmp ftp://user:passwd@url/file
把文件file下載到/tmp目錄下。看了“Linux用wget命令行方式進(jìn)行網(wǎng)絡(luò)下載文件”還想看: