如何确定当前工作目录的fs类型?


19

我需要一种与平台无关的轻量级方法来检测CWD的安装类型。具体来说,我需要确定我的CWD是否在SSHFS,NFS,CIFS,SMB或本地块存储装载中。

我需要在Mac OSX 10.6、10.7和RHEL5上执行此操作(至少)。

可以使用df,但是df在这两个平台上的行为完全不同。另外,我必须使用awk在CLI抓取其输出,而可行的是……脆弱。

此信息必须在某种程度上可用。是否有我不知道的工具可以向我提供此信息?

Answers:


17

文件系统类型不是您可以通过独立于OS的方式轻松访问的类型。文件系统类型名称取决于操作系统,因此没有任何动机来建立标准方法。

在非嵌入式Linux系统上,stat -f -c %T .显示当前目录的文件系统类型。OSX的stat命令没有这样的东西。

由于您只想知道文件系统类型是否在有限列表中,因此在Linux下,您可以限制打印信息的路径集和文件系统类型集。如果当前目录的文件系统类型不在列表中,则会出现错误(“ df:未处理任何文件系统”)。

if df -t sshfs -t nfs -t cifs . >/dev/null 2>/dev/null; then …

相同的语法在OSX上可能有效或无效。如果没有,请尝试df -T sshfs,nfs,cifs .


这正是我所需要的。吉尔斯,你太棒了!
ARX


4

在Linux上,从util-linux 2.18开始可以使用findmnt。

findmnt -n -o FSTYPE -T /home
nfs4

不适用于/ home / subdir,因此对OP没有帮助。
艾洛夫

对我来说,它也适用于子目录,使用util-linux 2.23中的findmount。
rudimeier '16

3

尚未测试过,但df -P在大多数平台上的行为应相同。

这适用于Linux。

$ mount | grep "^$(df -Pk . | head -n 2 | tail -n 1 | cut -f 1 -d ' ') " | cut -f 5 -d ' '

或将其分解为可重用的功能:

# get_mount <directory>
get_mount() {
    df -Pk "$1" | head -n 2 | tail -n 1 | cut -f 1 -d ' '
}

# get_fs <mountpoint>
get_fs() {
    mount | grep "^$1 " | cut -f 5 -d ' '
}

并调用该函数:

get_fs $(get_mount .)

可以使用sed或重写,使其速度稍快一些awk,但是这种方式可能更易于阅读。

如果这样做不起作用,则可以尝试类似的操作,但要使用/etc/mtab而不是的输出mount


Pdf -P对POSIX,所以应该以同样的方式行事。但是,从文件系统路径到挂载点比较麻烦。
吉尔(Gilles)'所以

1
如果使用-o循环挂载目录,则您的解决方案似乎并不安全。至少在我的系统上,df显示了使用的循环设备,而mount显示了使用的映像文件。我猜可能会有更多的情况,其中df不会显示与mount相同的设备。请注意mount手册页中的引用:“维护列表模式仅是为了向后兼容。对于更健壮和可定义的输出,请使用findmnt(8),尤其是在脚本中。”
rudimeier 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.