[TOC]
前言介绍 描述:通用唯一识别码(英语:Universally Unique Identifier,简称UUID)是一种软件建构的标准是在计算机系统中用来标识信息的一个 128 位(比特)的数字,最初被用在阿波罗网络计算机系统(NCS)中,亦为自由软件基金会组织会(OSF)在分散式计算环境领域境(DCE)的一部份。
UUID的目的是让分散式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来每个人都可以创建不与其它人冲突的UUID。在这样的情况下就不需考虑数据库创建时的名称重复问题
。
目前最广泛应用的UUID:
微软公司的全局唯一标识符(GUID)
其他重要的应用则有Linux ext2/ext3文件系统、LUKS加密分区、GNOME、KDE、Mac OS X等等
Linux UUID的作用及意义
原因1:它是真正的唯一标志符 UUID为系统中的存储设备提供唯一的标识字符串,不管这个设备是什么类型的。如果你在系统中添加了新的存储设备如硬盘,很可能会造成一些麻烦,比如说启动的时候因为找不到设备而失败,而使用UUID则不会有这样的问题。
原因2:设备名并非总是不变的 自动分配的设备名称并非总是一致的,它们依赖于启动时内核加载模块的顺序。如果你在插入了USB盘时启动了系统,而下次启动时又把它拔掉了,就有可能导致设备名分配不一致。 使用UUID对于挂载移动设备也非常有好处──例如我有一个24合一的读卡器,它支持各种各样的卡,而使用UUID总可以使同一块卡挂载在同一个地方。
原因3:Ubuntu中的许多关键功能现在开始依赖于UUID
UUID版本 UUID1:从主机ID、序列号和当前时间生成UUID。它基于硬件地址和一个随机的14位序列号。 UUID3:根据名称空间标识符(即UUID)和名称(即字符串,此站点使用UUID1作为字符串)的MD5哈希值生成UUID。 UUID4:生成一个随机UUID。 UUID5:根据名称空间标识符(即UUID)和名称(即字符串,本站点使用UUID1作为字符串)的SHA-1散列生成UUID。
UUID格式 UUID 以 32 个十六进制的数字表示,被连字符分割为 5 组显示,总共的 36 个字符的格式为 8-4-4-4-12(32 个字母或数字和 4 个连字符)。
[TOC]
前言介绍 描述:通用唯一识别码(英语:Universally Unique Identifier,简称UUID)是一种软件建构的标准是在计算机系统中用来标识信息的一个 128 位(比特)的数字,最初被用在阿波罗网络计算机系统(NCS)中,亦为自由软件基金会组织会(OSF)在分散式计算环境领域境(DCE)的一部份。
UUID的目的是让分散式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来每个人都可以创建不与其它人冲突的UUID。在这样的情况下就不需考虑数据库创建时的名称重复问题
。
目前最广泛应用的UUID:
微软公司的全局唯一标识符(GUID)
其他重要的应用则有Linux ext2/ext3文件系统、LUKS加密分区、GNOME、KDE、Mac OS X等等
Linux UUID的作用及意义
原因1:它是真正的唯一标志符 UUID为系统中的存储设备提供唯一的标识字符串,不管这个设备是什么类型的。如果你在系统中添加了新的存储设备如硬盘,很可能会造成一些麻烦,比如说启动的时候因为找不到设备而失败,而使用UUID则不会有这样的问题。
原因2:设备名并非总是不变的 自动分配的设备名称并非总是一致的,它们依赖于启动时内核加载模块的顺序。如果你在插入了USB盘时启动了系统,而下次启动时又把它拔掉了,就有可能导致设备名分配不一致。 使用UUID对于挂载移动设备也非常有好处──例如我有一个24合一的读卡器,它支持各种各样的卡,而使用UUID总可以使同一块卡挂载在同一个地方。
原因3:Ubuntu中的许多关键功能现在开始依赖于UUID
UUID版本 UUID1:从主机ID、序列号和当前时间生成UUID。它基于硬件地址和一个随机的14位序列号。 UUID3:根据名称空间标识符(即UUID)和名称(即字符串,此站点使用UUID1作为字符串)的MD5哈希值生成UUID。 UUID4:生成一个随机UUID。 UUID5:根据名称空间标识符(即UUID)和名称(即字符串,本站点使用UUID1作为字符串)的SHA-1散列生成UUID。
UUID格式 UUID 以 32 个十六进制的数字表示,被连字符分割为 5 组显示,总共的 36 个字符的格式为 8-4-4-4-12(32 个字母或数字和 4 个连字符)。1 例如:d92fa769-e00f-4fd7-b6ed-ecf7224af7fa
获取与生成uuid 获取UUID Linux 中获取硬盘分区或文件系统的 UUID 的七种方法 描述:Linux 系统管理员你应该知道如何去查看分区的 UUID 或文件系统的 UUID,因为现在大多数的 Linux 系统都使用 UUID 挂载分区,你可以在 /etc/fstab 文件中可以验证。1 2 cat /etc/fstab UUID=b379c221-7e3d-42ff-b5ae-bf1d2dfe9ffb /boot xfs defaults 0 0
UUID它可以帮助 Linux 系统识别一个磁盘分区而不是块设备文件。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 $blkid /dev/sda1: UUID="b379c221-7e3d-42ff-b5ae-bf1d2dfe9ffb" TYPE="xfs" /dev/sda2: UUID="WYci3Y-yQO9-eU0R-Dzmu-ccUH-Lhns-rLhVnJ" TYPE="LVM2_member" $lsblk -o name,mountpoint,size,uuidNAME MOUNTPOINT SIZE UUID sda 40G |-sda1 /boot 1G b379c221-7e3d-42ff-b5ae-bf1d2dfe9ffb `-sda2 39G WYci3Y-yQO9-eU0R-Dzmu-ccUH-Lhns-rLhVnJ |-centos-root / 37G bf08ef5c-d394-4893-86ad-a3c8025daa85 `-centos-swap [SWAP] 2G b27b7ddb-1f8b-43cb-aaed-0365d1e2e450 hwinfo --block | grep by-uuid | awk -F "," '{print $1,"-",$3}' Device Files: /dev/sda1 - /dev/disk/by-uuid/b379c221-7e3d-42ff-b5ae-bf1d2dfe9ffb udevadm info -q all -n /dev/sda1 | grep -i by-uuid | head -1 S: disk/by-uuid/b379c221-7e3d-42ff-b5ae-bf1d2dfe9ffb tune2fs -l /dev/sdc1 | grep UUID Filesystem UUID: d17e3c31-e2c9-4f11-809c-94a549bc43b7 tune2fs -l /dev/sdc1 | grep UUID Filesystem UUID: d17e3c31-e2c9-4f11-809c-94a549bc43b7 ls -lh /dev/disk/by-uuid/ ls -lh /dev/disk/by-id/ lrwxrwxrwx 1 root root 10 Aug 2 17:09 b379c221-7e3d-42ff-b5ae-bf1d2dfe9ffb -> ../../sda1 lrwxrwxrwx 1 root root 10 Aug 2 17:09 b27b7ddb-1f8b-43cb-aaed-0365d1e2e450 -> ../../dm-1 lrwxrwxrwx 1 root root 10 Aug 2 17:09 bf08ef5c-d394-4893-86ad-a3c8025daa85 -> ../../dm-0
Linux 中获取网卡的UUID方法 1 2 3 4 5 6 7 8 uuidgen eth0 e784d3f5-54ef-48f4-a5e0-4ee2d670e8b [root@vm-1575613390 ~]$ nmcli con NAME UUID TYPE DEVICE br-9bc175e03197 e784d3f5-54ef-48f4-a5e0-4ee2d670e8b bridge br-9bc175e03197
生成UUID 描述:UUID 由该库生成可以合理地认为在一个系统中 UUID 是唯一的,生成的UUID并且在所有系统中也是唯一的。
libuuid : 自内核2.15.1起就是 util-linux-ng 包中的一部分;
e2fsprogs : 包中的UUID库找到实现;
方式1:采用Python使用了UUID模块生成uuid1/3/4/5等版本的UUID字符串,位于Lib/uuid.py之中;1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import uuidclass uuid .UUID (hex=None, bytes=None, bytes_le=None, fields=None, int=None, version=None, *, is_safe=SafeUUID.unknown) UUID ('{12345678-1234-5678-1234-567812345678}' ) UUID ('12345678123456781234567812345678' ) UUID ('urn:uuid:12345678-1234-5678-1234-567812345678' ) UUID (bytes=b'\x12\x34\x56\x78' *4 ) UUID (bytes_le=b'\x78\x56\x34\x12\x34\x12\x78\x56' +b'\x12\x34\x56\x78\x12\x34\x56\x78' ) UUID (fields=(0x12345678 , 0x1234 , 0x5678 , 0x12 , 0x34 , 0x567812345678 ) ) UUID (int=0x12345678123456781234567812345678 ) #SPACESNAME 常量 (可作为uuid3/5 的 namespace 值) uuid .getnode () #通用管理的MAC 地址优于本地管理的MAC 地址uuid .NAMESPACE_OID UUID ('6ba7b812-9dad-11d1-80b4-00c04fd430c8' ) >>> uuid .NAMESPACE_DNS UUID ('6ba7b810-9dad-11d1-80b4-00c04fd430c8' ) >>> uuid .NAMESPACE_URL UUID ('6ba7b811-9dad-11d1-80b4-00c04fd430c8' ) >>> uuid .NAMESPACE_X500 UUID ('6ba7b814-9dad-11d1-80b4-00c04fd430c8' )
基础示例:1 2 3 4 5 6 7 8 9 10 11 12 import uuid print uuid.uuid1()print uuid.uuid3(uuid.NAMESPACE_DNS, 'yuanlin' ) print uuid.uuid4()print uuid.uuid5(uuid.NAMESPACE_DNS, 'yuanlin' )
方式2:Linux中shell采用uuidgen进行生成1 2 uuidgen fcfe9f3e-1edc-43fe-8b29-c2a92958ce41
方式3:采用JS生成uuid1 2 3 4 5 6 7 8 9 function uuid ( ) { return ([1e7 ] + -1e3 + -4e3 + -8e3 + -1e11 ).replace(/[0148]/g , c =>(c ^ crypto.getRandomValues(new Uint8Array (1 ))[0 ] & 15 >> c / 4 ).toString(16 ) ) } print(uuid()) b3255b0d-ae61-16 c6-833 f-96 c827fd17d8 725 ad3d6-6 eb1-12 a2-855 f-5 a8a8bb6859d
方式4:采用java的util包里面的UUID类实现1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import java.util.UUID;public class createUUID { public static void main (String[] args) { System.out.println(createID()); } public static String createID () { UUID uuid = UUID.randomUUID(); String id=uuid.toString(); return id.replace("-" , "" ); } } 56e41 c4d8aa64e3cbf4d1d119004af61f1d443fcb9564ae7b3fc1993de1680d5 91f e1a1ef54843c08c42ba8c68f98d4b2f 763662d0b24b0f8e18c6f0da4dd6434 bf13006b8324ed8bfe4c194d6cb057e1947e4 ef40cb49c28ecfd2d725815ef8
附录