16

有时在 bash 脚本中,我需要生成新的GUID(Global Unique Identifier).

我已经通过一个生成新 guid 的简单 python 脚本完成了该操作:请参见此处

#! /usr/bin/env python
import uuid
print str(uuid.uuid1())

但是我需要将此脚本复制到我使用的任何新系统中。

我的问题是:任何人都可以介绍包含类似命令的命令或包吗?

4

6 回答 6

21

假设您没有uuidgen,则不需要脚本:

$ python -c 'import uuid; print(str(uuid.uuid4()))'
b7fedc9e-7f96-11e3-b431-f0def1223c18
于 2014-01-17T16:47:13.243 回答
21

您可以使用命令uuidgen。简单地执行uuidgen将为您提供基于时间的 UUID:

$ uuidgen
18b6f21d-86d0-486e-a2d8-09871e97714e
于 2020-07-04T18:54:02.143 回答
6

因为你想要一个随机的UUID,所以你想使用 Type 4 而不是 Type 1:

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

这篇Wikipedia 文章解释了不同类型的 UUID。您想要“类型 4(随机)”。

我使用 Python 编写了一个小 Bash 函数来批量生成任意数量的 Type 4 UUID:

# uuid [count]
#
# Generate type 4 (random) UUID, or [count] type 4 UUIDs.
function uuid()
{
    local count=1
    if [[ ! -z "$1" ]]; then
        if [[ "$1" =~ [^0-9] ]]; then
            echo "Usage: $FUNCNAME [count]" >&2
            return 1
        fi

        count="$1"
    fi

    python -c 'import uuid; print("\n".join([str(uuid.uuid4()).upper() for x in range('"$count"')]))'
}

如果您更喜欢小写,请更改:

python -c 'import uuid; print("\n".join([str(uuid.uuid4()).upper() for x in range('"$count"')]))'

到:

python -c 'import uuid; print("\n".join([str(uuid.uuid4()) for x in range('"$count"')]))'
于 2015-08-03T22:18:58.150 回答
2
cat /proc/sys/kernel/random/uuid
于 2021-09-15T08:29:47.897 回答
1

在 Python 3 中,不需要强制转换str为:

python -c 'import uuid; print(uuid.uuid4())'
于 2018-11-20T16:46:50.827 回答
0

如果您只想在位置 8、12、16 和 20 处生成带有一些破折号的伪随机字符串,则可以使用apg.

apg -a 1 -M nl -m32 -n 1 -E ghijklmnopqrstuvwxyz | \
    sed -r -e 's/^.{20}/&-/' | sed -r -e 's/^.{16}/&-/' | \
    sed -r -e 's/^.{12}/&-/' | sed -r -e 's/^.{8}/&-/'

apg子句从[0-9a-f](小写)生成 32 个符号。这一系列sed命令添加了-标记,并且很可能会被缩短。

请注意,UUID 通常具有特定格式:

xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

这里MN字段对 UUID 的版本/格式进行编码。

于 2021-05-19T13:15:45.077 回答