Как получить UUID файловой системы по заданному пути?

9

Мне вручают путь к каталогу или файлу.

Какая утилита / сценарий оболочки надежно выдаст мне UUID файловой системы, в которой находится этот каталог / файл?

Под UUID файловой системы я подразумеваю UUID=...запись, как показано, например,blkid

Я использую Redhat Linux.

(кто-то предложил мне спросить об этом здесь, на unix.stackexchange.com, поэтому я переместил его с оригинального stackexchange.com)

linfan
источник
3
См. Unix.stackexchange.com/questions/11311/… о том, как получить файловую систему, следуя которой вы можете запустить blkid.
Муру
Обратите внимание, что не все файловые системы будут иметь UUID; blkid не даст вам UUID, например. для монтирования NFS.
Оливер

Ответы:

8

Один вариант stat+ findmntкомбо:

findmnt -n -o UUID $(stat -c '%m' "$path")

Здесь -nотключает заголовок и -o UUIDпечатает только значение UUID. Вариант -c '%m'из statприсутствует на выходе только MOUNTPOINT по заданному пути.

jimmij
источник
2
Там нет необходимости stat:findmnt -no uuid -T "$path"
don_crissti
3

Вы можете использовать df, чтобы найти точку монтирования файла, а затем применить результат к blkid к UUID. Вам нужно запустить (как минимум) blkid от имени пользователя root, чтобы это работало:

FILE_OR_DIR="$PWD"
blkid -s UUID -o value $( df "$FILE_OR_DIR" )
roaima
источник
Лучше было бы -o export, так как это печатает вывод формы UUID=....
Муру
@muru мне не было ясно, нужен ли был только UUID ( -o value) или UUID="value"выражение типа ( -o export). Я выбрал ценность.
Роайма