Разные результаты с 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
,