如何使用uuid获取闪存驱动器的安装点?

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

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

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

你之后是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 ... 

mount知道这一点。

例:

 mount | grep /dev/sdc1 

或者(可能会更快):

 grep '/dev/sdc1' /etc/mtab 

内核的挂载表位于/proc/mounts 。 这比/etc/mtab更可靠,因为系统/软件错误可能导致mtab被破坏或不应该被写入。

要从UUID中find实际的设备, blkid可能比你的readlink解决scheme更好,这个解决scheme依赖于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的。 使用-P (POSIX)选项的df解决scheme也应该在Mac和其他Unix系统上工作。

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

如果你担心你的前任可能做到了这一点,你可以使用Perl而不是awk:

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

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

perl正则expression式replace5组非空格+空格,只剩下行的其余部分。 哪个是挂载点,包括任何可能的空间。