Je cherche un moyen rapide de trouver le point de montage du système de fichiers contenant un FICHIER donné. Y a-t-il quelque chose de plus simple ou de plus direct que ma solution ci-dessous?
df -h FILE |tail -1 | awk -F% '{print $NF}' | tr -d ' '
Une question similaire " Existe-t-il une commande pour voir où un disque est monté? " Utilise le nœud de périphérique du disque actuel en entrée, et non un fichier arbitraire du disque ...
tr
appel final en utilisantawk -F'% '...
Réponses:
Vous pourriez faire quelque chose comme
ou même
Étant donné que les
awk
fractionnements sur les espaces par défaut, vous n'avez pas besoin de spécifier le-F
et vous n'avez pas non plus besoin de découper les espaces avectr
. Enfin, en spécifiant le numéro de ligne d'intérêt (NR==2
), vous pouvez également vous en débarrassertail
.la source
-P
droit? Dans tous les cas, le tout dernier champ imprimé parawk
doit être le disque.-P
option que Gilles vient d'ajouter.-P
. Néanmoins, je recommande de toujours utiliser-P
lorsque vous analysez la sortie dedf
, c'est plus facile que de vérifier que cette utilisation particulière est sûre.mount | grep " on $(df -P ${FILE} | awk 'END{print $NF}') type" | awk '{print $1}'
Sur GNU / Linux, si vous avez GNU
stat
de coreutils 8.6 ou supérieur, vous pouvez faire:Autrement:
Votre approche est valide mais suppose que le point de montage ne contient pas d'espace, de%, de nouvelle ligne ou d'autres caractères non imprimables, vous pouvez le simplifier légèrement avec des versions plus récentes de GNU
df
(8.21 ou supérieur):la source
df
ne reconnaît pas l'--output
option.df
> = 8.21.Pour Linux, nous avons findmnt de util-linux exactement fait pour cela
Notez qu'une sorte de point de montage aléatoire peut être retourné au cas où il y aurait plusieurs montages de liaison. L'utilisation
df
a le même problème.la source
Étant donné que
stat
renvoie un champ "Device", j'étais curieux de voir comment l'stat()
appel de bibliothèque sous-jacent pouvait être utilisé pour obtenir ces informations par programme de manière compatible POSIX.Cet extrait de code C:
Donnera les ID des périphériques majeurs et mineurs pour le périphérique contenant le fichier répertorié sur la ligne de commande (
argv[1]
). Malheureusement,major()
etminor()
ne sont pas POSIX, bien que la page de manuel affirme qu'ils sont "présents sur de nombreux autres systèmes" en plus de GNU / linux.Vous pouvez ensuite obtenir une correspondance entre le numéro majeur / mineur du périphérique et le nœud du périphérique, par exemple
/proc/diskstats
, et le mapper à partir duquel les points de montage/proc/mounts
, aka./etc/mtab
.Un utilitaire en ligne de commande pour ce faire serait donc assez simple.
la source
/proc/diskstats
est uniquement pour les périphériques bloc, vous allez manquer le NFS, proc, fusible ... Sur Linux au moins, différents points de montage peuvent avoir le même maj + minst_dev
cela ne fournisse pas un moyen de distinguer une partition NFS d'une autre. Celui qui veut vraiment écrire ceci devra en tenir compte;)Voici plus de code C ++ si vous souhaitez le faire à partir de C ++ ...
Plus de liens pour les moyens programmatiques
la source