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