我正在使用 bash shell 并希望将命令的输出通过管道openssl rand -base64 1000
传输到dd
诸如dd if={output of openssl} of="sample.txt bs=1G count=1
. 我想我可以使用变量,但我不确定如何最好地这样做。我想创建该文件的原因是我想要一个带有随机文本的 1GB 文件。
use*_*686 160
if=
不是必需的,你可以用管道dd
代替:
something... | dd of=sample.txt bs=1G count=1
Run Code Online (Sandbox Code Playgroud)
它在这里没有用,因为openssl rand
无论如何都需要指定字节数。所以你实际上并不需要dd
-这会起作用:
openssl rand -out sample.txt -base64 $(( 2**30 * 3/4 ))
Run Code Online (Sandbox Code Playgroud)
1 GB 通常是 2 30字节(尽管您可以使用10**9
10 9字节)。该* 3/4
部分考虑了 Base64 开销,使编码输出为 1 GB。
或者,您可以使用/dev/urandom
,但它会比 OpenSSL 慢一点:
dd if=/dev/urandom of=sample.txt bs=1G count=1
Run Code Online (Sandbox Code Playgroud)
就个人而言,我会使用bs=64M count=16
或类似的:
dd if=/dev/urandom of=sample.txt bs=64M count=16
Run Code Online (Sandbox Code Playgroud)
ann*_*neb 39
创建一个 1GB.bin 随机内容文件:
dd if=/dev/urandom of=1GB.bin bs=64M count=16 iflag=fullblock
Run Code Online (Sandbox Code Playgroud)
如果您只需要一个不用于安全相关事物(例如对某些事物进行基准测试)的随机文件,那么以下方法会明显更快:
truncate --size 1G foo
shred --iterations 1 foo
Run Code Online (Sandbox Code Playgroud)
它还更方便,因为您可以直接指定尺寸。
小智 5
由于您的目标是创建一个包含随机内容的 1GB 文件,因此您也可以使用yes
命令而不是dd
:
yes [text or string] | head -c [size of file] > [name of file]
Run Code Online (Sandbox Code Playgroud)
使用示例:
yes this is test file | head -c 100KB > test.file
Run Code Online (Sandbox Code Playgroud)