Я знаю, як створити порожній файл:
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для створення порожнього файлу, який буде використовуватися як об'єм swap ... це не буде працювати! Використовуйте ddв цьому випадку замість цього.
ddможна створити розріджені файли, як я показав.
bs=1kx1k. Або <&1 dd bs=1kx1k conv=sync,noerror count="$rpt" | cat >fileдля буквального запису на диск. Однак не на 100%, скільки ефективності може бути втрачено у вимушенні помилки читання.