Jedan od često korišćenih alata od strane sistem administratora je `wget`. Pokazao se izuzetno korisnim tokom rešavanja različitih problema vezanih za veb.
Šta predstavlja `wget` komanda?
`wget` komanda je široko rasprostranjen uslužni program komandne linije koji se koristi na Unix/Linux sistemima za preuzimanje sadržaja sa interneta. Besplatan je za korišćenje i omogućava neinteraktivan način preuzimanja datoteka sa veba. Ova komanda podržava HTTPS, HTTP i FTP protokole direktno, bez potrebe za dodatnim podešavanjima. Takođe, omogućava korišćenje HTTP proxy servera.
Kako `wget` pomaže u rešavanju problema?
Postoji nekoliko načina na koje ovaj alat može biti od pomoći.
Kao sistem administrator, većinu vremena provodite radeći u terminalu, a kada rešavate probleme vezane za veb aplikacije, možda nije neophodno da pregledate celu stranicu. Umesto toga, možda je dovoljno samo da proverite povezanost. Ili, možda je potrebno da verifikujete intranet veb lokacije ili da preuzmete određenu stranicu kako biste proverili njen sadržaj.
`wget` radi u neinteraktivnom režimu, što znači da ga možete pokrenuti u pozadini čak i kada ste odjavljeni sa sistema. Ovo može biti korisno u situacijama kada je potrebno da se isključite sa sistema dok se preuzimanje datoteka sa interneta i dalje odvija. U pozadini, `wget` će nastaviti da radi i izvršiće svoj zadatak.
Takođe, `wget` se može koristiti za preuzimanje celokupne veb lokacije na vaš lokalni računar. Može pratiti veze unutar XHTML i HTML stranica kako bi stvorio lokalnu verziju veb lokacije. Da bi ovo postigao, `wget` mora rekurzivno da preuzima stranice. Ova funkcionalnost je vrlo korisna kada je potrebno preuzeti važne stranice ili cele sajtove za pregledanje van mreže.
Pogledajmo kako `wget` radi u praksi. Osnovna sintaksa komande je sledeća:
wget [opcija] [URL]
Preuzimanje veb stranice
Pokušajmo da preuzmemo jednu veb stranicu. Na primer, github.com:
wget github.com
Ukoliko je konekcija uspešna, preuzeće se početna stranica i ispisati rezultat kao u sledećem primeru:
[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]:~#
Preuzimanje više datoteka
Ovo može biti korisno kada je potrebno preuzeti više datoteka odjednom. Takođe, može dati ideju kako automatizovati proces preuzimanja datoteka putem skripti.
Pokušajmo da preuzmemo Python 3.8.1 i 3.5.1 verzije:
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
Kao što možete zaključiti, sintaksa je sledeća:
wget URL1 URL2 URL3
Potrebno je samo razdvojiti URL adrese razmakom.
Ograničavanje brzine preuzimanja
Ova opcija može biti korisna kada želite da testirate koliko vremena je potrebno za preuzimanje datoteke pri različitim brzinama prenosa podataka.
Koristeći opciju `–limit-rate`, možete ograničiti brzinu preuzimanja.
Sledeći rezultat je prikaz preuzimanja Node.js datoteke:
[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]
Bilo je potrebno 0.05 sekundi da se preuzme datoteka od 13.92 MB. Sada, pokušajmo da ograničimo brzinu na 500 KB.
[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]
Smanjenje protoka je produžilo vreme preuzimanja na 28 sekundi. Zamislite da se korisnici žale na sporo preuzimanje, a vi znate da je njihov protok mreže spor. Možete brzo koristiti opciju `–limit-rate` da simulirate takav problem.
Preuzimanje u pozadini
Preuzimanje velikih datoteka može potrajati, ili kao u prethodnom primeru, kada želite da podesite ograničenje brzine. Ovo je očekivano, ali šta ako ne želite da gledate u terminal?
Možete koristiti argument `-b` da pokrenete `wget` u pozadini.
[email protected]:~# wget -b https://slack.com Continuing in background, pid 25430. Output will be written to ‘wget-log.1’. [email protected]:~#
Zanemarivanje greške sertifikata
Ova opcija je korisna kada je potrebno proveriti intranet veb aplikacije koje nemaju odgovarajući sertifikat. Po defaultu, `wget` će prijaviti grešku kada sertifikat nije validan.
[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'.
Gornji primer je za URL gde je sertifikat istekao. Kao što vidite, predloženo je korišćenje `–no-check-certificate`, koje ignoriše bilo kakvu validaciju sertifikata.
[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]:~#
Zar to nije odlično?
Pogledajte zaglavlje HTTP odgovora za određenu lokaciju u terminalu.
Korišćenjem opcije `-S` će se ispisati zaglavlje, kao što možete videti ispod za 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]
Manipulisanje User-Agentom
Možda ćete se naći u situaciji gde želite da se povežete na neku lokaciju koristeći prilagođeni User-Agent, ili User-Agent određenog veb pregledača. To je moguće uraditi navođenjem opcije `–user-agent`. Sledeći primer prikazuje kako se koristi User-Agent pod imenom „MyCustomUserAgent“:
[email protected]:~# wget https://gf.dev --user-agent="MyCustomUserAgent"
Kada je aplikacija još u razvoju, možda nemate odgovarajući URL za testiranje. Ili, možda želite testirati pojedinačnu HTTP instancu koristeći IP adresu, ali morate navesti zaglavlje Host da bi aplikacija ispravno funkcionisala. U ovom slučaju, `–header` opcija je od pomoći.
Uzmimo za primer testiranje http://10.10.10.1 sa zaglavljem Host kao „application.com“:
wget --header="Host: application.com" http://10.10.10.1
Ne samo Host, već možete ubaciti bilo koje zaglavlje koje želite.
Povezivanje putem proxy servera
Ukoliko radite u DMZ okruženju, možda nećete imati direktan pristup Internet lokacijama. U tom slučaju možete iskoristiti proxy server za povezivanje.
wget -e use_proxy=yes http_proxy=$PROXYHOST:PORT http://externalsite.com
Ne zaboravite da promenite varijablu `$PROXYHOST:PORT` sa odgovarajućim vrednostima.
Povezivanje korišćenjem specifičnog TLS protokola
Uobičajeno je koristiti OpenSSL za testiranje TLS protokola, ali možete koristiti i `wget` za tu svrhu.
wget --secure-protocol=TLSv1_2 https://example.com
Gore navedena komanda će naterati `wget` da se poveže preko TLS 1.2 protokola.
Zaključak
Poznavanje odgovarajućih komandi može vam pomoći u svakodnevnom radu. Nadamo se da vam je ovaj pregled dao uvid u mogućnosti koje pruža `wget`.