Создайте тестовый файл с большим количеством нулевых байтов

25

Я знаю, как создать пустой файл:

touch /var/tmp/nullbytes

но как я могу создать файл размером 1 МБ, который содержит только нулевые байты в командной строке с помощью bash?

rubo77
источник
Относится к вопросу SU: superuser.com/q/609020/151431
terdon
1
+1. Интересный вопрос. Может кто-нибудь любезно уточнить, в каких случаях такой файл потребуется ..?
Кент Павар
1
Мне нужно было его для имитации аварии на chkrootkit: unix.stackexchange.com/questions/86866/...
rubo77

Ответы:

56

С GNU truncate:

truncate -s 1M nullbytes

(предполагая, nullbytesчто не существовало заранее) создаст файл размером 1 мегабайт. Это файл, который кажется заполненным нулями, но не занимает места на диске.

Без truncate, вы можете использовать ddвместо:

dd bs=1048576 seek=1 of=nullbytes count=0

(в некоторых ddреализациях вы можете заменить 1048576 на 1M)

Если вы предпочитаете выделять дисковое пространство в Linux и некоторых файловых системах, вы можете сделать следующее:

fallocate -l 1M nullbytes

Это выделяет пространство без фактической записи данных на диск (пространство зарезервировано, но помечено как неинициализированное).

dd < /dev/zero bs=1048576 count=1 > nullbytes

Фактически запишет нули на диск. Это наименее эффективно, но если вам нужно, чтобы ваши диски вращались при доступе к этому файлу, это то, что вам нужно.

Или способ @ mikeserv для ddсоздания байтов NUL:

dd bs=1048576 count=1 conv=sync,noerror 0> /dev/null > nullbytes

Альтернатива с GNU head, которая не требует указания размера блока (1М - это нормально, но, например, 10G - нет):

head -c 1M < /dev/zero > nullbytes

Или получить индикатор выполнения:

pv -Ss 1M < /dev/zero > nullbytes
Стефан Шазелас
источник
Не используйте truncateдля создания пустого файла, который будет использоваться в качестве тома подкачки ... это не будет работать! Используйте ddв этом случае вместо этого.
Элиас Пробст
1
@EliasProbst, вместо этого скопируйте ITYM из / dev / zero , не используйте разреженный файл . ddможет создавать разреженные файлы, как я показал.
Стефан Шазелас
2
Fallocate - лучший и быстрый способ создания, потому что он резервирует место и делает это быстро, но при этом ничего не пишет ( stackoverflow.com/questions/257844/… )
curratore
... или bs=1kx1k. Или <&1 dd bs=1kx1k conv=sync,noerror count="$rpt" | cat >fileдля буквальной записи на диск вещь. Но не на 100% от того, сколько эффективности может быть потеряно при форсировании ошибки чтения.
mikeserv