检查给定文件夹是否位于 shell 脚本中已安装的远程 (nfs) 文件系统上的最佳方法(可靠、可移植等)是什么?
我正在寻找一个如下所示的命令:
chk-remote-mountpoint /my/path/to/folder
答案1
作为史蒂芬说“对此没有通用的 Unix 答案”。
我发现我的问题的最佳解决方案:
df -P -T /my/path/to/folder | tail -n +2 | awk '{print $2}'
将返回文件系统类型,例如:nfs
或ext3
。
选项-T
不是标准,所以它可能无法在其他 Unix/Linux 系统上工作...
根据吉尔斯’下面的评论:“这适用于任何非嵌入式 Linux,但不适用于 BusyBox、*BSD 等。”
答案2
你可以使用 GNU stat
。
%m
找出挂载点。
$ stat --format=%m /usr/src/linux
/usr/src
%T
(在文件系统模式下)找出文件系统的名称。
$ stat --file-system --format=%T /usr/src/linux
reiserfs
因此您知道/usr/src/linux
,在我的系统上, 存储在安装在 上/usr/src
且文件系统类型为 的文件系统中reiserfs
。
另请参阅man stat
以供进一步参考。这是一个非常通用的命令,当您需要有关文件的信息并且不想退回到grep | awk
监护时,几乎总是有用的。
答案3
mount -l
并使用grep
、sed
、 或awk
查找引用相关目录的行。
答案4
df(1) 的“-l”将在非本地文件系统上失败并出现错误,因此您可以使用此行为来了解文件系统是否是远程的:
df -l /path 2> /dev/null | grep -q "File"
rc=$?
if [ "$rc" = "0" ]
then
echo "local mount, do stuff"
fi
但是,-l
选项是不标准。