如何从 bash 查看二进制文件?

Posted

技术标签:

【中文标题】如何从 bash 查看二进制文件?【英文标题】:How to view files in binary from bash? 【发布时间】:2010-12-18 10:18:14 【问题描述】:

我想查看当前目录中文件的内容,但从命令行以二进制形式显示。我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

xxd 处理二进制和十六进制。

斌:

xxd -b file

十六进制:

xxd file

【讨论】:

sudo xxd /dev/diskn | less 现在是我的新宠。 ...它预装在 Mac OS X 和 Linux 上。 与“hexdump”相比,它的优势在于它还可以在侧面显示 ASCII 格式,从而更容易识别我要查看的位置。 并将输出转储到 ASCII 文本文件以供阅读和搜索:xxd file > hex_dump_of_file.txt 补充:xxd 不仅适用于 linux shell。我认为它带有vim。我在 windows 上安装了 vim,我发现我也可以在 windows 中使用 xxd。【参考方案2】:
hexdump -C yourfile.bin

当然,除非你想编辑它。大多数 linux 发行版默认都有hexdump(但显然不是全部)。

【讨论】:

我喜欢这个想法,但和其他建议一样,它只输出十六进制。显然这比二进制要紧凑得多,但我正在处理非常小的文件,所以首选二进制。十六进制是我能够查看文件的唯一方式吗? 那么文件有多小?任何超过几个字节的东西,无论如何你都会开始失去理智。十六进制对大多数事情来说更有意义。如果您对十六进制感到不舒服,只需找到您感兴趣的字节并使用十六进制计算器进行转换。 我需要确保我的文件正确压缩并且我不知道它应该是什么样的十六进制(每个单元的大小是 7 位),所以我必须处理手写数字。 你有什么方法可以从二进制文件中查看文本吗?我可以获得 HEX 代码,但我应该如何将其解码为普通的人类文本? hexdump -C data.bin 的输出怎么样 | hexdump -C【参考方案3】:
vi your_filename

点击esc

输入 :%!xxd 可查看十六进制字符串,输入 n :%!xxd -r 可返回正常编辑。

【讨论】:

我发现:%!xxd 在我的文件中添加了不需要的字符,即新行?【参考方案4】:

作为后备,总是有od -xc filename

【讨论】:

【参考方案5】:

如果你想打开二进制文件(在 CentOS 7 中):

strings <binary_filename>

【讨论】:

IMO 这是所有答案中最简单最优雅的。我希望我可以多次投票。 最佳答案。这会将二进制文件转换为 JSON 文件。不是所有的英雄都穿斗篷,这是真的 它不会将其转换为 JSON 文件。它只在对象中找到可打印的字符串并显示给您。它根本不会将二进制文件转换为文本或任何格式。【参考方案6】:

sudo apt-get install bless

Bless 是一个 GUI 工具,可以查看、编辑、搜索等等。 它的重量很轻。

【讨论】:

是的。我发现这比 Vim 更容易。 小心,它带有单声道【参考方案7】:
$ echo -n 'Hello world!' | hd
00000000  48 65 6c 6c 6f 20 77 6f  72 6c 64 21              |Hello world!|
0000000c

【讨论】:

hd 是“hexdump -C”的别名...? @JAR.JAR.beans 确实如此。我使用它是因为它更容易记住。 因为它默认存在于某些系统(Debian)上。【参考方案8】:

见Improved Hex editing in the Vim Tips Wiki。

【讨论】:

【参考方案9】:

您可以打开 emacs(在终端模式下,例如使用 emacs -nw),然后使用 Hexl 模式:M-x hexl-mode

https://www.gnu.org/software/emacs/manual/html_node/emacs/Editing-Binary-Files.html

【讨论】:

【参考方案10】:

Hexyl 格式很好:sudo apt install hexyl

【讨论】:

【参考方案11】:

要将文件转换为二进制代码(十六进制表示),我们说:

xxd filename                                         #

例如:

xxd hello.c                                          #

要查看二进制文件中的所有内容和代码,我们可以使用readelfobjdumphexdump 等命令。...

例如,如果我们想查看所有转换二进制文件(可执行文件、共享库、目标文件)的所有内容,我们说:

hexdump binaryfilename

例如

hexdump /bin/bash

但 readelf 是分析 elf(可执行和链接格式)文件的最佳实用程序。所以如果我们说:

readelf -a /bin/bash

二进制文件 bash 中的所有内容都会显示给我们,我们也可以为 readelf 提供不同的标志来分别查看 elf 文件的所有部分和头,例如,如果我们只想查看我们的 elf 头说:

readelf -h /bin/bash

用于读取文件的所有段:

readelf -l /bin/bash

用于读取文件的所有部分:

readelf -S /bin/sh

但再次作为总结,对于读取像“hello.c”这样的普通文件和像linux中路径/bin/bash中的bash这样的二进制文件,我们说:

xxd hello.c

readelf -a /bin/bash

【讨论】:

【参考方案12】:

要以十六进制格式在一行中获取所有输出:

xxd -p yourfile.bin | tr -d '\n'

【讨论】:

【参考方案13】:

你可以使用 hexdump 二进制文件

sudo apt-get install hexdump

hexdump -C yourfile.bin

【讨论】:

这只是***.com/a/1765339/12573645的副本

以上是关于如何从 bash 查看二进制文件?的主要内容,如果未能解决你的问题,请参考以下文章

从包装二进制文件调用脚本时未设置 Bash 变量

如何使用 Bash 编写二进制文件?

bash 脚本如何在不使用 uudecode 的情况下写出二进制文件?

bash: ./eclipse: 无法执行二进制文件

如何在bash中创建仅包含十六进制字符而不包含空格的文件的十六进制转储?

linux每日命令(18):whereis命令