我在运行 red-hat 的服务器上有几个稀疏文件。我想查看这些文件而不必查看零字节。当我使用 less 命令查看这些文件时,我看到很多零字节所在的位置有“@^”。当我使用 cat 命令查看这些文件时,没有显示任何零字节。但是,当我使用 cat 命令并将其通过管道传输到 less 命令时,零字节又会显示出来。
为什么会发生这种情况?如何解决此问题,以便使用 less 查看文件,而不显示归零位?
答案1
我确信使用 时也会显示零字节cat
。你只是看不到它们,因为它们是……零字节,当输入零字节时,你的终端什么也不显示。
另一方面,文件是否真正稀疏存储取决于文件系统的实现细节。像less
和这样的工具cat
不知道(实际上不能知道) 并且不关心文件是否稀疏。如果文件恰好包含一连串零字节,那就这样吧。相反,它可能包含一连串字节,整个值为 1,这对他们来说都是一样的。
如果您想要过滤掉零字节并显示所有剩余的字节less
,只需使用过滤器删除这些字节:
tr -d \\000 < inputfile | less
答案2
cat 不显示零字节的原因是它没有转义任何内容并且您的终端根本没有打印零字节。
您可以删除零字节,以便在 less 中查看,如下所示:
cat $filename | tr -d "\\0" | less
将 $filename 替换为文件的名称。这不会修改文件(对于大型二进制文件可能需要一段时间)。