显示二进制文件后修复终端


122

我曾尝试cat使用可执行文件命令:

cat /bin/ls

现在,我在此终端(Linux控制台)上看不到任何单词。我该如何解决?


4
如果我理解正确,可能是您的端子已拧紧;尝试输入reset
Patrice Levesque 2013年


实际上,我认为这里的答案更好,因此,以另一种方式更好地标记为dup
ilkkachu

Answers:


165

例如,通常在Unix / Linux终端(Bash)中,您将使用命令morelesscat查看文件。当您执行此操作并且不希望查看该文件(例如/bin/ls)时,您将获得如下输出:

                二进制输出的ss

这里发生的是您只是试图查看程序文件。我上面提到过,不是一个标准的查看器可以查看的可执行文件。

方法#1-重置

要解决此问题,您可以执行以下操作:

  1. 按下Control + C几次(Ctrl+ C
  2. 输入命令reset并按回车键

通常,这应该使您的终端回到更正常的模式。我还要提到一件事,当您执行上述步骤时,请在终端中将它们盲目键入。因此,只需确保输入正确即可。

方法2-敏锐的精神

如@sendmoreinfo的评论中所建议,如果以上命令不起作用,则可以使用以下命令来代替您:

$ stty sane
$ tput rs1

确定文件的类型

顺便说一句,如果您遇到一个文件并且不确定它是否会弄乱您的终端,则可以使用命令检查该文件,该命令file将报告该文件的类型。

例如,/bin/ls该文件显示以下输出:

$ 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

15
reset不能100%治愈绝症。stty sane依次尝试tput rs1
sendmoreinfo 2013年

@sendmoreinfo-谢谢,我已将您的建议添加到答案中。我曾经用过,stty sane但是从来没有tput
slm

1
实际上,我需要对此进行更多研究。reset应该发送rs1字符串。一个很好的测试(至少对于xterm来说)是使光标不可见,并查看reset是否将其恢复。
sendmoreinfo 2013年

4
reset在我的情况下工作
code_monk

1
clear也适用于轻度病例。
纳文

36

我有一个机会,其中没有一个惯用的招数,reset或者stty sane,工作(后无意调用print上一个python字节组)。我在此有用的博客上列出的方法2取得了成功。

此后,我创建了一个最有用的别名:

alias fix='echo -e "\033c"'

2
我知道这很旧,但这是上面对我有用的唯一答案!谢谢
jredd '16

echo -e "\033c"帮助我清理了字符混乱的SSH登录终端会话,该会话在混合后被混淆了cat /etc/localtime
专业备份

这与OpenBSD一起使用,而其他所有人都没有。
DHW

1
通过对screen(1)的进一步实验,发现所有会话(-D)都被强制解除了分配,然后向底层终端屏幕发出了reset命令,从而解决了该问题。可能还需要重命名损坏的窗口名称,这可能会在终端上重新显示相同的二进制数据,从而导致其损坏(然后再次重置)。
数学

1
使用vi之后,通过SOL连接到远程linux主机的控制台后,我的终端大小(LINES)减少了大约一半。远程会话的LINES = 24,而我的本地MAC会话的LINES = 51。echo -e“ \ 033c”为我工作,但是我尝试过的其他修复都没有做过(“ stty sane”,tput rs1,tput sgr0,reset)。
标记

7

没有一个先前的答案对我有用。但这似乎可以解决.bashrc中的问题:

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

然后在出现问题时键入此内容(即使您可能看不到它!)

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

非常感谢先前的提交者。另外,作为一个附带说明,当您显示那些可执行文件(或密钥库等)时,您的终端出现混乱的原因是,这些文件通常包含作为控制代码的二进制序列。控制代码可能会做一些随机的事情,例如切换到图形字符集,将前景色和背景色设置为相同的东西等。


同样发生了。没什么对我
有用

1
我打电话给我sane
qodeninja

4

tmux用户也许可以将所有这些命令发送到他们的shell,但是重置不会提升到tmux窗格中。

制作新的tmux窗口: ctrl-B c tmux list-panes 请注意您认为很闷的窗格编号0。叫它吧PPP

选择tmux窗口,其中XXX是borked的窗口号,不一定与窗格号相同。 ctrl-B XXX tmux send-key -R -t PPP

然后,您将在此问题的其他答案中看到所有命令,这些命令已放入您的shell中,但没有起作用!也许盲人tmux send-key -R -t PPP会起作用,但我无法测试。


3

我的别名与上一篇文章几乎相同,只是做了一个小改动(tput reset而不是rs1)和一个添加的命令(setterm -reset):

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

1

上方没有任何帮助。但是,杰克·沃西(Jack Wasey)提到了tmux,所以我就跑了tmux,再次退出,一切恢复了正常。


0

除了建议如何重置终端的其他答案外,我认为除非有适当的保护,否则无法避免损坏。所以我最好将输出发送到一个简单的文本友好转换器cat -v

docker logs myjenkinscontainer 2>&1 | cat -v

使用hexdump -Cvi -R(和)(:%!xxd -g1对于十六进制视图和:%!xxd -g1 -r保存十六进制更改)似乎可以查看和编辑二进制文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.