Как получить точку монтирования флешки с помощью 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?
4 ответа
Что вы после того, как 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
Чтобы найти фактическое устройство из 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 групп непробелов + пробелов ничем, оставляя только остаток строки. Который является точкой монтирования, включая любые возможные пробелы.
Таблица монтирования ядра находится по адресу /proc/mounts
, Это немного надежнее, чем /etc/mtab
потому что системная / программная ошибка может привести к mtab
быть испорченным или не записанным, когда это должно быть.