【问题标题】:How can I generate system-wide unique IDs under Linux如何在 Linux 下生成系统范围的唯一 ID
【发布时间】:2012-03-07 18:01:40
【问题描述】:

我正在开发一个多进程 Linux 系统,需要生成唯一 ID。安全性不是一个考虑因素,所以一个从零开始并向上计数的 ID 生成器就可以了。而且它只是在本地机器内,不涉及网络。显然实现这一点并不难,但我只是想知道是否已经提供了任何东西(最好是轻量级的)。

【问题讨论】:

    标签: linux unique


    【解决方案1】:

    这听起来像是... ...uuidgen:

    % uuidgen 
    975DA04B-9A5A-4816-8780-C051E37D1414
    

    如果你想将它构建到你自己的应用程序或服务中,你需要libuuid

    #include <uuid/uuid.h>
    #include <iostream>
    
    int main()
    {
        uuid_t uu;
        uuid_generate(uu);
        char uuid[37];
        uuid_unparse(uu, uuid);
        std::cout << uuid << std::endl;
    }
    

    【讨论】:

    • 感谢您的回复。有什么可以在进程中调用,而不是仅仅为了返回 id 而启动一个新的?
    【解决方案2】:

    有一个名为 uuid 的命令行工具可以完全满足您的需求。我不确定它是否默认安装在各种发行版中,所以你可能必须自己做。

    【讨论】:

      【解决方案3】:

      如果没有安装 uuidgen,您可以使用 mktemp。例如,对于 16 个字符(应该足以实现系统范围的唯一 ID)...

      mktemp -u XXXXXXXXXXXXXXXX

      【讨论】:

        【解决方案4】:

        也有用..

         cat /etc/machine-id
        

        /etc/machine-id 文件包含在安装过程中设置的本地系统的唯一机器 ID。机器 ID 是一个以换行符结尾、十六进制、32 个字符的小写机器 ID 字符串。从十六进制解码时,这对应于 16 字节/128 位字符串。

        【讨论】:

        • 我检查了手头的 Debian 系统,但找不到该文件。
        • Ubuntu 没有那个文件
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-13
        • 1970-01-01
        • 2023-04-08
        • 2015-07-07
        • 1970-01-01
        • 2018-05-04
        相关资源
        最近更新 更多