Jedním z často používaných nástrojů sysadmin je wget. To může být velmi užitečné při řešení problémů souvisejících s webem.
Table of Contents
Co je příkaz wget?
Příkaz wget je populární nástroj příkazového řádku Unix/Linux pro načítání obsahu z webu. Je zdarma k použití a poskytuje neinteraktivní způsob stahování souborů z webu. Příkaz wget podporuje protokoly HTTPS, HTTP a FTP ihned po vybalení. Navíc s ním můžete používat i HTTP proxy.
Jak vám wget pomůže při odstraňování problémů?
Existuje mnoho způsobů.
Jako správce systému budete většinu času pracovat na terminálu a při řešení problémů souvisejících s webovou aplikací možná nebudete chtít kontrolovat celou stránku, ale pouze konektivitu. Nebo chcete ověřit intranetové weby. Nebo si chcete stáhnout určitou stránku a ověřit její obsah.
wget je neinteraktivní, což znamená, že jej můžete spustit na pozadí, i když jste odhlášeni. Může nastat mnoho případů, kdy je nezbytné, abyste se odpojili od systému, i když provádíte načítání souborů z webu. Na pozadí se wget spustí a dokončí přidělenou úlohu.
Lze jej také použít k získání celého webu na vaše místní počítače. Může následovat odkazy na stránkách XHTML a HTML a vytvořit místní verzi. K tomu musí stáhnout stránku rekurzivně. To je velmi užitečné, protože jej můžete použít ke stažení důležitých stránek nebo webů pro offline prohlížení.
Pojďme je vidět v akci. Syntaxe wget je uvedena níže.
wget [option] [URL]
Stáhněte si webovou stránku
Zkusme stáhnout stránku. Příklad: github.com
wget github.com
Pokud je připojení v pořádku, stáhne domovskou stránku a zobrazí výstup, jak je uvedeno níže.
[email protected]:~# wget github.com URL transformed to HTTPS due to an HSTS policy --2020-02-23 10:45:52-- https://github.com/ Resolving github.com (github.com)... 140.82.118.3 Connecting to github.com (github.com)|140.82.118.3|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘index.html’ index.html [ <=> ] 131.96K --.-KB/s in 0.04s 2020-02-23 10:45:52 (2.89 MB/s) - ‘index.html’ saved [135126] [email protected]:~#
Stáhnout více souborů
Užitečné, když musíte stahovat více souborů najednou. To vám může poskytnout představu o automatizaci stahování souborů pomocí některých skriptů.
Zkusme stáhnout soubory Python 3.8.1 a 3.5.1.
wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz
Takže, jak můžete hádat, syntaxe je následující.
wget URL1 URL2 URL3
Musíte pouze zajistit, aby mezi adresami URL byla mezera.
Omezte rychlost stahování
Bylo by užitečné, když chcete zkontrolovat, jak dlouho trvá stahování vašeho souboru při různé šířce pásma.
Pomocí možnosti –limit-rate můžete omezit rychlost stahování.
Zde je výstup stahování souboru Nodejs.
[email protected]:~# wget https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz --2020-02-23 10:59:58-- https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz Resolving nodejs.org (nodejs.org)... 104.20.23.46, 104.20.22.46, 2606:4700:10::6814:162e, ... Connecting to nodejs.org (nodejs.org)|104.20.23.46|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 14591852 (14M) [application/x-xz] Saving to: ‘node-v12.16.1-linux-x64.tar.xz’ node-v12.16.1-linux-x64.tar.xz 100%[===========================================================================================>] 13.92M --.-KB/s in 0.05s 2020-02-23 10:59:58 (272 MB/s) - ‘node-v12.16.1-linux-x64.tar.xz’ saved [14591852/14591852]
Stažení 13,92 MB souborů trvalo 0,05 sekundy. Nyní zkusme omezit rychlost na 500K.
[email protected]:~# wget --limit-rate=500k https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz --2020-02-23 11:00:18-- https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz Resolving nodejs.org (nodejs.org)... 104.20.23.46, 104.20.22.46, 2606:4700:10::6814:162e, ... Connecting to nodejs.org (nodejs.org)|104.20.23.46|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 14591852 (14M) [application/x-xz] Saving to: ‘node-v12.16.1-linux-x64.tar.xz.1’ node-v12.16.1-linux-x64.tar.xz.1 100%[===========================================================================================>] 13.92M 501KB/s in 28s 2020-02-23 11:00:46 (500 KB/s) - ‘node-v12.16.1-linux-x64.tar.xz.1’ saved [14591852/14591852]
Snížení šířky pásma trvalo déle – stahování 28 sekund. Představte si, že si vaši uživatelé stěžují na pomalé stahování a vy víte, že šířka pásma jejich sítě je nízká. Problém můžete rychle vyzkoušet –limit-rate.
Stáhnout na pozadí
Stahování velkých souborů může nějakou dobu trvat nebo výše uvedený příklad, kde chcete také nastavit limit rychlosti. To se očekává, ale co když nechcete zírat na svůj terminál?
Můžete použít argument -b ke spuštění wget na pozadí.
[email protected]:~# wget -b https://slack.com Continuing in background, pid 25430. Output will be written to ‘wget-log.1’. [email protected]:~#
Ignorovat chybu certifikátu
To je užitečné, když potřebujete zkontrolovat intranetové webové aplikace, které nemají správný certifikát. Ve výchozím nastavení wget vyvolá chybu, když certifikát není platný.
[email protected]:~# wget https://expired.badssl.com/ --2020-02-23 11:24:59-- https://expired.badssl.com/ Resolving expired.badssl.com (expired.badssl.com)... 104.154.89.105 Connecting to expired.badssl.com (expired.badssl.com)|104.154.89.105|:443... connected. ERROR: cannot verify expired.badssl.com's certificate, issued by ‘CN=COMODO RSA Domain Validation Secure Server CA,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB’: Issued certificate has expired. To connect to expired.badssl.com insecurely, use `--no-check-certificate'.
Výše uvedený příklad je pro adresu URL, kde vypršela platnost certifikátu. Jak můžete vidět, navrhlo použití –no-check-certificate, které bude ignorovat jakékoli ověření certifikátu.
[email protected]:~# wget https://untrusted-root.badssl.com/ --no-check-certificate --2020-02-23 11:33:45-- https://untrusted-root.badssl.com/ Resolving untrusted-root.badssl.com (untrusted-root.badssl.com)... 104.154.89.105 Connecting to untrusted-root.badssl.com (untrusted-root.badssl.com)|104.154.89.105|:443... connected. WARNING: cannot verify untrusted-root.badssl.com's certificate, issued by ‘CN=BadSSL Untrusted Root Certificate Authority,O=BadSSL,L=San Francisco,ST=California,C=US’: Self-signed certificate encountered. HTTP request sent, awaiting response... 200 OK Length: 600 [text/html] Saving to: ‘index.html.6’ index.html.6 100%[===========================================================================================>] 600 --.-KB/s in 0s 2020-02-23 11:33:45 (122 MB/s) - ‘index.html.6’ saved [600/600] [email protected]:~#
Skvělé, že?
Podívejte se na hlavičku HTTP odpovědi daného webu na terminálu.
Použití -S vytiskne záhlaví, jak můžete vidět níže pro Coursera.
[email protected]:~# wget https://www.coursera.org -S --2020-02-23 11:47:01-- https://www.coursera.org/ Resolving www.coursera.org (www.coursera.org)... 13.224.241.48, 13.224.241.124, 13.224.241.82, ... Connecting to www.coursera.org (www.coursera.org)|13.224.241.48|:443... connected. HTTP request sent, awaiting response... HTTP/1.1 200 OK Content-Type: text/html Content-Length: 511551 Connection: keep-alive Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0 Date: Sun, 23 Feb 2020 11:47:01 GMT etag: W/"7156d-WcZHnHFl4b4aDOL4ZSrXP0iBX3o" Server: envoy Set-Cookie: CSRF3-Token=1583322421.s1b4QL6OXSUGHnRI; Max-Age=864000; Expires=Wed, 04 Mar 2020 11:47:02 GMT; Path=/; Domain=.coursera.org Set-Cookie: __204u=9205355775-1582458421174; Max-Age=31536000; Expires=Mon, 22 Feb 2021 11:47:02 GMT; Path=/; Domain=.coursera.org Strict-Transport-Security: max-age=31536000; includeSubDomains; preload X-Content-Type-Options: nosniff x-coursera-render-mode: html x-coursera-render-version: v2 X-Coursera-Request-Id: NCnPPlYyEeqfcxIHPk5Gqw X-Coursera-Trace-Id-Hex: a5ef7028d77ae8f8 x-envoy-upstream-service-time: 1090 X-Frame-Options: SAMEORIGIN x-powered-by: Express X-XSS-Protection: 1; mode=block X-Cache: Miss from cloudfront Via: 1.1 884d101a3faeefd4fb32a5d2a8a076b7.cloudfront.net (CloudFront) X-Amz-Cf-Pop: LHR62-C3 X-Amz-Cf-Id: vqvX6ZUQgtZAde62t7qjafIAqHXQ8BLAv8UhkPHwyTMpvH617yeIbQ== Length: 511551 (500K) [text/html]
Manipulujte s User-Agentem
Může nastat situace, kdy budete chtít připojit web pomocí vlastního uživatelského agenta. Nebo konkrétního uživatelského agenta prohlížeče. To lze provést zadáním –user-agent. Níže uvedený příklad je pro uživatelského agenta jako MyCustomUserAgent.
[email protected]:~# wget https://gf.dev --user-agent="MyCustomUserAgent"
Když je aplikace stále ve vývoji, možná nemáte správnou adresu URL pro její testování. Nebo můžete chtít otestovat jednotlivou instanci HTTP pomocí IP, ale musíte zadat hlavičku hostitele, aby aplikace fungovala správně. V této situaci by bylo užitečné –header.
Vezměme si příklad testování http://10.10.10.1 s hlavičkou hostitele jako application.com
wget --header="Host: application.com" http://10.10.10.1
Nejen hostitele, ale můžete vložit libovolnou hlavičku, kterou chcete.
Připojte se pomocí proxy
Pokud pracujete v prostředí DMZ, možná nebudete mít přístup k internetovým stránkám. Pro připojení však můžete využít proxy.
wget -e use_proxy=yes http_proxy=$PROXYHOST:PORT http://externalsite.com
Nezapomeňte aktualizovat proměnnou $PROXYHOST:PORT aktuálními.
Připojte se pomocí specifického protokolu TLS
Obvykle bych k testování protokolu TLS doporučil použít OpenSSL. Můžete však použít i wget.
wget –secure-protocol=TLSv1_2 https://example.com
Výše uvedené vynutí připojení wgetu přes TLS 1.2.
Závěr
Znalost potřebného příkazu vám může pomoci v práci. Doufám, že výše uvedené vám poskytne představu o tom, co můžete dělat s wget.