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

Jednym z często używanych narzędzi przez sysadmin jest wget. Może to być bardzo przydatne podczas rozwiązywania problemów związanych z siecią.

Co to jest polecenie wget?

wget polecenie to popularne narzędzie wiersza poleceń systemu Unix/Linux do pobierania treści z sieci. Jest darmowy i zapewnia nieinteraktywny sposób pobierania plików z sieci. Polecenie wget obsługuje protokoły HTTPS, HTTP i FTP po wyjęciu z pudełka. Co więcej, możesz również używać z nim serwerów proxy HTTP.

W jaki sposób wget pomaga w rozwiązywaniu problemów?

Jest wiele sposobów.

Jako administrator systemu przez większość czasu będziesz pracować na terminalu, a podczas rozwiązywania problemów związanych z aplikacjami internetowymi możesz nie chcieć sprawdzać całej strony, ale tylko łączność. Lub chcesz zweryfikować witryny intranetowe. Lub chcesz pobrać określoną stronę, aby zweryfikować zawartość.

wget jest nieinteraktywny, co oznacza, że ​​możesz go uruchomić w tle, nawet gdy jesteś wylogowany. Może być wiele przypadków, w których konieczne jest odłączenie się od systemu, nawet podczas pobierania plików z sieci. W tle uruchomi się wget i dokończy przydzielone zadanie.

Można go również użyć do pobrania całej witryny na lokalne maszyny. Może podążać za linkami na stronach XHTML i HTML, aby utworzyć wersję lokalną. Aby to zrobić, musi rekursywnie pobierać stronę. Jest to bardzo przydatne, ponieważ możesz go używać do pobierania ważnych stron lub witryn do przeglądania w trybie offline.

Zobaczmy je w akcji. Składnia wget jest jak poniżej.

wget [option] [URL]

Pobierz stronę internetową

Spróbujmy pobrać stronę. Np.: github.com

wget github.com

Jeśli łączność jest w porządku, pobierze stronę główną i wyświetli dane wyjściowe jak poniżej.

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

Pobierz wiele plików

Przydatne, gdy musisz pobrać wiele plików jednocześnie. To może dać ci wyobrażenie o automatyzacji pobierania plików za pomocą niektórych skryptów.

Spróbujmy pobrać pliki Python 3.8.1 i 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

Jak można się domyślić, składnia jest taka jak poniżej.

wget URL1 URL2 URL3

Musisz tylko zapewnić odstęp między adresami URL.

Ogranicz prędkość pobierania

Będzie to przydatne, gdy chcesz sprawdzić, ile czasu zajmuje pobranie pliku przy różnej przepustowości.

Korzystając z opcji –limit-rate, możesz ograniczyć prędkość pobierania.

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

Pobranie plików 13,92 MB zajęło 0,05 sekundy. Spróbujmy teraz ograniczyć prędkość do 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]

Zmniejszenie przepustowości trwało dłużej – 28 sekund. Wyobraź sobie, że Twoi użytkownicy narzekają na powolne pobieranie, a Ty wiesz, że ich przepustowość sieci jest niska. Możesz szybko wypróbować –limit-rate, aby zasymulować problem.

Pobierz w tle

Pobieranie dużych plików może zająć trochę czasu lub w powyższym przykładzie, w którym również chcesz ustawić limit szybkości. Jest to normalne, ale co, jeśli nie chcesz gapić się na swój terminal?

Cóż, możesz użyć argumentu -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]:~#

Ignoruj ​​błąd certyfikatu

Jest to przydatne, gdy trzeba sprawdzić intranetowe aplikacje internetowe, które nie mają odpowiedniego 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 dotyczy adresu URL, pod którym wygasł certyfikat. Jak widać, zasugerowano użycie 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]:~#

Fajne, prawda?

Zobacz nagłówek odpowiedzi HTTP danej witryny na terminalu.

Użycie -S spowoduje wydrukowanie nagłówka, jak widać poniżej dla 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]

Manipuluj klientem użytkownika

Może zaistnieć sytuacja, w której chcesz połączyć witrynę za pomocą niestandardowego klienta użytkownika. Lub klienta użytkownika konkretnej przeglądarki. Można to zrobić, określając –user-agent. Poniższy przykład dotyczy agenta użytkownika jako MyCustomUserAgent.

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

Gdy aplikacja jest nadal w fazie rozwoju, możesz nie mieć odpowiedniego adresu URL do jej testowania. Możesz też chcieć przetestować pojedynczą instancję HTTP przy użyciu adresu IP, ale musisz podać nagłówek hosta, aby aplikacja działała poprawnie. W takiej sytuacji przydałby się –header.

Weźmy przykład testowania http://10.10.10.1 z nagłówkiem hosta jako application.com

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

Nie tylko host, ale możesz wstawić dowolny nagłówek.

Połącz za pomocą proxy

Jeśli pracujesz w środowisku DMZ, możesz nie mieć dostępu do stron internetowych. Ale możesz skorzystać z proxy, aby się połączyć.

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

Nie zapomnij zaktualizować zmiennej $PROXYHOST:PORT rzeczywistymi.

Połącz przy użyciu określonego protokołu TLS

Zwykle do testowania protokołu TLS zalecałbym używanie OpenSSL. Ale możesz też użyć wget.

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

Powyższe zmusi wget do połączenia się przez TLS 1.2.

Wniosek

Znajomość niezbędnego polecenia może ci pomóc w pracy. Mam nadzieję, że powyższe daje wyobrażenie o tym, co możesz zrobić z wget.