UUID介绍与使用范围
[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 个连字符)。
例如:d92fa769-e00f-4fd7-b6ed-ecf7224af7fa
获取与生成uuid
获取UUID
Linux 中获取硬盘分区或文件系统的 UUID 的七种方法 描述:Linux 系统管理员你应该知道如何去查看分区的 UUID 或文件系统的 UUID,因为现在大多数的 Linux 系统都使用 UUID 挂载分区,你可以在 /etc/fstab 文件中可以验证。
cat /etc/fstab
UUID=b379c221-7e3d-42ff-b5ae-bf1d2dfe9ffb /boot xfs defaults 0 0
UUID它可以帮助 Linux 系统识别一个磁盘分区而不是块设备文件。
#使用下面的 7 个命令来查看
#blkid 命令:定位或打印块设备的属性。
$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 命令:列出所有可用的或指定的块设备的信息。
$lsblk -o name,mountpoint,size,uuid
NAME 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 命令:硬件信息工具,是另外一个很好的实用工具,用于查询系统中已存在硬件。
hwinfo --block | grep by-uuid | awk -F "," '{print $1,"-",$3}'
Device Files: /dev/sda1 - /dev/disk/by-uuid/b379c221-7e3d-42ff-b5ae-bf1d2dfe9ffb
#udevadm 命令:udev 管理工具
udevadm info -q all -n /dev/sda1 | grep -i by-uuid | head -1
S: disk/by-uuid/b379c221-7e3d-42ff-b5ae-bf1d2dfe9ffb
#tune2fs 命令:调整 ext2/ext3/ext4 文件系统上的可调文件系统参数。
tune2fs -l /dev/sdc1 | grep UUID
Filesystem UUID: d17e3c31-e2c9-4f11-809c-94a549bc43b7
#dumpe2fs 命令:查询 ext2/ext3/ext4 文件系统的信息。
tune2fs -l /dev/sdc1 | grep UUID
Filesystem UUID: d17e3c31-e2c9-4f11-809c-94a549bc43b7
#by-uuid 路径:该目录下包含有 UUID 和实际的块设备文件,UUID 与实际的块设备文件链接在一起。
ls -lh /dev/disk/by-uuid/
ls -lh /dev/disk/by-id/ #能看见扩展分区磁盘的UUID
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.Linux中网卡的UUID,可利用此uuid修改网卡的配置文件;
uuidgen eth0
e784d3f5-54ef-48f4-a5e0-4ee2d670e8b
#示例2.查看网卡的UUID与网卡名称对应的设备名称
[[email protected] ~]$ 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之中;
import uuid
class 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'x12x34x56x78'*4)
UUID(bytes_le=b'x78x56x34x12x34x12x78x56' +b'x12x34x56x78x12x34x56x78')
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')
基础示例:
#!/usr/bin/env python
# python有一个模块叫做uuid,导入它就可以使用它的四个方法了
import uuid
print uuid.uuid1()
#bf1dfacf-67d8-11e8-9a23-408d5c985711
print uuid.uuid3(uuid.NAMESPACE_DNS, 'yuanlin') #UUID using an MD5 hash of a namespace UUID and a name
#ddb366f5-d4bc-3a20-ac68-e13c0560058f
print uuid.uuid4()
#144d622b-e83a-40ea-8ca1-66af8a86261c
print uuid.uuid5(uuid.NAMESPACE_DNS, 'yuanlin') #UUID using a SHA-1 hash of a namespace UUID and a name
#4a47c18d-037a-5df6-9e12-20b643c334d3
方式2:Linux中shell采用uuidgen进行生成
uuidgen
fcfe9f3e-1edc-43fe-8b29-c2a92958ce41
方式3:采用JS生成uuid
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-16c6-833f-96c827fd17d8
725ad3d6-6eb1-12a2-855f-5a8a8bb6859d
方式4:采用java的util包里面的UUID类实现
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("-", "");
}
}
//调用执行效果
56e41c4d8aa64e3cbf4d1d119004af61
f1d443fcb9564ae7b3fc1993de1680d5
91fe1a1ef54843c08c42ba8c68f98d4b
2f763662d0b24b0f8e18c6f0da4dd643
4bf13006b8324ed8bfe4c194d6cb057e
1947e4ef40cb49c28ecfd2d725815ef8
附录
- 匹配生成UUID
- 剑指offer代码解析——面试题23从上往下打印二叉树
- Spring Boot 集成Shiro和CAS
- 剑指offer代码解析——面试题22栈的压入、弹出序列
- 剑指offer代码解析——面试题21包含min函数的栈
- 剑指offer代码解析——面试题19二叉树的镜像
- mysql高可用架构设计,处理高并发,大流量!
- 零基础入门深度学习 | 第三章:神经网络和反向传播算法
- 微信企业付款到个人钱包引发的坑之反思~!
- Intellij idea创建javaWeb以及Servlet简单实现
- 设计模式之代理模式之读写分离!!!
- Phantomjs+Nodejs+Mysql数据抓取(1.数据抓取)
- Phantomjs+Nodejs+Mysql数据抓取(2.抓取图片)
- 深入浅出Redis-redis底层数据结构(上)
- Linux下自动化监控内存、存储空间!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- SAP CRM One Order函数CRM_Object_FILL_OW的设计原理
- SAP CRM One Order header extension的缓存机制设计原理
- SAP CRM数据库表CRMD_CUMULAT_H的设计原理
- Python从入门到大师一百篇教程 | 前言:Python的前世和发展
- Java和ABAP的垃圾回收机制(Garbage Collection)比较
- Java和SAP ABAP的异常处理
- Java的字节码和ABAP load的比较
- matplotlib | Python强大的作图工具,让你从此驾驭图表(一)
- 使用ES6的fetch API读取数据时要注意的一个和cookie相关的坑
- 跟牛老师一起学WEBGIS——WEBGIS基础(地图切片)
- Go语言 | 并发设计中的同步锁与waitgroup用法
- LeetCode 99 | 如何不用递归遍历二叉搜索树?MT方法给你答案
- 以攻击者角度学习某风控设备指纹产品
- 高并发系统三大利器之缓存
- 前端测试题:(解析)js中关于类(class)的继承的说法,下面错误的是?