Разные результаты с cut и d d для бинарных файлов

Моя среда:

CentOS 6.5

Мне нужно извлечь часть файла ELF.

Когда я использую dd Команда следующим образом, у меня нет проблем:

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

С другой стороны, когда я использую cut Команда выглядит следующим образом, созданный файл имеет гораздо меньший размер, чем я ожидал:

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


Например, я создал a.out, скомпилировав следующий пример программы c с помощью gcc (v. 4.4.7):

#include <stdio.h>

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

Затем я выполняю dd а также cut команды, как указано выше, у меня есть файлы со следующими размерами:

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

Интересно, почему cut Команда уменьшает размер больше, чем я указал.

1 ответ

Решение

cut пропустит первые 16 байтов из каждой строки, тогда как dd не заботится о строках и пропускает только первые 16 байтов из всего файла.

Если файл содержит символы новой строки - что совершенно верно для двоичных файлов - тогда cut даст другой результат, чем dd,

Другие вопросы по тегам