Una delle utilità utilizzate di frequente da sysadmin è wget. Può essere molto utile durante la risoluzione dei problemi relativi al Web.
Cos’è il comando wget?
Il comando wget è una popolare utility da riga di comando Unix/Linux per recuperare il contenuto dal web. È gratuito e fornisce un modo non interattivo per scaricare file dal Web. Il comando wget supporta i protocolli HTTPS, HTTP e FTP pronti all’uso. Inoltre, puoi anche utilizzare proxy HTTP con esso.
In che modo wget ti aiuta a risolvere i problemi?
Ci sono molti modi.
In qualità di amministratore di sistema, la maggior parte delle volte lavorerai su un terminale e, durante la risoluzione dei problemi relativi alle applicazioni Web, potresti non voler controllare l’intera pagina ma solo la connettività. Oppure si desidera verificare i siti Web intranet. Oppure vuoi scaricare una determinata pagina per verificarne il contenuto.
wget non è interattivo, il che significa che puoi eseguirlo in background anche quando sei disconnesso. Possono esserci molti casi in cui è essenziale disconnettersi dal sistema anche durante il recupero di file dal Web. In background, il wget verrà eseguito e terminato il lavoro assegnato.
Può anche essere utilizzato per ottenere l’intero sito Web sui computer locali. Può seguire i collegamenti nelle pagine XHTML e HTML per creare una versione locale. Per farlo, deve scaricare la pagina in modo ricorsivo. Questo è molto utile in quanto puoi usarlo per scaricare pagine o siti importanti per la visualizzazione offline.
Vediamoli in azione. La sintassi di wget è la seguente.
wget [option] [URL]
Scarica una pagina web
Proviamo a scaricare una pagina. Es: github.com
wget github.com
Se la connettività va bene, scaricherà la home page e mostrerà l’output come di seguito.
[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]:~#
Scarica più file
Utile quando devi scaricare più file contemporaneamente. Questo può darti un’idea sull’automazione del download dei file tramite alcuni script.
Proviamo a scaricare i file Python 3.8.1 e 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
Quindi, come puoi immaginare, la sintassi è la seguente.
wget URL1 URL2 URL3
Devi solo assicurarti di dare spazio tra gli URL.
Limita la velocità di download
Sarebbe utile quando si desidera controllare quanto tempo impiega il file per il download con una larghezza di banda diversa.
Usando l’opzione –limit-rate, puoi limitare la velocità di download.
Ecco l’output del download del file 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]
Ci sono voluti 0,05 secondi per scaricare file da 13,92 MB. Ora, proviamo a limitare la velocità a 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]
La riduzione della larghezza di banda ha richiesto più tempo per il download: 28 secondi. Immagina che i tuoi utenti si stiano lamentando del download lento e sai che la loro larghezza di banda di rete è bassa. Puoi provare rapidamente –limit-rate per simulare il problema.
Scarica in background
Il download di file di grandi dimensioni può richiedere del tempo o l’esempio sopra in cui si desidera impostare anche il limite di velocità. Questo è previsto, ma cosa succede se non vuoi fissare il tuo terminale?
Bene, puoi usare -b argomento per avviare il wget in background.
[email protected]:~# wget -b https://slack.com Continuing in background, pid 25430. Output will be written to ‘wget-log.1’. [email protected]:~#
Ignora errore certificato
Ciò è utile quando è necessario controllare le applicazioni Web Intranet che non dispongono del certificato corretto. Per impostazione predefinita, wget genererà un errore quando un certificato non è valido.
[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'.
L’esempio sopra è per l’URL in cui cert è scaduto. Come puoi vedere, ha suggerito di utilizzare –no-check-certificate che ignorerà qualsiasi convalida del certificato.
[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]:~#
Fantastico, vero?
Vedere l’intestazione della risposta HTTP di un determinato sito sul terminale.
Usando -S verrà stampata l’intestazione, come puoi vedere di seguito per 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]
Manipolare lo User-Agent
Potrebbe verificarsi una situazione in cui desideri connettere un sito utilizzando uno user-agent personalizzato. O lo user-agent del browser specifico. Questo è possibile specificando –user-agent. L’esempio seguente è per l’agente utente come MyCustomUserAgent.
[email protected]:~# wget https://gf.dev --user-agent="MyCustomUserAgent"
Quando un’applicazione è ancora in fase di sviluppo, potresti non avere un URL corretto per testarla. In alternativa, potresti voler testare una singola istanza HTTP utilizzando IP, ma devi fornire l’intestazione host affinché l’applicazione funzioni correttamente. In questa situazione, –header sarebbe utile.
Prendiamo un esempio di test di https://10.10.10.1 con l’intestazione host come application.com
wget --header="Host: application.com" https://10.10.10.1
Non solo host, ma puoi inserire qualsiasi intestazione che ti piace.
Connettiti usando il proxy
Se stai lavorando in un ambiente DMZ, potresti non avere accesso ai siti Internet. Ma puoi sfruttare il proxy per connetterti.
wget -e use_proxy=yes http_proxy=$PROXYHOST:PORT https://externalsite.com
Non dimenticare di aggiornare la variabile $PROXYHOST:PORT con quelle effettive.
Connettiti utilizzando un protocollo TLS specifico
Di solito, consiglierei di utilizzare OpenSSL per testare il protocollo TLS. Ma puoi usare anche wget.
wget –secure-protocol=TLSv1_2 https://example.com
Quanto sopra forzerà wget a connettersi su TLS 1.2.
Conclusione
Conoscere il comando necessario può aiutarti al lavoro. Spero che quanto sopra ti dia un’idea di cosa puoi fare con wget.