上海天局信息技术有限责任公司

网站首页 > 天局论坛 > Linux

Linux 生成UUID

2021-09-05 12:39:50 上海天局信息技术有限责任公司 已读

我们是否可以为每台PC生成一个唯一的ID,例如uuuidgen,但除非有硬件更改,否则它永远不会改变?我正在考虑合并CPUID和MACADDR并将它们哈希以生成一致的ID,但我不知道如何使用bash脚本解析它们,我知道如何从中获取CPUID

dmidecode -t 4 | grep ID

ifconfig | grep ether

然后我需要组合这些十六进制字符串并使用sha1或md5散列它们以创建固定长度的十六进制字符串.

我该如何解析输出?

解决方法:

这两个怎么样:

$sudo dmidecode -t 4 | grep ID | sed 's/.*ID://;s/ //g'

52060201FBFBEBBF

$ifconfig | grep eth1 | awk '{print $NF}' | sed 's/://g'

0126c9da2c38

然后,您可以将它们组合并哈希:

$echo $(sudo dmidecode -t 4 | grep ID | sed 's/.*ID://;s/ //g') \

$(ifconfig | grep eth1 | awk '{print $NF}' | sed 's/://g') | sha256sum

59603d5e9957c23e7099c80bf137db19144cbb24efeeadfbd090f89a5f64041f -

要删除尾随破折号,请再添加一个管道:

$echo $(sudo dmidecode -t 4 | grep ID | sed 's/.*ID://;s/ //g') \

$(ifconfig | grep eth1 | awk '{print $NF}' | sed 's/://g') | sha256sum |

awk '{print $1}'

59603d5e9957c23e7099c80bf137db19144cbb24efeeadfbd090f89a5f64041f

正如@mikeserv指出in his answer,引导之间的接口名称can change.这意味着今天的eth0明天可能是eth1,所以如果你为eth0 grep,你可能会在不同的靴子上获得不同的MAC地址.我的系统不是这样的,所以我无法真正测试,但可能的解决方案是:

>在ifconfig的输出中为HWaddr grep,但保留所有这些,而不仅仅是对应于特定NIC的那个.例如,在我的系统上,我有:

$ifconfig | grep HWaddr

eth1 Link encap:Ethernet HWaddr 00:24:a9:bd:2c:28

wlan0 Link encap:Ethernet HWaddr c4:16:19:4f:ac:g5

通过抓取两个MAC地址并通过sha256sum传递它们,您应该能够获得一个唯一且稳定的名称,无论哪个NIC被称为:

$echo $(sudo dmidecode -t 4 | grep ID | sed 's/.*ID://;s/ //g') \

$(ifconfig | grep -oP 'HWaddr \K.*' | sed 's/://g') | sha256sum |

awk '{print $1}'

662f0036cba13c2ddcf11acebf087ebe1b5e4044603d534dab60d32813adc1a5

请注意,散列与上面的散列不同,因为我将ifconfig返回的两个MAC地址传递给sha256sum.

>根据您的硬盘驱动器的UUID创建一个哈希:

$blkid | grep -oP 'UUID="\K[^"]+' | sha256sum | awk '{print $1}'

162296a587c45fbf807bb7e43bda08f84c56651737243eb4a1a32ae974d6d7f4

标签:linux,uuid,hardware,shell-script,hashsum

来源: https://codeday.me/bug/20190808/1625023.html


分享到:
Powered by MetInfo 5.3.17 ©2008-2022 www.metinfo.cn