【问题标题】:How can I tell if a file is on a remote filesystem with Perl?如何用 Perl 判断文件是否在远程文件系统上?
【发布时间】:2010-09-22 17:25:28
【问题描述】:

是否有一种快速而简单的方法来以编程方式(在 shell 脚本或 Perl 中)判断路径是位于远程文件系统(nfs 等)还是本地文件系统上?或者是解析 /etc/fstab 并检查文件系统类型的唯一方法?

【问题讨论】:

    标签: perl shell filesystems nfs


    【解决方案1】:

    您可以使用“df -T”获取目录的文件系统类型,或使用 -t 选项将报告限制为特定类型(如 nfs),如果返回“未处理文件系统”,则它不是您要查找的内容之一。

    df -T $dir | tail -1 | awk '{print $2;}'
    

    【讨论】:

    • 不可移植 - 例如,“df -T”在 Solaris 上不起作用。
    • 如果所有网络文件系统都使用主机:路径语义作为设备名称,那么我想您可以检查设备名称中的 : 或类似的内容。
    【解决方案2】:

    stat -f -c %T <filename> 应该做你想做的事。你可能还想要-l

    【讨论】:

    • 再一次,不能移植到 Solaris(虽然我在机器上有命令,但它不是标准问题)。
    【解决方案3】:

    在某些系统上,NFS 文件的设备编号为负数。因此,

    print "remote" if (stat($filename))[0] < 0
    

    【讨论】:

      【解决方案4】:

      如果您在目录上使用df 仅获取其所在设备的信息,例如对于当前目录:

      df .
      

      然后,您可以只解析输出,例如

      df . | tail -1 | awk '{print $1}'
      

      获取设备名称。

      【讨论】:

        【解决方案5】:

        我在solaris7,8,9 & 10上测试过以下,貌似靠谱

        /bin/df -g <filename> | tail -2 | head -1 | awk '{print $1}'
        

        应该让您拥有 fs 类型,而不是尝试匹配挂载点中的“host:path”。

        【讨论】:

          猜你喜欢
          • 2011-07-04
          • 2015-07-18
          • 1970-01-01
          • 1970-01-01
          • 2011-07-14
          • 1970-01-01
          • 2017-05-01
          • 2017-08-29
          • 1970-01-01
          相关资源
          最近更新 更多