在 *nix 中,如何确定特定文件在哪个文件系统上?

smo*_*ris 13 unix files filesystems bash unix-shell

在通用的现代 unix 环境(例如 GNU/Linux、GNU/Solaris 或 Mac OS X)中,是否有一种好方法可以确定特定绝对文件路径所在的挂载点和文件系统类型?

我想我可以执行mount命令并手动解析该命令的输出并将其与我的文件路径进行字符串比较,但在此之前我想知道是否有更优雅的方法。

我正在开发一个使用扩展属性的 BASH 脚本,并希望让它为各种文件系统和主机环境做正确的事(在可能的范围内)。

Mor*_*ven 19

该命令df(1)采用一个或多个参数,并将返回该文件或目录所在的安装点和设备,以及使用信息。然后,您可以使用路径或设备在mount -v或类似的输出中查找文件系统类型。

不幸的是,两者的输出格式dfmount与系统有关; 没有明显的标准,至少在 Solaris、NetBSD 和 Mac OS X 之间我可以看到。


Zor*_*che 8

你可以使用stat。命令stat --printf '%d' filename.txt将以十六进制/十进制形式返回设备编号。

  • 也许它是最近添加的,但是 `stat --format '%m' $file` 会给你挂载点,`stat --file-system --format '%T' $mount` 会提供文件系统类型名称. (2认同)

小智 5

对于特定文件来说,就像这样简单

df -T "${FILE}" | awk '{print $2}' | tail -n1
Run Code Online (Sandbox Code Playgroud)