Et af de hyppigt brugte hjælpeprogrammer af sysadmin er wget. Det kan være meget praktisk under web-relateret fejlfinding.
Indholdsfortegnelse
Hvad er wget kommando?
wget kommando er et populært Unix/Linux kommandolinjeværktøj til at hente indholdet fra nettet. Det er gratis at bruge og giver en ikke-interaktiv måde at downloade filer fra nettet på. Wget-kommandoen understøtter HTTPS-, HTTP- og FTP-protokoller ud af kassen. Desuden kan du også bruge HTTP-proxyer med det.
Hvordan hjælper wget dig med fejlfinding?
Der er mange måder.
Som sysadmin arbejder du det meste af tiden på en terminal, og når du fejlfinder webapplikationsrelaterede problemer, vil du måske ikke tjekke hele siden, men kun forbindelsen. Eller du vil verificere intranetwebsteder. Eller du vil downloade en bestemt side for at bekræfte indholdet.
wget er ikke-interaktivt, hvilket betyder, at du kan køre det i baggrunden, selv når du er logget af. Der kan være mange tilfælde, hvor det er vigtigt for dig at afbryde forbindelsen til systemet, selv når du henter filer fra nettet. I baggrunden vil wget’en køre og afslutte deres tildelte job.
Det kan også bruges til at få hele hjemmesiden på dine lokale maskiner. Den kan følge links i XHTML- og HTML-sider for at oprette en lokal version. For at gøre det skal den downloade siden rekursivt. Dette er meget nyttigt, da du kan bruge det til at downloade vigtige sider eller websteder til offlinevisning.
Lad os se dem i aktion. Syntaksen for wget er som nedenfor.
wget [option] [URL]
Download en webside
Lad os prøve at downloade en side. Eks: github.com
wget github.com
Hvis forbindelsen er i orden, vil den downloade hjemmesiden og vise output som nedenfor.
[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]:~#
Download flere filer
Praktisk, når du skal downloade flere filer på én gang. Dette kan give dig en idé om automatisering af download af filer gennem nogle scripts.
Lad os prøve at downloade Python 3.8.1 og 3.5.1 filer.
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
Så som du kan gætte, er syntaksen som nedenfor.
wget URL1 URL2 URL3
Du skal bare sørge for at give plads mellem URL’er.
Begræns downloadhastighed
Det ville være nyttigt, når du vil kontrollere, hvor lang tid det tager at downloade din fil med forskellig båndbredde.
Ved at bruge –limit-rate-indstillingen kan du begrænse downloadhastigheden.
Her er outputtet af download af Nodejs-filen.
[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 at downloade 13,92 MB filer. Lad os nu prøve at begrænse hastigheden til 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]
Reduktion af båndbredden tog længere tid at downloade – 28 sekunder. Forestil dig, dine brugere klager over langsom download, og du ved, at deres netværksbåndbredde er lav. Du kan hurtigt prøve -limit-rate for at simulere problemet.
Download i baggrunden
At downloade store filer kan tage den tid eller ovenstående eksempel, hvor du også vil indstille hastighedsgrænsen. Dette forventes, men hvad nu hvis du ikke vil stirre på din terminal?
Nå, du kan bruge -b argument til at starte wget’et i baggrunden.
[email protected]:~# wget -b https://slack.com Continuing in background, pid 25430. Output will be written to ‘wget-log.1’. [email protected]:~#
Ignorer certifikatfejl
Dette er praktisk, når du skal tjekke intranet-webapplikationer, der ikke har det korrekte certifikat. Som standard vil wget give en fejl, når et certifikat ikke er gyldigt.
[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'.
Ovenstående eksempel er for URL’en, hvor cert er udløbet. Som du kan se, har det foreslået at bruge –no-check-certificate, som vil ignorere enhver certificering.
[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]:~#
Fedt, ikke?
Se HTTP-svarheaderen for et givet websted på terminalen.
Ved at bruge -S udskrives headeren, som du kan se nedenfor for 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]
Manipuler User-Agenten
Der kan være en situation, hvor du vil forbinde et websted ved hjælp af en brugerdefineret brugeragent. Eller en bestemt browsers brugeragent. Dette kan gøres ved at angive –user-agent. Nedenstående eksempel er for brugeragenten som MyCustomUserAgent.
[email protected]:~# wget https://gf.dev --user-agent="MyCustomUserAgent"
Når en applikation stadig er under udvikling, har du muligvis ikke en korrekt URL til at teste den. Eller du vil måske teste en individuel HTTP-instans ved hjælp af IP, men du skal angive værtsheaderen for at applikationen fungerer korrekt. I denne situation ville –header være nyttig.
Lad os tage et eksempel på at teste http://10.10.10.1 med host header som application.com
wget --header="Host: application.com" http://10.10.10.1
Ikke bare vært, men du kan injicere enhver header, du vil.
Forbind ved hjælp af proxy
Hvis du arbejder på et DMZ-miljø, har du muligvis ikke adgang til internetsider. Men du kan drage fordel af proxy til at oprette forbindelse.
wget -e use_proxy=yes http_proxy=$PROXYHOST:PORT http://externalsite.com
Glem ikke at opdatere $PROXYHOST:PORT-variablen med de faktiske.
Forbind ved hjælp af en specifik TLS-protokol
Normalt vil jeg anbefale at bruge OpenSSL til at teste TLS-protokollen. Men du kan også bruge wget.
wget –secure-protocol=TLSv1_2 https://example.com
Ovenstående vil tvinge wget til at oprette forbindelse over TLS 1.2.
Konklusion
At kende den nødvendige kommando kan hjælpe dig på arbejdet. Jeg håber, at ovenstående giver dig en idé om, hvad du kan gøre med wget.