Я знаю, как создать пустой файл:
touch /var/tmp/nullbytes
но как я могу создать файл размером 1 МБ, который содержит только нулевые байты в командной строке с помощью bash?
Я знаю, как создать пустой файл:
touch /var/tmp/nullbytes
но как я могу создать файл размером 1 МБ, который содержит только нулевые байты в командной строке с помощью bash?
Ответы:
С 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в этом случае вместо этого.
ddможет создавать разреженные файлы, как я показал.
bs=1kx1k. Или <&1 dd bs=1kx1k conv=sync,noerror count="$rpt" | cat >fileдля буквальной записи на диск вещь. Но не на 100% от того, сколько эффективности может быть потеряно при форсировании ошибки чтения.