本文作者:念宗

shell随机码生成的几种方法

念宗 6年前 ( 2018-11-19 ) 4777 抢沙发
摘要: shell中有一个变量$RANDOM 能够生成随机的数字,范围是0~32767[2^15],大概率基本上是4~5位数字。1. $RANDOMshell中有一个变量$RAN...
shell中有一个变量$RANDOM 能够生成随机的数字,范围是0~32767[2^15],大概率基本上是4~5位数字。
1. $RANDOM
shell中有一个变量$RANDOM 能够生成随机的数字,范围是0~32767[2^15],大概率基本上是4~5位数字。
取0~99之间的数:echo "$((${RANDOM}%100))"
2. /dev/urandom
/dev/random存储系统当前运行的环境的实时数据,可以看作系统某时候的唯一值数据,提供优质随机数。一般使用不推荐
/dev/urandom是非阻塞的随机字符产生器,读取时不会产生阻塞,速度更快、安全性较差的随机数发生器。推荐
因为/dev/urandom生成有许多乱码,因此需要得到你想要的字符串必须加以处理再输出。比如你希望只输出字母和数字组合的随机字符串:
cat /dev/urandom|head -n10|tr -dc 'a-zA-Z0-9'        tr -dc 表示指定输出哪些字符
生成四位随机验证码[各种登录验证广泛使用]:
head /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 4
head /dev/urandom | tr -dc 'a-zA-Z0-9' | cut -c1-4
tr -dc 'a-zA-Z0-9'命令可以指定输出哪些字符种类
head /dev/urandom | md5sum | cut -c1-4        # 经过md5sum算法之后只有小写字母和数字两种字符
PS: 这里补充一下取几位字符的方法。head -c 4/tail -c 4/cut -c1-4,其中head和tail中的-c参数指的是字节数,而cut 里的-c才是指的字符数。如果都是ASCII码,一个字符就是一个字节,但是如果有非ASCII字符那就不相等了。
3. uuid
UUID码全称是通用唯一识别码 (Universally Unique Identifier, UUID),UUID格式是:包含32个16进制数字,以“-”连接号分为五段,形式为8-4-4-4-12的32个字符。linux的uuid码也是有内核提供的,在/proc/sys/kernel/random/uuid这个文件内。cat/proc/sys/kernel/random/uuid每次获取到的数据都会不同
也可以使用uuidgen工具
uuidgen | md5sum | cut -c 1-4        #输出小写字母和数字的组合
uuidgen | cksum | cut -c 1-4            #cksum表示只生成数字
4. mcookie
此工具生成的结果跟md5sum是一样的,小写字母跟数字的随机组合,32位。此工具来自包util-linux
就介绍这几种方法,记住一两种就可以了。记住下面两条就行
head /dev/urandom | tr -dc 'a-zA-Z0-9' | cut -c1-4
cksum表示只取整数


文章版权及转载声明:

作者:念宗本文地址:http://pyops.net/?id=7发布于 6年前 ( 2018-11-19 )
文章转载或复制请以超链接形式并注明出处运维之道

分享到: 网站分享代码

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

发表评论

快捷回复:

验证码

评论列表 (暂无评论,4777人围观)参与讨论

还没有评论,来说两句吧...