linux rand(linux手机版app)

大家好,今天来为大家分享linux rand的一些知识点,和linux手机版app的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

rand()随机函数产生的值的范围

cplusplus中有这样的介绍:

rand函数产生一个0到RAND_MAX的伪随机数,这里的RAND_MAX因不同的实现而异,但RAND_MAX至少为32767。(比如,MSVC中通常为0x7fff,即32767,而Linux平台下GCC中RAND_MAX通常会远远大于这个值)

有一些其他编程语言的rand函数确实是产生一个[0.0, 1.0)之间的浮点数。比如MATLAB。

在C中,rand()% 32会产生一个[0, 32)之间的伪随机数,那么rand()% 32+ 1的取值区间实际上是[1, 33)。

要产生[0, 32)(开区间)之间伪随机数:rand()% 32即可。

扩展资料:

注意:如果要使用函数RAND()生成一随机数,并且使之不随单元格计算而改变,可以在编辑栏中输入“=RAND()”,保持编辑状态,然后按F9,将公式永久性地改为随机数。

不过,这样只能一个一个的永久性更改,如果数字比较多,也可以全部选择之后,另外选择一个合适的位置粘贴,粘贴的方法是点击右键,选择“选择性粘贴”,然后选择“数值”,即可将之前复制的随机数公式产生的数值(而不是公式)复制下来。

参考资料来源:百度百科-随机函数

Linux命令行生成随机密码的方法有哪些

生成一个随机密码

对于下面的任何一种方法,你可以通过简单的修改来生成特定长度的密码,或者只使用其输出结果的前N位。希望你正在使用一些类似于LastPass的密码管理器,这样你就不用自己记住这些随机生成的密码了。

1.这种方法使用SHA算法来加密日期,并输出结果的前32个字符:

Shell

1

date+%s| sha256sum| base64| head-c 32; echo

2.这种方法使用内嵌的/dev/urandom,并过滤掉那些日常不怎么使用的字符。这里也只输出结果的前32个字符:

Shell

1

</dev/urandom tr-dc _A-Z-a-z-0-9| head-c${1:-32};echo;

3.这种方法使用openssl的随机函数。如果你的系统也许没有安装openssl,你可以尝试其它九种方法或自己安装openssl。

Shell

1

openssl rand-base64 32

4.这种方法类似于之前的urandom,但它是反向工作的。Bash的功能是非常强大的!

1

tr-cd'[:alnum:]'</dev/urandom| fold-w30| head-n1

5.这种方法使用string命令,它从一个文件中输出可打印的字符串:

Shell

1

strings/dev/urandom| grep-o'[[:alnum:]]'| head-n 30| tr-d'\n'; echo

6.这是使用urandom的一个更简单的版本:

Shell

1

</dev/urandom tr-dc _A-Z-a-z-0-9| head-c6

7.这种方法使用非常有用的dd命令:

Shell

1

dd if=/dev/urandom bs=1 count=32 2>/dev/null| base64-w 0| rev| cut-b 2-| rev

8.你甚至可以生成一个只用左手便可以输入的密码:

Shell

1

</dev/urandom tr-dc'12345!@#$%qwertQWERTasdfgASDFGzxcvbZXCVB'| head-c8; echo""

9.如果每次都使用上述某种方法,那更好的办法是将它保存为函数。如果这样做了,那么在首次运行命令之后,你便可以在任何时间只使用randpw就可以生成随机密码。或许你可以把它保存到你的~/.bashrc文件里面。

Shell

1

randpw(){</dev/urandom tr-dc _A-Z-a-z-0-9| head-c${1:-16};echo;}

10.最后这种生成随机密码的方法是最简单的。它同样也可以在安装了Cygwin的Windows下面运行。在Mac OS X下或许也可以运行。我敢肯定会有人抱怨这种方法生成的密码没有其它方法来的随机。但实际上如果你使用它生成的全部字符串作为密码,那这个密码就足够随机了。

Shell

1

date| md5sum

是的,这种方法也极其好记。

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

阅读剩余
THE END