wget命令8種實用用法

良許發表於2021-10-22

大家好,我是良許。

wget 是一個可以從網路上下載檔案的免費實用程式,它的工作原理是從 Internet 上獲取資料,並將其儲存到本地檔案中或顯示在你的終端上。

這實際上也是大家所使用的瀏覽器所做的,例如 Firefox 或 Chrome,其實在內部也是呼叫了 wget 程式進行資料下載。

本文介紹 8 個 wget 命令常見使用方式,希望對小夥伴們有所幫助。

1. 使用 wget 命令下載檔案

你可以使用 wget 命令來下載指定連結的檔案。預設情況下,下載的檔案將儲存到當前工作目錄中的同名檔案中。

$ wget http://www.lxlinux.net
--2021-09-20 17:23:47-- http://www.lxlinux.net/
Resolving www.lxlinux.net... 93.184.216.34, 2606:2800:220:1:248:1893:25c8:1946
Connecting to www.lxlinux.net|93.184.216.34|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1256 (1.2K) [text/html]
Saving to: 'index.html'

如果你不想將下載的檔案儲存在本地,而只是想將其顯示在標準輸出(stdout)裡,可以使用 --output-document 選項,同時後面再跟上一個 - 號。

$ wget http://www.lxlinux.net --output-document - | head -n4
<!doctype html>
<html>
<head>
   <title>Example Domain</title>

如果你想給下載的檔案重新命名,那麼可以使用 --output-document 選項(或者更簡便,直接使用 -O 即可):

$ wget http://www.lxlinux.net --output-document newfile.html

2. 斷點續傳

如果你要下載的檔案非常大,因為網路的原因有可能出現一次性無法下載完全的情況。如果每次都要重新下載,那麼都不知道要等到猴年馬月。

這種情況下,就可以使用 --continue 選項(或者 -c )實現斷點續傳。也就是說,如果因為各種原因導致下載中斷,使用了這個選項,就可以繼續上次的下載,而不需要重新進行下載。

$ wget --continue https://www.lxlinux.net/linux-distro.iso

3. 下載一系列檔案

如果你下載的不是一個大檔案,而是需要很多個小檔案,那麼 wget 命令也可以幫你輕鬆實現。

但是,這裡還需要使用一些 bash 語法來實現目的。一般來講,這些檔案的名稱都有一定的規律,比如:file_1.txt,file_2.txt,file_3.txt,等等,那麼你就需要使用這樣的命令:

$ wget http://www.lxlinux.net/file_{1..4}.txt

4. 映象整個站點

如果你想對某個網站進行整站下載,包括其目錄結構,那麼你就需要使用 --mirror 選項。

這個選項等同於 --recursive --level inf --timestamping --no-remove-listing,這意味著它是無限遞迴的,因此你可以下載到指定域上的所有內容。

如果你使用 wget 存檔站點,那麼這些選項 --no-cookies --page-requisites --convert-links 也可用於確保每個頁面都是最新的、最完整的。

5. 修改 HTML 請求標頭

學過網路通訊的小夥伴都知道,HTTP 資料包裡包含了非常多的元素。其中,HTTP 標頭是資料包初始的組成部分。

當你使用瀏覽器瀏覽網頁時,你的瀏覽器會向伺服器傳送 HTTP 請求標頭。具體發了些什麼東西呢?可以使用 --debug 選項檢視 wget 每次請求傳送的標頭資訊:

$ wget --debug www.lxlinux.net
---request begin---
GET / HTTP/1.1
User-Agent: Wget/1.19.5 (linux-gnu)
Accept: */*
Accept-Encoding: identity
Host: www.lxlinux.net
Connection: Keep-Alive

---request end---

你可以使用 --header 選項修改請求標頭。為什麼要這麼做呢?其實有很多使用場景的。例如,有時候為了測試,需要模擬特定的瀏覽器發出的請求。

比如,你想模擬 Edge 瀏覽器發出來的請求,可以這樣操作:

$ wget --debug --header="User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.59" http://www.lxlinux.net

除此之外,你還可以偽裝成特定的移動裝置(比如 iPhone ):

$ wget --debug \
--header = "User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari /604.1" \
HTTP:// www.lxlinux.net

6. 檢視響應標頭

與瀏覽器請求傳送標頭資訊的方式相同,標頭資訊也包含在響應中。同樣地,你可以使用 --debug 選項檢視響應標頭:

$ wget --debug www.lxlinux.net
[...]
---response begin---
HTTP/1.1 200 OK
Accept-Ranges: bytes
Age: 188102
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Etag: "3147526947"
Server: ECS (sab/574F)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1256

---response end---
200 OK
Registered socket 3 for persistent reuse.
URI content encoding = 'UTF-8'
Length: 1256 (1.2K) [text/html]
Saving to: 'index.html'

7. 響應 301 響應

熟悉網路協議的都知道,200 響應碼意味著一切都按預期進行。而 301 響應則意味著 URL 已經指向不同的網站。

這種情況下,如果你需要下載檔案,那麼就需要使用 wget 的重定向功能。所以,如果你遇到 301 響應時,就需要使用 --max-redirect 選項。

如果你不想要重定向,那麼可以將 --max-redirect 設定為 0 。

$ wget --max-redirect 0 http://www.lxlinux.net
--2021-09-21 11:01:35-- http://www.lxlinux.net/
Resolving www.lxlinux.net... 192.0.43.8, 2001:500:88:200::8
Connecting to www.lxlinux.net|192.0.43.8|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://www.www.lxlinux.net/ [following]
0 redirections exceeded.

或者,你還可以將其設定為其他數字以控制 wget 跟隨的重定向數量。

8. 展開短連結

有時候,我們需要將一個長連結轉為短連結,例如在文字框裡填寫資訊時,有時候文字框對字元長度有限制,這時短鏈就可以大大減少字元數。

除了使用第三方平臺,其實我們可以直接使用 wget 命令來將短連結還原為長連結。這裡依然使用 --max-redirect 選項:

$ wget --max-redirect 0 "https://bit.ly/2yDyS4T"
--2021-09-21 11:32:04-- https://bit.ly/2yDyS4T
Resolving bit.ly... 67.199.248.10, 67.199.248.11
Connecting to bit.ly|67.199.248.10|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.lxlinux.net/ [following]
0 redirections exceeded.

輸出的倒數第二行,在 Location 部分,後面你就看到了短鏈展開之後的真面目。

最後,最近很多小夥伴找我要Linux學習路線圖,於是我根據自己的經驗,利用業餘時間熬夜肝了一個月,整理了一份電子書。無論你是面試還是自我提升,相信都會對你有幫助!

免費送給大家,只求大家金指給我點個贊!

電子書 | Linux開發學習路線圖

也希望有小夥伴能加入我,把這份電子書做得更完美!

有收穫?希望老鐵們來個三連擊,給更多的人看到這篇文章

推薦閱讀:

相關文章