Dd
將 dd skip|seek 偏移量作為十六進制傳遞
# dd if=2013-Aug-uptime.csv bs=1 count=1 skip=3 2> /dev/null d # dd if=2013-Aug-uptime.csv bs=1 count=1 skip=0x3 2> /dev/null f
為什麼第二個命令輸出不同的值?
是否可以將 skip|seek 偏移量
dd
作為十六進制值傳遞?
為什麼第二個命令輸出不同的值?
由於歷史原因,
dd
被認為x
是一個乘法運算符。所以0x3
被評估為0。是否可以將 skip|seek 偏移量作為十六進制值傳遞給 dd?
據我所知,不是直接的。除了使用 operator 進行乘法運算
x
外,您還可以在任何數字後加上b
to 表示“乘以 512”(0x200)和 withK
表示“乘以 1024”(0x400)。在 GNU dd 中,您還可以使用後綴M
,G
,T
,P
,E
,Z
並Y
分別表示乘以 2 的 20、30、40、50、60、70、80 或 90 次方,並且您可以使用大寫或小寫,除了為b
後綴。(還有許多其他可能的後綴。例如,EB
表示“乘以 10 18 ”和PiB
表示“乘以 2 50 ”。info coreutils "block size"
如果您安裝了 GNU,請參閱 了解更多資訊。)您可能會發現上述內容晦澀難懂、不合時宜且令人討厭,甚至到了荒謬的地步。不用擔心:你並不孤單。幸運的是,您可以完全忽略它並改用 shell 的算術替換(bash 和其他符合 Posix 的 shell 以及一些非 Posix 的 shell 都可以工作)。shell 可以理解十六進制數,並且它允許以正常方式編寫的各種算術運算符。您只需要用 包圍表達式
$((...))
:# dd if=2013-Aug-uptime.csv bs=1 count=$((0x2B * 1024)) skip=$((0x37))