我只是生成一个伪随机内容文件。
dd if=/dev/urandom bs=1M count=1 of=./filetone.txt
然后猫它
cat ./fileone.txt
问题是,完成此命令后,它会扰乱我的终端(它不会启动换行符,不会向我打印新提示符等...)。
我在这里不明白的是,这是关于我的终端仿真器,或者缺少一些元数据?
答案1
这是关于你的终端模拟器的。
二进制文件可以包含各种控制代码和转义代码,终端仿真器可能将其解释为执行各种操作的指令,例如清除屏幕 ( Ctrl-L
)、响铃 ( Ctrl-G
)、将前景色设置为红色 ( Esc[31m
),具体取决于终端仿真器的方式已配置(例如,视觉“铃声” - 屏幕闪烁 - 或可听铃声或根本没有铃声)以及它尝试模拟的终端类型(基于 VT100 或 ANSI 的终端现在几乎是默认/“标准”) ...但值得记住的是,其他终端存在并且仍在使用中,它们具有非常不同的控制代码集,它们可以理解)。
这些代码是应用程序告诉您的终端执行这些操作的方式 - 并且无法区分故意向终端发送此类命令的应用程序和恰好包含这些代码的随机二进制字符串。
顺便说一句,某些(大多数)版本具有诸如(是 GNU cat 中该选项的长格式)之类的cat
选项,可以将控制代码转换为以下形式:-v
--show-nonprinting
惯于被解释为终端的指令。
此选项对于帮助人们了解特定文件中是否包含某些控制字符也很有用,例如回车符 ( ^M
) 或制表符 ( ^I
) 或 ESC ( ^[
)。转换 ESC 字符还可以防止 vt100/ansi 或类似的 ESC 代码影响终端。