Linux本身有一个生成随机数的设备,也就是/dev/random
或者/dev/urandom
。通过读取这个随机数设备我们就不需要安装任何的加密库就能得到随机数了,也能用它生成UUID字符串。
这里我所说的UUID是一种类似的随机字符串,并没有完全按照UUID的标准实现,但是只要修改一下也是可以轻松实现的。
生成UUID
先来看看生成所使用的shell命令
代码语言:txt复制cat /dev/urandom | od -x | head -1 | awk '{print $2$3"-"$4$5"-"$6$7"-"$8$9}'
命令解释
该命令通过管道连接,分别使用了cat
,od
,head
与awk
四个命令合作完成
cat 命令是用来读取`/dev/urandom'设备数据,读取出来的内容是二进制的数据格式,因此我们看到结果就是满屏的乱码
od 命令是将读取的二进制数据转换成其他进制的数据格式,这里使用od -x
是输出16进制的数据格式
通过od
转换后会发现数据是一行一行的输出的,每一行有9列,除了第一列,其他每一列都是由4个字符组成的,当然了因为是16进制的关系,字符最大也就是f
了。
head 命令是从od
输出的数据中读取前面一部分数据,head -1
就是只需要读取第一行数据内容就行,也可以改成读取其他行,不过没有什么意义,毕竟是随机数。
awk 命令就是将读取到随机数按照我们预设的格式输出,这里我是仿造UUID的数据格式分成4组,每组之间用-
连接,这里我不使用$1
也就是第一列作为随机数,那是因为第一列是序号,读取第一行的时候序号总是0000000
,因此完全没法当作随机数使用。
总结
这行命令能够在mac OS和Linux系统上运行,不同平台之间可能输出格式有所不同,只要awk命令部分稍加修改就可以。即使在嵌入式系统中也能正常使用,因为这四个命令默认是busybox
自带的。对于空间紧张的嵌入式系统来说,这个方法既简单又安全,几乎不占用额外的存储空间。