I programmi della console seriale¹ che utilizzerai sull'altra estremità della connessione avranno un modo per inviare un file sul lato remoto. Il modo esatto in cui lo fai dipende dalle risorse che hai a disposizione sul sistema remoto.
Ho lrzsz
o kermit
sul lato remoto
Il caso più semplice è se sul lato remoto è installato un programma di trasferimento file binario solido come lrzsz
o kermit
. Questo era una volta più comune di oggi, ma il tuo sistema particolare potrebbe avere ancora uno di questi.
Il programma di console seriale che stai utilizzando sul lato locale ha quasi sicuramente un modo per eseguire un caricamento di Zmodem o Kermit, che ti consente di inviare direttamente tutto ciò di cui hai bisogno.
Nel caso di Zmodem, basta digitare rz
sul sistema remoto, che invia una stringa speciale che il terminale seriale locale dovrebbe comprendere, facendogli apparire una finestra di dialogo di selezione file.
Kermit è un protocollo più semplice, quindi in questo caso devi avviare manualmente il trasferimento.
Non ho un programma di trasferimento file binario, ma ho uuencode
/base64
Esistono diversi vantaggi nell'utilizzare un programma di trasferimento file binario adeguato come lrzsz
o kermit
: efficienza, checksum, tentativi automatici, ripresa del trasferimento interrotto, trasferimento di più file, ecc., Ma questi sono lussi . Se devi solo inviare un file o se invii file raramente, puoi cavartela con i caricamenti ASCII.
Poiché i protocolli terminali interpretano molti dei valori di byte che si verificano in un file di dati binari, non è possibile inviare il file direttamente tramite la stessa connessione; in tal caso, il codice di emulazione terminale su entrambe le estremità tenterà di interpretare alcuni dei dati, corrompendoli e probabilmente confondendo anche il codice di gestione dei terminali.
Per ovviare a questo, codificare i dati binari in un sottoinsieme sicuro di ASCII sul lato locale, quindi trasformarli in dati binari non elaborati sul lato remoto. Questo è ciò che fanno i programmi uuencode
e base64
, differendo solo per le scelte minori dell'algoritmo.
Sul sistema locale, si codifica il file: ²
$ uuencode -o sbf.uue some-binary-file.gz some-binary-file.gz
Quindi digitare questo comando sul sistema remoto e inviare il file utilizzando la funzione "Caricamento ASCII" della console seriale locale:
$ cat | uudecode
Al termine del caricamento del file, premi Ctrl-Cper uscire cat
. Ora hai il tuo file decodificato sul sistema remoto, come volevi.
Ma ho molti file da inviare e la transcodifica ASCII stampabile è una seccatura!
Non è difficile avviarsi fino a un livello superiore di tecnologia. Se il sistema remoto ha un compilatore C, è possibile utilizzare la tecnica precedente per inviare al sistema remoto una copia del lrzsz
codice sorgente. Sul lato locale:
$ uuencode -o lrzsz.tgz.uue lrzsz-0.12.20.tar.gz lrzsz-0.12.20.tar.gz
Quindi sul sistema remoto, digita questo tramite il programma della console seriale:
$ cat | uudecode
^C
$ tar xvf lrzsz-0.12.20.tar.gz
...build lrzsz normally
Dopo aver avviato il primo comando, eseguire un "caricamento ASCII" del lrzsz.tgz.uue
file sul sistema remoto. La pipeline accetta i dati codificati e li decodifica in un tarball binario per te, che puoi decomprimere e creare.
Ma non ho un compilatore C sul sistema remoto
Se non hai nemmeno un compilatore sul sistema remoto, puoi compilare in modo incrociato il rz
(o qualunque altro) programma sul sistema locale e inviarlo al sistema remoto usando la tecnica sopra.
Note:
minicom , picocom , PuTTY , VanDyke CRT ...
Devi dare il nome del file di input a questa versione di uuencode
due volte, una volta per nominare l'origine dei dati di input e di nuovo per dichiarare come il sistema remoto dovrebbe chiamare il file quando decodifica i dati in un file di output. È possibile che il sistema remoto abbia un nome diverso per il suo file di output.
La tua versione locale di uuencode
potrebbe comportarsi diversamente.