Как я могу заполнить файл случайными данными?

124

Как я могу создать новый файл и заполнить его случайными данными на 1 гигабайт? Мне нужно это для тестирования некоторых программ.

Я бы предпочел использовать /dev/randomили /dev/urandom.

Стефан Ласевский
источник
74
Откройте viс vi -w randomfileи попросите кого-то, кто никогда не видел, viчтобы выйти из программы. ;)
Wildcard
1
Только что понравился выше комментарий от поста в Facebook! facebook.com/ProgrammersCreateLife/photos/a.241809332534619/…
Parixit

Ответы:

171

На большинстве офисов:

head -c 1G </dev/urandom >myfile

Если вы headне понимаете Gсуффикс, вы можете указать размер в байтах:

head -c 1073741824 </dev/urandom >myfile

Если вы headне понимаете эту -cопцию (это обычное дело, но не POSIX; у вас, вероятно, есть OpenBSD):

dd bs=1024 count=1048576 </dev/urandom >myfile

Не используйте /dev/randomна Linux, используйте /dev/urandom.

жилль
источник
1
Для чего это стоит, headне понимает -cна моей машине Solaris 10.
Рахму
2
Интересно, что headумеет читать /dev/urandom, но tailне умеет.
Стефан Ласевский
22
@StefanLasiewski tailсначала пытается перейти к концу входного файла, что занимает бесконечно (буквально).
Жиль
Ах, как «tail / dev / infinity», если бы было такое устройство.
Стефан Ласевский
3
@StefanLasiewski У вас /dev/zeroтакже есть, если вам не нравится разнообразие.
Жиль
35

Предполагая, что псевдослучайных данных достаточно, dd if=/dev/urandom of=target-file bs=1M count=1000будет делать то, что вы хотите.

dd (1) будет считывать блоки данных из входного файла и записывать их в выходной файл. Язык командной строки немного странный, но это один из тех действительно полезных инструментов, которые стоит освоить основам.

В данном случае ifэто входной файл, ofэто выходной файл, bsэто «размер блока» - и я использовал расширение GNU для более удобного задания размера. (Вы также можете использовать 1048576, если у вас ddнет расширения GNU.) count- это количество блоков для чтения ifи записи of.

/dev/urandomэто лучший выбор, чем /dev/randomпотому, что в Linux он будет прибегать к сильным псевдослучайным данным, а не блокироваться, когда истощаются подлинно случайные данные.

Вы также можете посмотреть на http://www.random.org/ как еще один способ получения случайных данных без необходимости их генерации самостоятельно.

Даниэль Питман
источник
3
Примечание - технические характеристики устройства, такие как 1M, доступны не в каждом стандартном ddварианте. Если ваша версия ddзатронута, используйте bs=1048576.
Крис Даун
4
В примере команда создаст файл из 1 000 000 блоков размером 1 МБ каждый. Это примерно 1 ТБ (1 М х 1 МБ), а не 1 ГБ (что будет 1 КБ 1 МБ). Кроме того, вплоть до определенного момента увеличение размера блока и уменьшение количества блоков приводит к большей пропускной способности для данного объема выходных данных.
CVn
2
while true;do head /dev/urandom | tr -dc A-Za-z0-9;done | head -c 5000K | tee  5000kb

Используется для генерации 5 МБ случайных символов. Если вам нужен другой размер, измените -cзначение заголовка, измените имя выходного файла, выполните и дождитесь завершения выполнения.

Джеймс Джитин
источник