Как получить точку монтирования флешки с помощью 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 быть испорченным или не записанным, когда это должно быть.

Другие вопросы по тегам