在通用的现代 unix 环境(例如,GNU/Linux、GNU/Solaris 或 Mac OS X)中,有没有好的方法来确定特定绝对文件路径位于哪个挂载点和文件系统类型?
我想可以执行mount
命令并手动解析其输出并将其与我的文件路径进行字符串比较,但在执行此操作之前,我想知道是否有更优雅的方法。
我正在开发一个使用扩展属性的 BASH 脚本,并希望让它对各种文件系统和主机环境做正确的事情(在可能的范围内)。
答案1
该命令df(1)
接受一个或多个参数,并将返回该文件或目录所在的挂载点和设备,以及使用信息。然后,您可以使用路径或设备在mount -v
或类似的输出中查找文件系统类型。
df
不幸的是,和的输出格式mount
都依赖于系统;没有明显的标准,至少就我看到的 Solaris、NetBSD 和 Mac OS X 之间没有明显的标准。
答案2
你可以使用统计。 命令stat --printf ‘%d’ 文件名.txt将以十六进制/十进制形式返回设备编号。
答案3
对于特定文件来说,很简单
df -T "${FILE}" | awk '{print $2}' | tail -n1
答案4
使用时的一个问题df
是,如果输出中的设备名称很长,行会换行,因此您不能只抓取最后一行。而是删除第一行,然后抓取新的第一行,然后打印第一个字段:
#!/usr/bin/env bash
path=$1
curdir=$(pwd)
cd $path
df . | tail -n +2 | head -1 | awk '{print $1}'
cd $curdir