如何使用uuidgen生成通用唯一标识符(UUID)

来自菜鸟教程
跳转至:导航、​搜索

介绍

通用唯一标识符 (UUID) 是 128 位数字,在创建它们的本地系统以及过去和未来在其他系统上创建的 UUID 中,它们被认为是唯一的。 由于它们的独特性,它们在自动递增的主键可能不足的情况下派上用场。

由于其独特性,UUID 非常适合生成测试数据。 需要随机字符串吗? UUID 很好。 电子邮件呢? UUID@UUID.com 很棒。 需要一堆随机字符串? UUID 将是独一无二的,使它们在系统中移动时易于追踪。

要从命令行界面生成通用唯一标识符,您可以使用 uuidgen 实用程序,

在本教程中,您将使用 uuidgen 和一些 shell 脚本来生成 UUID 和一些示例数据。

启动交互式终端!

生成 UUID

uuidgen 命令通常已经安装在 Linux 和 macOS 等类 Unix 操作系统上。 如果不是,您可以通过包管理器安装它。 在 Ubuntu 和 Debian 系统上,安装 uuid-runtime 软件包。

首先,使用 apt update 命令更新系统的可用软件包列表:

sudo apt update

接下来使用 apt 包管理器安装 uuid-runtime 包:

sudo apt install uuid-runtime

要生成单个 UUID,请运行不带任何参数的 uuidgen 命令。 开箱即用,uuidgen 每次运行时都会生成一个随机 UUID。

在终端中执行以下命令:

uuidgen

您将看到类似于以下的输出,但您的 UUID 会有所不同:

Outputa522f494-92ce-44e9-b1a3-f891baed8d60

注意uuidgen 的 macOS 版本的功能与 Linux 版本的功能稍有不同,因为它返回所有大写字母的 UUID。


您还可以生成基于时间和基于哈希的 UUID,但一般来说,随机值对于大多数情况来说就足够了。

您可能希望一次生成多个 UUID,您将在接下来进行探索。

生成多个 UUID

要一次生成一堆 UUID,您将利用一小部分 shell 脚本,使用 for 循环多次执行 uuidgen 命令。

例如,要生成 10 个 UUID,请执行以下命令:

for i in {1..10}; do uuidgen; done

您将看到 10 个 UUID 打印到屏幕上:

Output834efdb6-6044-4b44-8fcb-560710936f37
e8fa8d54-641a-4d7b-9422-91474d713c62
dff59ac0-4d80-4b96-85c4-14f3a118e7fe
511fea83-9f5f-4606-85ec-3d769da4bf63
3bc82ef7-1138-4f97-945a-08626a42a648
a33abc11-264e-4bbb-82e8-b87226bb4383
2a38839e-3b0d-47f0-9e60-d6b19c0978ad
74dca5e8-c702-4e70-ad16-0a16a64d55fa
cd13d088-21cf-4286-ae61-0643d321dd9e
9aec3d5a-a339-4f24-b5a3-8419ac8542f2

您可以将 10 换成您想要的号码。

基于 UUID 的独特性,您不必担心生成的数据中有任何重复。 现在让我们看看以不同方式使用 UUID。

在测试数据中使用 UUID

如果要生成每行 2 个 UUID 的逗号分隔值 (CSV) 列表,则可以在 for 循环的每次迭代期间使用 echo 命令打印两个 UUID。 执行以下命令:

for i in {1..10}; do echo `uuidgen`,`uuidgen`; done

你会得到这个输出:

Output63b1146f-9e7c-4e1f-82eb-3fe378e203df,ed9d6201-e5b2-4410-9ab1-35c8ca037994
8d3981b6-f112-4f21-ac4b-44791e279b2a,eb63310e-d436-44fa-80c6-65721a300a2b
0eddfe24-1c2e-43a1-b2c2-9d3af6bad837,62ef1782-76a2-4b3c-ac69-1c2d02f65789
29f18766-fc9d-46a4-a1d0-e112738edb30,b6bd303d-1148-4f46-bec7-d7e4cb6e4f03
865bcf30-6a8b-49d6-8b27-8dc51620adf7,972b0959-4270-4683-b19b-360b2605f2d0
0d82d54b-566a-45d1-b3a8-5da1a88bceb3,1c67a802-9647-46b1-bde4-3053699b27f9
778b5415-3e1f-4bc5-a349-499459ac4ab7,7e1a2081-c742-4882-9154-e5d2a4af630c
e6cc95bd-3ee1-43cb-bea1-51783de5fc57,5088d3a3-ab67-4684-8761-e48bb14596ec
a7453bc0-b5e5-41a3-9ed4-cf4d8e0908a2,957ef50f-7889-4335-9f40-17878e3d20fe
3689362d-588a-409e-bd2c-d6fdaa361574,9ffe7c8d-9afb-4b24-a5b7-b29a06f6fac7

使用相同的方法,您可以通过对 echo 语句进行小的调整来生成看起来像电子邮件地址的数据:

for i in {1..10}; do echo `uuidgen`@`uuidgen`.com; done

您将收到以下输出:

Output7dd44050-9df4-43aa-b3b4-3b47eff8fc31@3052e93c-95d1-40f5-b468-3d4e06dd208b.com
cca71187-f666-46ff-81c6-eb3b72ff6972@30f4c9a8-712e-4f4c-ad3a-4b55ef85eee0.com
6ff086ad-493d-4b3a-8ed1-970239d7125b@8302d772-4deb-43d1-8901-0a3b4f747b55.com
f9813daa-6a8e-4543-8708-d42cefdda20a@d586854c-7df9-4046-89f8-51f960973afb.com
a7e9e43b-d2b1-4415-b73d-ff72b713e45f@a7c56c2c-df25-44bc-872d-a893f750b54d.com
0d1d13fe-777d-44d8-b1b2-302ca1e48aa1@7c2d8e6a-fa8b-4fa3-a0ef-8360aa42e730.com
f85d0772-22d2-43d0-8d71-4e6714c2bb20@fb4f74fe-f9f9-4e86-b31d-f148344a97e0.com
f46eb868-0a99-4291-98f2-19d95f1e9fbb@37ef072d-c515-4145-8b8a-edf32ec18bd2.com
eaa4a63e-2646-427a-a892-f8027c2791ed@33daf102-2b5b-4070-88c5-261fe5d96cfa.com
d75f6720-b249-4395-bcc7-9ffe2b67cabb@457b04b4-3c15-4b77-aae2-9afd6803bcfe.com

这些不是您可以验证的真实电子邮件地址,但您可以再次调整输出,并将第二个 uuidgen 交换为一次性电子邮件地址域,例如 [mailinator.com ](https://mailinator.com],您不仅会拥有一个看起来很逼真的数据列表,而且会是一个您可以在测试中实际使用或监控的电子邮件地址列表。 尝试以下命令:

for i in {1..10}; do echo `uuidgen`@mailinator.com; done

这次你会看到这样的输出:

Output4ba50929-520b-49f7-996d-e369be5d6232@mailinator.com
16deaeae-64bd-45f0-9f73-b32d41ca1bfb@mailinator.com
743701e8-0dc5-4851-8fc4-24d155755bdc@mailinator.com
adff0015-c535-431a-970f-98ffd1fc21eb@mailinator.com
6516fcb3-e54f-4800-a6cc-11d50d756f28@mailinator.com
8a9c5252-bd0c-4c3b-a7c9-4b60ebcc4294@mailinator.com
eed94fd6-b075-493c-8d8e-3acae90d5629@mailinator.com
f4ab80d2-85ca-4722-a260-0f84c37051fd@mailinator.com
53ead1d0-cc70-410f-a91a-4a79b339fba2@mailinator.com
b208e103-d7f1-4f6d-838d-530d6339dce7@mailinator.com

最后,要将此命令的输出保存到文件中,您可以附加 > /path/to/some/file 以管道输出:

for i in {1..10}; do echo `uuidgen`@mailinator.com; done > /tmp/emails.txt

然后使用cat命令查看刚刚创建的文件:

cat /tmp/emails.txt

该文件显示在您的屏幕上:

Output826119d2-f590-4fa3-ba7e-0717869d40b1@mailinator.com
795fec1a-76fe-4fed-8a06-ed517c1a5e7d@mailinator.com
14a502ad-0aa9-40e5-a46f-5806264b5316@mailinator.com
c6c2a588-7cce-4675-a490-0101d7bcc614@mailinator.com
7346c15b-0c92-44c4-a854-5de18c0c202d@mailinator.com
c67a535a-e28d-43b1-b553-c203bc22a821@mailinator.com
76d22d18-0f09-405d-9903-eb44ec93b605@mailinator.com
2b631756-21e6-4d95-873b-3245797f9028@mailinator.com
aab686e8-540e-43e9-9e24-ca04fbf4d414@mailinator.com
a577e9c9-0ad1-4934-b5f1-17b68938fff8@mailinator.com

您可以使用相同的方法将本教程中的任何其他示例保存到文件中。

结论

通用唯一标识符比随机数更健壮。 它们的独特性使它们非常强大。 结合命令行界面上的一些轻量级 shell 脚本,您可以生成有用的数据,而无需加载您最喜欢的编程语言的包存储库。

下次您需要 UUID 时,请不要搜索“在线 UUID 生成器”并使用系统的 uuidgen 命令。 要了解有关您系统的 uuidgen 的特定实现的更多信息,请在终端中键入 man uuidgen 以查看其文档…