Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bash: substitute some bytes in a binary file

Tags:

bash

dd

I have a binary file zero.bin which contains 10 bytes of 0x00, and a data file data.bin which contains 5 bytes of 0x01. I want to substitute the first 5 bytes of the zero.bin with data.bin. I have tried

dd if=data.bin of=zero.bin bs=1 count=5

but, the zero.bin is truncated, finally it becomes 5 bytes of 0x01. I want to keep the tailing 5 bytes of 0x00.

like image 752
Dagang Avatar asked Dec 28 '22 01:12

Dagang


2 Answers

No problem, just add conv=notrunc:

dd if=data.bin of=zero.bin bs=1 count=5 conv=notrunc
like image 138
Gordon Davisson Avatar answered Dec 29 '22 15:12

Gordon Davisson


You have half of the solution; do that into a temporary file tmp.bin instead of zero.bin, then

dd if=zero.bin bs=1 seek=5 skip=5 of=tmp.bin
mv zero.bin old.bin # paranoia
mv tmp.bin zero.bin
like image 25
geekosaur Avatar answered Dec 29 '22 16:12

geekosaur