La necessità di trasferire file su una rete è quella che si presenta spesso. I sistemi GNU / Linux supportano più protocolli e strumenti per farlo, alcuni dei quali sono progettati per la condivisione di file in qualche modo permanente (come SMB, AFP e NFS), mentre altri come Secure Copy (SCP) vengono utilizzati per manuali rapidi e script trasferimenti di file. Tra questi c’è l’HyperText Transfer Protocol (HTTP), il protocollo versatile e onnipresente su cui si basa il World Wide Web.
Python, che è incluso per impostazione predefinita nella maggior parte delle distribuzioni Linux, fornisce semplici server HTTP tramite i moduli “SimpleHTTPServer” e “http.server”. Il primo si trova nella libreria standard di Python 2, mentre il secondo è incluso in Python 3. Questi server HTTP leggeri non richiedono un’installazione separata e possono essere avviati istantaneamente con un singolo comando.
Installazione di Python
Molto probabilmente il tuo sistema include almeno una versione di Python, ma in caso contrario, installa Python 3 utilizzando il tuo gestore di pacchetti nativo.
Ad esempio, su Debian e Ubuntu:
sudo apt update sudo apt install -y python3
Avvio del server HTTP
Prendere nota dell’indirizzo IP utilizzato dalla macchina mittente.
ip a s
Scopri quale versione di Python è installata con i seguenti comandi:
python --version python3 --version
Sulla stessa macchina, cambia la tua directory di lavoro con quella contenente i file che stai trasferendo. Sii consapevole del fatto che l’intero contenuto della tua attuale directory di lavoro può essere accessibile a chiunque sulla tua rete (o su Internet se la macchina mittente ha un indirizzo IP pubblico), mentre il server HTTP Python è in esecuzione.
cd /path/to/files/
Per esempio:
cd /home/user/Documents/
È ora possibile avviare il server HTTP. Per Python 2.x, usa il modulo SimpleHTTPServer:
python -m SimpleHTTPServer
O http.server nel caso di Python 3.x:
python3 -m http.server
Entrambe le varianti sono in ascolto sulla porta 8000 per impostazione predefinita, sebbene sia possibile specificare esplicitamente un numero di porta diverso dopo il nome del modulo.
python -m SimpleHTTPServer [port] python3 -m http.server [port]
Nota: i privilegi di root sono richiesti se scegli una porta inferiore a 1024.
Download dei file
Sulla macchina ricevente, puoi utilizzare qualsiasi client HTTP per scaricare i tuoi file. Se utilizzi un ambiente grafico, un browser è spesso più conveniente delle utilità della riga di comando. Basta sfogliare http: // IP_ADDRESS: 8000, dove “IP_ADDRESS” è l’indirizzo IP del computer di invio e fare clic sui file desiderati per scaricarli.
In alternativa, puoi usare Wget o cURL per recuperare i tuoi file. Dovresti già averne uno o entrambi installati. In caso contrario, suggeriamo di installare Wget, poiché è più facile da usare e supporta il download di intere directory.
Per Debian e Ubuntu:
sudo apt install wget
Per RHEL e CentOS 6/7:
sudo yum install wget
Per Fedora e RHEL / CentOS 8:
sudo dnf install wget
Utilizzando Wget
Per scaricare un singolo file con Wget, invoca semplicemente Wget seguito dall’URL del file che desideri scaricare.
wget http://IP_ADDRESS:8000/filename
Puoi anche usare Wget per scaricare ricorsivamente l’intera directory aggiungendo il file -r
flag della riga di comando.
wget -r http://IP_ADDRESS:8000/
Utilizzando cURL
Per impostazione predefinita, curl tenta di stampare il contenuto del file sul tuo terminale. Quindi, per salvare invece il file, specificare un nome file con l’estensione -o
bandiera.
curl http://IP_ADDRESS:8000/filename -o filename
Conclusione
La funzionalità HTTP nella libreria standard di Python fornisce un modo semplice ma veloce e conveniente per trasferire i file, perfetto per alcuni scenari. Ma tieni presente che poiché si tratta di un semplice HTTP senza crittografia né autenticazione, dovresti fare attenzione a non esporre file sensibili.