标签: binary

如何使用bash脚本读取二进制文件内容?

我想读取一个字符,然后是一个固定长度的字符串(该字符串在文件中不是空终止的,其长度由前面的字符给出)。

如何在 bash 脚本中执行此操作?如何定义字符串变量以便我可以对其进行一些后期处理?

bash text-processing binary

16
推荐指数
2
解决办法
6万
查看次数

如何在 bash 管道中处理原始二进制数据?

我有一个 bash 函数,它将文件作为参数,验证文件是否存在,然后将来自 stdin 的任何内容写入文件。天真的解决方案适用于文本,但我遇到了任意二进制数据的问题。

echo -n '' >| "$file" #Truncate the file
while read lines
do  # Is there a better way to do this? I would like one...
    echo $lines >> "$file"
done
Run Code Online (Sandbox Code Playgroud)

shell bash binary

16
推荐指数
2
解决办法
3万
查看次数

`dd` 有替代方案吗?

除了dd应该使用哪些工具来读取和写入截断、查找和跳过的文件之外,还有哪些工具?dd的命令行选项看起来既不方便又陌生,我不喜欢在缓慢但精确的搜索模式 ( bs=1) 和快速但不灵活的模式(bs=4k或其他)之间进行选择。

是否有更现代的工具可以从一个文件(或管道、套接字或 dev)中的位置 31337 读取 555 个字节,并将它们写入另一个文件的位置 128205(使用块 512+43),无论是否截断?

utilities dd binary files

16
推荐指数
2
解决办法
2万
查看次数

vim 可以只显示 ASCII 字符,而将其他字节视为二进制数据吗?

我已经知道vim -b,但是,根据所使用的语言环境,它将多字节字符(如 UTF-8)显示为单个字母。

vim无论字符集如何,我如何要求只显示 ASCII 可打印字符,并将其余字符视为二进制数据?

vim character-encoding ascii unicode binary

16
推荐指数
1
解决办法
2万
查看次数

用于二进制处理的类似 shell 的环境

这个问题之前问过我几次,现在是为了 回答在/sf/ask/69540411/ 中给出的Bash Answers 中的标准输入中循环二进制数据块的问题 -as-perl-is-to-text也不令人满意。

我正在寻找一种专门用于处理二进制文件 I/O 的脚本环境。我知道我可以使用一种成熟的编程语言(c/Python/...),但它们有巨大的初始化和编码开销(c 中的分配和 fread/fwrite,Python 中的位串......)更不用说它们不太适合编写脚本(从中调用其他应用程序)。Perl 的unpack功能、面向字符串的操作和愚蠢的语法也好不到哪里去。

类似于od,但作为一种语言。

我的期望:

  1. 使用单个开关/命令设置或更改字节序。
  2. 请求类型的简单的规范(像延伸的bashread varint32 varfloat var等)。
  3. 通过管道处理二进制文件,跳过指定数量的字节。
  4. 我们习惯的标准脚本流控制(for/if/...)。

我想像检查 ASCII 文件一样轻松和深入地处理原始数据(摄影、科学数据、未知和记录不佳的格式)。我现在正在使用c,但它不是临时脚本的最佳选择,并且不能进行交互。

有人知道这样的工具吗?请不要使用可点击的 GUI 软件,它需要通过 ssh、其他脚本等工作。“不存在”是一个可以接受但令人沮丧的答案。

scripting binary files

15
推荐指数
1
解决办法
1114
查看次数

如何解释二进制文件的八进制或十六进制转储?

二进制文件有字符串和一些数字,如果我这样做 od -c filenamestrings filename,我可以正确地看到字符串。但是,数字呢?它们采用某种奇怪的格式。

做完后的文字od -c filename是这样的:

0000000 036 \0 032 004 SD \0 \0 \0 \0 seq 1
0000020 \0 \0 \0 \0 \0 \0 \0 \0 \t \0 ó 002 3 001
0000040 & \0 032 \f O 2 006 \0 \0 \0 osfus 1
0000060 ó 002 3 001 ÿ \r \0 \0 \t \0 \0 @ 3 ×
0000100 233 º 004 \0 é 003 \0 \0 & \0 032 …

od binary hexdump

14
推荐指数
2
解决办法
3万
查看次数

无法在 NixOS 中执行二进制文件 - 没有这样的文件或目录

我尝试在运行 NixOS 的 VM 上安装当前的 oracle jre。

现在发生以下情况:

[michas@cc:~]$ tar xvzf jre-7u40-linux-x64.tar.gz |grep bin/java
jre1.7.0_40/bin/javaws
jre1.7.0_40/bin/java_vm
jre1.7.0_40/bin/java

[michas@cc:~]$ ls -l ./jre1.7.0_40/bin/java
-rwxr-xr-x 1 michas nogroup 7750 Aug 27 09:17 ./jre1.7.0_40/bin/java

[michas@cc:~]$ ./jre1.7.0_40/bin/java
bash: ./jre1.7.0_40/bin/java: No such file or directory
Run Code Online (Sandbox Code Playgroud)

跆拳道?命名文件显然在那里。到底是怎么回事?

尝试进一步分析:

[michas@cc:~]$ strace ./jre1.7.0_40/bin/java
execve("./jre1.7.0_40/bin/java", ["./jre1.7.0_40/bin/java"], [/* 53 vars */]) = -1 ENOENT (No such file or directory)
write(2, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory
) = 40
exit_group(1)                           = ?
+++ …
Run Code Online (Sandbox Code Playgroud)

linux dynamic-linking binary nixos patchelf

14
推荐指数
1
解决办法
5018
查看次数

如何将图像文件存储在 bash 变量中?

在我使用以下命令后,

pngString="$(cat example.png)"    
echo -n "$pngString" > tmp.png
Run Code Online (Sandbox Code Playgroud)

我无法将 tmp.png 作为 PNG 文件打开。当我$pngString用来存储图像文件时,可能会丢失一些信息。

所以问题是:如何在 bash 脚本中使用变量存储完整的图像信息?

bash binary images cat variable

14
推荐指数
1
解决办法
9300
查看次数

什么是二进制包?如何构建它们?

我想获取有关二进制包的详细信息并在 linux 上运行它们。我正在运行 Debian 基础(Ubuntu/Linux mint)Linux 操作系统。

  1. 如何从源代码构建二进制包?我可以直接下载应用程序(如 firefox 等)和游戏(如 boswars 等)的二进制包吗?
  2. 我运行一些“xyz.linux.run”格式的直接包这些包是什么?它们是否独立于依赖项?还是预先构建的二进制包?
  3. 如何在linux上直接通过“xyz.linux.run”来构建可以在linux操作系统上运行的它们。
  4. 二进制包和 deb 包有什么区别?

compiling packaging package-management binary deb

14
推荐指数
2
解决办法
5万
查看次数

两个类似的大原始二进制文件的差异

假设abc我的本地计算机上有一个 4 GB 的文件。我已通过 SFTP 将其上传到远程服务器,花了几个小时。

现在我在本地稍微修改了该文件(最大可能为 50 MB,但不是此文件中的连续字节),并将其保存到abc2. 我还将原始文件保存在abc本地计算机上。

如何计算的二进制差异abcabc2

应用:

  • 我只能向patch远程服务器发送一个文件(可能最大 100MB),而不是重新上传整个abc2文件(又需要几个小时!),并且仅abc2在远程服务器上重新创建。abcpatch

  • 在本地,与其浪费 8 GB 来备份abcand abc2,我只能保存abc+ patch,因此只需要 < 4100 MB。

这该怎么做?

PS:对于文本,我知道diff,但在这里我正在寻找适用于任何原始二进制格式的东西,它可以是 zip 文件或可执行文件,甚至其他类型的文件。

PS2:如果可能,我不想使用rsync;我知道它可以以有效的方式复制两台计算机之间的更改(不重新发送未更改的数据),但在这里我真的想要一个patch文件,如果我同时拥有abcpatch.

diff patch binary files

14
推荐指数
1
解决办法
6975
查看次数