Една от често използваните помощни програми от sysadmin е wget. Може да бъде много полезно при отстраняване на проблеми, свързани с мрежата.
Съдържание
Какво е команда wget?
командата wget е популярна помощна програма от командния ред на Unix/Linux за извличане на съдържание от мрежата. Той е безплатен за използване и предоставя неинтерактивен начин за изтегляне на файлове от мрежата. Командата wget поддържа HTTPS, HTTP и FTP протоколи веднага. Освен това можете да използвате HTTP проксита с него.
Как wget ви помага да отстраните неизправности?
Има много начини.
Като системен администратор през повечето време ще работите на терминал и когато отстранявате проблеми, свързани с уеб приложение, може да не искате да проверявате цялата страница, а само връзката. Или искате да потвърдите уебсайтове в интранет. Или искате да изтеглите определена страница, за да проверите съдържанието.
wget е неинтерактивен, което означава, че можете да го стартирате във фонов режим, дори когато сте излезли. Може да има много случаи, в които е важно да прекъснете връзката със системата, дори когато извършвате извличане на файлове от мрежата. Във фонов режим wget ще работи и ще завърши възложената им работа.
Може да се използва и за получаване на целия уебсайт на вашите локални машини. Може да следва връзки в XHTML и HTML страници, за да създаде локална версия. За да направи това, той трябва да изтегли страницата рекурсивно. Това е много полезно, тъй като можете да го използвате за изтегляне на важни страници или сайтове за гледане офлайн.
Нека ги видим в действие. Синтаксисът на 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, за да симулирате проблема.
Изтегляне във фонов режим
Изтеглянето на големи файлове може да отнеме време или горният пример, където искате да зададете и ограничението на скоростта. Това се очаква, но какво ще стане, ако не искате да се взирате в терминала си?
Е, можете да използвате аргумент -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 би бил полезен.
Нека вземем пример за тестване 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.