web-dev-qa-db-fra.com

Obtenir l'UUID du système de fichiers à partir du script

Comment obtenir l'UUID d'un volume contenant le système de fichiers /? La meilleure chose que j'ai trouvée à ce jour est blkid -o list. Mais cette sortie est lisible par l'homme et difficile à analyser. Peut-être qu'il y a un meilleur moyen?

J'ai besoin de cela pour paramétrer la gestion de la configuration avec des modèles spécifiques au système.

NOTE à propos de blkid gotcha pour ceux qui peuvent réutiliser les résultats de ma question à l’avenir: blkid met en cache les résultats des exécutions précédentes sur /etc/blkid.tab. Cela signifie que l’exécution de blkid en tant qu’utilisateur non root pour la première fois ne renverra aucune donnée. blkid en tant qu'utilisateur non root après l'exécution de la racine retournera des données périmées (éventuellement incorrectes).

11
Dmitriusan

Utilisez 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

Il propose également plusieurs options pour contrôler la manière dont les informations sont trouvées et présentées (y compris la sortie JSON!). Cela fait partie du paquetage mount, donc disponible sur n'importe quelle installation Ubuntu.

24
muru

Une autre solution:

lsblk -nr -o UUID,MOUNTPOINT | grep -Po '.*(?= /$)'
  • -n supprime l'en-tête (pas vraiment nécessaire, mais plus sûr pour l'analyse)
  • -r crée une sortie brute (rend l'analyse plus sûre)
  • -o UUID,MOUNTPOINT inclure uniquement les informations nécessaires
11
pLumo

Vous pouvez utiliser la commande lsblk pour générer l'UUID, mais vous avez besoin du nom de périphérique de la partition (tel que/dev/sda2). Vous pouvez l'obtenir en utilisant la commande df et en tronquant la sortie. Utilisez la substitution de commande pour attribuer le nom de périphérique à lsblk. Il semble que vous ayez besoin de Sudo pour accéder à l’UUID, bien que la sortie normale de lsblk ne l’exige pas:

Sudo lsblk -n -o UUID "$(df -P / | tail -n1 | cut -d' ' -f1)"
5
Arronical

Ajustez la valeur de mountpointau point de montage actuel du système de fichiers en question:

dev="$(exec awk -v mountpoint='/' '($2 == mountpoint){ print $1; quit; }' /proc/mounts)" &&
Sudo blkid -o export -- "$dev" | sed -ne 's/^UUID=//p'
4
David Foerster

La meilleure solution que j'ai réussi à trouver est

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

On se sent comme non optimal, mais ça marche.

Note: [[: espace:]] signifie Space

4
Dmitriusan

Testé pour fonctionner les 14.04 et 16.04

Une ligne simple qui devrait toujours produire l’UUID de la racine / est

export DRIVE = $ (mount | grep '/' | awk -F "on" '{print $ 1}'); blkid $ DRIVE | cut -d '"' -f2`

Ce que nous faisons ici c’est grepping la sortie de mount pour faire correspondre le symbole racine avec des espaces de part et d’autre / pour éviter la correspondance lorsque / est utilisé comme symbole d’extension de chemin, en passant par awk en utilisant "on" comme séparateur de champ afin de affiche uniquement le nom du périphérique et attribue à la variable d'environnement $ DRIVE l'attribution de THAT, puis à l'aide de la sortie de blkid $DRIVE transmise par couper en utilisant le " comme séparateur de champ et en sélectionnant uniquement le deuxième champ qui supprime tout le reste, en laissant uniquement l'UUID.

Note que ce qui appartient après grep dans la commande ci-dessus est en réalité 'space/space'et non'/'tel qu'il apparaît.

Cela présente l'avantage de ne pas nécessiter Sudo et renvoie le résultat approprié, quel que soit le mode de montage du lecteur.

Il serait sage de vous assurer que vous n'utilisez pas la variable d'environnement $ DRIVE avant d'essayer cette approche. echo $DRIVE renverra une ligne vide si vous n'utilisez pas la variable.

1
Elder Geek

Voici ce que j'utilise:

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

tune2fs est dans le paquet e2fsprogs, dont je ne me souviens plus s’il est installé par défaut.

Sudo apt install e2fsprogs

si ce n'est pas installé.

1
John