題 如何在Linux中創建1GB隨機文件?


我正在使用bash shell,並希望管道輸出命令 openssl rand -base64 1000 對命令 dd 如 dd if={output of openssl} of="sample.txt bs=1G count=1。 我想我可以使用變量,但我不確定如何最好地使用變量。我想創建該文件的原因是因為我想要一個帶有隨機文本的1GB文件。


74
2017-09-06 18:03


起源




答案:


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三十 字節(雖然你可以使用 10**9 109 而是字節)。該 * 3/4 部分帳戶的Base64開銷,使得 編碼 輸出1 GB。

或者,你可以使用 /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

109
2017-09-06 18:17



我發布了一個關於壓縮大文件的問題 superuser.com/questions/467697/... 並被告知使用 /dev/urandom 生成二進製文件而不是真正的文本文件。 - PeanutsMonkey
@PeanutsMonkey:對;你會需要類似的東西 dd if=/dev/urandom bs=750M count=1 | uuencode my_sample > sample.txt。 - Scott
@PeanutsMonkey:沒有單一的“真實世界場景”,有些場景可能會處理千兆字節的文本,其他情況 - 使用千兆字節的JPEG或千兆字節的編譯軟件......如果你想要大量的文本,請下載一個 維基百科轉儲 例如。 - grawity
@PeanutsMonkey:The dd 從中讀取750,000,000個字節 /dev/urandom 把它們管成 uuencode。 uuencode 將其輸入編碼為base64編碼形式(不一定與其他程序一致)。換句話說,這會將二進制數據轉換為文本。我使用了750M因為我信任grawity的聲明,即base64編碼將數據擴展了33%,所以你需要在文本文件中要求¾盡可能多的二進制數據。 - Scott
@leighmcc:僅供參考:使用 > 重定向確實 不 使寫入通過bash - 這相當於讓程序直接打開文件。 - grawity


創建1GB.bin隨機內容文件:

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


19
2018-05-21 14:52



為了我, iflag=fullblock 與其他答案相比是必要的補充。 - dojuba


試試這個腳本。

#!/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
2017-09-06 18:12



我不建議浪費 /dev/random 除非有充分的理由這樣做。 /dev/urandom 便宜得多。 - Ansgar Wiechers
也, $var=(command) 在此上下文中是無效的語法。 - grawity
@grawity - 當你說它無效時,你的意思是什麼? - PeanutsMonkey
我的意思是 - 這是不正確的。 - grawity
@grawity,@ PeanutsMonkey:他寫了一個錯字;他的意思是 random=$(openssl rand -base64 1000)。雖然我會質疑是否 bash 可以讓你為變量分配一個千兆字節的值。即使你說的話 random=$(openssl rand -base64 1000),隨後 if=$random 沒有意義。 - Scott


如果您想要1GB,那麼您可以使用以下內容:

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

openssl命令使文件恰好1個字節太大。 truncate命令將該字節關閉。


0
2017-07-06 21:48