Linux 上的便携式 UUID

Portable UUID on Linux

在 Windows 和 MacOSX 上,检索每台机器的某种 UUID 是微不足道的:

在 Windows(注册表编辑器)上:

"Software\Microsoft\Cryptography\MachineGuid"

在 MacOSX 上

$ ioreg -rd1 -c IOPlatformExpertDevice | grep IOPlatformUUID

然而 Linux 这是 much more complex。到目前为止,我发现了以下内容:

  1. 在基于 dbus 的系统上:

    $猫/var/lib/dbus/machine-id

  2. 在基于 x86 的系统上(需要 root 权限):

    $ 须藤猫 /sys/devices/virtual/dmi/id/product_uuid

  3. 在基于 PowerPC 的系统上:

    $猫/proc/device-tree/serial-number

真正奇怪的是,基于 x86 的 arch 上主板的 UUID 仅限于 root 用户,但可以使用普通用户通过 hal ($ lshal | grep 'system\.hardware\.serial') 访问。同时,所有磁盘 UUID 都可以访问 ($ ls /dev/disk/by-uuid/) 并且 序列号 可以从基于 PowerPC 的 arch 上的任何用户访问。

那么有没有我可以在 Linux 上使用的便携式 UUID? dbus 可能安装也可能不安装,我需要从 non-root 用户读取这个值,并且它需要在重启后保持 same (因此 /proc/sys/kernel/random/boot_id 不是一个选项)。

看起来现在大多数 Linux 发行版上都安装了 systemd,因此我可以相信 /etc/machine-id 存在并且普通用户可以阅读。