如何通过 VPS 上设备唯一的标识生成 UUID
目的
希望在
过程
问了一下
1. 在 HAX 上面执行, 得到这样一行的结果
root@391932510hax:~# blkid/dev/ploop26075p1: UUID="170458b2-6bc7-4820-b908-33b71b3bbe0b" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="6c2c4759-ffdb-4248-aa56-d1c03eabf846"
注意到里面有 UUID="..." 还有 PARTUUID="..." 所以我决定用正则表达式写出
用 sed 和正则表达式写成这样:
blkid | sed -r 's/.*([^-]{8}-[^-]{4}-[^-]{4}-[^-]{4}-[^-]{12}).*/\1/g'
执行, 得到正确的结果:
root@391932510hax:~# blkid | sed -r 's/.*([^-]{8}-[^-]{4}-[^-]{4}-[^-]{4}-[^-]{12}).*/\1/g'6c2c4759-ffdb-4248-aa56-d1c03eabf846
2. 在 Racknerd 的
root@crazypeace:~# blkid | sed -r 's/.*([^-]{8}-[^-]{4}-[^-]{4}-[^-]{4}-[^-]{12}).*/\1/g'6f428b8e-676e-49e1-84e1-7783a21804ceaad632ec-ca02-4417-be8a-ae20cb1faed4
root@crazypeace:~# blkid/dev/vda1: UUID="6f428b8e-676e-49e1-84e1-7783a21804ce" TYPE="ext4" PARTUUID="2eb406ac-01"/dev/vda2: UUID="aad632ec-ca02-4417-be8a-ae20cb1faed4" TYPE="swap" PARTUUID="2eb406ac-02"
那么我们用 head 来帮忙
blkid | sed -r 's/.*([^-]{8}-[^-]{4}-[^-]{4}-[^-]{4}-[^-]{12}).*/\1/g' | head -1
结果就正确了
root@crazypeace:~# blkid | sed -r 's/.*([^-]{8}-[^-]{4}-[^-]{4}-[^-]{4}-[^-]{12}).*/\1/g' | head -16f428b8e-676e-49e1-84e1-7783a21804ce
3. 在
root@5032-vpsvc:~# blkid | sed -r 's/.*([^-]{8}-[^-]{4}-[^-]{4}-[^-]{4}-[^-]{12}).*/\1/g' | head -1/dev/sr0: BLOCK_SIZE="2048" UUID="2023-06-17-04-46-45-00" LABEL="cidata" TYPE="iso9660"
查看一下 blkid 原本的样子, 原来第一行就不包含符合条件的
root@5032-vpsvc:~# blkid/dev/sr0: BLOCK_SIZE="2048" UUID="2023-06-17-04-46-45-00" LABEL="cidata" TYPE="iso9660"/dev/sda1: UUID="56c6249c-209a-427a-82c8-95a4cbe15687" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="11e06615-bf2f-524a-bd5d-2991360466f2"/dev/sda15: SEC_TYPE="msdos" UUID="BB09-C166" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="a09b3906-b77a-914f-9a99-46b8f182662f"/dev/sda14: PARTUUID="997dd1fe-ed57-0a4f-8c21-940577797c9a"
那么我们要用
blkid | sed -nr 's/.*([^-]{8}-[^-]{4}-[^-]{4}-[^-]{4}-[^-]{12}).*/\1/gp'
测试一下, 结果只剩下
root@5032-vpsvc:~# blkid | sed -nr 's/.*([^-]{8}-[^-]{4}-[^-]{4}-[^-]{4}-[^-]{12}).*/\1/gp'11e06615-bf2f-524a-bd5d-2991360466f2a09b3906-b77a-914f-9a99-46b8f182662f997dd1fe-ed57-0a4f-8c21-940577797c9a
blkid | sed -nr 's/.*([^-]{8}-[^-]{4}-[^-]{4}-[^-]{4}-[^-]{12}).*/\1/gp' | head -1
4. 转换为
sed
思路是一样的, 用 -n 参数关闭默认的打印; 再用 print 打印.
blkid | perl -ne 's/.*([^-]{8}-[^-]{4}-[^-]{4}-[^-]{4}-[^-]{12}).*/\1/g and print'
5. 申请了一台
发现重装系统之后, blkid 得到的结果会变化. 那只好转换思路.
GPT
ip a | grep ether
结果发现, 在
6. 那么我就设想, 以
这样很合理啊, 如果
学习了一下
网站还提供 API 使用,
形如:
https://www.uuidtools.com/api/generate/v3/namespace/ns:dns/name/base64:Y3JhenlwZWFjZQ==
猜想应该可以不用
https://www.uuidtools.com/api/generate/v3/namespace/ns:dns/name/crazypeace
找个
root@391932510hax:~# curl -sL https://www.uuidtools.com/api/generate/v3/namespace/ns:dns/name/crazypeace
["b9a609e2-82c7-3898-9c8b-e049b268447a"]root@391932510hax:~#
结合我们取
curl -sL https://www.cloudflare.com/cdn-cgi/trace | grep -oP "ip=\K.*$"
得到
curl -sL https://www.uuidtools.com/api/generate/v3/namespace/ns:dns/name/$(curl -sL https://www.cloudflare.com/cdn-cgi/trace | grep -oP "ip=\K.*$")
测试一下, 结果不错.
root@391932510hax:~# curl -sL https://www.uuidtools.com/api/generate/v3/namespace/ns:dns/name/$(curl -sL https://www.cloudflare.com/cdn-cgi/trace | grep -oP "ip=\K.*$")["976bb2fa-6685-3e06-907f-9133e1536320"]root@391932510hax:~#
参考前面折腾命令行的结果, 综合起来为:
curl -sL https://www.uuidtools.com/api/generate/v3/namespace/ns:dns/name/$(curl -sL https://www.cloudflare.com/cdn-cgi/trace | grep -oP "ip=\K.*$") | sed -r 's/.*([^-]{8}-[^-]{4}-[^-]{4}-[^-]{4}-[^-]{12}).*/\1/g'
测试一下, 结果不错.
root@391932510hax:~# curl -sL https://www.uuidtools.com/api/generate/v3/namespace/ns:dns/name/$(curl -sL https://www.cloudflare.com/cdn-cgi/trace | grep -oP "ip=\K.*$") | sed -r 's/.*([^-]{8}-[^-]{4}-[^-]{4}-[^-]{4}-[^-]{12}).*/\1/g'976bb2fa-6685-3e06-907f-9133e1536320root@391932510hax:~#
总结
curl -sL https://www.uuidtools.com/api/generate/v3/namespace/ns:dns/name/$(curl -sL https://www.cloudflare.com/cdn-cgi/trace | grep -oP "ip=\K.*$") | sed -r 's/.*([^-]{8}-[^-]{4}-[^-]{4}-[^-]{4}-[^-]{12}).*/\1/g'
评论
发表评论