Linux

Linux

是否有简单的测试来确定文件是否位于 NFS 挂载上? (或者更一般地说,文件存在于什么类型的文件系统上?)我正在想象一些与 fstab 匹配的丑陋的前缀......

答案1

Linux 上的GNUstat至少:

stat -fc %T /path/to/the/file

它适用于nfs大多数常见的文件系统,但不适用于所有文件系统。

答案2

这有点随机,但并不是很脏:

df -TP /path/to/your/file | tail -1 | awk '{print $2}'

如果你的文件系统名称中有空格,它就会崩溃。

答案3

我一直在寻找 C 语言的答案,几年前的这个问题显示为第一个 Google 结果,尽管它专注于 shell 脚本,但我想我会与其他正在寻找的人分享我的发现。

正如围绕此问题和相关问题所提到的,没有可移植的方法。以下是 C 中一些基于文件名(可以是挂载点,或挂载点下的任何文件)获取文件系统类型的不可移植方法:

Linux

使用statfs(2)并与f_type联机帮助页中的魔术词进行比较(例如NFS_SUPER_MAGIC

macOS、FreeBSD、OpenBSD、NetBSD

使用statfs(2)[orstatvfs(2)在 NetBSD 上],然后是f_fstypename字符串。 (适用"nfs"于 NFS 情况。)

其他 *BSD 和类似的可能有这个,上面是我测试过的。

索拉里斯

使用stat(2); Solaris 上struct stat有一个st_fstype成员。 (适用"nfs"于 NFS 情况。您可以选择解析/etc/dfs/fstypes远程文件系统类型的完整列表。)

相关内容