Linux 的随机那些事儿

  • A+
所属分类:系统文档

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

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

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

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


  • 随机数字

    // Linux 有随机变量 $RANDOM,需要时直接调用即可
    [email protected]:~$ echo $RANDOM
    8189
    
    // 随机生成 0 - 9 的整数
    [email protected]:~$ echo $(( $RANDOM%10 ))
    2
  • 随机字符串

    • MD5 用法:echo $RANDOM | md5sum
    • openssl 用法:openssl rand -hex 正整数
    • 代码示例

      // shell md5 加密
      [email protected]:~$ echo $RANDOM | md5sum
      7b44b03c542d4345a030c51c3ebe2c6e  -
      
      
      // openssl 方法
      [email protected]:~$ openssl rand -hex 20
      95dde213dcff463d871ccf2bc6ad3b406718f511
      
      // openssl 生成的随机字符串长度是可控的, -hex 后面的数字就是字符串长度
      // 利用这个特性,可以随机生成虚拟 MAC 地址
      [email protected]:~$ openssl rand -hex 6 | sed "s/\(..\)/&:/g;s/:$//"
      b5:e8:25:29:78:17
      
      // 当然了,用md5 也是可以做到虚拟mac的效果的
      [email protected]:~/Desktop$ echo $RANDOM | md5sum | sed "s/\(..\)/&:/g" | cut -c 1-17
      65:86:d8:20:5e:09
  • shuf 随机用法

    • 随机读取文件中的某一行

      [email protected]:~/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
      [email protected]:~/Desktop$ shuf -n 1 macList.txt 
      d5:f7:de:32:68:db
    • 生成随机数

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

说明

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

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: