我是 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 组非空格+空格替换为空,只留下行的其余部分。这是包括任何可能空格的挂载点。