Как я могу получить UUID тома, который содержит /
файловую систему? Лучшее, что я нашел на сегодняшний день, это blkid -o list
. Но этот вывод читается человеком и его трудно разобрать. Может быть, есть лучший способ?
Мне это нужно для параметризации управления конфигурацией с помощью системных шаблонов.
ПРИМЕЧАНИЕ о blkid
том, кто может повторно использовать результаты моего вопроса в будущем: blkid
кэширует результаты предыдущих прогонов на /etc/blkid.tab
. Это означает, что при запуске blkid
от имени пользователя без полномочий root данные не возвращаются. Кроме того, выполнение blkid
от имени пользователя без полномочий root после запуска root вернет устаревшие (возможно, некорректные) данные.
command-line
scripts
partitions
mountpoint
uuid
Dmitriusan
источник
источник
/dev/disk/by-label
... Это также работает для разделов, которые не смонтированы. Он имеет преимущество в том, что может писать сценарии, выполняющие такие вещи, как rsync, от root до root-bak, что гораздо менее подвержено ошибкам, чем использование 2 UUIDS, которые ничего не «значат».Ответы:
Используйте
findmnt
:У него также есть несколько опций для управления тем, как она ищет информацию и как она ее представляет (включая вывод JSON!). Это часть
mount
пакета, доступная для любой установки Ubuntu.источник
Другое решение:
-n
подавляет заголовок (не очень нужен, но безопаснее для разбора)-r
делает необработанный вывод (делает его более безопасным для анализа)-o UUID,MOUNTPOINT
включать только необходимую информациюисточник
Вы можете использовать
lsblk
команду для вывода UUID, но вам нужно имя устройства раздела (например, / dev / sda2). Вы можете получить это с помощьюdf
команды и обрезки вывода. Используйте подстановку команд, чтобы присвоить имя устройствуlsblk
. Похоже, вам нужен sudo для доступа к UUID, хотя для нормального вывода lsblk это не требуется:источник
sudo
16.04.lsblk
или неblkid
выполнялся root, и она работала отлично. Знаете ли вы, почему возникла проблема с кэшированием этой команды, а не версии, опубликованной Rovo? Может ли необработанный вывод каким-либо образом обойти кеширование?blkid
с правами root, при создании файла кэша при/dev/.blkid.tab
использовании sudolsblk
не будет отображаться ничего из столбца UUID. Я не думаю, что есть риск устаревания продукции.Лучшее решение, которое мне удалось найти, это
По ощущениям неоптимально, но работает.
Примечание: [[: space:]] означаетSpace
источник
sudo
.Установите значение
mountpoint
текущей точки монтирования файловой системы:источник
Вот что я использую:
tune2fs находится в пакете e2fsprogs, который я не могу вспомнить, установлен ли он по умолчанию.
если он не установлен.
источник
awk: not an option: -e
отредактировал ваш ответ, чтобы сделать его функциональным. Если я перешагнул, пожалуйста, не стесняйтесь откатываться назад. Ура! :-)gawk
. Я получаю ошибку, указанную в 16.04, которая используетсяmawk
вместо этого.Проверено на работу 14.04 и 16.04
Простой один вкладыш , который всегда должен производить UUID из корня
/
являетсяЗдесь мы собираем выходные данные команды mount, чтобы сопоставить корневой символ с пробелами с обеих сторон,
/
чтобы избежать совпадения при/
использовании в качестве символа расширения пути, передавая это черезawk
использование «on» в качестве разделителя полей, чтобы вывести только имя устройства и присвоение TH для переменной среды $ DRIVE, затем используя выводblkid $DRIVE
piped через cut, используя в"
качестве разделителя полей, и выбирая только второе поле, которое удаляет все остальное, оставляя только UUID.Обратите внимание , что после команды grep в приведенной выше команде на самом деле указано « space/ space», а не «/», как кажется.
Преимущество в том, что он не требуется,
sudo
и даст соответствующий результат независимо от того, как смонтирован привод.Было бы разумно убедиться, что вы не используете переменную окружения $ DRIVE для чего-либо еще, прежде чем пытаться использовать этот подход, и вы
echo $DRIVE
получите пустую строку, если вы не используете переменную.источник