如何从命令行更改文件头?

如何从命令行更改文件头?

我曾见过并使用 GUI 十六进制编辑器bless来修改位图以匹配单独的文件类型(从 bmp 到 srf)。我的问题是如何使用命令行以编程方式修改文件头。哪些程序允许我从 shell 脚本更改文件头?

我查看过 synaptic 包管理器,但我对修改十六进制文件还不熟悉。位图算作二进制文件吗?如果这是软件推荐请求,可接受的答案是允许我在命令行中将特定值写入、覆盖或更改为特定位置(例如文件的前 16 个字节)。

答案1

xxd是一款非常强大的命令行十六进制编辑器,它允许您使用单个命令行更改二进制文件。您可以这样使用它:

xxd -r -p -o OFFSET <(echo NEW HEX SIGNATURE) FILE  # or
echo NEW HEX SIGNATURE | xxd -r -p -o OFFSET - FILE

让我们将01.png文件“转换”为 rar 格式(十六进制签名5261 7221 1A07 0000,偏移量01):

$ file 01.png 
01.png: PNG image data, 1280 x 1024, 8-bit/color RGB, non-interlaced
$ xxd 01.png | head -1
00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452  .PNG........IHDR
$ xxd -r -p -o 0 <(echo 5261 7221 1A07 0000) 01.png
$ file 01.png 
01.png: RAR archive data, vdb, os: MS-DOS
$ xxd 01.png | head -1
00000000: 5261 7221 1a07 0000 0000 000d 4948 4452  Rar!........IHDR

man xxd了解其他有用的选项和许多有用的例子。

1如果偏移量是可以省略0的选项-o,我在这里仅将其包括起来以显示其用法。

如果您更喜欢它,您也可以使用它来进行截断dd,但这似乎不必要地复杂:

dd conv=notrunc obs=1 if=<(xxd -r -p -o 0 <(echo 5261 7221 1A07 0000)) of=01.png

进一步阅读(此外常用命令行帮助):

相关内容