Linux系統(tǒng)下wget命令的使用教程
一、Linux wget簡(jiǎn)介
wget是linux上的命令行的下載工具。這是一個(gè)GPL許可證下的自由軟件。Linux wget支持HTTP和FTP協(xié)議,支持代理服務(wù)器和斷點(diǎn)續(xù)傳功能,能夠自動(dòng)遞歸遠(yuǎn)程主機(jī)的目錄,找到合乎條件的文件并將其下載到本地硬盤(pán)上;如果必要,Linux wget將恰當(dāng)?shù)剞D(zhuǎn)換頁(yè)面中的超級(jí)連接以在本地生成可瀏覽的鏡像。由于沒(méi)有交互式界面,Linux wget可在后臺(tái)運(yùn)行,截獲并忽略HANGUP信號(hào),因此在用戶推出登錄以后,仍可繼續(xù)運(yùn)行。通常,Linux wget用于成批量地下載Internet網(wǎng)站上的文件,或制作遠(yuǎn)程網(wǎng)站的鏡像。
二、實(shí)例
下載下載192.168.1.168首頁(yè)并且顯示下載信息Linux wget -d http://192.168.1.168下載192.168.1.168首頁(yè)并且不顯示任何信息wget -q http://192.168.1.168下載filelist.txt中所包含的鏈接的所有文件wget -i filelist.txt
下載到指定目錄wget -P/tmp ftp://user:passwd@url/file把文件file下載到/tmp目錄下。Linux wget是一個(gè)命令行的下載工具。對(duì)于我們這些 Linux 用戶來(lái)說(shuō),幾乎每天都在使用它。下面為大家介紹幾個(gè)有用的 Linux wget 小技巧,可以讓你更加高效而靈活的使用 Linux wget。
*
*
*
*
*
三、參數(shù)
代碼:
啟動(dòng):
-V, --version 顯示 Wget 的版本并且退出。
-h, --help 打印此幫助。
-b, -background 啟動(dòng)后進(jìn)入后臺(tái)操作。
-e, -execute=COMMAND 運(yùn)行‘.wgetrc’形式的命令。
日志記錄及輸入文件:
-o, --output-file=文件 將日志消息寫(xiě)入到指定文件中。
-a, --append-output=文件 將日志消息追加到指定文件的末端。
-d, --debug 打印調(diào)試輸出。
-q, --quiet 安靜模式(不輸出信息)。
-v, --verbose 詳細(xì)輸出模式(默認(rèn))。
-nv, --non-verbose 關(guān)閉詳細(xì)輸出模式,但不進(jìn)入安靜模式。
-i, --input-file=文件 下載從指定文件中找到的 URL。
-F, --force-html 以 HTML 方式處理輸入文件。
-B, --base=URL 使用 -F -i 文件選項(xiàng)時(shí),在相對(duì)鏈接前添加指定的 URL。
下載:
-t, --tries=次數(shù) 配置重試次數(shù)(0 表示無(wú)限)。
--retry-connrefused 即使拒絕連接也重試。
-O --output-document=文件 將數(shù)據(jù)寫(xiě)入此文件中。
-nc, --no-clobber 不更改已經(jīng)存在的文件,也不使用在文件名后添加 .#(# 為數(shù)字)的方法寫(xiě)入新的文件。
-c, --continue 繼續(xù)接收已下載了一部分的文件。
--progress=方式 選擇下載進(jìn)度的表示方式。
-N, --timestamping 除非遠(yuǎn)程文件較新,否則不再取回。
-S, --server-response 顯示服務(wù)器回應(yīng)消息。
--spider 不下載任何數(shù)據(jù)。
-T, --timeout=秒數(shù) 配置讀取數(shù)據(jù)的超時(shí)時(shí)間 (秒數(shù))。
-w, --wait=秒數(shù) 接收不同文件之間等待的秒數(shù)。
--waitretry=秒數(shù) 在每次重試之間稍等一段時(shí)間 (由 1 秒至指定的 秒數(shù)不等)。
--random-wait 接收不同文件之間稍等一段時(shí)間(由 0 秒至 2*WAIT 秒不等)。
-Y, --proxy=on/off 打開(kāi)或關(guān)閉代理服務(wù)器。
-Q, --quota=大小 配置接收數(shù)據(jù)的限額大小。
--bind-address=地址 使用本機(jī)的指定地址 (主機(jī)名稱或 IP) 進(jìn)行連接。
--limit-rate=速率 限制下載的速率。
--dns-cache=off 禁止查找存于高速緩存中的 DNS。
--restrict-file-names=OS 限制文件名中的字符為指定的 OS (操作系統(tǒng)) 所允許的字符。
目錄:
-nd --no-directories 不創(chuàng)建目錄。
-x, --force-directories 強(qiáng)制創(chuàng)建目錄。
-nH, --no-host-directories 不創(chuàng)建含有遠(yuǎn)程主機(jī)名稱的目錄。
-P, --directory-prefix=名稱 保存文件前先創(chuàng)建指定名稱的目錄。
--cut-dirs=數(shù)目 忽略遠(yuǎn)程目錄中指定數(shù)目的目錄層。
HTTP 選項(xiàng):
--http-user=用戶 配置 http 用戶名。
--http-passwd=密碼 配置 http 用戶密碼。
-C, --cache=on/off (不)使用服務(wù)器中的高速緩存中的數(shù)據(jù) (默認(rèn)是使用的)。
-E, --html-extension 將所有 MIME 類(lèi)型為 text/html 的文件都加上 .html 擴(kuò)展文件名。
--ignore-length 忽略“Content-Length”文件頭字段。
--header=字符串 在文件頭中添加指定字符串。
--proxy-user=用戶 配置代理服務(wù)器用戶名。
--proxy-passwd=密碼 配置代理服務(wù)器用戶密碼。
--referer=URL 在 HTTP 請(qǐng)求中包含“Referer:URL”頭。
-s, --save-headers 將 HTTP 頭存入文件。
-U, --user-agent=AGENT 標(biāo)志為 AGENT 而不是 Wget/VERSION。
--no-http-keep-alive 禁用 HTTP keep-alive(持久性連接)。
--cookies=off 禁用 cookie。
--load-cookies=文件 會(huì)話開(kāi)始前由指定文件載入 cookie。
--save-cookies=文件 會(huì)話結(jié)束后將 cookie 保存至指定文件。
--post-data=字符串 使用 POST 方法,發(fā)送指定字符串。
--post-file=文件 使用 POST 方法,發(fā)送指定文件中的內(nèi)容。
HTTPS (SSL) 選項(xiàng):
--sslcertfile=文件 可選的客戶段端證書(shū)。
--sslcertkey=密鑰文件 對(duì)此證書(shū)可選的“密鑰文件”。
--egd-file=文件 EGD socket 文件名。
--sslcadir=目錄 CA 散列表所在的目錄。
--sslcafile=文件 包含 CA 的文件。
--sslcerttype=0/1 Client-Cert 類(lèi)型 0=PEM (默認(rèn)) / 1=ASN1 (DER)
--sslcheckcert=0/1 根據(jù)提供的 CA 檢查服務(wù)器的證書(shū)
--sslprotocol=0-3 選擇 SSL 協(xié)議;0=自動(dòng)選擇,
1=SSLv2 2=SSLv3 3=TLSv1
FTP 選項(xiàng):
-nr, --dont-remove-listing 不刪除“.listing”文件。
-g, --glob=on/off 設(shè)置是否展開(kāi)有通配符的文件名。
--passive-ftp 使用“被動(dòng)”傳輸模式。
--retr-symlinks 在遞歸模式中,下載鏈接所指示的文件(連至目錄則例外)。
遞歸下載:
-r, --recursive 遞歸下載。
-l, --level=數(shù)字 最大遞歸深度(inf 或 0 表示無(wú)限)。
--delete-after 刪除下載后的文件。
-k, --convert-links 將絕對(duì)鏈接轉(zhuǎn)換為相對(duì)鏈接。
-K, --backup-converted 轉(zhuǎn)換文件 X 前先將其備份為 X.orig。
-m, --mirror 等效于 -r -N -l inf -nr 的選項(xiàng)。
-p, --page-requisites 下載所有顯示完整網(wǎng)頁(yè)所需的文件,例如圖像。
--strict-comments 打開(kāi)對(duì) HTML 備注的嚴(yán)格(SGML)處理選項(xiàng)。
遞歸下載時(shí)有關(guān)接受/拒絕的選項(xiàng):
-A, --accept=列表 接受的文件樣式列表,以逗號(hào)分隔。
-R, --reject=列表 排除的文件樣式列表,以逗號(hào)分隔。
-D, --domains=列表 接受的域列表,以逗號(hào)分隔。
--exclude-domains=列表 排除的域列表,以逗號(hào)分隔。
--follow-ftp 跟隨 HTML 文件中的 FTP 鏈接。
--follow-tags=列表 要跟隨的 HTML 標(biāo)記,以逗號(hào)分隔。
-G, --ignore-tags=列表 要忽略的 HTML 標(biāo)記,以逗號(hào)分隔。
-H, --span-hosts 遞歸時(shí)可進(jìn)入其它主機(jī)。
-L, --relative 只跟隨相對(duì)鏈接。
-I, --include-directories=列表 要下載的目錄列表。
-X, --exclude-directories=列表 要排除的目錄列表。
-np, --no-parent 不搜索上層目錄。
四、實(shí)例:用Wget批量下載遠(yuǎn)程FTP服務(wù)器上的文件
昨天買(mǎi)了個(gè)VPS,把虛擬主機(jī)遷移到VPS了,遷移過(guò)程肯定是要轉(zhuǎn)移數(shù)據(jù)的。以前虛擬主機(jī)遷移數(shù)據(jù)的模式是非常低效率的,舊主機(jī)打包下載->新主機(jī)上傳再解壓縮,由于家庭網(wǎng)絡(luò)帶寬非常低,而且ADSL的上行速率512kbps萬(wàn)年不變,導(dǎo)致以前遷移網(wǎng)站絕對(duì)是體力活...
現(xiàn)在有了VPS,有了shell,這個(gè)過(guò)程就無(wú)比簡(jiǎn)單了,借助機(jī)房的大帶寬,直接機(jī)房對(duì)機(jī)房互傳文件看著簡(jiǎn)直就是一種享受啊
好了,講一下方法:
1、舊虛擬主機(jī)打包備份整站 site.tar.gz
2、在VPS的shell中利用wget下載舊虛擬主機(jī)中的site.tar.gz,使用FTP協(xié)議
wget --ftp-user=username --ftp-password=password -m -nh ftp://xxx.xxx.xxx.xxx/xxx/xxx/site.tar.gz
wget --ftp-user=username --ftp-password=password -r -m -nh ftp://xxx.xxx.xxx.xxx/xxx/xxx/*
上面就是命令了,F(xiàn)TP用戶名密碼參數(shù)不解釋;
-r 可選,表示遞歸下載,如果直接下載整個(gè)目錄就需要該參數(shù);
-m 表示鏡像,不解釋;
-nh表示不生成那一堆層級(jí)目錄,直接從當(dāng)前目錄開(kāi)始顯示,非常好的參數(shù);
后面是ftp的地址,斜杠后的 * 表示下載該目錄下的所有文件,如果只是一個(gè)文件,直接輸入文件名即可。
五、Q&A
A.使用wget工具linux所以的主要版本都自帶了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)控制它如何正確地做鏡像,可以限制鏈接的類(lèi)型和下載文件的類(lèi)型等等.例如:只下載有聯(lián)系的鏈接并且忽略GIF圖片:
Linux wget也能夠?qū)崿F(xiàn)斷點(diǎn)續(xù)傳(-c參數(shù)),當(dāng)然,這種操作是需要遠(yuǎn)程服務(wù)器支持的.
如果你覺(jué)得下載時(shí)老是斷線會(huì)影響你辦公的話,你可以限制Linux wget重試的次數(shù).
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ù)器清除他們的緩存:
這個(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ù)
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:00warning: commands will be executed using /bin/shat> wget http://place.your.url/hereat> 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/here0 6 * * 1-5 killall wgetz這個(gè)crontab文件指定某些任務(wù)定期地執(zhí)行。前五列聲明是什么時(shí)候執(zhí)行這個(gè)命令,而每行的剩余部分則告訴crontab執(zhí)行什么內(nèi)容。
前兩列指定了每天一到晚上11點(diǎn)就開(kāi)始用Linux wget下載,一到早上6點(diǎn)就停止一切Linux wget下載。第三四列的*表示每個(gè)月的每一天都執(zhí)行這個(gè)任務(wù)。第五列則指定了一個(gè)星期的哪幾天來(lái)執(zhí)行這個(gè)程序。 –”1-5″表示從星期一到星期五。這樣在每個(gè)工作日的晚上11點(diǎn),下載工作開(kāi)始,到了上午的6點(diǎn),任何的Linux wget任務(wù)就被停掉了。你可以用下面的命令來(lái)執(zhí)行
Linux 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è):
我辦公室里的網(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的文件格式,用下面的:
現(xiàn)在就可以用這種方法來(lái)下載了:
或者用curl工具:
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)代替.
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.?dāng)U大使用的帶寬
如果你選擇下載一個(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ò)程.
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。