如何判断(在 sh 中)一个目录是不是挂载在 NFS 上

Posted

技术标签:

【中文标题】如何判断(在 sh 中)一个目录是不是挂载在 NFS 上【英文标题】:How to tell (in sh) whether a directory is mounted over NFS如何判断(在 sh 中)一个目录是否挂载在 NFS 上 【发布时间】:2011-01-28 16:16:39 【问题描述】:

df -t nfs $目录

如果目录是 NFS 挂载的,则返回两行输出,如果不是,则返回一行。

如果 df 没有挂载 NFS,某些版本的 df 会给出退出状态 1,但 GNU coreutils 5.3.0 不会...

if [ `df -t nfs . | wc -l` = 2 ]; 

感觉不雅,同事说它没有充分检查错误。有没有更好的方法来做到这一点?

【问题讨论】:

我已经尝试了一些选项,但你的选项对我来说似乎更优雅。你的同事有没有提到过这种方法会出现的错误?为一次不错的尝试 +1。 好的,我发现了一个问题。如果第一个输出列过长(例如nfs_server:/long/mount/point),那么df 会将输出分成两行,最终得到wc -l = 3。将您的解决方案更改为if [ .... -gt 1 ] 即可轻松解决。 @ShawnChin:如果您应用 --portability / -P 选项,它将不会换行。非常适合机器加工。 (使用df (GNU coreutils) 7.4 测试) 【参考方案1】:

重复问题How do I determine if a directory is an NFS mount point in shellscript。简短的回答,使用stat 命令。

【讨论】:

+1 很好看。从链接的答案中,等效的解决方案是if [ $(stat -f -L -c %T .) == "nfs" ]【参考方案2】:

如果您使用 strace 并查看 df 所做的一切,您总是可以检查 mtab 它会在平面文件中记录所有已安装的文件系统。如果您在 Linux 中运行它,我想您也可以使用 /proc/mounts。

【讨论】:

使用/etc/mtab 需要更多的解析/处理。如果目标目录包含指向挂载点的符号链接,也会失败。

以上是关于如何判断(在 sh 中)一个目录是不是挂载在 NFS 上的主要内容,如果未能解决你的问题,请参考以下文章

linux 如何判断文件挂载是不是成功?根据啥样的返回值?

linux 如何判断文件挂载是不是成功,根据啥样的返回值?

Shell脚本判断文件是不是存在

如何判断 Linux 机器上的目录是不是在 Java 中安装了外部文件系统?

如何判断一个字符串是不是包含 POSIX sh 中的另一个字符串?

如何判断一个字符串是不是包含 POSIX sh 中的另一个字符串?