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文件。欢迎大家讨论。