⚓ 10 примеров команды wget для помощи в устранении неполадок

by itisgood
Одна из часто используемых утилит сисадминов- это wget.
Она может быть очень удобна при поиске и устранении неисправностей.

Что такое команда wget?

Команда wget – это популярная утилита командной строки Unix / Linux для извлечения контента из Интернета.

Она бесплатна  и предоставляет неинтерактивный способ загрузки файлов из Интернета.

Команда wget из коробки поддерживает протоколы HTTPS, HTTP и FTP.

Более того, вы также можете использовать с ней HTTP прокси.

Как команда wget поможет в траблшутинге?

Есть много способов и вариантов применения.

Как системный администратор, большую часть времени вы будете работать с терминалом, а при устранении неполадок, связанных с веб-приложением, вы можете захотеть не проверять всю страницу целиком, а только  лишь подключение к ней.

Наряду с wget вы конечно можете использовать не менее популярную команду curl:

⚓ Как использовать команду cURL в Linux

Или вы хотите проверить интранет-сайты.

Или вы захотите скачать определенную страницу, чтобы проверить содержимое.

wget неинтерактивен, что означает, что вы можете запускать его в фоновом режиме, даже если вы вышли из системы.

Может быть много случаев, когда вам необходимо отключиться от системы, даже когда вы извлекаете файлы из Интернета.

В фоновом режиме wget спокойное запустится и завершит назначенную работу.

Wget также может быть использован для получения всего сайта на ваш локальный компьютер.

Wget может следовать по ссылкам на страницах XHTML и HTML для создания локальной версии.

Для этого он должен загрузить страницу рекурсивно.

Это очень полезно, поскольку вы можете использовать его для загрузки важных страниц или сайтов для просмотра в автономном режиме.

Давайте посмотрим на эти команды в действии.

Синтаксис wget приведен ниже:

wget [option] [URL]

1. Скачать веб-страницу

Давайте попробуем скачать страницу. Пример: github.com

wget github.com
Если сеть в порядке, wget загрузит домашнюю страницу и покажет вывод, как показано ниже.
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 
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]

2. Скачать несколько файлов

Wget также удобно использовать, когда вам нужно скачать несколько файлов одновременно.

Это может дать вам представление об автоматизации загрузки файлов с помощью некоторых скриптов.

Попробуем скачать файлы Python 3.8.1 и 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

Итак, как вы можете догадаться, синтаксис следующий:

wget URL1 URL2 URL3
Вы просто должны добавить пробелы между URL-адресами.

3. Ограничить скорость загрузки

Это будет полезно, если вы хотите проверить, сколько времени занимает загрузка файла с другой пропускной способностью.

Используя опцию –limit-rate, вы можете ограничить скорость загрузки.

Вот результат загрузки файла Nodejs.

# 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]
Загрузка файлов объемом 13,92 МБ заняла 0,05 секунды.
Теперь давайте попробуем ограничить скорость до 500К.
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]
С уменьшением полосы пропускания скачивание заняло больше времени – 28 секунд.
Представьте, ваши пользователи жалуются на медленную загрузку, и вы знаете, что их пропускная способность сети довольно низкая.
Вы можете быстро попробовать –limit-rate для имитации проблемы.

4. Скачать в фоновом режиме

Загрузка больших файлов может занять некоторое время.

А что, если вы не хотите смотреть в свой терминал?

Ну, вы можете использовать аргумент -b, чтобы запустить wget в фоновом режиме.

wget -b https://slack.com
Continuing in background, pid 25430.
Output will be written to ‘wget-log.1’.
root@itisgood:~#

5. Игнорировать ошибку сертификата

Это удобно, когда вам нужно проверить веб-приложения интрасети, которые не имеют надлежащего сертификата.

По умолчанию wget выдаст ошибку, если сертификат недействителен.

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'.
Приведенный выше пример относится к URL-адресу, срок действия сертификата у которого истек.
Как вы можете видеть, система предложила использовать –no-check-Certificate, который будет игнорировать любую проверку сертификата.
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 
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]

6. Заголовок ответа HTTP

Посмотрите заголовок ответа HTTP сайта прям на терминале.

Использование -S выведет заголовок, как вы можете увидеть его, как показано ниже ( Пример с itsecforu )

wget https://www.itsecforu.ru -S
--2020-02-25 11:30:46-- https://www.itsecforu.ru/
Resolving www.itsecforu.ru (www.itsecforu.ru)... 37.140.192.99, 2a00:f940:2:2:1:3:0:81
Connecting to www.itsecforu.ru (www.itsecforu.ru)|37.140.192.99|:443... connected.
HTTP request sent, awaiting response...
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Tue, 25 Feb 2020 08:30:47 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 0
Connection: keep-alive
X-Powered-By: PHP/5.6.36
Set-Cookie: apbct_timestamp=1582619446; path=/; domain=itsecforu.ru; httponly
Set-Cookie: apbct_site_landing_ts=1582619446; path=/; domain=itsecforu.ru; httponly
Set-Cookie: apbct_page_hits=1; path=/; domain=itsecforu.ru; httponly
Set-Cookie: apbct_cookies_test=%257B%2522cookies_names%2522%253A%255B%2522apbct_timestamp%2522%252C%2522apbct_site_landing_ts%2522%252C%2522apbct_page_hits%2522%255D%252C%2522check_value%2522%253A%2522d9c7e9c1369fe7d54b54da2a92cdaf01%2522%257D; path=/; domain=itsecforu.ru; httponly
Location: https://itsecforu.ru/
Strict-Transport-Security: max-age=31536000;
Location: https://itsecforu.ru/ [following]
--2020-02-25 11:30:47-- https://itsecforu.ru/
Resolving itsecforu.ru (itsecforu.ru)... 37.140.192.99, 2a00:f940:2:2:1:3:0:81
Connecting to itsecforu.ru (itsecforu.ru)|37.140.192.99|:443... connected.
HTTP request sent, awaiting response...
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 25 Feb 2020 08:30:49 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.6.36
Link: <https://itsecforu.ru/wp-json/>; rel="https://api.w.org/", <https://itsecforu.ru/>; rel=shortlink
Set-Cookie: apbct_timestamp=1582619447; path=/; domain=itsecforu.ru; httponly
Set-Cookie: apbct_page_hits=2; path=/; domain=itsecforu.ru; httponly
Set-Cookie: apbct_cookies_test=%257B%2522cookies_names%2522%253A%255B%2522apbct_timestamp%2522%252C%2522apbct_site_landing_ts%2522%252C%2522apbct_page_hits%2522%255D%252C%2522check_value%2522%253A%2522a03457d3d599cadadd7c93808f66a0d3%2522%257D; path=/; domain=itsecforu.ru; httponly
Strict-Transport-Security: max-age=31536000;
Length: unspecified 
Saving to: ‘index.html.1’

[ <=>

7. Использовать User-Agent

Может возникнуть ситуация, когда вы захотите подключить сайт с помощью user-agent.

Или определенный user-agent браузера.

Это можно сделать, указав –user-agent.

Приведенный ниже пример для user-agent MyCustomUserAgent.

wget https://gf.dev --user-agent="MyCustomUserAgent"

8. Заголовок хоста

Когда приложение все еще находится в разработке, у вас может не быть правильного URL для его тестирования.

Или, возможно, вы захотите протестировать отдельный экземпляр HTTP с использованием IP, но вам нужно предоставить заголовок хоста для правильной работы приложения.

В этой ситуации ключт –header будет полезен.

wget --header="Host: application.com" http://10.10.10.1
Использовать можно не только Host, вы можете вставить любой заголовок, который вам нравится.

9. Подключиться через прокси

Если вы работаете в среде DMZ, у вас может не быть доступа к интернет-сайтам.

Но вы можете воспользоваться прокси для подключения к сайту.

wget -e use_proxy=yes http_proxy=$PROXYHOST:PORT http://externalsite.com
Не забудьте обновить переменную $PROXYHOST:PORT

10. Подключиться, используя определенный протокол TLS

Обычно я бы рекомендовал использовать OpenSSL для тестирования протокола TLS.

Но вы также можете использовать wget.

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

Вышеуказанная команда заставит wget подключиться через TLS 1.2.

Заключение

Знание необходимой команды может помочь вам в работе.

Я надеюсь, что вышеизложенная информация даст вам представление о том, что вы можете сделать с помощью wget.

Удачного траблшутинга и оставайтесь с нами 🙂

См. также по теме:

 

You may also like

Leave a Comment