随机,故名思议就是不按套路出牌的一种机制,确切的说不用人工特意的参与而得到的一种结果。生活中、工作中都需要人为随机事件。 因为这样可以节省很多脑细胞,同时也能制造许多意外。比如写程序就经常需要随机事件的参与,因为像我这么不专业的“程序猿”都经常需要随机事件,更何况专业的“攻城狮”对吧?

然而 & 而且。在计算机的世界里,所有的随机都是“伪随机”。但至少能满足我的需求,不需要我人为的去参与、去构造算法。

在Linux中,常用的随机相关的命令有 md5、shuf、$RANDOM、openssl等,当然如果你会写Python或者PHP,那么也是可以的,同样的像JavaScript也是可以的。

当然了,博主这里主要讲的是Linux的使用方法。


  • 随机数字
// Linux 有随机变量 $RANDOM,需要时直接调用即可
deyun@deyun-PC:~$ echo $RANDOM
8189

// 随机生成 0 - 9 的整数
deyun@deyun-PC:~$ echo $(( $RANDOM%10 ))
2
  • 随机字符串
  • MD5 用法:echo $RANDOM | md5sum
  • openssl 用法:openssl rand -hex 正整数
  • 代码示例
// shell md5 加密
deyun@deyun-PC:~$ echo $RANDOM | md5sum
7b44b03c542d4345a030c51c3ebe2c6e  -


// openssl 方法
deyun@deyun-PC:~$ openssl rand -hex 20
95dde213dcff463d871ccf2bc6ad3b406718f511

// openssl 生成的随机字符串长度是可控的, -hex 后面的数字就是字符串长度
// 利用这个特性,可以随机生成虚拟 MAC 地址
deyun@deyun-PC:~$ openssl rand -hex 6 | sed "s/\(..\)/&:/g;s/:$//"
b5:e8:25:29:78:17

// 当然了,用md5 也是可以做到虚拟mac的效果的
deyun@deyun-PC:~/Desktop$ echo $RANDOM | md5sum | sed "s/\(..\)/&:/g" | cut -c 1-17
65:86:d8:20:5e:09
  • shuf 随机用法
  • 随机读取文件中的某一行
deyun@deyun-PC:~/Desktop$ cat macList.txt 
be:d1:23:fd:7e:37
8d:0d:cd:43:c1:82
d2:88:55:75:85:48
d5:f7:de:32:68:db
49:6e:9c:5e:e1:d3
f0:a1:eb:48:c5:e5
deyun@deyun-PC:~/Desktop$ shuf -n 1 macList.txt 
d5:f7:de:32:68:db
  • 生成随机数

// 随机生成 1-9 的数字(其实也就是打乱顺序) deyun@deyun-PC:/Desktop$ shuf -i 1-9 8 7 5 2 1 9 4 6 3 // 以整行方式输出打乱后的数字 deyun@deyun-PC:/Desktop$ shuf -i 1-9 | tr '\n' ' ' 3 1 5 6 9 4 2 8 7



----------


## 说明
* MD5 的值是唯一且不可逆的,但由于截取的只是其中连续的N长度字符串,难免小概率重复,规避这个问题可以用` 字符串+时间 `然后再计算` MD5值` 。
* 当然了,上述方法也不能 `100%` 保证唯一性,最稳妥的办法就是写一个 `function` 进行查重,又或者先把结果存储到一个数组中,新元素进行查重后再写入数组,最后打印数组;
* 如果你和我一样都是新手,那么我有必要说下随机字符串的简单应用场景:比如接收用户上传的文件一般后台都需要重命名(` 安全考虑 `),那么这个随机字符串就是最好的方法;又或者随机生成用户默认密码等也是不错的选择;
* 我这里说讲的命令,一般的发行版都是默认自带的,这样可以更好的实现跨平台性;

「 希望熬过一切,星光璀璨 」

流年小站,感谢有您的支持

「 道路坎坷,感谢有您 ---来自 anYun 的感谢 」

使用微信扫描二维码完成支付

2021-10-22
已阅:15340 人/次

 
 
 
分享是一种美德 x
打开微信,右上角的"+"选择"扫一扫"
使用“扫一扫”将博文分享至朋友圈吧

本文由 anYun 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=3oibnoh9lo6cs

还不快抢沙发

添加新评论

Myssl安全认证