Назад | Перейти на главную страницу

Как получить точку монтирования флешки с помощью uuid?

Я новичок в ubuntu linux, и мне нужно написать простой сценарий bash, который может идентифицировать необходимую флешку (которая содержит только одну vfat partition), используя uuid этого раздела, и получите точку монтирования этой флешки. / etc / fstab файл не содержит правила монтирования для этого диска. Например, позвольте разделить 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
      ...

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

mount знает это.

Пример:

mount | grep /dev/sdc1

Или (вероятно, будет быстрее):

grep '/dev/sdc1' /etc/mtab