Я знаю, як створити порожній файл:
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%, скільки ефективності може бути втрачено у вимушенні помилки читання.