Что такое команда 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 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
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]
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]
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'.
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
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.
Удачного траблшутинга и оставайтесь с нами 🙂
См. также по теме:
- 🌐 Использование Wget с FTP для рекурсивного скачивания / просмотра веб-сайтов
- 🐧 Как установить Wget на Linux
- 💄 Как установить и использовать Wget на Mac
- Как ограничить скорость загрузки файлов с помощью Wget в Linux
- Как загрузить файлы в конкретный каталог с помощью Wget
- 🐧 [CentOS] Инструменты, не включенные в CentOS 7 minimal