如何获取包含给定文件的文件系统的挂载点

Stu*_*Stu 13 shell filesystems mount

我正在寻找一种快速方法来查找包含给定 FILE 的文件系统的挂载点。有什么比我下面的解决方案更简单或更直接的吗?

df -h FILE |tail -1 | awk -F% '{print $NF}' | tr -d ' '
Run Code Online (Sandbox Code Playgroud)

一个类似的问题“是否有命令可以查看磁盘的安装位置? ”使用当前磁盘的设备节点作为输入,而不是磁盘中的任意文件......

Sté*_*las 20

在 GNU/Linux 上,如果您拥有statcoreutils 8.6 或更高版本的GNU ,您可以执行以下操作:

stat -c %m -- "$file"
Run Code Online (Sandbox Code Playgroud)

除此以外:

mount_point_of() {
  f=$(readlink -e -- "$1") &&
    until mountpoint -q -- "$f"; do
      f=${f%/*}; f=${f:-/}
    done &&
    printf '%s\n' "$f"
}
Run Code Online (Sandbox Code Playgroud)

您的方法是有效的,但假设挂载点不包含空格、%、换行符或其他不可打印的字符,您可以使用较新版本的 GNU df(8.21 或更高版本)稍微简化它:

df --output=target FILE | tail -n +2
Run Code Online (Sandbox Code Playgroud)

  • @约瑟夫R。Stephane 在他的回答中解释说,这是 GNU `df` >=8.21 的一个特性。 (2认同)
  • 将“-m”而不是“-e”传递给“readlink”,使得“mount_point_of”对于不存在的路径给出合理正确的结果。我的用例是计算出如果存在“默认”路径的话,它会安装在什么位置。 (2认同)

rud*_*ier 11

对于 Linux,我们有 util-linux 的 findmnt 正是为此而制作的

findmnt -n -o TARGET --target /path/to/FILE
Run Code Online (Sandbox Code Playgroud)

请注意,如果有多个绑定安装,可能会返回某种随机安装点。使用df也有同样的问题。

  • 即使使用子卷中的文件也能正常工作。 (2认同)

ter*_*don 7

你可以做类似的事情

df -P FILE | awk 'NR==2{print $NF}'
Run Code Online (Sandbox Code Playgroud)

甚至

df -P FILE | awk 'END{print $NF}'
Run Code Online (Sandbox Code Playgroud)

由于awk默认情况下在空格上拆分,因此您不需要指定 ,-F也不需要用 修剪空格tr。最后,通过指定感兴趣的行号 ( NR==2),您还可以取消tail.