处理非常大的文件

处理非常大的文件

我有 2 个非常大的文件(27G 和 40G),它们是dd故障硬盘上的命令输出。我想比较前几个字节,看看 27G 字节是否是 40G 的开头/子字符串。

我想使用head命令。由于这些文件是二进制文件,因此我使用了-c参数:

# ls -ahl *.dd
-rw-r--r-- 1 root root 40G May 17 20:16 mac.dd
-rw-r--r-- 1 root root 27G May 18 09:47 mac2.dd

尝试获取 1K 原始数据:

# head -c1K mac.dd
(returns nothing)

尝试使用十六进制转储获取 1K:

# head -c1K mac.dd | hexdump
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
0000400
(end)

尝试使用十六进制转储获取 10K:

# head -c10K mac.dd | hexdump
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
0002800
(end)

虽然:

尝试获取 /bin/ls 上的 100 字节原始数据:

# head -c100 /bin/ls 
ELF>�H@@p�@8    @@@@@@�

尝试获取 /bin/ls 上的 100 字节十六进制数据:

# head -c100 /bin/ls | hexdump
0000000 457f 464c 0102 0001 0000 0000 0000 0000
0000010 0002 003e 0001 0000 4880 0040 0000 0000
0000020 0040 0000 0000 0000 b670 0001 0000 0000
0000030 0000 0000 0040 0038 0009 0040 001c 001b
0000040 0006 0000 0005 0000 0040 0000 0000 0000
0000050 0040 0040 0000 0000 0040 0040 0000 0000
0000060 01f8 0000                              
0000064

mac2.dd 上的结果完全相同,但输出似乎并不是我真正期望的,所以我不认为这意味着文件以相同的数据开头。/bin/ls我期望的是二进制。

我不明白这个dd文件的输出。有人能给我解释一下吗?

谢谢。

答案1

我正在回答我自己。

我发现这个帖子*hexdump 中的“ ”表示“与上一行相同”。这意味着我的整个dd文件都充满了\0字符。

我可以用以下方式明确表达:

head -c1000 mac.dd | hexdump -v
0000000 0000 0000 0000 0000 0000 0000 0000 0000
0000010 0000 0000 0000 0000 0000 0000 0000 0000
0000020 0000 0000 0000 0000 0000 0000 0000 0000
0000030 0000 0000 0000 0000 0000 0000 0000 0000
0000040 0000 0000 0000 0000 0000 0000 0000 0000
[...]

或者更简短地说:

# hexdump -v -n1000 mac.dd
0000000 0000 0000 0000 0000 0000 0000 0000 0000
0000010 0000 0000 0000 0000 0000 0000 0000 0000
0000020 0000 0000 0000 0000 0000 0000 0000 0000
0000030 0000 0000 0000 0000 0000 0000 0000 0000
0000040 0000 0000 0000 0000 0000 0000 0000 0000
[...]

所以现在我知道dd垃圾场里什么都没有。

感谢所有读到这里我的问题的人。

相关内容