请推荐一个适用于Shell的十六进制编辑器。

你能推荐一个可以在命令行中运行的十六进制编辑器吗?我需要能够编辑内容,而不仅仅是查看。

1我认为你可以用Vim来做。 - Deepal
1http://stackoverflow.com/questions/5498197/need-a-good-hex-editor-for-linux - Ciro Santilli OurBigBook.com
9个回答

xxd

这个工具是我找到的用于这种类型任务最常见的(在最新的Ubuntu和macOS上默认可用)。如果需要,您可以使用-p删除右侧的ASCII可读部分,并可以使用-r函数将ASCII输入转换为二进制数据。以下是一些简单的示例用法:

使用ASCII视图转换为十六进制:

echo example | xxd

转换为十六进制转储(右侧无 ASCII 视图):
echo example | xxd -p

从十六进制转换回二进制数据:

echo 746573740a | xxd -p -r

你可以在shell脚本中更加复杂地使用它。我实际上曾经使用过这个方法和"dd"来扫描特定的序列并以预定义的方式修改它们,而且全部都是通过一个仅仅使用bash、dd和xxd的shell脚本完成的。实际上,你甚至不需要dd,因为你可以"seek"到特定位置并将所需的字节序列写入该位置。这种方法的最大优势就是易于编写脚本。

2xxd似乎默认安装在Ubuntu 16.04上,这太好了!谢谢! - GlenPeterson
还可以在MacOS上默认使用! - thom_nic
1echo命令会在行尾替换为换行符。为了避免这种情况,你可以像这样调用命令:echo -n example | xxd - Maxim Mandrik
4这个问题是在寻找一个编辑器,而不是一个查看器。xxd 是一个查看器。 - Baruch
@Baruch xxd可以将二进制转换为可读的十六进制,然后再转回来,因此配合普通文本编辑器使用,实际上可以满足一些十六进制编辑器的使用情况。 - Thomas
我使用了 xdd -r 将十六进制转储文件转换回二进制文件。 - Denis

还有DHEX

apt-cache show dhex

基于ncurses的十六进制编辑器,具有差异模式

这不仅仅是另一个十六进制编辑器:它还包括了一个差异模式,可以方便地比较两个二进制文件。由于它基于ncurses并且可定制主题,因此可以在任何系统和场景下运行。通过利用搜索日志,可以轻松跟踪文件的不同迭代中的更改。

如果你对vim或emacs不熟悉,这个编辑器似乎没有太大的学习曲线。


3Dhex的唯一缺点在我看来是它无法插入/删除字节。否则,它是一个非常好用的控制台十六进制编辑器。 - Nicholi
当我运行"dhex /path/to/big/file"时,我会得到"error opening inputfile /path/to/big/file"的错误提示。我很喜欢dhex,并且经常用它来查看普通大小的文件。 - sondra.kinsey
@sondra.kinsey :我刚刚在我的8GB RAM机器上尝试了一个20GB的文件,并没有出现问题。这是在Ubuntu 16.04 64位系统上,使用的是dhex 0.68-2build1 (amd64)版本。所以它应该可以正常工作。 - mivk
@mivk,我在Ubuntu 17.04上使用dhex_0.68-2build1_i386和3GB RAM尝试了一次,但对于一个44GB的文件来说并不成功。然而,hexedit和wxHexEditor却可以顺利打开同样的文件,没有任何问题。 - sondra.kinsey
@sondra.kinsey:使用32位版本的dhex处理超过4GB的文件可能会出现问题/错误? - mivk

你也可以使用vi/vim作为十六进制编辑器(它可以调用xxd)。
进入十六进制模式:
:%!xxd

退出十六进制模式:
:%!xxd -r

来源:使用vi作为十六进制编辑器

4我会小心处理这个。我发现 :%!xxd 会向文件中添加新字符(例如换行符)。 - Quazi Irfan
2@iamcreasy 这不是 xxd 完成的,而是 Vim 本身完成的。 - Ruslan
6不要忘记执行 :set binary 命令!否则,VIM很可能会在文件末尾添加一个换行符(CR/LF/CRLF),导致文件损坏(具体取决于你设置的格式,比如 set ff=[mac/unix/dos] )。这很可能会破坏可执行文件和数据二进制文件。实际上也确实如此。确保VIM处于二进制模式可以防止这种情况发生。 - Braden Best
文件未保存并出现转换错误。即使执行了:set binary命令后仍然如此。 - wick
我还会添加这个链接以获取更多信息:https://vi.stackexchange.com/questions/343/how-to-edit-binary-files-with-vim - Shayan

emacs有一个hexl-mode用于十六进制编辑。

5hexl-mode不适用于大文件或磁盘分区,因为它会将整个文件加载到emacs缓冲区中。如果你已经熟悉emacs,并且处理的是小文件,那么它非常适合使用。 - Peter Cordes
2@PeterCordes,如果要编辑磁盘,只需将您想要编辑的区域dd到一个文件中,并在emacs中打开该文件,然后再将其dd回去即可。 - psusi
8@psusi 问题是,我不应该去费那么大的劲来编辑一个文件。 - Cole Tobin
1@ColeJohnson,我们不是在谈论编辑一个文件;我们在谈论编辑整个原始硬盘。 - psusi
2@psusi 在我的Windows机器上,我可以使用HxD并像打开任何其他文件一样打开磁盘。 - Cole Tobin

这个非常简单易用:
sudo apt-get install hexcurse

2这是要超越的一个。其他答案看起来就像十六进制转储或不必要的vim技巧。十六进制编辑器应该有多个光标,一个在十六进制上,一个在输出表示上。 - DannyB

我知道这是一个老问题,但我对这里所有的答案都不满意。我正在寻找一款十六进制编辑器,它可以让我创建自己的二进制文件(也称为插入模式),并且可以处理非常大的文件。

我遇到了 tweak,它同时满足这两个要求,以及 OP 的要求。

Tweak支持插入模式(如果您正在编辑可执行文件或文件系统映像,则不是特别有用,但在其他文件格式(如PNG)中非常方便)。
在您正在编辑的文件内部进行剪切、复制和粘贴非常高效。无论您移动的数据块有多大 - 即使是CD映像的200Mb部分 - Tweak始终能够立即有效地执行操作。
Tweak支持输入文件的延迟加载:它不会立即将所有内容加载到内存中,而是简单地记住编辑缓冲区的哪些部分是输入文件的副本,并在需要时引用磁盘上的文件。只有当您真正需要它读取整个文件时,Tweak才需要花费较长时间。具有此属性的仅有两个操作:搜索和将修改后的文件保存到磁盘。其他所有操作都是即时完成的。

1嗯,一个准备在每次错误按键时修改缓冲区的程序,并且没有告诉用户如何使用(或退出!)这个程序。真恶心!结果发现"退出"命令和emacs一样...但第一次我用它没成功,所以在再次尝试之前,我试了所有我能想到的其他方法。几十年前我就放弃了emacs,但还记得最重要的命令:Ctrl-X,Ctrl-C。如果你喜欢emacs,你可能会喜欢tweak,但对我来说很别扭。如果我真的需要编辑,我可能会再试一次。从终端运行man tweak可以获得概述和命令列表。 - Lambart
@Lambart tweak的插入模式的整个意义就在于修改缓冲区,所以你的观点在那里并不真正有效。此外,在使用之前你应该先阅读一下手册页。不这样做然后抱怨它没有告诉你如何退出只是懒惰。 - Gogeta70

Bless Hex Editor 是一个二进制(十六进制)编辑器,目前提供以下功能:
- 高效编辑大型数据文件和块设备。 - 多级撤销 - 重做操作。 - 可自定义的数据视图。 - 屏幕上快速渲染数据。 - 多个标签页。 - 快速查找和替换操作。 - 数据转换表。 - 高级复制/粘贴功能。 - 在文件中突出显示选择模式匹配项。 - 基于插件的架构。 - 将数据导出为文本和HTML(使用插件可支持其他格式)。 - 对数据进行位运算。 - 全面的用户手册。
你可以从这里下载:http://packages.debian.org/sid/all/bless/download
要安装它,请参阅如何通过命令行安装.deb文件?
还需要更多信息吗?

11这个问题正在寻求一个命令行编辑器。 - psusi
1@psusi 不是的,原帖问的是一个可以在终端中运行的十六进制编辑器,而不是终端/命令行内部运行。安装后,可以使用bless命令从终端中运行它。 - Radu Rădeanu
37没有什么你不能在命令行中运行的;他不会提到它,除非他指的是命令行。 - psusi
其实我是在搜索“ubuntu十六进制查看器”,心里想着要找一个基于窗口的查看器,然后搜索引擎把我带到了这里。所以这个答案正是我所寻找的。 - kinORnirvana

试试hexed,它专为脚本和make文件而设计。

还有一个ht。安装它如下:
sudo apt-get install ht

然后通过键入 hte 运行它。

不过,我还没有尝试过在真正大的文件/分区上运行。