wget命令8種實用用法
- 2021 年 10 月 22 日
- 筆記
大家好,我是良許。
wget
是一個可以從網路上下載文件的免費實用程式,它的工作原理是從 Internet 上獲取數據,並將其保存到本地文件中或顯示在你的終端上。
這實際上也是大家所使用的瀏覽器所做的,例如 Firefox 或 Chrome,其實在內部也是調用了 wget
程式進行數據下載。
本文介紹 8 個 wget
命令常見使用方式,希望對小夥伴們有所幫助。
1. 使用 wget 命令下載文件
你可以使用 wget
命令來下載指定鏈接的文件。默認情況下,下載的文件將保存到當前工作目錄中的同名文件中。
$ wget //www.lxlinux.net
--2021-09-20 17:23:47-- //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 //www.lxlinux.net --output-document - | head -n4
<!doctype html>
<html>
<head>
<title>Example Domain</title>
如果你想給下載的文件重新命名,那麼可以使用 --output-document
選項(或者更簡便,直接使用 -O
即可):
$ wget //www.lxlinux.net --output-document newfile.html
2. 斷點續傳
如果你要下載的文件非常大,因為網路的原因有可能出現一次性無法下載完全的情況。如果每次都要重新下載,那麼都不知道要等到猴年馬月。
這種情況下,就可以使用 --continue
選項(或者 -c
)實現斷點續傳。也就是說,如果因為各種原因導致下載中斷,使用了這個選項,就可以繼續上次的下載,而不需要重新進行下載。
$ wget --continue //www.lxlinux.net/linux-distro.iso
3. 下載一系列文件
如果你下載的不是一個大文件,而是需要很多個小文件,那麼 wget
命令也可以幫你輕鬆實現。
但是,這裡還需要使用一些 bash 語法來實現目的。一般來講,這些文件的名稱都有一定的規律,比如:file_1.txt,file_2.txt,file_3.txt,等等,那麼你就需要使用這樣的命令:
$ wget //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" //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 //www.lxlinux.net
--2021-09-21 11:01:35-- //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: //www.www.lxlinux.net/ [following]
0 redirections exceeded.
或者,你還可以將其設置為其他數字以控制 wget
跟隨的重定向數量。
8. 展開短鏈接
有時候,我們需要將一個長鏈接轉為短鏈接,例如在文本框里填寫資訊時,有時候文本框對字元長度有限制,這時短鏈就可以大大減少字元數。
除了使用第三方平台,其實我們可以直接使用 wget
命令來將短鏈接還原為長鏈接。這裡依然使用 --max-redirect
選項:
$ wget --max-redirect 0 "//bit.ly/2yDyS4T"
--2021-09-21 11:32:04-- //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: //www.lxlinux.net/ [following]
0 redirections exceeded.
輸出的倒數第二行,在 Location 部分,後面你就看到了短鏈展開之後的真面目。