處理非常大的文件

處理非常大的文件

我有 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)

嘗試使用 hexdump 取得 1K:

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

嘗試使用 hexdump 取得 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垃圾場裡什麼都沒有。

感謝任何讀到這裡我的問題的人。

相關內容