我需要在脚本中测试文件是来自网络安装还是真正的本地文件。更清楚地说:我需要测试解析内容是快还是慢,但就我而言,本地与网络是一个可靠的指标。
我提出的最佳尝试是stat -c %m [path]
获取路径的挂载点,该路径提供/
本地磁盘上的文件和 CIFS 挂载的挂载点。
但我怀疑除了我非常简单的配置(一个本地驱动器,一个大分区,几个网络安装)之外,这不是一个可靠的诊断,所以我想要一种强大/规范的方法。搜索没有给出任何有用的线索;像“网络”和“路径”这样的术语实在是太多了。
答案1
您可以使用以下命令输出包含给定文件或目录的文件系统的类型
stat -f --format="%T" /path/to/file
并据此采取行动。一些可能的输出是cifs
, nfs
, afs
, ... (假定为远程)和ufs
, ext2/ext3
(原文如此 - ext2、ext3 和 ext4 具有相同的文件系统幻数)、btrfs
、tmpfs
、 ... (假定为本地)。
有一件事可以帮助您确定文件系统类型是本地还是远程:GNU coreutils,其中包括stat
和df
,对于几十种不同的文件系统类型有“本地”和“远程”文件系统的概念。
df -T -l | awk 'NR > 1 { print $2 }' | sort -u
将输出认为是本地的所有已安装文件系统的文件系统类型df
。
正如对原始问题的评论中指出的那样,很难判断存储设备是否是本地的;文件ext3
系统/dev/sdb5
可能位于光纤通道设备上,该设备可能直接连接,也可能位于多个网络交换机之外,您不太可能使用标准用户级实用程序来辨别。