Linux

垃圾字元“^@”顯示使用 vim 但使用 cat 它顯示正確的數據

  • April 3, 2018

我正在嘗試將 x.file 數據複製到大小為 32 KB 的虛擬卷中,並嘗試從同一卷再次讀取 32 KB 到 y.file。它在使用 cat y.file 時顯示預期的輸出,但每當我使用 vim/vi 查看內容時,它都會顯示附加字元“^@”。

將數據寫入虛擬卷的命令。

dd if=/tmp/x.file of=/dev/vv/<vv_id> seek=0 bs=16K count=2

從虛擬卷讀取數據的命令。

dd of=/tmp/y.file if=/dev/vv/<vv_id> seek=0 bs=16K count=2

x.file 包含一系列模式,大小為 24 KB。

例如:

如果 x.file PATTERN PATTERN PATTERN

然後 y.filePATTERN PATTERN PATTERN^@^@^@^@

編輯:

現在,我知道顯示“^@”字元的原因是什麼了。我的輸入文件大小小於 32 KB。但是仍然懷疑為什麼“^@”會被填充,因為它可能是任何其他值?有什麼具體原因嗎?

從評論中可以清楚地看出該文件x.file小於 32768 字節(32 KiB)。這意味著當dd被要求將 32 KiB 寫入時/dev/vv/<vv_id>,它將無法從文件中全部複製,並且 32 KiB 的最後一位將保持未寫入狀態。

然後,這個未初始化的數據將通過y.file第二個dd操作複製到,這就是您在編輯器中打開該文件時看到的內容。

^@是編輯器顯示空字節的方式。通過閱讀dd手冊,我不清楚這是第一次寫入設備的內容,還是第一次呼叫dd之前設備上已經存在的垃圾數據。dd

引用自:https://unix.stackexchange.com/questions/435037