Comment obtenir des informations sur le système de fichiers pour un fichier spécifique?

8

Quelle est la meilleure façon de trouver des informations sur le système de fichiers d'un fichier.

Par exemple, si j'ai un fichier

/media/xyz/path/to/file.ext

Et /etc/fstabcontient

//server1/Share1 /media/xyz cifs option1=value1,...

Comment puis-je déterminer que le fichier se trouve sur un partage Samba, qu'il a le chemin local /path/to/file.extet avec quelles options le système de fichiers a été monté?

L'analyse de la sortie d' mountune solution portable est-elle en cours? Ou analyser findmnt? Existe-t-il un moyen conforme à POSIX pour y parvenir?

kba est aux côtés de Monica
la source
df /path/to/filedevrait montrer la partition ou le montage.
thrig
Merci @thrig, cela fait le premier pas. Quelle serait la meilleure façon d'obtenir des informations comme les options de montage à partir de là?
kba se tient avec Monica le
Sous Linux, je peux analyser /proc/mounts. Existe-t-il un moyen compatible BSD / OSX pour y parvenir?
kba se tient avec Monica le
juste en regardant les fichiers? tu ne peux pas! c'est la beauté des systèmes d'exploitation de type Unix, les applications peuvent y accéder en utilisant un chemin quel que soit leur emplacement physique
Edward Torvalds
@edwardtorvalds Non, pas seulement en regardant les fichiers, c'est pourquoi j'ai posé une question sur l'analyse, mountetc. pour obtenir le système de fichiers et les options, etc. Je ne suis toujours pas sûr de la meilleure façon de trouver ces informations dans * BSD et OSX. Je n'ai pas eu le temps de travailler sur la bibliothèque qui l'exige, mais je ferai des commentaires une fois que je le ferai. D'après ce que j'ai vu, mount -Psemble assez fiable sur Linux / BSD.
kba se tient avec Monica le

Réponses:

1

stat (1) est un moyen portable de trouver certaines de ces informations, par exemple:

stat --file-system --format="%T" /media/xyz/path/to/file.ext

Tout le reste est très spécifique au système d'exploitation, sur les systèmes Linux récents, vous pouvez facilement l'utiliser findmnt --outputdans un script.

Marco d'Itri
la source
statest également spécifique à l'OS.
don_crissti
0

si j'ai bien compris votre besoin et en combinant des extraits des réponses précédentes, ce qui suit pourrait être ce dont vous avez besoin. définir dans le script (par exemple, dans votre .bashrc) -

findpart ()
{
df -h $1|sed 1d|cut -d" " -f1|xargs findmnt -n
}

puis vous pouvez l'exécuter au besoin

findpart /foo/file.ext
Gil Shabtai
la source
findmntn'a pas besoin de tout ça, il peut le faire tout seul
don_crissti
théoriquement, oui. en pratique, je n'ai pas pu faire fonctionner -T sur centos 6, contrairement à cette solution.
Gil Shabtai