如何使用 uuid 获取闪存驱动器的挂载点?

如何使用 uuid 获取闪存驱动器的挂载点?

我是 ubuntu linux 的初学者,我需要编写简单的 bash 脚本,它可以识别必要的闪存驱动器(仅包含一个vfat使用该分区的 uuid 来获取该闪存驱动器的挂载点。/etc/fstab文件不包含此驱动器的挂载规则。例如,让分区 uuid 为 7DCD-9380 使用 readlink 工具我可以获得设备链接/dev目录 :

teddy@st1:~$ readlink -f /dev/disk/by-uuid/7DCD-9380  
/dev/sdc1

但是我怎样才能获得挂载点/dev/sdc1设备 ?

答案1

你想要的是findmnt。例如:

$ findmnt -rn -S UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -o TARGET
/mnt/mountpoint

或者

$ findmnt -rn -S PARTUUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -o TARGET
/mnt/mountpoint

如果没有安装与该 UUID 匹配的任何内容,则不会输出任何内容并且返回代码为 1(失败),否则,会输出安装点并且返回代码为 0(成功)。

选项说明

-r, --raw              use raw output format
-n, --noheadings       don't print column headings
-S, --source <string>  the device to mount (by name, maj:min, 
                         LABEL=, UUID=, PARTUUID=, PARTLABEL=)
-o, --output <list>    the output columns to be shown

Available columns:
      ...
      TARGET  mountpoint
      ...

答案2

mount知道这一点。

例子:

mount | grep /dev/sdc1

或者(可能更快):

grep '/dev/sdc1' /etc/mtab

答案3

内核的挂载表位于/proc/mounts。这比 稍微可靠一些/etc/mtab,因为系统/软件错误可能会导致 被mtab破坏或未在应该写入时写入。

答案4

从 UUID 找到实际的设备blkid可能比readlink依赖于 udev 的解决方案更好。

myuuid="7DCD-9380"
mydev=$(blkid -l -o device -t UUID="$myuuid")

要获取此设备的挂载点,您可以使用以下命令:

grep $mydev /proc/mounts | cut -d' ' -f 2

或者

df -P | grep $mydev | awk '{print $6}'

后者更易于移植,因为 /proc 仅适用于 Linux。df带有-P(POSIX) 选项的解决方案也适用于 Mac 和其他 Unix 系统。

当然,如果您的挂载点包含空格,则两者都会中断。但是没有人会在“/mnt/evil mount point/”中挂载东西,对吧?

如果您担心您的前任可能已经这样做了,您可以使用 perl 代替 awk:

df -P | grep $mydev | perl -pe 's/^(\S+\s+){5}//'

(grep 也可以由 perl 处理,但对于某些人来说可能更难读取)

perl 正则表达式将 5 组非空格+空格替换为空,只留下行的其余部分。这是包括任何可能空格的挂载点。

相关内容