GNU/Linux >> Tutoriels Linux >  >> Linux

Findmnt - Meilleur moyen de trouver des systèmes de fichiers montés sur Linux

J'ai travaillé sur un projet de script bash pour construire automatiquement Linux à partir de zéro. Chaque fois que je parcours le code, je trouve un moyen de le rendre plus propre. Je prends une petite section de code et je l'améliore.

L'autre jour, je faisais une modification pour vérifier si un système de fichiers est monté avant de le monter. Je cherchais une meilleure façon de le faire. Je ne voulais pas utiliser l'habituel mount | grep ou tout autre code similaire. Je voulais quelque chose de plus propre.

Montage contre Findmnt

Je ne sais pas pourquoi, mais à ce moment-là, je me suis demandé pourquoi je me connectais si souvent à Internet pour trouver des informations qui se trouvaient déjà sur mon ordinateur portable. Alors, j'allume man mount, J'ai rapidement jeté un coup d'œil à la page de manuel et j'ai remarqué ceci :

Et là j'ai eu ma réponse. D'abord, j'utilise la mauvaise commande depuis un moment maintenant. Deuxièmement, Google n'a pas toujours la meilleure réponse.

L'ironie ici est que cela n'est pas mentionné dans les pages de manuel en ligne que je consulte habituellement. Voyez par vous-même, sur la page de manuel de mount, findmnt n'est référencé qu'à la fin. Si j'étais passé par mes canaux habituels pour trouver une réponse, je n'aurais pas écrit cet article.

Tout de suite, je suis devenu très curieux, à quel point cette découverte est-elle meilleure ? Combien de canaux puis-je supprimer de mes scripts ? Il s'avère que c'est tellement mieux que monter référencement. Tout d'abord, comparons la sortie par défaut de chaque commande.

Monter la sortie par défaut

En regardant la liste ci-dessus du système de fichiers monté, il est facile de comprendre pourquoi grep est devenu si populaire. Toutes les informations sont là, mais un meilleur format faciliterait la lecture. Pour ce faire, vous auriez déjà besoin d'un canal et d'une commande externe. Regardons maintenant findmnt .

Rechercher la sortie par défaut

Ça a l'air beaucoup mieux. Ça va mieux, avec findmnt vous n'aurez plus besoin d'utiliser une combinaison d'outils. Il est très flexible et cela vous donne la possibilité d'écrire du code plus propre lorsqu'il est utilisé dans un script.

Utilisation pratique de la commande findmnt sous Linux

Vérifier si un système de fichiers est monté avec findmnt est beaucoup plus facile. Vous pouvez rechercher une source ou cible sans utiliser aucune option. Indiquez un point de montage (cible ) ou périphérique (source ) sans option et findmnt tentera de faire correspondre l'argument que vous avez fourni contre les deux.

findmnt /boot

Findmnt fonctionne vraiment comme une commande de recherche pour le système de fichiers. Si des correspondances sont trouvées, elles seront imprimées et findmnt renvoie 0. Lorsque rien ne correspond à votre requête, findmnt n'imprime rien et renvoie 1.

Une longue liste d'options est fournie avec findmnt . Vous avez 2 catégories principales d'options, affinant votre recherche et formatant la sortie.

Comme trouver pour trouver des fichiers, findmnt est pour trouver le système de fichiers. Vous savez déjà comment limiter votre recherche en fournissant une chaîne qui sera mise en correspondance avec SOURCE et TARGET. Si vous devez limiter votre recherche à une SOURCE ou à une CIBLE, utilisez les options -S et -T.

Déjà à ce stade, j'étais convaincu d'utiliser findmnt au lieu de monter . Je peux interroger la partition que je veux. Et je n'utilise pas de tuyau. Findmnt ne s'arrête pas là, il dispose d'une multitude d'options conçues pour vous offrir une recherche puissante du système de fichiers.

Je pense que l'une des options les plus intéressantes est -O , –options . Le -O options vous permet d'écrire une liste d'options à comparer à votre recherche. Rechercher un système de fichiers en lecture seule est désormais aussi simple que findmnt -O ro.

Le -O les options peuvent également prendre une liste séparée par des virgules. Cela vous permet de rechercher plusieurs options et de ne répertorier que les systèmes de fichiers contenant toutes les options souhaitées.

La recherche d'un type de système de fichiers donné ne nécessite pas non plus l'utilisation d'outils externes. Utilisez simplement le -t options. Dans l'exemple ci-dessous, j'ai répertorié tous les tmpfs monter.

Dans tous les exemples ci-dessus, findmnt a recherché /etc/fstab, /etc/mtab et /proc/self/mountinfo. Vous pouvez facilement limiter cette large recherche avec les options suivantes :

  • –fstab (Recherche restreinte à /etc/fstab uniquement)
  • –mtab (Recherche restreinte à /etc/mtab uniquement)
  • –noyau (Recherche dans /proc/self/mountinfo uniquement)

Une autre option intéressante est -i , –inverser . Ce qui inverse le sens de l'appariement. Dans un exemple précédent, nous avons listé tous les tmpfs avec le -t option. L'exemple ci-dessous listera tous les systèmes de fichiers de type swap depuis fstab uniquement.

findmnt --fstab -t swap

Celui-ci listera tous les systèmes de fichiers sauf ceux de type swap.

findmnt --fstab -t swap -i

Déjà avec les options données, vous pouvez éviter d'utiliser beaucoup de tuyaux et de programmes externes. Et cela ne s'arrête pas là. Trouver fournit un bon ensemble d'options pour personnaliser la sortie de vos résultats de recherche.

Personnalisation de la sortie de la commande findmnt

Vous n'aurez pas besoin d'utiliser la commande head pour supprimer l'en-tête. Appelez simplement findmnt avec -n choix :

Je ne m'attendais pas à ce que la prochaine option soit même une option. Findmnt peut imiter la sortie de la commande df. Appeler findmnt avec -D ou –df dira findmnt pour afficher des informations sur l'espace pour chaque système de fichiers répertorié.

Les options peuvent être combinées pour une recherche plus spécifique. Dans cet exemple suivant, j'utilise findmnt pour lister tous les systèmes de fichiers de /etc/fstab et demander d'afficher les informations df.

findmnt --fstab --df

Je ne sais pas pour vous, mais je commence à apprécier findmnt . Sauf pour ces UUID avec la dernière commande. Je comprends, c'est un bon moyen d'identifier le périphérique pour le système d'exploitation. Moi, j'aimerais une manière plus humainement lisible. Vous accomplissez cela avec le -e option.

Le -e ou –évaluer option avec convertir toutes les balises comme UUID, LABEL, PARTLABEL, PARTUUID au nom de l'appareil correspondant. Voir les résultats lorsque j'exécute la même commande avec -e options.

J'aime trouver formater sa sortie. C'est plus humain. D'un autre côté, ce format lorsqu'il est utilisé dans un script peut être plus difficile à manipuler. Un simple ensemble de données ligne par ligne et séparés par des espaces serait plus simple. Cela se fait facilement avec -r , –brut option.

Cette option suivante est vraiment sympa. Je pense que cela supprime le besoin de | grep presque entièrement. Vous pouvez dire à findmnt exactement quelle colonne imprimer avec le -o , –sortie . Ces options prennent une liste de colonnes séparées par des virgules à imprimer. En utilisant la commande suivante, vous pouvez obtenir uniquement l'espace disponible de votre partition racine sans en-tête.

findmnt -T / --df -o AVAIL -n

Tout ce que vous avez à faire dans vos scripts est de supprimer le dernier caractère. Dans la commande ci-dessus, j'ai donné le –df option. Ce n'était pas nécessaire, les mêmes résultats seront imprimés même sans cette option.

Findmnt fournit une liste assez complète de colonnes de sortie. Je vous fournis ci-dessous une courte liste de rubriques qui, à mon avis, vous intéresseront. Vous pouvez afficher la liste complète avec findmnt –help

  • Périphérique source SOURCE
  • Point de montage CIBLE
  • Type de système de fichiers FSTYPE
  • OPTIONS toutes les options de montage
  • Étiquette du système de fichiers LABEL
  • UUID UUID du système de fichiers
  • MAJ :MIN majeur :numéro d'appareil mineur
  • SIZE taille du système de fichiers
  • Taille du système de fichiers AVAIL disponible
  • USED taille du système de fichiers utilisé
  • USE% pourcentage d'utilisation du système de fichiers
  • Racine du système de fichiers FSROOT

La liste par défaut des colonnes imprimées peut être étendue au lieu d'être remplacée. Fournissez simplement une liste au format suivant :+liste . La commande suivante donnera les mêmes informations que l'utilisation de –df , sauf que les colonnes seront ajoutées à la fin.

findmnt -T / -o +SIZE,USE%,AVAIL

Je tombe déjà amoureux de findmnt . Cela m'évitera beaucoup de tuyauterie et de longues lignes de commande. Et trouver ne s'arrête pas là. Il y a une autre fonctionnalité dont je veux parler. Sondage .

Oui, trouver peut être utilisé pour surveiller les changements dans le fichier /proc/self/mountinfo. Cela vous permet de surveiller efficacement votre système pour le montage d'activités connexes. Plus de boucle while dans les scripts bash.

Trouver écoutera les actions suivantes, monter , démonter , remonter et bouger . Vous pouvez limiter cela en fournissant une liste d'actions séparées par des virgules à écouter. Par exemple, les éléments suivants ne surveilleront que le montage du système de fichiers.

Dans l'image ci-dessus, vous voyez la sortie imprimée par findmnt lorsqu'une nouvelle partition est montée. Vous remarquez la nouvelle colonne ACTION ? Avec le –sondage option vous avez 3 nouvelles colonnes qui peuvent être affichées :

  • ACTION :disponible pour monter, démonter, remonter et déplacer
  • OLD-TARGET :disponible pour les actions de démontage et de déplacement.
  • ANCIENNES OPTIONS :disponibles pour le démontage et le remontage.

Lorsqu'il est utilisé dans ce mode, findmnt bloquera, s'il est utilisé dans un script, le script "se bloquera". L'heure à laquelle –sondage bloquera et écoutera les actions peut être limité avec 2 options

  • –premier uniquement  :Findmnt se fermera après la détection de la première action.
  • –timeout X :Findmnt se fermera après X millisecondes.

Lorsque vous mettez tout cela ensemble, findmnt est un outil puissant. Lorsqu'il est utilisé dans des scripts, vous supprimerez beaucoup de code supplémentaire. La nécessité de passer à une commande externe a été considérablement réduite.

Les options précédemment répertoriées peuvent également être utilisées avec –poll . Dans l'exemple ci-dessous, findmnt écoutera une action de montage et affichera la SOURCE, la CIBLE, la TAILLE et l'UTILISATION %. Mais seulement si la cible de montage correspond au -T options.

findmnt -T /mnt/lfs --poll=mount -o SOURCE,TARGET,SIZE,USE%

Astuce bonus :exemple concret de findmnt

Je travaille depuis un petit moment sur un environnement scripté bash pour compiler Linux à partir de Scratch. Utiliser findmnt dans mes scripts a donné lieu à un code meilleur et plus propre.

Lors du démarrage initial de mon script, je vérifie si la partition LFS est montée, sinon les scripts les montent. Le code utilisé pour ressembler à ceci :

if [[ `grep "$pd on $pm" < <(mount) | wc -l` < 1 ]]; 
then   
...   
... 
fi

Le projet est à des fins éducatives, c'est pourquoi j'ai utilisé la substitution de processus et le tuyau dans le test ci-dessus. Tout au long de mon code, j'affiche plusieurs façons d'effectuer la même tâche. Utiliser findmnt J'ai trouvé une façon plus propre de faire la même chose.

findmnt -S $pd -T $pm > /dev/null || (
  ...
  ...
)

Je redirige la sortie vers /dev/null, je n'ai pas besoin d'avoir findmnt sortie imprimée sur la console. Trouver renverra 1 si la recherche échoue, ce qui entraînera l'exécution du code entre ( … ).

J'espère que vous avez apprécié et appris une nouvelle commande. Si vous en avez une utilisation intéressante, partagez-la dans les commentaires. Il y a aussi une autre version de cet article :la recherche en ligne n'est pas toujours la meilleure. On a tendance à oublier que Linux est livré avec un manuel.


Linux
  1. Utilisez anacron pour une meilleure crontab

  2. 10 articles pour apprendre Linux à votre façon

  3. Avons-nous une annulation sous Linux ?

  4. Trouver des packages pour Kali Linux

  5. Est-il préférable d'effectuer un double démarrage ou d'exécuter une machine virtuelle ?

11 raisons pour lesquelles Linux est meilleur que Windows

Comment lister les systèmes de fichiers sous Linux à l'aide de Lfs

Comment trouver le type de système de fichiers monté sous Linux

Un moyen simple de lister les liens symboliques sous Linux

Pourquoi Linux est-il si mauvais et Windows 11 meilleur à tous points de vue ?

Options de commande et exemples de commande Tee sous Linux