我是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组非空格+空格,只剩下行的其余部分。 哪个是挂载点,包括任何可能的空间。