Получите UUID / файловая система из сценария

Как я могу получить UUID объема, который содержит / файловая система? Лучшая вещь, для которой я нашел до настоящего времени, blkid -o list. Но этот вывод человекочитаем и труден проанализировать. Возможно, существует лучший путь?

Мне нужно это для параметризации управления конфигурацией с определенными для системы шаблонами.

ОТМЕТЬТЕ о blkid глюк для тех, кто может снова использовать результаты моего вопроса в будущем: blkid результаты кэшей предыдущих выполнений в /etc/blkid.tab . Это означает то выполнение blkid как некорневой пользователь первый раз не возвратит данных. Кроме того, выполнение blkid как некорневой пользователь после того, как выполненный корень возвратится устаревший (возможно неправильный) данные.

11
задан 30 September 2017 в 11:22

7 ответов

Используйте 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.

24
ответ дан 23 November 2019 в 03:49

Можно использовать эти lsblk команда для вывода UUID, но Вам нужно имя устройства раздела (такого как/dev/sda2). Можно получить это при помощи эти df команда и обрезка вывода. Используйте замену команды для предоставления имени устройства lsblk. Кажется, что Вам нужен sudo для доступа к UUID, хотя нормальный вывод lsblk не требует его:

sudo lsblk -n -o UUID "$(df -P / | tail -n1 | cut -d' ' -f1)"
5
ответ дан 23 November 2019 в 03:49

Другое решение:

lsblk -nr -o UUID,MOUNTPOINT | grep -Po '.*(?= /$)'
  • -n подавляет заголовок (не действительно необходимый, но более безопасный для парсинга)
  • -r делает необработанный вывод (делает более безопасным проанализировать)
  • -o UUID,MOUNTPOINT, включают только необходимую информацию
11
ответ дан 23 November 2019 в 03:49

Скорректируйте значение mountpoint к текущей точке монтирования рассматриваемой файловой системы:

dev="$(exec awk -v mountpoint='/' '($2 == mountpoint){ print $1; quit; }' /proc/mounts)" &&
sudo blkid -o export -- "$dev" | sed -ne 's/^UUID=//p'
4
ответ дан 23 November 2019 в 03:49

Вот то, что я использую:

sudo tune2fs -l $(df  / | tail -1 |awk '{print $1}') |grep UUID|awk '{ print $3 }'

tune2fs находится в e2fsprogs пакете, который я не могу помнить, установлен ли он по умолчанию.

sudo apt install e2fsprogs

, если это не установлено.

1
ответ дан 23 November 2019 в 03:49

Протестированный для работы над 14,04 и 16.04

А простая острота, которая должна всегда производить UUID корень /,

$ DRIVE= экспорта (смонтируйтесь | grep '/'| awk-F" на "'{печатают 1$} '); $DRIVE blkid | сокращают-d '"'-f2'

, Что мы делаем, здесь захватывает вывод монтирования для соответствия корневому символу пробелам с обеих сторон /, чтобы не соответствовать, когда / используется в качестве символа расширения пути, передавая это по каналу до awk использование "на" как разделитель полей для вывода только имени устройства и присвоения, ЧТО к $DRIVE переменной среды, затем с помощью вывода blkid $DRIVE переданный по каналу посредством сокращения с помощью " как разделитель полей и выбирая только второе поле, которое разделяет все остальное, оставляя только UUID.

Примечание , которое, что принадлежит после grep вышеупомянутой команды, на самом деле' пространство / пространство ' и не '/', как это появляется.

Это обладает преимуществом не требования sudo и возвратит соответствующий результат независимо от того, как диск смонтирован.

было бы мудро обеспечить, чтобы Вы не использовали переменную среды $DRIVE ни для чего больше до попытки этого подхода echo $DRIVE, возвратит пустую строку, если Вы не будете использовать переменную.

1
ответ дан 23 November 2019 в 03:49

Лучшее решение, которое мне удалось предложить,

blkid -o list | awk '/\/[[:space:]]+/{ print $0 }' | tr -s ' ' | cut -d ' ' -f 4

Чувствует себя подобно неоптимальный, но работы.

Примечание: [[: пространство:]] означает Пространство

4
ответ дан 23 November 2019 в 03:49

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

Похожие вопросы: