获取系统的唯一标识符(不是MAC地址)?

4
出于某些原因,我需要获取Linux系统的唯一标识符,在系统重新启动时不会更改(但在用户更换可命名数量的硬件或格式化硬盘时可能会更改)。
以下解决方案不可行
- 使用MAC地址(这已经被使用,但在某些系统上失败,因为没有网络接口) - 使用blkid获取分区的UUID - 这个命令在所有系统上都不可用,并且很难自动找到要使用的分区
那么...还有其他想法可以唯一地识别系统吗?
谢谢!

这个可能会有所帮助,特别是hdparm对我来说很有效。 - Ali Naci Erdem
2
这是一个链接,指向维基百科上的《忒修斯之船》条目。 - Marc B
2
请问您需要这个做什么?也许有其他解决方案,不需要使用这样的唯一标识符。 - Tim Čas
硬盘驱动器和主板都有序列号。但是,除非是为特定设备制造的设备,否则主板序列号并不可靠。许多Web服务器使用浏览器提供的HTTP请求头信息作为一种基于概率的标识符,因此可能可以使用各种输入来生成标识符。标识符的格式有任何限制吗? - Richard Chambers
你应该使用CPU ID和/或主板ID。 - Synxis
显示剩余2条评论
1个回答

2

我认为你的问题的答案将取决于你认为系统中哪些是"永久性"部分。 假设你决定从应用程序的角度来看,硬盘分区是半永久的,则可以计算/proc/partitions内容的某种哈希值。

在bash中,可以使用以下类似的命令:

#!/bin/sh
cat /proc/partitions |sha1sum|cut "-d " -f1

使用 #!/bin/sh 会更加便携且可能更快(例如,在 Debian 中它使用更快的 Dash shell)。在我的看法中,通常没有理由使用 Bash 进行脚本编写。 - Tim Čas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接