Я новичок в 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