linux隨機
A. 如何獲得隨機安裝的linux
這個沒有隨機盤的,因為本身linux都是開源免費的,要安裝需要自己下載iso文件,製作啟動盤(光碟、U盤),然後自己安裝。
B. linux 隨機數
$RANDOM這個shell變數里存的就是一個隨機數
直接拿來用就行
echo $RANDOM
a=$RANDOM
每次產生的數都是隨機的,范圍0~32767
C. shell生成隨機數的幾種方法
(1)通過內部系統變數($RANDOM)
#!/bin/bash
function rand(){
min=$1
max=$(($2-$min+1))
num=$(($RANDOM+1000000000)) #增加一個10位的數再求余
echo $(($num%$max+$min))
}
rnd=$(rand 400000 500000)
echo $rnd
exit 0
(2)使用awk的隨機函數
awk 'BEGIN{srand();print rand()*1000000}' #可以加上if判斷,779644
(3)openssl rand產生隨機數
openssl rand 用於產生指定長度個bytes的隨機字元。-base64或-hex對隨機字元串進行base64編碼或用hex格式顯示。
openssl rand -base64 8 | md5sum | cut -c1-8 #八位字母和數字的組合,3a61800e
openssl rand -base64 8 | cksum | cut -c1-8 #八位數字,10784736
(4)通過時間獲得隨機數(date)
date +%s%N #生成19位數字,1287764807051101270
date +%s%N | cut -c6-13 #取八位數字,21793709
date +%s%N | md5sum | head -c 8 #八位字母和數字的組合,87022fda
D. Linux shell怎麼從20W數據中隨機的抽取2W
#!/bin/bash
sort -R a.txt | head -20000
##
sort隨機排序,然後取前20000,實現出來就是隨機抽取20000.
E. 如何在linux中用命令產生一個范圍內的隨機數
在shell中有一個環境變數RANDOM,它的范圍是0--32767
如果我們想要產生0-25范圍內的數,如下:
$RANDOM%26
用這個環境變數對26取模,就可以得到最小是0,最大是25的數了。
如果想得到1--68范圍內的數,可以這樣
$RANDOM%68+1,
前面可以得到最小為0,最大為67的隨機數,再加上1,很自然的就可以得到最大為1,最小為68的數了。
如果想得到6--87范圍內的數。可以這樣
$RANDOM%82+6,
前面可以得到最小為0,最大為81的隨機數,再加上6,很自然的就可以得到最大為87,最小為6的數了。
F. 在linux中,能生成真正的隨機數嗎如何生成
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i;
for(i=0;i< 10;i++)
{
printf(" %d ", rand());
}
printf(" ");
return 0;
}
試試這個。
G. Linux下的random()和srand(arg), rand()這兩個生成的隨機數有什麼區別。
首先我把這三個函數原型給你看一下
long random(void);
int rand(void);
void srand(unsigned seed);
random返回的是一個0到(2^31 - 1)的long類型整數
rand返回的是一個0到RAND_MAX的int類型整數
而你這里產生的隨機數序列是一樣的,這個很好解釋,因為你知道srand,但是你卻不知道還有一個srandom,這個函數是為random設置種子的,參數和srand一樣。
我的幫助手冊上甚至是這么寫的:
The random() and srandom() functions have (almost) the same calling sequence
and initialization properties as the rand(3) and srand(3) functions. The
difference is that rand(3) proces a much less random sequence -- in fact,
the low dozen bits generated by rand go through a cyclic pattern. All of
the bits generated by random() are usable. For example, `random()&01' will
proce a random binary value.
=============================
希望我的回答能給你帶來幫助
H. linux計算隨機產生的一百個數的和
下面的命令將隨機生成1-1000之間的100個隨機數,並求和輸出:
shuf -i 1-1000 -n 100|awk '{sum+=$1} END {print "Sum = ", sum}'
輸出:Sum = 52997
I. linux怎樣隨機生成uuid
命令:uuidgen
J. 如何在Linux系統通過命令行生成隨機文件
A、當你不需要關心隨機文件的內容,只需一個固定大小的文件
1、Solaris、Mac OS X等Unix系統中mkfile指令,可以產生指定大小的文件,而Linux上則沒有
例子:
mkfile -n 160g test1
2、Linux可以用dd指令,/dev/zero是一個特別的文件描述符可以通過它返回null值
例子:
dd if=/dev/zero of=test.file count=1024 bs=1024
產生count * bs位元組的文件,1M
此方法生成隨機文件的好處在於效率高(產生1G文件大概1s),創建的文件大小精確到位元組
壞處也有
使用null字元來填充文件內容,文件統計時沒有行(wc -l test.file為0)
B、當你不需要關心隨機文件的內容,但期望測試文件能有統計的行
將/dev/zero改為/dev/urandom,/dev/urandom是linux下的隨機數生成器
關於/dev/urandom跟/dev/random兩者的區別就不在此詳細討論,大概就是,前者是不受系統interrupts的限制,即使沒有足夠的interrupt它也能通過隨機數生成器產生足夠的輸出值;而後者如果用在dd上,它不能被ctrl+c或者kill -9中斷,如果ds的值較大時,產生的隨機值不足而長期佔用CPU。雖然說/dev/random產生的隨機數會更隨機些,但與dd混用還是建議用/dev/urandom效率更高。
缺點跟/dev/zero比當然是效率會更低些了,生成個100Mb的文件需要10秒左右,而且文件並沒有可讀的內容,一般的情況基本上是滿足了。
漏了說句,dd是linux與unix都支持的指令。
C、當你關心文件的隨機內容行數,而不關心內容是否有所重復
這里的思路就是找一個參照文件(比如說2行),將文件重新定向到新的文件,再mv覆蓋保存,外加一個for循環。(n為循環次數,產生的文件行為2^(n+1))
例子:假設先建立一個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左右已經是200W行,效率會下降地比較厲害
D、當你關心隨機文件的內容,而不想出現重復內容行情況
這種情況下系統的指令應該是不能滿足了,或者可以通過操作系統的指令寫一大串腳本也可以達到,但不建議這么做,因為可讀性和維護性考慮,你應該要引入Ruby或者Python類的腳本語言幫忙了
但還是要藉助些系統的東西來幫忙
思路:
/usr/share/dict/words裡面有記錄一些單詞,一共235886行,每行一個單詞
可以從裡面挑選一些作為文件的內容
加循環達到我們想要的隨機文件要求
舉例:
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為隨機文件需要的行數,Y為從words中讀取的單詞,雖說組合成一句的命令,還是可以讀懂的;從標准輸入中重復讀取Y個單詞,寫入到b列表中,然後再通過join空格連接內容寫入到標准輸出文件file.txt中
這樣基本很少會有重復的行了,而且生成的效率與其他方法對比還是可以的,10秒生成100Mb文件。歡迎大家討論。