溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么在Linux系統(tǒng)通過命令行生成隨機文件

發(fā)布時間:2021-11-08 15:47:26 來源:億速云 閱讀:443 作者:小新 欄目:云計算

這篇文章將為大家詳細(xì)講解有關(guān)怎么在Linux系統(tǒng)通過命令行生成隨機文件,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

1.當(dāng)你不需要關(guān)心隨機文件的內(nèi)容,只需一個固定大小的文件
  • Solaris、Mac OS X等Unix系統(tǒng)中mkfile指令,可以產(chǎn)生指定大小的文件,而Linux上則沒有
    例子:mkfile -n 160g test1

  • Linux可以用dd指令,/dev/zero是一個特別的文件描述符可以通過它返回null值
    例子:dd if=/dev/zero of=test.file count=1024 bs=1024
    產(chǎn)生count * bs字節(jié)的文件,1M
    此方法生成隨機文件的好處在于效率高(產(chǎn)生1G文件大概1s),創(chuàng)建的文件大小精確到字節(jié)
    壞處也有
    使用null字符來填充文件內(nèi)容,文件統(tǒng)計時沒有行(wc -l test.file為0)

2.當(dāng)你不需要關(guān)心隨機文件的內(nèi)容,但期望測試文件能有統(tǒng)計的行

/dev/zero改為/dev/urandom,/dev/urandom是linux下的隨機數(shù)生成器

關(guān)于/dev/urandom/dev/random兩者的區(qū)別就不在此詳細(xì)討論,大概就是,前者是不受系統(tǒng)interrupts的限制,即使沒有足夠的interrupt它也能通過隨機數(shù)生成器產(chǎn)生足夠的輸出值;而后者如果用在dd上,它不能被ctrl+c或者kill -9中斷,如果ds的值較大時,產(chǎn)生的隨機值不足而長期占用CPU。雖然說/dev/random產(chǎn)生的隨機數(shù)會更隨機些,但與dd混用還是建議用/dev/urandom效率更高。

缺點跟/dev/zero比當(dāng)然是效率會更低些了,生成個100Mb的文件需要10秒左右,而且文件并沒有可讀的內(nèi)容,一般的情況基本上是滿足了。

漏了說句,dd是linux與unix都支持的指令。

3.當(dāng)你關(guān)心文件的隨機內(nèi)容行數(shù),而不關(guān)心內(nèi)容是否有所重復(fù)

這里的思路就是找一個參照文件(比如說2行),將文件重新定向到新的文件,再mv覆蓋保存,外加一個for循環(huán)。(n為循環(huán)次數(shù),產(chǎn)生的文件行為2^(n+1))

例子:假設(shè)先建立一個file.txt文件,里面含有Hello 和 World兩行
for i in {1..n}; do cat file.txt file.txt > file2.txt && mv file2.txt file.txt; done

由于是階乘,n=20左右已經(jīng)是200W行,效率會下降地比較厲害

4.當(dāng)你關(guān)心隨機文件的內(nèi)容,而不想出現(xiàn)重復(fù)內(nèi)容行情況

這種情況下系統(tǒng)的指令應(yīng)該是不能滿足了,或者可以通過操作系統(tǒng)的指令寫一大串腳本也可以達到,但不建議這么做,因為可讀性和維護性考慮,你應(yīng)該要引入Ruby或者Python類的腳本語言幫忙了
但還是要借助些系統(tǒng)的東西來幫忙

思路:/usr/share/dict/words里面有記錄一些單詞,一共235886行,每行一個單詞
可以從里面挑選一些作為文件的內(nèi)容
加循環(huán)達到我們想要的隨機文件要求

舉例:ruby -e 'a=STDIN.readlines;X.times do; b=[];Y.times do; b<<a[rand(a.size)].chomp end; puts b.join(" ")' < /usr/share/dict/words > file.txt

X為隨機文件需要的行數(shù),Y為從words中讀取的單詞,雖說組合成一句的命令,還是可以讀懂的;從標(biāo)準(zhǔn)輸入中重復(fù)讀取Y個單詞,寫入到b列表中,然后再通過join空格連接內(nèi)容寫入到標(biāo)準(zhǔn)輸出文件file.txt中

這樣基本很少會有重復(fù)的行了,而且生成的效率與其他方法對比還是可以的,10秒生成100Mb文件。歡迎大家討論。

關(guān)于“怎么在Linux系統(tǒng)通過命令行生成隨機文件”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI