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

sev*_*ine 1 linux cut binaryfiles dd elf

我的环境:

CentOS 6.5
Run Code Online (Sandbox Code Playgroud)

我需要提取ELF文件的一些部分.

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

$dd if=a.out of=a.cut1 bs=1 skip=16    
Run Code Online (Sandbox Code Playgroud)

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

$cut --bytes=16- a.out > a.cut2
Run Code Online (Sandbox Code Playgroud)


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

#include <stdio.h>

int main()
{
    printf("Hello world\n");
}
Run Code Online (Sandbox Code Playgroud)

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

a.out - 6415 bytes
a.cut1 - 6399 bytes
a.cut2 - 6356 bytes
Run Code Online (Sandbox Code Playgroud)

我想知道为什么cut命令减小了比我指定的更多的大小.

sca*_*cai 5

cut将跳过第16个字节每行,而dd并不关心整个文件中的线条和跳跃仅仅是前16个字节.

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