从脚本中获取 / 文件系统的 UUID

Dmi*_*san 11 command-line partitioning scripts mountpoint uuid

如何获取包含/文件系统的卷的 UUID ?迄今为止我发现的最好的事情是blkid -o list. 但是这个输出是人类可读的并且难以解析。也许有更好的方法?

我需要使用特定于系统的模板来参数化配置管理。

请注意blkid那些将来可能会重复使用我的问题结果的人的陷阱:blkid将先前运行的结果缓存在/etc/blkid.tab. 这意味着blkid第一次以非 root 用户身份运行不会返回任何数据。此外,blkid在 root 运行后以非 root 用户身份运行将返回陈旧(可能不正确)的数据。

mur*_*uru 25

使用findmnt

$ findmnt /        
TARGET SOURCE       FSTYPE OPTIONS
/      /dev/md127p1 ext4   rw,relatime,stripe=256,data=ordered
$ findmnt / -o UUID
UUID
046a554b-d9f5-4b23-82e6-ffaeb98284aa
$ findmnt / -o UUID -n
046a554b-d9f5-4b23-82e6-ffaeb98284aa
Run Code Online (Sandbox Code Playgroud)

它还有几个选项来控制它如何查找信息以及它如何呈现它(包括 JSON 输出!)。它是mount软件包的一部分,因此可用于任何 Ubuntu 安装。


pLu*_*umo 11

另一种解决方案:

lsblk -nr -o UUID,MOUNTPOINT | grep -Po '.*(?= /$)'
Run Code Online (Sandbox Code Playgroud)
  • -n 抑制标题(不是真正需要,但更安全的解析)
  • -r 生成原始输出(使解析更安全)
  • -o UUID,MOUNTPOINT 只包含必要的信息


Arr*_*cal 5

可以使用lsblk命令输出UUID,但需要分区的设备名(如/dev/sda2)。您可以通过使用该df命令并修剪输出来获得此信息。使用命令替换将设备名称赋予lsblk. 看来您需要 sudo 来访问 UUID,尽管 lsblk 的正常输出不需要它:

sudo lsblk -n -o UUID "$(df -P / | tail -n1 | cut -d' ' -f1)"
Run Code Online (Sandbox Code Playgroud)

  • 在 16.04 没有 `sudo` 的情况下,这对我有用。 (2认同)