Answers:
正如斯蒂芬(Stephane)所说:“没有通用的Unix答案”。
我发现我的问题的最佳解决方案:
df -P -T /my/path/to/folder | tail -n +2 | awk '{print $2}'
将返回文件系统类型,例如:nfs或ext3。
该-T选项不是标准选项,因此它可能无法在其他Unix / Linux系统上运行。
根据Gilles在下面的评论:“这适用于任何非嵌入式Linux,但不适用于BusyBox,* BSD等。”
/etc/mtab或mount代替使用结果df。
/proc/mounts
mount,也没有/etc/mtab,甚至没有/proc/mounts是标准所以有什么可以被发现那里没有保证...
-T在这里有不同的含义
您可以使用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并具有filesystem type的文件系统中reiserfs。
还请参阅man stat用于进一步参考。这是一个非常通用的命令,几乎在您需要有关文件的信息而又不想grep | awk退守时常有用。
stat不具备%m的选项--format(使用Debian挤压,Coreutils的8.5)。因此,我猜这种解决方案不是很可靠。
2010-08-27 <Aaron Burgemeister> stat: add %m to output the mount point for a file。差不多3年前了。令人惊讶的是Debian仍然没有这个。
mount -l并使用grep,sed或awk查找引用该目录的行。
/my/path/to/the/directory实际上是从安装点/my/path获得答案的结果,这似乎很复杂。也许你可以提供有关一些更多的细节grep,sed,awk命令你的建议(一个完整的答案)?
mount -l | grep 'type nfs' | sed 's/.* on \([^ ]*\) .*/\1/'应该为您提供系统上所有nfs安装点的列表。
mount | fgrep "`stat --printf=" on %m type" /var/log/`". The mount`命令将以<device> on <mountpoint> type <type>格式打印所有安装点。为此,我已经stat --printf生成了on <mountpoint> type零件。
不幸的是,没有统一的Unix答案。
您可以针对给定的文件执行以下操作/a/b/c/d:
...并stat(2)在每个级别执行一次,直到st_dev更改。然后,您将知道安装点在哪里。然后,您可以在/etc/mtab或输出中mount查找该安装点的规范路径,以查找文件系统类型。然后找出什么是远程的,哪些不是远程的,尤其对于保险丝类型的,将是棘手的。例如,nfs,cifs,fuse.sshfs,fuse.davfs是显而易见的,但对于例如fuse.gvfs-fuse-daemon或者fuse.avfsd可以有网络和非网络的文件?
stat(2),我认为您正在引用C函数,但我正在使用shell。然而,st_dev指的主要和次要设备ID(是Linux特有的?),和shell命令stat(1)有(非标)%t,并%T与--format分别主次编号的选择,但它始终返回“0”(本地和NFS )。我尝试了Debian Squeeze和Lenny。
--file-system选项?
--file-system。
df(1)的“ -l”将在非本地文件系统上失败并显示错误,因此您可以使用此行为来了解文件系统是否为远程:
df -l /path 2> /dev/null | grep -q "File"
rc=$?
if [ "$rc" = "0" ]
then
echo "local mount, do stuff"
fi
但是,该-l选项不是standard。
df失败的原因,仅此一项就不是一个很好的答案,但是它正在尝试回答这个问题,所以我不明白为什么您会称其为“不是答案”。
您可以df -t在Linux和df -TBSD系统上使用。
来自man df:
-t,--type = TYPE
将列表限制为TYPE类型的文件系统
if df -t nfs | grep -q /path/to/folder$; then
# it is an NFS
fi
我会亲自使用mountpoint(在Linux上非常可移植!):
NAME
mountpoint - see if a directory is a mountpoint
SYNOPSIS
mountpoint [-d|-q] directory
或showmount几乎需要在任何实际安装NFS共享(nfs-common软件包的一部分)的系统上安装:
NAME
showmount - show mount information for an NFS server
SYNOPSIS
showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]
另一种选择是:
$ mount -l -t nfs | grep 'my mount point'
mountpoint在这种情况下是标准的。
find . -type d -name nfs -exec mountpoint {} \; | grep not
将检查所有名为“ nfs”的文件夹是否已安装
nfs。