Kopieren Sie Binärdateien von anderen Systemen nur mit integrierten Shell-Befehlen

Kopieren Sie Binärdateien von anderen Systemen nur mit integrierten Shell-Befehlen

Ich habe versehentlich gerade eine wichtige gemeinsam genutzte Bibliothek entfernt und jetzt kann keine dynamisch verknüpfte ausführbare Datei mehr ausgeführt werden. Beispielsweise /bin/lszeigt sogar error while loading shared libraries: libunwind.so.8: cannot open shared object file: No such file or directory

Ich kann die gelöschte Datei nicht einmal zurückkopieren, weil SSH nicht mehr funktioniert ( scpkeine neue Verbindung herstellen kann). Und ich kann die Festplatte nicht aus dem Computer entfernen und die richtige Datei zurückschreiben: Es handelt sich um ein eingebettetes Gerät und es gibt keine Wechselfestplatte.

Das Einzige, was ich habe, ist eine noch bestehende Shell-Sitzung, die ich auf keinen Fall schließen sollte, da ich sonst keine neue Sitzung öffnen kann.

Wie kann ich eine Binärdatei (gemeinsam genutzte Bibliothek) von einem anderen System nur mithilfe integrierter Shell-Befehle (wie etwa echo, printf, read usw.) übertragen?

Antwort1

Sie könnten den in Bash integrierten /dev/tcp TCP-Bus ausprobieren:

http://fibrevillage.com/scripting/603-dev-tcp-examples-and-trouble-shooting

Damit solltest du eine HTTP-Anfrage formulieren können, um die Datei per HTTP einzubinden.

Antwort2

Wenn /dev/tcp nicht verfügbar ist, kann die alternative Lösung verwendet werden, wie unten beschrieben.

Geben Sie auf dem Zielcomputer den folgenden Befehl ein:

(while read -s l; do echo "$l"; done) > temp.txt

Führen Sie dann auf dem PC die folgenden Aktionen aus:

  1. installieren x11-utils(brauchen xwininfo) und xdotool;
  2. Ermitteln Sie die Fenster-ID der Konsole, in der die SSH-Sitzung läuft: Verwenden Sie xwininfosie dafür.
  3. Geben Sie zum Übertragen der Daten folgenden Befehl ein:
od -An -v -tx1 file.bin | (while read l; do xdotool type --delay 0 --window 0xa0000d "$(echo -e \"$l\r\")"; sleep 0.02; echo -ne .; done)

Wenn übertragene Daten in SSH-Konsolen im Rohhexadezimalformat angezeigt werden, müssen Sie die Verzögerung erhöhen (die Empfangsseite ist nicht schnell genug).

  1. Nachdem das Senden abgeschlossen ist, drücken Sie Enterund Ctrl-Din der SSH-Konsole und geben Sie dann den folgenden Befehl ein, um die empfangene Datei von Hex in Binär zu konvertieren:
(while read -s l; do for c in $l; do printf "\x$c"; done; done) < temp.txt > file.bin
  1. Überprüfen Sie die Dateilänge mit dem Befehl: (x=0; IFS=""; while read -d '' -s -r -n 1 c; do x=$(($x+1)); done; echo $x) < file.bin.

  2. Und wenn die Länge übereinstimmt (es gingen also keine Daten während der unzuverlässigen Übertragung verloren), können Sie die Datei an den gewünschten Ort kopieren:

(IFS=""; while read -d '' -s -r -n 1 c; do printf "%c" "$c"; done) < file.bin > destination

verwandte Informationen