我们是否可以为每台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