Как я могу получить UUID объема, который содержит /
файловая система? Лучшая вещь, для которой я нашел до настоящего времени, blkid -o list
. Но этот вывод человекочитаем и труден проанализировать. Возможно, существует лучший путь?
Мне нужно это для параметризации управления конфигурацией с определенными для системы шаблонами.
ОТМЕТЬТЕ о blkid
глюк для тех, кто может снова использовать результаты моего вопроса в будущем: blkid
результаты кэшей предыдущих выполнений в /etc/blkid.tab
. Это означает то выполнение blkid
как некорневой пользователь первый раз не возвратит данных. Кроме того, выполнение blkid
как некорневой пользователь после того, как выполненный корень возвратится устаревший (возможно неправильный) данные.
Используйте findmnt
:
$ findmnt /
TARGET SOURCE FSTYPE OPTIONS
/ /dev/md127p1 ext4 rw,relatime,stripe=256,data=ordered
$ findmnt / -o UUID
UUID
046a554b-d9f5-4b23-82e6-ffaeb98284aa
$ findmnt / -o UUID -n
046a554b-d9f5-4b23-82e6-ffaeb98284aa
Это также имеет несколько опций управлять, как это ищет информацию, и как это представляет его (включая вывод JSON!). Это - часть mount
пакет, настолько доступный на любой установке Ubuntu.
Можно использовать эти lsblk
команда для вывода UUID, но Вам нужно имя устройства раздела (такого как/dev/sda2). Можно получить это при помощи эти df
команда и обрезка вывода. Используйте замену команды для предоставления имени устройства lsblk
. Кажется, что Вам нужен sudo для доступа к UUID, хотя нормальный вывод lsblk не требует его:
sudo lsblk -n -o UUID "$(df -P / | tail -n1 | cut -d' ' -f1)"
Другое решение:
lsblk -nr -o UUID,MOUNTPOINT | grep -Po '.*(?= /$)'
-n
подавляет заголовок (не действительно необходимый, но более безопасный для парсинга) -r
делает необработанный вывод (делает более безопасным проанализировать) -o UUID,MOUNTPOINT
, включают только необходимую информацию Скорректируйте значение mountpoint
к текущей точке монтирования рассматриваемой файловой системы:
dev="$(exec awk -v mountpoint='/' '($2 == mountpoint){ print $1; quit; }' /proc/mounts)" &&
sudo blkid -o export -- "$dev" | sed -ne 's/^UUID=//p'
Вот то, что я использую:
sudo tune2fs -l $(df / | tail -1 |awk '{print $1}') |grep UUID|awk '{ print $3 }'
tune2fs находится в e2fsprogs пакете, который я не могу помнить, установлен ли он по умолчанию.
sudo apt install e2fsprogs
, если это не установлено.
Протестированный для работы над 14,04 и 16.04
А простая острота, которая должна всегда производить UUID корень /
,
$ DRIVE= экспорта (смонтируйтесь | grep '/'| awk-F" на "'{печатают 1$} '); $DRIVE blkid | сокращают-d '"'-f2'
, Что мы делаем, здесь захватывает вывод монтирования для соответствия корневому символу пробелам с обеих сторон /
, чтобы не соответствовать, когда /
используется в качестве символа расширения пути, передавая это по каналу до awk
использование "на" как разделитель полей для вывода только имени устройства и присвоения, ЧТО к $DRIVE переменной среды, затем с помощью вывода blkid $DRIVE
переданный по каналу посредством сокращения с помощью "
как разделитель полей и выбирая только второе поле, которое разделяет все остальное, оставляя только UUID.
Примечание , которое, что принадлежит после grep вышеупомянутой команды, на самом деле' пространство / пространство ' и не '/', как это появляется.
Это обладает преимуществом не требования sudo
и возвратит соответствующий результат независимо от того, как диск смонтирован.
было бы мудро обеспечить, чтобы Вы не использовали переменную среды $DRIVE ни для чего больше до попытки этого подхода echo $DRIVE
, возвратит пустую строку, если Вы не будете использовать переменную.
Лучшее решение, которое мне удалось предложить,
blkid -o list | awk '/\/[[:space:]]+/{ print $0 }' | tr -s ' ' | cut -d ' ' -f 4
Чувствует себя подобно неоптимальный, но работы.
Примечание: [[: пространство:]] означает Пространство