Comment puis-je obtenir l'UUID d'un volume qui contient 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 y a-t-il une meilleure façon?
J'en ai besoin pour paramétrer la gestion de la configuration avec des modèles spécifiques au système.
REMARQUE à propos de blkid
gotcha pour ceux qui pourraient 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 la première exécution en blkid
tant qu'utilisateur non root ne renverra aucune donnée. En outre, l'exécution en blkid
tant qu'utilisateur non root après l'exécution de root retournera des données périmées (éventuellement incorrectes).
la source
/dev/disk/by-label
... Cela fonctionne également pour les partitions qui ne sont pas montées. Il a l'avantage de pouvoir écrire des scripts qui font des choses comme rsync de root à root-bak qui est beaucoup moins sujet aux erreurs que d'utiliser 2 UUIDS qui ne "signifient" rien.Réponses:
Utilisation
findmnt
:Il dispose également de plusieurs options pour contrôler la façon dont il recherche les informations et la façon dont elles les présentent (y compris la sortie JSON!). Cela fait partie du
mount
package, donc disponible sur toute installation Ubuntu.la source
Une autre solution:
-n
supprime l'en-tête (pas vraiment nécessaire, mais plus sûr pour l'analyse)-r
rend la sortie brute (rend l'analyse plus sûre)-o UUID,MOUNTPOINT
inclure uniquement les informations nécessairesla source
Vous pouvez utiliser la
lsblk
commande pour sortir 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 ladf
commande et en découpant la sortie. Utilisez la substitution de commandes pour donner le nom du 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:la source
sudo
le 16.04.lsblk
niblkid
exécuté par root et cela a parfaitement fonctionné. Savez-vous pourquoi il y aurait un problème de mise en cache avec cette commande et non avec la version publiée par Rovo? La sortie brute contourne-t-elle la mise en cache d'une certaine manière?blkid
tant que root, la création du fichier cache sur/dev/.blkid.tab
, l'utilisation non-sudo delsblk
ne montrera rien de la colonne UUID. Je ne pense pas qu'il y ait un risque de sortie périmée.La meilleure solution que j'ai réussi à trouver est
Se sent non optimal, mais fonctionne.
Remarque: [[: espace:]] signifieSpace
la source
sudo
.Ajustez la valeur de
mountpoint
au point de montage actuel du système de fichiers en question:la source
Voici ce que j'utilise:
tune2fs est dans le package e2fsprogs, dont je ne me souviens pas s'il est installé par défaut.
s'il n'est pas installé.
la source
awk: not an option: -e
j'ai édité votre réponse pour la rendre fonctionnelle. Si j'ai outrepassé, n'hésitez pas à le faire reculer. À votre santé! :-)gawk
. J'obtiens l'erreur spécifiée sous 16.04 qui semble utiliser à lamawk
place.Testé pour fonctionner les 14.04 et 16.04
Un simple doublure qui devrait toujours produire l'UUID d'une racine
/
estCe que nous faisons ici est de saluer la sortie de mount pour faire correspondre le symbole racine avec des espaces de chaque côté
/
pour éviter de faire correspondre quand/
est utilisé comme symbole d'extension de chemin, enawk
utilisant cela en utilisant "on" comme séparateur de champ afin de sortir uniquement le nom du périphérique et affectation de cela à la variable d'environnement $ DRIVE, puis en utilisant la sortie deblkid $DRIVE
coupe par canalisation en utilisant le"
comme séparateur de champ et en sélectionnant uniquement le deuxième champ qui supprime tout le reste, ne laissant que l'UUID.Notez que ce qui appartient après grep dans la commande ci-dessus est en fait ' space/ space' et non '/' tel qu'il apparaît.
Cela a l'avantage de ne pas nécessiter
sudo
et retournera le résultat approprié quelle que soit la façon dont le lecteur est monté.Il serait sage de s'assurer que vous n'utilisez pas la variable d'environnement $ DRIVE pour autre chose avant d'essayer cette approche
echo $DRIVE
retournera une ligne vide si vous n'utilisez pas la variable.la source