在将一堆二进制数据转储到终端后,为什么击键会变成疯狂的字符?

时间:2020-03-06 14:36:06  来源:igfitidea点击:

如果我做类似的事情:

$ cat /bin/ls

进入我的终端后,我了解了为什么我看到一堆二进制数据,它们代表ls可执行文件。但是之后,当我收到提示时,我自己的按键看起来很疯狂。我输入" a",我得到一条奇怪的对角线。我输入" b",我得到一个学位符号。

为什么会这样?

解决方案

我们将获得一些控制字符,这些控制字符被传递到外壳中,这些控制字符告诉外壳更改其行为并以不同的方式打印内容。

因为在二进制数据中某处有一些控制序列,终端将这些控制序列解释为请求,例如,更改用于绘制的字符集。我们可以将所有内容恢复为正常状态,如下所示:

reset

VT100几乎是用于终端窗口的标准命令集,但是有很多扩展。使用了一些控制字符集,键盘映射等。

当我们向这样的终端发送很多二进制字符时,很多设置都会改变。某些终端具有将设置"清除"回默认值的选项,但总的来说,它们根本不是针对二进制数据的。

VT100及其后续产品使Linux可以在一个简单的终端程序中以彩色文本(例如彩色的ls列表)进行打印。

-亚当

如果确实必须将二进制数据转储到终端,那么如果将其通过管道传递给less这样的寻呼机,则运气会更好,后者将以更具可读性的格式显示它。 (我们可能还对stringsod感兴趣,如果我们不熟悉二进制文件,它们都可能有用。

终端将尝试将抛出的二进制数据解释为控制代码,并在处理过程中弄乱自己,因此我们需要清理tty。

跑:

stty sane

而且情况应该恢复正常。即使在键入命令时看起来乱码,实际字符也已正确存储,并且当我们按回车键时,将调用该命令。

我们可以在此处找到有关stty命令的更多信息。

只需复制粘贴即可:

echo -e '7'

到重击,字符将恢复正常。如果我们不运行bash,请尝试以下击键:

<Ctrl-V><Ctrl-O><Enter>

并希望当我们抱怨找不到运行的<Ctrl-V> <Ctrl-O>或者<Ctrl-O>命令时,终端的状态将恢复正常。

将<Ctrl-N>或者字符14发送到终端时,命令切换到特殊的图形模式,在该模式下字母和数字被符号替换。 <Ctrl-O>或者字符15,可以使情况恢复正常。