Die seriellen Konsolenprogramme¹, die Sie am anderen Ende der Verbindung verwenden, haben eine Möglichkeit, eine Datei an die Remote-Seite zu senden. Wie genau Sie vorgehen, hängt davon ab, welche Ressourcen auf dem fernen System verfügbar sind.
Ich habe lrzsz
oder kermit
auf der Remote-Seite
Der einfachste Fall ist, wenn auf der Remote-Seite ein solides Programm zur Übertragung von Binärdateien installiert ist, z. B. lrzsz
oder kermit
. Dies war einmal häufiger als heute, aber Ihr spezielles System könnte immer noch eines davon haben.
Das serielle Konsolenprogramm, das Sie lokal verwenden, bietet mit ziemlicher Sicherheit die Möglichkeit, einen Zmodem- oder Kermit-Upload durchzuführen, mit dem Sie alles, was Sie benötigen, direkt senden können.
Im Fall von Zmodem geben Sie einfach rz
auf dem Remote-System ein, das eine spezielle Zeichenfolge ausgibt, die das lokale serielle Terminal verstehen sollte, wodurch ein Dialogfeld für die Dateiauswahl geöffnet wird.
Kermit ist ein einfacheres Protokoll. In diesem Fall müssen Sie die Übertragung manuell starten.
Ich habe kein Programm zum Übertragen von Binärdateien, aber ich habe uuencode
/base64
Die Verwendung eines ordnungsgemäßen binären Dateiübertragungsprogramms wie lrzsz
oder hat mehrere Vorteile kermit
: Effizienz, Prüfsummenbildung, automatische Wiederholungsversuche, Wiederaufnahme der Übertragung abgebrochen, mehrfache Dateiübertragung usw., aber dies ist Luxus . Wenn Sie nur eine Datei senden müssen oder nur selten Dateien senden, können Sie ASCII-Uploads durchführen.
Da Terminalprotokolle viele der in einer Binärdatendatei vorkommenden Bytewerte interpretieren, können Sie die Datei nicht direkt über dieselbe Verbindung senden. In diesem Fall versucht der Terminal-Emulationscode an beiden Enden, einige der Daten zu interpretieren. Dadurch werden die Daten beschädigt, und der Code für die Terminal-Verarbeitung wird möglicherweise ebenfalls verwirrt .
Sie umgehen dies, indem Sie die Binärdaten auf der lokalen Seite in eine sichere Teilmenge von ASCII codieren und sie dann auf der Remote-Seite wieder in Binärrohdaten umwandeln. Dies ist, was die Programme uuencode
und base64
tun, die sich nur in geringfügigen Algorithmuswahlen unterscheiden.
Auf dem lokalen System codieren Sie die Datei: ²
$ uuencode -o sbf.uue some-binary-file.gz some-binary-file.gz
Anschließend geben Sie diesen Befehl auf dem fernen System ein und senden die Datei mit der Funktion "ASCII-Upload" der lokalen seriellen Konsole:
$ cat | uudecode
Wenn der Datei-Upload abgeschlossen ist, klicken Sie auf Ctrl-C, um auszusteigen cat
. Jetzt haben Sie Ihre dekodierte Datei auf dem Remote-System, wie Sie wollten.
Aber ich muss viele Dateien senden, und druckbare ASCII-Transkodierung ist mühsam!
Es ist nicht schwer, sich auf ein höheres technologisches Niveau zu begeben. Wenn das ferne System über einen C-Compiler verfügt, können Sie mit der vorherigen Technik eine Kopie des lrzsz
Quellcodes an das ferne System senden . Auf der lokalen Seite:
$ uuencode -o lrzsz.tgz.uue lrzsz-0.12.20.tar.gz lrzsz-0.12.20.tar.gz
Geben Sie dann auf dem fernen System Folgendes über das serielle Konsolenprogramm ein:
$ cat | uudecode
^C
$ tar xvf lrzsz-0.12.20.tar.gz
...build lrzsz normally
Nachdem Sie den ersten Befehl gestartet haben, führen Sie einen "ASCII-Upload" der lrzsz.tgz.uue
Datei auf das ferne System durch. Die Pipeline akzeptiert die unkodierten Daten und dekodiert sie für Sie in einen Binär-Tarball, den Sie entpacken und erstellen können.
Ich habe aber keinen C-Compiler auf dem Remote-System
Wenn auf dem fernen System noch nicht einmal ein Compiler vorhanden ist, können Sie das (oder was auch immer) Programm auf dem lokalen System übergreifend kompilierenrz
und mit der oben beschriebenen Technik an das ferne System senden.
Fußnoten:
Minicom , Picocom , PuTTY , VanDyke CRT ...
Sie müssen dieser Version uuencode
den Namen der Eingabedatei zweimal geben, einmal, um die Quelle der Eingabedaten zu benennen, und erneut, um zu deklarieren, wie das ferne System die Datei aufrufen soll, wenn es die Daten in eine Ausgabedatei dekodiert. Es ist denkbar, dass das ferne System einen anderen Namen für die Ausgabedatei hat.
Ihre lokale Version von uuencode
verhält sich möglicherweise anders.