Я использую оболочку bash и хотел бы передать из команды openssl rand -base64 1000
команду dd
например dd if={output of openssl} of="sample.txt bs=1G count=1
.
Я думаю, что могу использовать переменные, но я не уверен, как лучше это сделать. Причина, по которой я хотел бы создать файл, состоит в том, что я хотел бы файл 1 Гб со случайным текстом.
4 ответа
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
Создайте файл случайного содержимого размером 1GB.bin:
dd if =/dev/urandom of = 1GB.bin bs = 64M count = 16 iflag = fullblock
Попробуйте этот скрипт.
#!/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"
Если вы хотите точно 1 ГБ, то вы можете использовать следующее:
openssl rand -out $ testfile -base64 792917038; truncate -s-1 $ testfile
Команда openssl делает файл ровно на 1 байт слишком большим. Команда truncate удаляет этот байт.