if=
не требуется, вы можете передать что-то dd
вместо этого:
something... | dd of=sample.txt bs=1G count=1
Это не было бы полезно здесь, так openssl rand
как в любом случае требует указания количества байтов. Так что вам на самом деле не нужно dd
- это будет работать:
openssl rand -out sample.txt -base64 $(( 2**30 * 3/4 ))
1 гигабайт обычно составляет 2 30 байтов (хотя вы можете использовать вместо 10**9
10 9 байтов). Эта * 3/4
часть учитывает накладные расходы Base64, делая кодированный вывод 1 ГБ.
В качестве альтернативы вы можете использовать /dev/urandom
, но это будет немного медленнее, чем OpenSSL:
dd if=/dev/urandom of=sample.txt bs=1G count=1
Лично я бы использовал bs=64M count=16
или подобное:
dd if=/dev/urandom of=sample.txt bs=64M count=16
/dev/urandom
двоичный файл, а не настоящий текстовый файл.dd if=/dev/urandom bs=750M count=1 | uuencode my_sample > sample.txt
.dd
читает 750 000 000 байтов/dev/urandom
и передает их вuuencode
.uuencode
кодирует свои входные данные в виде base64-кодирования (не обязательно совместимого с другими программами). Другими словами, это преобразует двоичные данные в текст. Я использовал 750M, потому что я доверял утверждению Grawity о том, что кодировка base64 расширяет данные на 33⅓%, поэтому вам нужно запросить ¾ столько двоичных данных, сколько вы хотите в своем текстовом файле.dd: warning: partial read (33554431 bytes); suggest iflag=fullblock
что создаст усеченный файл, поэтому добавьтеiflag=fullblock
флаг, тогда он работает.Создайте файл случайного содержимого размером 1GB.bin:
источник
iflag=fullblock
было необходимым дополнением по сравнению с другими ответами.Если вы хотите точно 1 ГБ, то вы можете использовать следующее:
openssl rand -out $ testfile -base64 792917038; truncate -s-1 $ testfile
Команда openssl делает файл ровно на 1 байт слишком большим. Команда усечения обрезает этот байт.
источник
-base64
. Удаление этого приведет к файлу с правильным размером.Попробуйте этот скрипт.
Этот скрипт может работать до тех пор, пока вы не возражаете против его использования
/dev/random
.источник
/dev/random
на это, если нет веской причины для этого./dev/urandom
намного дешевле.$var=(command)
недопустимый синтаксис в этом контексте.random=$(openssl rand -base64 1000)
. Хотя я хотел бы задать вопрос:bash
позволите ли вы присвоить переменной значение в гигабайтах? И даже если вы говоритеrandom=$(openssl rand -base64 1000)
, последующееif=$random
не имеет смысла.