linux內(nèi)核自1.3.30版本以來實(shí)現(xiàn)了一個隨機(jī)數(shù)產(chǎn)生器,從理論上說它能產(chǎn)生真正的隨機(jī)數(shù),該隨機(jī)數(shù)產(chǎn)生器是從設(shè)備驅(qū)動收集電路上的環(huán)境噪音放入熵池,它的實(shí)現(xiàn)代碼在drivers/char/random.c中,自己去看吧
網(wǎng)站建設(shè)、網(wǎng)站制作的開發(fā),更需要了解用戶,從用戶角度來建設(shè)網(wǎng)站,獲得較好的用戶體驗(yàn)。成都創(chuàng)新互聯(lián)公司多年互聯(lián)網(wǎng)經(jīng)驗(yàn),見的多,溝通容易、能幫助客戶提出的運(yùn)營建議。作為成都一家網(wǎng)絡(luò)公司,打造的就是網(wǎng)站建設(shè)產(chǎn)品直銷的概念。選擇成都創(chuàng)新互聯(lián)公司,不只是建站,我們把建站作為產(chǎn)品,不斷的更新、完善,讓每位來訪用戶感受到浩方產(chǎn)品的價值服務(wù)。
下面的命令將隨機(jī)生成1-1000之間的100個隨機(jī)數(shù),并求和輸出:
shuf -i 1-1000 -n 100|awk '{sum+=$1} END {print "Sum = ", sum}'
輸出:Sum =? 52997
A、當(dāng)你不需要關(guān)心隨機(jī)文件的內(nèi)容,只需一個固定大小的文件
1、Solaris、Mac OS X等Unix系統(tǒng)中mkfile指令,可以產(chǎn)生指定大小的文件,而Linux上則沒有
例子:
mkfile -n 160g test1
2、Linux可以用dd指令,/dev/zero是一個特別的文件描述符可以通過它返回null值
例子:
dd if=/dev/zero of=test.file count=1024 bs=1024
產(chǎn)生count * bs字節(jié)的文件,1M
此方法生成隨機(jī)文件的好處在于效率高(產(chǎn)生1G文件大概1s),創(chuàng)建的文件大小精確到字節(jié)
壞處也有
使用null字符來填充文件內(nèi)容,文件統(tǒng)計時沒有行(wc -l test.file為0)
B、當(dāng)你不需要關(guān)心隨機(jī)文件的內(nèi)容,但期望測試文件能有統(tǒng)計的行
將/dev/zero改為/dev/urandom,/dev/urandom是linux下的隨機(jī)數(shù)生成器
關(guān)于/dev/urandom跟/dev/random兩者的區(qū)別就不在此詳細(xì)討論,大概就是,前者是不受系統(tǒng)interrupts的限制,即使沒有足夠的interrupt它也能通過隨機(jī)數(shù)生成器產(chǎn)生足夠的輸出值;而后者如果用在dd上,它不能被ctrl+c或者kill -9中斷,如果ds的值較大時,產(chǎn)生的隨機(jī)值不足而長期占用CPU。雖然說/dev/random產(chǎn)生的隨機(jī)數(shù)會更隨機(jī)些,但與dd混用還是建議用/dev/urandom效率更高。
缺點(diǎn)跟/dev/zero比當(dāng)然是效率會更低些了,生成個100Mb的文件需要10秒左右,而且文件并沒有可讀的內(nèi)容,一般的情況基本上是滿足了。
漏了說句,dd是linux與unix都支持的指令。
C、當(dāng)你關(guān)心文件的隨機(jī)內(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行,效率會下降地比較厲害
D、當(dāng)你關(guān)心隨機(jī)文件的內(nèi)容,而不想出現(xiàn)重復(fù)內(nèi)容行情況
這種情況下系統(tǒng)的指令應(yīng)該是不能滿足了,或者可以通過操作系統(tǒng)的指令寫一大串腳本也可以達(dá)到,但不建議這么做,因?yàn)榭勺x性和維護(hù)性考慮,你應(yīng)該要引入Ruby或者Python類的腳本語言幫忙了
但還是要借助些系統(tǒng)的東西來幫忙
思路:
/usr/share/dict/words里面有記錄一些單詞,一共235886行,每行一個單詞
可以從里面挑選一些作為文件的內(nèi)容
加循環(huán)達(dá)到我們想要的隨機(jī)文件要求
舉例:
ruby -e 'a=STDIN.readlines;X.times do; b=[];Y.times do; ba[rand(a.size)].chomp end; puts b.join(" ")' /usr/share/dict/words file.txt
X為隨機(jī)文件需要的行數(shù),Y為從words中讀取的單詞,雖說組合成一句的命令,還是可以讀懂的;從標(biāo)準(zhǔn)輸入中重復(fù)讀取Y個單詞,寫入到b列表中,然后再通過join空格連接內(nèi)容寫入到標(biāo)準(zhǔn)輸出文件file.txt中
這樣基本很少會有重復(fù)的行了,而且生成的效率與其他方法對比還是可以的,10秒生成100Mb文件。歡迎大家討論。
本文題目:linux命令隨機(jī)值 linux 隨機(jī)字符串
網(wǎng)頁路徑:http://jinyejixie.com/article36/ddojspg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、云服務(wù)器、網(wǎng)站維護(hù)、微信公眾號、面包屑導(dǎo)航、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)