Fix Terminal nach Anzeige einer Binärdatei

122

Ich habe versucht, Befehl catmit einer ausführbaren Datei:

cat /bin/ls

Jetzt kann ich in diesem Terminal (Linux-Konsole) kein Wort lesen. Wie kann ich es reparieren?

Zufall
quelle
4
Wenn ich das richtig verstehe, ist Ihr Terminal möglicherweise verschraubt. versuche zu tippen reset.
Patrice Levesque
Eigentlich denke ich, dass die Antwort hier besser ist, also markieren Sie besser als dup in die andere Richtung
ilkkachu

Antworten:

165

Wenn Sie sich zum Beispiel in einem Unix / Linux-Terminal (Bash) befinden, verwenden Sie häufig die Befehle moreoder lessoder cat, um eine Datei anzuzeigen. Wenn Sie dies tun und die Datei nicht angezeigt werden soll (wie z. B. /bin/ls), erhalten Sie folgende Ausgabe:

                ss der binären Ausgabe

Was hier vor sich geht, ist, dass Sie gerade versucht haben, eine Datei anzuzeigen, die ein Programm ist. Eine ausführbare Datei, die nicht mit den oben genannten Standard-Viewern angezeigt werden soll.

Methode 1 - Zurücksetzen

Um dieses Problem zu beheben, können Sie Folgendes tun:

  1. Drücke mehrmals die Strg + C-Taste ( Ctrl+ C)
  2. Geben Sie den Befehl ein resetund drücken Sie die Eingabetaste

Dies sollte normalerweise Ihr Terminal wieder in einen normaleren Modus versetzen. Ich erwähne noch eine Sache: Wenn Sie die obigen Schritte ausführen, tippen Sie sie blind in Ihr Terminal. Stellen Sie also sicher, dass Sie es richtig eingeben.

Methode Nr. 2 - normal

Wie in den Kommentaren von @sendmoreinfo vorgeschlagen, haben Sie möglicherweise mehr Glück, wenn Sie stattdessen die folgenden Befehle verwenden, wenn die oben genannten nicht funktionieren:

$ stty sane
$ tput rs1

Bestimmen eines Dateityps

Übrigens: Wenn Sie auf eine Datei stoßen und nicht sicher sind, ob dies Ihr Terminal beschädigen wird, können Sie die Datei mit dem Befehl überprüfen, der den Dateityp zurückmeldet file.

Beispielsweise zeigt mit /bin/lsdieser Datei die folgende Ausgabe:

$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
slm
quelle
15
resetist kein 100% iges Heilmittel gegen tödlichen Wahnsinn. Versuchen Sie, stty sanegefolgt von tput rs1.
Sendmoreinfo
@sendmoreinfo - danke Ich habe Ihren Vorschlag zur Antwort hinzugefügt. Ich hatte es stty saneaber nie benutzt tput.
slm
1
Eigentlich muss ich das genauer untersuchen. reset soll rs1 string senden. Ein guter Test (zumindest für xterm) besteht darin, den Cursor unsichtbar zu machen und zu prüfen, ob das Zurücksetzen ihn zurückbringt.
sendmoreinfo
4
resetarbeitete in meinem Fall
code_monk
1
clearfunktioniert auch bei leichten Fällen.
Navin
36

Ich hatte eine Gelegenheit, bei der keiner der üblichen Tricks resetoder stty sane(nach versehentlichem Aufrufen printeines Python-Bytearray) funktioniert hat. Ich hatte Erfolg mit Methode 2 in diesem hilfreichen Blog .

Ich habe seitdem einen sehr hilfreichen Alias ​​erstellt:

alias fix='echo -e "\033c"'
Benjamin Riggs
quelle
2
Ich weiß, das ist alt, aber das ist die einzige Antwort, die für mich funktioniert hat! Danke
jredd
Dies echo -e "\033c"hat mir geholfen, eine durch Zeichen verstümmelte SSH-Anmeldeterminalsitzung zu bereinigen, die nach einer verwechselt wurde cat /etc/localtime.
Pro Backup
Dies funktionierte mit OpenBSD, während alle anderen dies nicht taten.
Warmwasser
1
Weitere Experimente mit dem Bildschirm (1) ergaben, dass alle Sitzungen (-D) zwangsweise getrennt wurden, bevor die Rücksetzbefehle für den zugrunde liegenden Bildschirm des Terminals ausgeführt wurden. Dies könnte das Problem beheben. Möglicherweise müssen Sie auch beschädigte Fensternamen umbenennen, die möglicherweise dieselben Binärdaten am Terminal erneut anzeigen, wodurch sie beschädigt werden (und anschließend erneut zurückgesetzt werden).
Mathe
1
Meine Terminalgröße (LINES) hat sich nach der Verwendung von vi bei der Verbindung mit der Konsole eines entfernten Linux-Hosts über SOL ungefähr halbiert. Die Remote-Sitzung hatte LINES = 24, während meine lokale MAC-Sitzung LINES = 51 hatte. echo -e "\ 033c" hat bei mir funktioniert, aber keine der anderen von mir ausgeführten Korrekturen ('stty sane', tput rs1, tput sgr0, reset).
Mark
7

Keine einzige vorherige Antwort hat für mich funktioniert. Aber dies schien den Trick in .bashrc zu tun.

alias fix='reset; stty sane; tput rs1; clear; echo -e "\033c"'

und dann, wenn das Problem auftritt, geben Sie dies ein (obwohl Sie es wahrscheinlich nicht sehen können!)

(ctl-c, ctl-c, ctl-c)
fix

Vielen Dank an die vorherigen Einsender. Nebenbei bemerkt, der Grund, warum Ihr Terminal beim Anzeigen dieser ausführbaren Dateien (oder Keystores usw.) nicht mehr funktioniert, ist, dass diese Dateien häufig Binärsequenzen enthalten, die Steuercodes sind. Die Steuercodes können zufällige Aktionen ausführen, z. B. das Umschalten auf einen Grafikzeichensatz, das Festlegen der Vordergrund- und Hintergrundfarben usw.

Steven der Leicht Amüsierte
quelle
Gleiches ist passiert. Nichts hat für mich funktioniert, nur diese Kombination ...
TrueY
1
Ich rief meinesane
Qodeninja
4

tmuxBenutzer können möglicherweise alle diese Befehle an ihre Shell senden, das Zurücksetzen wird jedoch nicht in den Bereich erhöht tmux.

Neues tmux-Fenster erstellen: Notieren ctrl-B c tmux list-panes Sie sich in der Regel die Fensternummer, die Ihrer Meinung nach nicht korrekt angezeigt wird 0. Nennen wir esPPP

Wählen Sie das tmux-Fenster aus. Hierbei XXXhandelt es sich um die Fensternummer, die nicht unbedingt mit der Fensternummer übereinstimmt. ctrl-B XXX tmux send-key -R -t PPP

Sie werden dann alle Befehle in den anderen Antworten auf diese Frage sehen, die es in Ihre Shell geschafft haben, aber nicht funktioniert haben! Vielleicht tmux send-key -R -t PPPfunktioniert ein Blind , aber ich kann nicht testen.

Jack Wasey
quelle
3

Ich habe fast den gleichen Alias ​​wie im vorherigen Beitrag, mit einer kleinen Änderung ( tput resetanstelle von rs1) und einem hinzugefügten Befehl ( setterm -reset):

alias clr='echo -e "\033c" ; stty sane; setterm -reset; reset; tput reset; clear'
Cyril Chaboisseau
quelle
1

Nichts oben hat mir geholfen. Allerdings erwähnte Jack Wasey tmux, also rannte ich einfach weiter tmux, ging wieder und alles war wieder normal.

xdevs23
quelle
0

Zusätzlich zu anderen Antworten, die zum Zurücksetzen des Terminals raten, stellte ich fest, dass die Beschädigung nicht vermieden werden kann, wenn sie nicht ordnungsgemäß bewacht wird. Deshalb sende ich die Ausgabe besser an einen einfachen, textfreundlichen Konverter cat -v:

docker logs myjenkinscontainer 2>&1 | cat -v

Das Anzeigen und Bearbeiten von Binärdateien scheint mit hexdump -Cund möglich zu sein vi -R( :%!xxd -g1für eine Hex-Ansicht und :%!xxd -g1 -rzum Speichern von Hex-Änderungen).

Aal Ghez
quelle