随机,故名思议就是不按套路出牌的一种机制,确切的说不用人工特意的参与而得到的一种结果。生活中、工作中都需要人为随机事件。 因为这样可以节省很多脑细胞,同时也能制造许多意外。比如写程序就经常需要随机事件的参与,因为像我这么不专业的“程序猿”都经常需要随机事件,更何况专业的“攻城狮”对吧?
然而 & 而且。在计算机的世界里,所有的随机都是“伪随机”。但至少能满足我的需求,不需要我人为的去参与、去构造算法。
在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` 进行查重,又或者先把结果存储到一个数组中,新元素进行查重后再写入数组,最后打印数组;
* 如果你和我一样都是新手,那么我有必要说下随机字符串的简单应用场景:比如接收用户上传的文件一般后台都需要重命名(` 安全考虑 `),那么这个随机字符串就是最好的方法;又或者随机生成用户默认密码等也是不错的选择;
* 我这里说讲的命令,一般的发行版都是默认自带的,这样可以更好的实现跨平台性;
还不快抢沙发