Answers:
是的,如果将其通过管道传输到另一个进程或将其保存到文件中,这是安全的。如果让二进制标准输出打印到终端,则可能会出现“怪异”现象,因为它可能包含(随机)转义序列,这些转义序列会暂时使终端显示混乱。
reset
并按Enter进行修复。
reset<enter>
实际上不会键入终端所看到的那个字符序列……
stty sane; tput rs1
,命令序列将在某些极端情况下无法解决问题时reset
发挥作用。除了Bakuriu提到的这种情况外,还可能包括终端线/列的宽度,或者我猜想与串行通信相关的设置(波特率/奇偶校验)。
使用诸如head
或的命令的主要问题tail
是它们是面向行的,而二进制文件不是。如果它们中确实包含换行符,则通常不使用它们来表示行尾,如果包含换行符,则它们可能只是诸如程序消息或数据字段之类的字符串的一部分。
如果以任何方式构造数据,那么在选择分割点时都必须考虑到这一点,这样就不会破坏中间的结构。
如果您知道文件的结构,则可以使用以下命令
dd -if input-file -of output-file ...
提供仅从特定(增量)偏移量开始复制这么多特定大小数据块的选项到文件中。
看起来split
@egmont提到的命令将为您自动执行此过程,但是默认情况下它似乎是面向行的,因此您必须指定其他选项,例如--bytes count
告诉它文件的每个部分应多大是。
附带说明一下,如果您不知道文件中有什么内容,但怀疑它至少包含一些有意义的文本数据,则此strings
命令是一种很好的方式,它可以让您先查看要处理的内容。
strings -n 6 file | less
将查找所有至少六个字符长的可打印字符,并将其显示在寻呼机中,以免它们在终端上飞过。使用比默认的4个字符大一点的数字有助于消除微小的数据片段,这些数据片段恰好是可打印的,但在文件中并未以这种方式使用。
如果以后需要使用二进制编辑器(例如)更详细地探索文件,则将hexedit
具有一些标志性作用,指出可能会发现有趣的地方。
strings
有一个选项- t x
将在每个打印的字符串之前以十六进制的偏移量进入文件,(o表示八进制,d表示十进制),因此您知道以后可以在哪里找到它。当您必须逐个字符地查看它们时,即使是非常短的文件也要处理很多。
split
命令。