Il mondo Linux mette a disposizione molti programmi per scaricare file da Internet tramite linea di comando. I più popolari sono curl e wget: strumenti potentissimi, la cui ricca sintassi può disorientare i meno esperti. Vediamo dunque come usarli in pratica per effettuare il download di file da terminale Linux

Guida Linux: come scaricare file linea comando curl wget (Ubuntu/CentOS) - linux ubuntu download spotlight

Nota: in questo articolo vedremo come scaricare file da linea di comando con Linux. La procedura è stata testata con Ubuntu 17.10 e CentOS 7.3, ma la sintassi è grossomodo inalterata da decenni, motivo per cui è presumibile che continui a rimanere la stessa negli anni a venire.

In ambiente Windows possiamo utilizzare il comando wget scaricando un apposito eseguibile:

» Leggi: Come usare wget per Windows e scaricare file su connessioni instabili con resume e retry automatici (Operazione non riuscita - Errore di rete)

Ricordiamo inoltre che curl e wget sono strumenti ottimali per scaricare file da fonti HTTP (pagine web) e FTP tramite linea di comando, ma, in linea di massima, non sono la scelta "di riferimento" per scaricare tramite protocollo SSH. Allo scopo, si impiegano SFTP o SCP:

» Leggi: Guida Linux: download e upload via SFTP/SCP (SSH) da linea di comando (Ubuntu/CentOS)

Per chi ha fretta

Se già siete esperti di Linux e cercate solo un "reminder" per la sintassi, eccovi serviti:

  • download con wget: wget -O "/dir1/dir2/miofile.txt" "https://turbolab.it/scarica/204"
  • download con curl: curl -L -o "/dir1/dir2/miofile.txt" "https://turbolab.it/scarica/204"

Per interrompere lo scaricamento, premere la combinazione da tastiera Ctrl+C.

Nel resto dell'articolo approfondiremo l'uso dei comandi e spiegheremo il significato dei vari argomenti.

Aprire il terminale

Se state lavorando via SSH oppure con una edizione spiccatamente "server" (come Ubuntu Server), siete già davanti alla linea di comando, quindi andate oltre.

Se però state impiegando l'edizione "regolare" per PC, cliccate sul pulsante con i 3x3 punti in basso a sinistra e cercate terminale per lanciare rapidamente l'omonima applicazione

Guida Linux: come scaricare file linea comando curl wget (Ubuntu/CentOS) - linux apri terminale

» Leggi anche: Come aprire il terminale di Ubuntu

Scaricare file nella cartella corrente

Se vogliamo scaricare rapidamente un file da linea di comando su Linux basta impartire uno di questi due comandi:

  • wget "https://turbolab.it/scarica/204"
  • curl -O "https://turbolab.it/scarica/204" (l'opzione è una "O di Otranto", tassativamente maiuscola)

Il risultato è che il file verrà scaricato nella cartella corrente (visualizzabile impartendo pwd), con lo stesso nome che ha sul server remoto

Guida Linux: come scaricare file linea comando curl wget (Ubuntu/CentOS)

Guida Linux: come scaricare file linea comando curl wget (Ubuntu/CentOS)

Scaricare il file scegliendo il nome

In molti casi, però, vorremo specificare il nome da assegnare al file scaricato. Allo scopo, usiamo:

  • wget -O "miofile.txt" "https://turbolab.it/scarica/204" (l'opzione è una "O di Otranto", maiuscola)
  • curl -o "miofile.txt" "https://turbolab.it/scarica/204" (l'opzione è una "o di oggi", minuscola)

In questo caso, il file viene scaricato nella cartella corrente, ma con il nome da noi scelto

Guida Linux: come scaricare file linea comando curl wget (Ubuntu/CentOS)

Guida Linux: come scaricare file linea comando curl wget (Ubuntu/CentOS)

Scaricare il file scegliendo la cartella locale

Ovviamente non siamo obbligati a scaricare il file nella cartella corrente. Possiamo infatti specificare il percorso di destinazione sulla linea di comando, anticipandolo al nome desiderato.

La sintassi è dunque la stessa usata nell'esempio precedente:

  • wget -O "/percorso/cartella/miofile.txt" "https://turbolab.it/scarica/204" (l'opzione è una "O di Otranto", maiuscola)
  • curl -o "/percorso/cartella/miofile.txt" "https://turbolab.it/scarica/204" (l'opzione è una "o di oggi", minuscola)

Guida Linux: come scaricare file linea comando curl wget (Ubuntu/CentOS)

Guida Linux: come scaricare file linea comando curl wget (Ubuntu/CentOS)

Seguire i redirect (solo curl)

wget segue automaticamente i redirect. Ecco dunque che, provando a scaricare un file come https://turbolab.it/scarica/53 (si tratta di Windows 10 Media Creation Tool) wget legge la risposta del server di TurboLab.it, interpreta la ridirezione e scarica il file dal server di Microsoft.

Al contrario, curl non segue i redirect e si limita a prelevare un file da zero byte. Per ottenere il comportamento atteso e seguire i redirect con curl è necessario esplicitare il parametro -L (maiuscolo). Scriveremo dunque:

curl -L -o "win10 media creation tool.exe" "https://turbolab.it/scarica/53"

Guida Linux: come scaricare file linea comando curl wget (Ubuntu/CentOS)

In caso di dubbio, possiamo sempre specificare -L ad ogni invocazione di curl. Verrà applicato solo se effettivamente necessario.

"Resume" dei download interrotti

wget e curl permettono di riprendere il download di un file precedentemente scaricato solo parzialmente, senza bisogno di ricominciare da zero.

Per testare la funzione possiamo iniziare a scaricare un pacchetto voluminoso, come il Service pack per Windows 7 (circa 2 GB):

  • wget -O "win7_sp.iso" "https://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/7601.17514.101119-1850_Update_Sp_Wave1-GRMSP1.1_DVD.iso"
  • curl -o "win7_sp.iso" "https://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/7601.17514.101119-1850_Update_Sp_Wave1-GRMSP1.1_DVD.iso"

Dopo qualche secondo, interrompiamo il download premendo Ctrl+C.

Ora riprendiamo il download del file aggiungendo l'argomento -c (per wget) oppure -C - (per curl) e notiamo che il trasferimento riprende da dove si era interrotto:

  • wget -c -O "win7_sp.iso" "https://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/7601.17514.101119-1850_Update_Sp_Wave1-GRMSP1.1_DVD.iso"
  • curl -C - -o "win7_sp.iso" "https://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/7601.17514.101119-1850_Update_Sp_Wave1-GRMSP1.1_DVD.iso"

Guida Linux: come scaricare file linea comando curl wget (Ubuntu/CentOS)

Guida Linux: come scaricare file linea comando curl wget (Ubuntu/CentOS)

Per quanto riguarda wget, ho mostrato nell'articolo "Come usare wget per Windows e scaricare file su connessioni instabili con resume e retry automatici (Operazione non riuscita - Errore di rete)" quali parametri usare per riprendere il download automaticamente in caso di frequenti singhiozzi della connessione.

Specificare lo "user agent"

Quando si effettua un accesso HTTP o un download tramite un tradizionale browser web, il nostro navigatore invia al server un'intestazione chiamata user-agent: è una stringa che identifica il programma (Chrome, Firefox, Edge ecc) e il sistema operativo. Al momento, ad esempio, il mio Google Chrome su Windows 10 sta comunicando ai vari server quanto segue:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.18 Safari/537.36

Con Firefox, invece:

Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0

Per scoprire questa stringa possiamo usare gli strumenti di sviluppo integrati nel browser web oppure impiegare un servizio come questo:

» Vedi: What's My User Agent?

Anche curl e wget inviano il proprio user-agent. Sul sistema Ubuntu dal quale ho svolto le prove, si tratta di:

  • wget: Wget/1.19.1 (linux-gnu)
  • curl: curl/7.55.1

Alcuni server verificano esplicitamente lo user-agent e, quando rilevano che l'utente sta cercando di scaricare tramite un programma diverso da uno dei browser web riconosciuti, impediscono il download. Per aggirare questa sciocca limitazione basta esplicitare lo user-agent da usare.

A scopo di test, lanciate un comando come questo:

  • wget --user-agent="User-agent di prova!" -O "prova_useragent.html" "https://www.whoishostingthis.com/tools/user-agent/"
  • curl -A "User-agent di prova" -o "prova_useragent.html" "https://www.whoishostingthis.com/tools/user-agent/"

Aprite ora il file prova_useragent.html con il browser web e dovereste ritrovarvi esattamente la stringa immessa da linea di comando come user-agent ricevuto dal server

Guida Linux: come scaricare file linea comando curl wget (Ubuntu/CentOS)

Guida Linux: come scaricare file linea comando curl wget (Ubuntu/CentOS)

A questo punto potete ripetere il tentativo di download del file "protetto", utilizzando come user-agent quello di un browser qualsiasi. Potete, ad esempio, copia-incollare uno dei due esempi (Chrome o Firefox su Windows 10) che ho citato poco sopra.

Ignorare i certificati HTTPS non-validi

wget e curl si rifiutano di scaricare file da indirizzi HTTPS se il certificato digitale dei siti non è perfettamente valido (fra gli altri: non è scaduto o revocato, è rilasciato da un'autorità di certificazione (CA) accreditata ecc.). Si tratta di una misura di sicurezza in più che garantisce l'integrità e l'autenticità dei file scaricati ma, in alcune circostanze, è necessario forzare e scaricare comunque. Allo scopo, bisogna esplicitare un argomento in più:

  • wget --no-check-certificate -O "certificato_invalido.html" "https://wrong.host.badssl.com/"
  • curl -k -o "certificato_invalido.html" "https://wrong.host.badssl.com/"

Guida Linux: come scaricare file linea comando curl wget (Ubuntu/CentOS)

Guida Linux: come scaricare file linea comando curl wget (Ubuntu/CentOS)

Conclusioni

In questa guida abbiamo visto come scaricare un file da linea di comando in ambiente Linux tramite wget e curl.

Entrambi i comandi prevedono molte altre opzioni che ne modificano il comportamento. Per maggiori informazioni, si veda la rispettiva documentazione ufficiale: