cut 和 dd 在二进制文件上的不同结果

Different results with cut and dd on binary files

我的环境:

CentOS 6.5

我需要提取 ELF 文件的某些部分。

当我按如下方式使用dd命令时,没有问题:

$dd if=a.out of=a.cut1 bs=1 skip=16    

另一方面,当我按如下方式使用 cut 命令时,创建的文件比我预期的要小得多:

$cut --bytes=16- a.out > a.cut2


例如,我通过使用 gcc (v. 4.4.7) 编译以下示例 c 程序创建了 a.out:

#include <stdio.h>

int main()
{
    printf("Hello world\n");
}

然后,我执行上面的ddcut命令,我有以下大小的文件:

a.out - 6415 bytes
a.cut1 - 6399 bytes
a.cut2 - 6356 bytes

我想知道为什么 cut 命令减少的大小比我指定的多。

cut 将跳过每行 的前 16 个字节 dd 不关心行并仅跳过前 16 个字节整个文件。

如果文件包含换行符 - 这对二进制文件完全有效 - 那么 cut 将产生与 dd 不同的结果。