informations de montage pour le répertoire courant

20

Je peux faire df .pour obtenir certaines informations sur la monture dans laquelle se trouve le répertoire actuel, et je peux obtenir toutes les informations que je veux mount, mais obtenir beaucoup d'informations (informations sur d'autres montures). Je peux le comprendre, mais je me demande s'il y a une meilleure façon.

Existe-t-il une commande mountinfotelle que mountinfo .donne les informations que je veux (comme df ., mais avec les informations qui mountdonnent.)


J'utilise Debian Gnu + Linux.

ctrl-alt-delor
la source
1
Je crois que la statcommande peut également être utilisée. Cependant, je ne sais pas si l' %moption qui donne le point de montage est prise en charge dans votre version du système. J'ai vérifié mon système et il ne semblait pas retourner le point de montage.
Ramesh
1
@Ramesh, Yes stat "--printf=%m\n" .obtient le point de montage du système de fichiers dans lequel se trouve le répertoire actuel. Cela nous permet ainsi de simplifier certaines des réponses. Merci.
ctrl-alt-delor

Réponses:

18

Je pense que vous voulez quelque chose comme ça:

findmnt -T .

Lors de l'utilisation de l'option

-T, --target chemin
si le chemin n'est pas un fichier ou un répertoire de point de montage, findmntvérifie les éléments de chemin dans l'ordre inverse pour obtenir le point de montage. Vous ne pouvez imprimer que certains champs via -o, --output [list].
Voir findmnt --helppour la liste des champs disponibles.


Vous pouvez également exécuter:

(until findmnt . ; do cd .. ; done)

Le problème que vous rencontrez est que tous les chemins sont relatifs à quelque chose ou autre, il vous suffit donc de parcourir l'arbre. À chaque fois.

findmntest membre du paquet util-linux depuis quelques années maintenant. À l'heure actuelle, quelle que soit votre distribution, elle devrait déjà être installée sur votre machine Linux si vous avez également l' mountoutil.

man mount | grep findmnt -B1 -m1
For  more robust and customizable output use
findmnt(8),  especially  in  your   scripts.

findmntaffichera toutes les informations des montages sans argument de point de montage, et uniquement celles de son argument avec un. C'est -Dl' option d' émulationdf . Sans -Dsa sortie est similaire à celle de mount- mais beaucoup plus configurable. Essayez de findmnt --helpvoir par vous-même.

Je le colle dans un sous-shell afin que le répertoire actuel du shell actuel ne change pas.

Donc:

mkdir -p /tmp/1/2/3/4/5/6 && cd $_ 
(until findmnt . ; do cd .. ; done && findmnt -D .) && pwd

PRODUCTION

TARGET SOURCE FSTYPE OPTIONS
/tmp   tmpfs  tmpfs  rw
SOURCE FSTYPE  SIZE   USED AVAIL USE% TARGET
tmpfs  tmpfs  11.8G 839.7M   11G   7% /tmp
/tmp/1/2/3/4/5/6

Si vous ne disposez pas de l' -Doption (pas dans les anciennes versions d'util-linux), vous n'avez jamais à craindre - ce n'est en tout cas pas plus qu'un commutateur de commodité. Remarquez les en-têtes de colonne qu'il produit pour chaque appel - vous pouvez inclure ou exclure ceux pour chaque appel avec le -ocommutateur utput. Je peux obtenir la même sortie que celle -Dfournie:

 findmnt /tmp -o SOURCE,FSTYPE,SIZE,USED,AVAIL,USE%,TARGET

PRODUCTION

SOURCE FSTYPE  SIZE  USED AVAIL USE% TARGET
tmpfs  tmpfs  11.8G  1.1G 10.6G  10% /tmp
mikeserv
la source
Je l'aime bien, sauf le peu -D, je n'ai pas cette option. (Je suis sur Debian7, util-linux 2.20.1-5.3)
ctrl-alt-delor
Je vais √ vous dans quelques jours, je vais laisser un peu de temps pour voir si quelqu'un a une réponse plus parfaite. Bien que cela soit proche de la perfection (si cela fonctionnait comme df: n'avait pas besoin de la boucle, alors ce serait parfait).
ctrl-alt-delor
@richard - c'est une bonne idée - je n'aime pas que les réponses soient acceptées trop tôt. en ce qui concerne la boucle et df- je suis prêt à parier qu'elle boucle, vous n'avez tout simplement pas à lui dire de le faire.
mikeserv
1
Grâce à @ramesh, nous pouvons également le fairefindmnt $(stat "--printf=%m\n" .)
ctrl-alt-delor
2
Ma version de findmntpossède une -Toption qui peut contourner la cd ..boucle. Pourrait être utile à quelqu'un d'autre.
azote
1

La manière Linux / Unix est d'avoir une boîte à outils de petits utilitaires qui, lorsqu'ils sont combinés, vous donnent les résultats que vous recherchez.

Ils ont tendance à ne pas avoir d'utilité pour chaque occasion. Au lieu de cela, vous avez de nombreux petits utilitaires utiles qui sont combinés avec des tuyaux, etc. L'avantage de ceci est que vous pouvez écrire votre propre utilitaire assez facilement si aucun n'est disponible.

Par exemple, pour obtenir les informations que vous recherchez, vous pouvez utiliser:

mount | grep $(df  --output=source . | tail -1)

Si vous souhaitez réutiliser ce qui précède avec différents répertoires, créez un script:

#!/bin/bash
mount | grep $(df  --output=source $1 | tail -1)

Enregistrez-le sous mountinfoet rendez-le exécutable ( chmod +x mountinfo). Vous pouvez ensuite l'utiliser comme:

mountinfo .

Si vous voulez un système qui a un utilitaire pour tout ce qui n'interagit pas entre eux, alors un certain Mr Gates peut être en mesure de vous aider ;-)

garethTheRed
la source
--outputn'existe que dans les versions très récentes de coreutils GNU (≥8.22).
Gilles 'SO- arrête d'être méchant'
C'est à peu près ce que j'ai fait, c'est juste que mountsans options semble un peu une réflexion après coup: avec les options que vous créez des points de montage, sans qu'il les répertorie, j'espérais un meilleur outil de liste. Comme nous le voyons, @mikeserv nous l'a montré findmnt.
ctrl-alt-delor
1

Cela peut être un peu compliqué si les points de montage contiennent des blancs, mais cela devrait fonctionner sauf dans les cas où les points de montage contiennent des sauts de ligne:

#!/bin/sh
mountpoint="$(df -P "$1" | awk '{
    if (NR==1)
        i=index($0,"Mounted on");
    else
        print substr($0,i);
    }')"
mount|grep " on ${mountpoint} type "

df -Pgénère une ligne pour le système de fichiers; sans cette option, dfpeut produire deux lignes si le point de montage est long. Le nom du point de montage commence dans la même colonne que le libellé "Monté sur" dans la ligne d'en-tête.

Après avoir obtenu le point de montage, nous le recherchons dans la sortie de mount.

Mark Plotnick
la source
1

Je ne connais pas de commande, mais vous pouvez créer une fonction. Vous pouvez ajouter ce qui suit à votre .bashrc:

mountinfo () {
  mount | grep $(df -P "$1" | tail -n 1 | awk '{print $1}')
}

Ceci exécute la mountcommande et transmet la sortie à grep. greprecherchera la sortie de df -P "$1" | tail -n 1 | awk '{print $1}'et la décomposera:

  • df -P "$1"s'exécutera dfsur l'argument passé à la fonction,
  • tail -n 1affichera uniquement la deuxième ligne, celle qui contient les partitioninformations.
  • awk '{print $1}'affichera la première partie de cette ligne, qui est le numéro de disque / partition, par exemple /dev/sda5. C'est ce qui grepva chercher dans la commande mount et le sortir.

Sourcez votre .bashrcfichier pour appliquer les modifications, ou déconnectez-vous et reconnectez-vous.

Maintenant, si vous exécutez mountinfo ., vous obtiendrez la sortie souhaitée.

Alaa Ali
la source
C'est à peu près ce que j'ai fait (mais sans la fonction, je ne le fais pas assez, quand je le fais sur d'autres systèmes, par exemple les réponses sur ce site.), C'est juste que mountsans aucune option semble un peu de une réflexion après coup: avec des options que vous créez des points de montage, sans qu'il les énumère, j'espérais un meilleur outil de liste. Comme nous le voyons, @mikeserv nous l'a montré findmnt.
ctrl-alt-delor
0

Si vous utilisez une version pas complètement ancienne du GNU coreutils df, alors ça echo $(df . --output=target | tail -n 1)marche. De même avec stat -c '%m' ., bien que je note que https://linux.die.net/man/1/stat manque de documentation sur l' %moption de format.

Faire cela de manière portable est fastidieux: aucun des éléments ci-dessus ne fonctionnera avec les versions BSD ou Cygwin de stat ou df. S'il n'y avait pas la possibilité d'espaces dans les chemins des points de montage, ce df -P . | tail -1 | awk '{ print $NF}'serait bien, mais souvent les lecteurs flash USB ont des espaces dans le nom du volume, qui apparaîtront probablement dans le chemin de montage et casseront cela. Pour la portabilité, Perl est installable pratiquement partout et CPAN a le module Sys :: Filesystem :: MountPoint qui fournit les fonctionnalités souhaitées.

Charles Stewart
la source
Pouvez-vous nous dire ce que cela echo $()ajoute à la commande?
ctrl-alt-delor