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


25

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

touch /var/tmp/nullbytes

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


Относится к вопросу 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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.