10 przykładów poleceń wget, które pomogą Ci w rozwiązywaniu problemów – wget Test

Photo of author

By maciekx

Wśród rozlicznych narzędzi wykorzystywanych przez administratorów systemów, wget zajmuje szczególnie ważne miejsce. Jego wszechstronność sprawia, że jest nieoceniony w diagnozowaniu problemów sieciowych.

Czym jest polecenie wget?

wget to popularne narzędzie konsolowe, powszechnie stosowane w systemach Unix/Linux do pobierania danych z internetu. Jest to bezpłatne rozwiązanie, które umożliwia nieinteraktywne pobieranie plików. wget domyślnie obsługuje protokoły HTTPS, HTTP oraz FTP, a także pozwala na korzystanie z serwerów proxy HTTP.

W jaki sposób wget wspiera rozwiązywanie problemów?

Zastosowań jest wiele.

Administratorzy systemów często pracują w terminalu. Podczas analizowania problemów z aplikacjami internetowymi, mogą potrzebować zweryfikować jedynie łączność, bez konieczności przeglądania całej strony. Podobnie, wget pozwala na sprawdzanie dostępności stron intranetowych czy pobieranie konkretnych zasobów w celu weryfikacji ich zawartości.

wget działa w sposób nieinteraktywny, co oznacza, że może działać w tle, nawet gdy użytkownik wyloguje się z systemu. W wielu sytuacjach, konieczne jest odłączenie od systemu w trakcie pobierania plików. wget w takiej sytuacji dokończy rozpoczęte zadanie w tle.

Narzędzie to umożliwia również pobieranie całych witryn internetowych na lokalny dysk. Potrafi śledzić odnośniki na stronach XHTML i HTML, tworząc ich lokalną kopię. W tym celu, musi rekursywnie pobierać kolejne strony, co jest niezwykle przydatne do zachowania ważnych treści do przeglądania w trybie offline.

Przejdźmy do praktycznych przykładów. Składnia polecenia wget prezentuje się następująco:

wget [opcja] [adres URL]

Pobieranie strony internetowej

Spróbujmy pobrać zawartość strony github.com:

wget github.com

Jeśli połączenie z siecią jest poprawne, polecenie pobierze stronę główną i wyświetli informacje podobne do poniższych:

[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]:~#

Pobieranie wielu plików

Ta funkcja jest szczególnie przydatna, gdy konieczne jest pobranie wielu plików jednocześnie. Może to posłużyć jako podstawa do automatyzacji procesów pobierania za pomocą skryptów.

Przykładowo, pobierzmy pliki instalacyjne Pythona w wersjach 3.8.1 oraz 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

Składnia jest następująca:

wget adres_URL_1 adres_URL_2 adres_URL_3

Wystarczy oddzielić poszczególne adresy URL spacjami.

Ograniczanie prędkości pobierania

Możliwość ograniczenia prędkości pobierania jest przydatna, gdy chcemy sprawdzić, jak długo zajmie pobranie danego pliku przy różnej przepustowości łącza.

Opcja `–limit-rate` pozwala na ustawienie limitu prędkości.

Poniżej przedstawiono wynik pobierania pliku 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]

Plik o rozmiarze 13.92 MB został pobrany w ciągu 0.05 sekundy. Spróbujmy teraz ograniczyć prędkość pobierania do 500 KB/s:

[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]

Pobieranie z ograniczoną przepustowością trwało znacznie dłużej – 28 sekund. W sytuacji, gdy użytkownicy zgłaszają wolne pobieranie, a administrator podejrzewa problem z przepustowością ich łącza, opcja `–limit-rate` może posłużyć do zasymulowania problemu i weryfikacji jego przyczyn.

Pobieranie w tle

Pobieranie dużych plików lub plików z ograniczoną przepustowością może zająć dużo czasu. Jeśli nie chcemy obserwować postępu pobierania w terminalu, możemy skorzystać z opcji `-b`, aby uruchomić wget w tle:

[email protected]:~# wget -b https://slack.com
Continuing in background, pid 25430.
Output will be written to ‘wget-log.1’.
[email protected]:~#

Ignorowanie błędów certyfikatów

Ta opcja jest przydatna podczas testowania aplikacji intranetowych, które nie posiadają prawidłowego certyfikatu. Domyślnie, wget zgłosi błąd, gdy certyfikat jest nieważny:

[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'.

Powyższy przykład prezentuje pobieranie z adresu URL, którego certyfikat stracił ważność. W komunikacie jest sugestia, aby użyć opcji `–no-check-certificate`, która zignoruje weryfikację certyfikatu:

[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]:~#

Praktyczne, prawda?

Zobaczmy, jak sprawdzić nagłówek odpowiedzi HTTP:

Użycie opcji `-S` spowoduje wydrukowanie nagłówka, na przykład dla strony 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]

Modyfikowanie nagłówka User-Agent

W pewnych sytuacjach może zajść potrzeba połączenia z witryną z wykorzystaniem niestandardowego klienta użytkownika lub klienta użytkownika konkretnej przeglądarki. Można to zrobić, dodając parametr `–user-agent`. Poniższy przykład prezentuje użycie klienta użytkownika o nazwie MyCustomUserAgent:

[email protected]:~# wget https://gf.dev --user-agent="MyCustomUserAgent"

Gdy aplikacja jest w fazie developmentu, może nie posiadać jeszcze odpowiedniego adresu URL do testów. Może też zajść potrzeba przetestowania pojedynczej instancji HTTP z wykorzystaniem adresu IP, ale z koniecznością dostarczenia nagłówka Host, aby aplikacja działała prawidłowo. W takiej sytuacji przyda się opcja `–header`.

Przykładowo, przetestujmy http://10.10.10.1 z nagłówkiem Host ustawionym na application.com:

wget --header="Host: application.com" http://10.10.10.1

Można wstawić dowolny nagłówek, nie tylko host.

Połączenie przez serwer proxy

W środowiskach DMZ, dostęp do internetu może być ograniczony. W takim przypadku, można skorzystać z serwera proxy:

wget -e use_proxy=yes http_proxy=$PROXYHOST:PORT http://externalsite.com

Należy pamiętać o zastąpieniu zmiennej `$PROXYHOST:PORT` rzeczywistymi danymi.

Połączenie z wykorzystaniem określonego protokołu TLS

Do testowania protokołu TLS zazwyczaj zaleca się stosowanie OpenSSL. Niemniej jednak, wget także może posłużyć do tego celu.

Użycie polecenia:

wget –secure-protocol=TLSv1_2 https://example.com

wymusi na wget nawiązanie połączenia przy użyciu protokołu TLS w wersji 1.2.

Podsumowanie

Znajomość podstawowych poleceń może znacznie ułatwić pracę administratora. Mam nadzieję, że przedstawione przykłady unaoczniły możliwości narzędzia wget.


newsblog.pl