Dd

將 dd skip|seek 偏移量作為十六進制傳遞

  • November 27, 2019
# 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外,您還可以在任何數字後加上bto 表示“乘以 512”(0x200)和 withK表示“乘以 1024”(0x400)。在 GNU dd 中,您還可以使用後綴M, G, T, P, E,ZY分別表示乘以 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))

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