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ą.
Spis treści:
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.