![如何从命令行更改文件头?](https://linux22.com/image/900450/%E5%A6%82%E4%BD%95%E4%BB%8E%E5%91%BD%E4%BB%A4%E8%A1%8C%E6%9B%B4%E6%94%B9%E6%96%87%E4%BB%B6%E5%A4%B4%EF%BC%9F.png)
我曾见过并使用 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
,偏移量0
1):
$ 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
进一步阅读(此外常用命令行帮助):