10 примера за команда wget, които да ви помогнат да отстраните неизправности – wget тест

Една от често използваните помощни програми от sysadmin е wget. Може да бъде много полезно при отстраняване на проблеми, свързани с мрежата.

Какво е команда wget?

командата wget е популярна помощна програма от командния ред на Unix/Linux за извличане на съдържание от мрежата. Той е безплатен за използване и предоставя неинтерактивен начин за изтегляне на файлове от мрежата. Командата wget поддържа HTTPS, HTTP и FTP протоколи веднага. Освен това можете да използвате HTTP проксита с него.

Как wget ви помага да отстраните неизправности?

Има много начини.

Като системен администратор през повечето време ще работите на терминал и когато отстранявате проблеми, свързани с уеб приложение, може да не искате да проверявате цялата страница, а само връзката. Или искате да потвърдите уебсайтове в интранет. Или искате да изтеглите определена страница, за да проверите съдържанието.

wget е неинтерактивен, което означава, че можете да го стартирате във фонов режим, дори когато сте излезли. Може да има много случаи, в които е важно да прекъснете връзката със системата, дори когато извършвате извличане на файлове от мрежата. Във фонов режим wget ще работи и ще завърши възложената им работа.

Може да се използва и за получаване на целия уебсайт на вашите локални машини. Може да следва връзки в XHTML и HTML страници, за да създаде локална версия. За да направи това, той трябва да изтегли страницата рекурсивно. Това е много полезно, тъй като можете да го използвате за изтегляне на важни страници или сайтове за гледане офлайн.

  Как да поправите PCIe NVMe SSD проблеми при стартиране и драйвери

Нека ги видим в действие. Синтаксисът на wget е както по-долу.

wget [option] [URL]

Изтеглете уеб страница

Нека се опитаме да изтеглим страница. Пример: github.com

wget github.com

Ако връзката е наред, тогава ще изтегли началната страница и ще покаже резултата, както е показано по-долу.

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

Изтеглете няколко файла

Удобно, когато трябва да изтеглите няколко файла наведнъж. Това може да ви даде представа за автоматизирането на изтеглянето на файлове чрез някои скриптове.

Нека се опитаме да изтеглим файлове на 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 адресите.

Ограничете скоростта на изтегляне

Би било полезно, когато искате да проверите колко време отнема изтеглянето на вашия файл при различна честотна лента.

С помощта на опцията –limit-rate можете да ограничите скоростта на изтегляне.

Ето резултата от изтеглянето на файла 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]

Изтеглянето на 13,92 MB файлове отне 0,05 секунди. Сега нека се опитаме да ограничим скоростта до 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]

Намаляването на честотната лента отне повече време за изтегляне – 28 секунди. Представете си, вашите потребители се оплакват от бавно изтегляне, а вие знаете, че честотната лента на мрежата им е ниска. Можете бързо да опитате –limit-rate, за да симулирате проблема.

  Как да отпечатате електронна таблица на Excel с фон

Изтегляне във фонов режим

Изтеглянето на големи файлове може да отнеме време или горният пример, където искате да зададете и ограничението на скоростта. Това се очаква, но какво ще стане, ако не искате да се взирате в терминала си?

Е, можете да използвате аргумент -b, за да стартирате wget във фонов режим.

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

Игнориране на грешка в сертификата

Това е удобно, когато трябва да проверите интранет уеб приложения, които нямат правилния сертификат. По подразбиране wget ще изведе грешка, когато сертификатът не е валиден.

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

Примерът по-горе е за URL адреса, където сертификатът е изтекъл. Както можете да видите, е предложено използването на –no-check-certificate, което ще игнорира всяко валидиране на сертификат.

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

Готино, нали?

Вижте заглавката на HTTP отговора на даден сайт на терминала.

Използването на -S ще отпечата заглавката, както можете да видите по-долу за 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]

Манипулирайте потребителския агент

Може да има ситуация, в която искате да свържете сайт с помощта на персонализиран потребителски агент. Или потребителски агент на конкретен браузър. Това е възможно чрез указване на –user-agent. Примерът по-долу е за потребителския агент като MyCustomUserAgent.

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

Когато дадено приложение е все още в процес на разработка, може да нямате подходящ URL адрес, за да го тествате. Или може да искате да тествате отделен HTTP екземпляр, използвайки IP, но трябва да предоставите заглавката на хоста, за да може приложението да работи правилно. В тази ситуация –header би бил полезен.

  Как да заключите клетки въз основа на цвят в Microsoft Excel

Нека вземем пример за тестване http://10.10.10.1 с хедър на хост като application.com

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

Не само хост, но можете да инжектирате всеки хедър, който желаете.

Свързване чрез прокси

Ако работите в DMZ среда, може да нямате достъп до интернет сайтове. Но можете да се възползвате от прокси за свързване.

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

Не забравяйте да актуализирате променливата $PROXYHOST:PORT с действителните.

Свържете се с помощта на конкретен TLS протокол

Обикновено препоръчвам да използвате OpenSSL за тестване на TLS протокола. Но можете да използвате и wget.

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

Горното ще принуди wget да се свърже през TLS 1.2.

Заключение

Познаването на необходимата команда може да ви помогне в работата. Надявам се, че горното ви дава представа какво можете да правите с wget.