如何判断(在 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 机器上的目录是不是在 Java 中安装了外部文件系统?