【问题标题】:Command line GUID for Unix and Windows?Unix 和 Windows 的命令行 GUID?
【发布时间】:2009-02-20 15:02:13
【问题描述】:

是否有适用于 Unix 和 Windows 的命令行工具使用相同的算法为两个平台创建 GUIDs

【问题讨论】:

  • 在 Windows 中,您可以使用 powershell 执行此操作,如下所示:[guid]::newguid()

标签: windows unix command-line guid


【解决方案1】:

在 Windows XP 中,您可以在命令窗口中使用以下命令。

uuidgen.exe

【讨论】:

  • uuidgen 在 Windows 中无法开箱即用;它是 Platform SDK / Windows SDK 的一部分。
  • 不在 Windows 10 中
  • 用 Chocolatey 安装 visualstudio2019buildtools 后,我有 ""C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64\uuidgen.exe"。这会在每次调用时创建一个新的随机数 (uuidv4) 并将其写入标准输出。
【解决方案2】:

'e2fsprogs' 项目维护 uuidgen 实用程序。

http://e2fsprogs.sourceforge.net/

它已经在任何 Linux/BSD* 发行版上可用。

对于 Windows,我建议安装 Cygwin,'e2fsprogs' 包可以从那里获得!

作为报告 j4y,此实用程序可在 MAC OS 下使用。

只要运行:

$ uuidgen -r # 基于随机的 UUID/GUID $ uuidgen -t # 基于时间的 UUID/GUID

【讨论】:

【解决方案3】:

一些有用的知识:

C#中Guid.ToByteArray()的字节顺序和SQL Server GUID类型为:

        { 3, 2, 1, 0, 5, 4, 7, 6, 8, 9, 10, 11, 12, 13, 14, 15 };

使用 SYS_GUID() 创建并存储为 RAW[16] 的 Oracle GUID 是有序的:

        { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };

您可能会发现这个online GUID converter 很方便。我不确定该来源是否可供您自己使用,但应该不难弄清楚。

【讨论】:

  • 无论底层字节顺序如何,字符串表示不应该相同吗?
  • 是的,但这只是一个方便的提示,以防您不得不按字节顺序处理 GUID。
【解决方案4】:

我不知道是否有可用的命令行工具,但你可以简单地用 C# 编写一个(它应该与 Mono 一起运行):

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(System.Guid.NewGuid().ToString());
    }
}

您可以轻松修改程序以更改 GUID 的格式、将其复制到剪贴板或任何适合您需要的内容。

【讨论】:

  • 嗯,我需要确保他们使用相同的算法来生成 GUID,并且由于 Mono 不是正式的 MS,我不知道他们是否使用相同的算法,你有任何关于这个?
  • Mono 可能使用不同的实现,但您可以在 Windows 和 Unix/Linux 上使用 Mono 运行该工具。只是因为我很好奇:为什么在两个平台上都需要相同的算法? GUID 仍然是唯一的,因为 GUID 中的一个字段指定了所使用的算法。
  • GUID 的整体理念是,如果算法和随机数生成器达到标准,它就是全局唯一的。我认为使用不同的算法生成 GUID 会很安全。
  • Wedge 做对了。 GUID 包括一个版本标记(它指定使用哪种算法)。这确保具有不同算法的两个 GUID 永远不会相同。如果算法匹配,那么它已经被定制以确保没有两个 GUID 是相同的。
【解决方案5】:

有很多 online apps 可以做到这一点。

如果你使用的是PHP,可以使用uniqid函数。

我在http://jug.safehaus.org/ 找到了一个纯 Java 程序来执行此操作。这应该可以在任何可以安装 Java 的地方工作。

【讨论】:

    【解决方案6】:

    如果你在一个已经有 python 的系统上,你可以简单地在命令行上运行它:

    python -c 'import uuid; print(uuid.uuid4())'
    

    (Python 预装在许多 Linux 发行版以及 MacOS 上)

    【讨论】:

      猜你喜欢
      • 2013-07-08
      • 2015-12-27
      • 2014-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 2015-07-28
      • 2014-11-30
      相关资源
      最近更新 更多