是否有简单的测试来确定文件是否位于 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
远程文件系统类型的完整列表。)