79

Я использую оболочку bash и хотел бы передать из команды openssl rand -base64 1000 команду dd например dd if={output of openssl} of="sample.txt bs=1G count=1 . Я думаю, что могу использовать переменные, но я не уверен, как лучше это сделать. Причина, по которой я хотел бы создать файл, состоит в том, что я хотел бы файл 1 Гб со случайным текстом.

4 ответа4

117

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
21

Создайте файл случайного содержимого размером 1GB.bin:

dd if =/dev/urandom of = 1GB.bin bs = 64M count = 16 iflag = fullblock

0

Попробуйте этот скрипт.

#!/bin/bash
openssl rand -base64 1000 | dd of=sample.txt bs=1G count=1

Этот скрипт может работать до тех пор, пока вы не возражаете против использования /dev/random .

#!/bin/bash
dd if=/dev/random of="sample.txt bs=1G count=1"
0

Если вы хотите точно 1 ГБ, то вы можете использовать следующее:

openssl rand -out $ testfile -base64 792917038; truncate -s-1 $ testfile

Команда openssl делает файл ровно на 1 байт слишком большим. Команда truncate удаляет этот байт.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .