2012-02-22 43 views
2

我有一个运行在很多机器上的Perl脚本,脚本会将一些数据存储到MySQL数据库中。我需要知道数据的来源。如何在Linux或Perl中为每台机器创建唯一标识符?

我不能使用主机名,因为有些机器的主机名是'localhost'。

ifconfig给出随机设备和IP,一些eth0,一些eth1,一些其他设备名称。

是否有任何其他方式为每台机器创建唯一标识符?每次运行Perl脚本时,这个唯一标识符都不会改变。

+0

哪些常见的,可靠的,独特的信息/硬件/这些机器有什么?他们运行哪个操作系统?没有这些信息,你得到的答案就会像随机废话一样。 – 2012-02-22 12:09:13

回答

0

dmidecode的输出提供了许多硬件UUID &您的perl脚本可以利用的序列号。引述手册页的dmidecode:

dmidecode is a tool for dumping a computer's DMI (some say SMBIOS) table 
    contents in a human-readable format. This table contains a description 
    of the system's hardware components, as well as other useful 
    pieces of information such as serial numbers and BIOS revision. 
1

您可以尝试uuid。

UUID - DCE兼容通用唯一标识符库

here

+0

嗨,每次我运行uuidgen,输出差异。 – everbox 2012-02-22 09:29:55

-1

采取MAC地址并修改它?

ipconfig -a 

arp 

和分析?

+0

如果在同一台机器上的Windows和Linux下的MAC地址是否相同,如果烧录到ROM中? (还有一些MAC地址是本地分配的 - 有一点说明了这一点,这些地址不可能是全球唯一的) – Flexo 2012-02-22 09:36:40

+1

是的 - 它在windows和linux中是一样的 - 但我没有弄清它的相关性。然而,第二点很重要,虽然我不确定人们是否经常这样做(因为网卡的MAC地址已经是全球唯一的),但是网卡的MAC地址确实可以被分配。另外我假设你说的是网卡的ROM,因为机器的ROM与讨论无关[它不存储MAC地址] – Fakrudeen 2012-02-22 10:07:05

0

您应该使用hostid,此外以前调用genhostid将生成并存储机器的唯一ID(所以它不会在每次调用时更改)。

+0

'hostid'(GNU)似乎与主机的真实ip有很高的相关性,并且它不是POSIX(参见[GNU libc - hostid](http://www.gnu.org/software/libc/manual/html_node/Host-Identification.html))。 – Ouki 2012-02-22 10:18:08

0

我发现最好的方法是产生一个随机ID第一次文件,一旦文件存在使用该文件的内容。我把它放在/ etc的某处,但没关系。

这是宽容的系统配置更改,但需要一些额外的工作来远程询问。

相关问题