Linux
垃圾字元“^@”顯示使用 vim 但使用 cat 它顯示正確的數據
我正在嘗試將 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.file
PATTERN PATTERN PATTERN^@^@^@^@
編輯:
現在,我知道顯示“^@”字元的原因是什麼了。我的輸入文件大小小於 32 KB。但是仍然懷疑為什麼“^@”會被填充,因為它可能是任何其他值?有什麼具體原因嗎?
從評論中可以清楚地看出該文件
x.file
小於 32768 字節(32 KiB)。這意味著當dd
被要求將 32 KiB 寫入時/dev/vv/<vv_id>
,它將無法從文件中全部複製,並且 32 KiB 的最後一位將保持未寫入狀態。然後,這個未初始化的數據將通過
y.file
第二個dd
操作複製到,這就是您在編輯器中打開該文件時看到的內容。這
^@
是編輯器顯示空字節的方式。通過閱讀dd
手冊,我不清楚這是第一次寫入設備的內容,還是第一次呼叫dd
之前設備上已經存在的垃圾數據。dd