Ett av de mest frekvent använda verktygen för systemadministratörer är utan tvekan wget. Det visar sig vara oerhört praktiskt, särskilt vid felsökning av webbrelaterade problem.
Vad utmärker wget-kommandot?
wget är ett populärt kommandoradsverktyg för Unix/Linux-system som primärt används för att hämta innehåll från webben. Det är kostnadsfritt och erbjuder ett icke-interaktivt sätt att ladda ner filer från webbplatser. Kommandot har inbyggt stöd för HTTPS-, HTTP- och FTP-protokollen, och det fungerar även med HTTP-proxyservrar.
Hur kan wget assistera vid felsökning?
Möjligheterna är många.
Som systemadministratör tillbringar du förmodligen mycket tid i terminalen. Vid felsökning av webbapplikationer kanske du inte behöver ladda hela sidan, utan bara verifiera anslutningen. Det kan också vara relevant att kontrollera webbplatser inom intranätet eller att ladda ner specifika sidor för att granska deras innehåll.
En av wget:s styrkor är dess icke-interaktiva natur. Det innebär att du kan köra det i bakgrunden, även efter att du loggat ut. Detta är användbart i situationer där du behöver koppla bort systemet samtidigt som du laddar ner filer. wget fortsätter då att arbeta i bakgrunden och slutför sin uppgift.
Det är också möjligt att ladda ner en hel webbplats till din lokala maskin. Genom att följa länkarna i XHTML- och HTML-sidor kan wget skapa en lokal replika av webbplatsen. Detta görs rekursivt, vilket är idealiskt för att lagra viktiga webbsidor eller hela webbplatser för offline-användning.
Låt oss titta på några praktiska exempel. Nedan följer den grundläggande syntaxen för wget:
wget [alternativ] [URL]
Ladda ner en webbsida
Låt oss börja med att ladda ner en webbsida, till exempel github.com:
wget github.com
Om anslutningen fungerar som den ska laddas webbplatsens startsida ner, och du får utdata liknande det nedan:
[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]:~#
Ladda ner flera filer
wget är mycket användbart när du behöver ladda ner flera filer samtidigt. Det ger dig också en inblick i hur du kan automatisera filnedladdningar via skript.
Låt oss ladda ner Python 3.8.1 och 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
Som du ser är syntaxen enkel:
wget URL1 URL2 URL3
Kom ihåg att separera webbadresserna med ett mellanslag.
Begränsa nedladdningshastigheten
Det kan vara användbart att simulera olika bandbredder för att se hur lång tid en nedladdning tar.
Med alternativet `–limit-rate` kan du begränsa nedladdningshastigheten.
Här är ett exempel på nedladdning av en Node.js-fil:
[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]
Det tog 0,05 sekunder att ladda ner 13,92 MB. Låt oss nu begränsa hastigheten till 500 KB/s:
[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]
Med begränsad bandbredd tog nedladdningen 28 sekunder. Tänk dig att användare klagar över långsamma nedladdningar, och du vet att de har dålig bandbredd. Med `–limit-rate` kan du snabbt simulera problemet.
Ladda ner i bakgrunden
Nedladdningar av stora filer kan ta tid, särskilt om du vill begränsa hastigheten. Vad gör du om du inte vill sitta och vänta framför terminalen?
Använd argumentet `-b` för att starta wget i bakgrunden:
[email protected]:~# wget -b https://slack.com Continuing in background, pid 25430. Output will be written to ‘wget-log.1’. [email protected]:~#
Ignorera certifikatfel
Detta är användbart när du behöver felsöka intranätsapplikationer som saknar giltiga certifikat. Som standard genererar wget ett felmeddelande om ett certifikat inte är giltigt:
[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'.
Exemplet ovan visar ett felmeddelande för en webbadress med ett utgånget certifikat. wget rekommenderar att du använder `–no-check-certificate` för att ignorera certifikatvalideringen:
[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]:~#
Inte illa, eller hur?
Visa HTTP-svarsheadern för en specifik webbplats i terminalen.
Om du använder `-S` skrivs headern ut, som du kan se för 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]
Manipulera User-Agent
Ibland kan det vara nödvändigt att ansluta till en webbplats med en anpassad User-Agent, eller en specifik webbläsares User-Agent. Det gör du med `–user-agent`-alternativet. Här är ett exempel med en User-Agent som kallas `MyCustomUserAgent`:
[email protected]:~# wget https://gf.dev --user-agent="MyCustomUserAgent"
När en applikation fortfarande är under utveckling kanske du inte har en fungerande URL att testa. Eller så kanske du vill testa en specifik HTTP-instans med IP-adress, men du behöver inkludera ett värd-huvud för att applikationen ska fungera. I dessa fall är `–header` mycket praktiskt.
Låt oss testa http://10.10.10.1 med värdhuvudet satt till `application.com`:
wget --header="Host: application.com" http://10.10.10.1
Du kan använda `–header` för att inkludera valfri header, inte bara värdhuvudet.
Anslut med proxy
Om du arbetar i en DMZ-miljö kanske du inte har direkt tillgång till internet, men du kan använda en proxy:
wget -e use_proxy=yes http_proxy=$PROXYHOST:PORT http://externalsite.com
Kom ihåg att ersätta `$PROXYHOST:PORT` med dina faktiska proxyuppgifter.
Anslut med ett specifikt TLS-protokoll
I vanliga fall rekommenderas OpenSSL för att testa TLS-protokoll, men du kan också använda wget:
wget --secure-protocol=TLSv1_2 https://example.com
Detta tvingar wget att ansluta med TLS 1.2.
Slutsats
Att känna till dessa kommandon kan underlätta ditt arbete. Jag hoppas att den här artikeln ger dig en bättre uppfattning om vad du kan göra med wget.