仅显示“感兴趣的”安装点/过滤不感兴趣的类型

仅显示“感兴趣的”安装点/过滤不感兴趣的类型

我曾经mount显示已安装的驱动器,我不想看到不太有趣的驱动器(即非物理驱动器)。所以我曾经有一个脚本mnt可以做到:

mount | grep -Ev 'type (proc|sysfs|tmpfs|devpts) '

在 Ubuntu 8.04 下,只显示了我ext3reiserfs挂载点。该行实际上已被注释掉,现在我使用(对于 Ubuntu 12.04):

mount | grep -Ev 'type (proc|sysfs|tmpfs|devpts|debugfs|rpc_pipefs|nfsd|securityfs|fusectl|devtmpfs) '

仅显示我的ext4zfs分区(我放弃使用reiserfs)。

现在我正在为Ubuntu 14.04做准备,脚本必须再次扩展(cgroup,pstore)。有没有更好的方法来做到这一点而无需扩展脚本?我只对已安装的物理磁盘和已安装的网络驱动器( nfs、 )感兴趣cifs

答案1

不使用mount

man mount

  • 上市。
    • 保留列表模式只是为了向后兼容。
    • 为了更强大和可定制的输出使用findmnt(8),尤其是在您的脚本中。
    • 请注意,安装点名称中的控制字符替换为

按照文档的建议使用findmnt。以下是一些有趣的选项,如下所述findmnt --help

  • -i或者--invert
    • 颠倒匹配感
  • -R或者--submounts
    • 打印匹配文件系统的所有子安装
  • -t或者--typeslist
    • 按 FS 类型限制文件系统集

这些只是其中的几个许多您可以在命令行上应用过滤器。

man findmnt
  • 例子
    • findmnt --fstab -t nfs
    • 打印 中定义的所有 NFS 文件系统/etc/fstab
    • findmnt --fstab /mnt/foo
    • 打印/etc/fstab挂载点目录所在的所有文件系统/mnt/foo。它还打印--bind来源所在/mnt/foo的安装。

您可能会使用:

findmnt -it sysfs,cgroup,proc,devtmpfs,devpts,pstore,debugfs,hugetlbfs,mqueue,configfs

应该我相信,过滤掉所有伪文件系统。

不过,您可以使用以下方法执行相同操作mount

mount -t nosysfs,nodevtmpfs...

可能更好的方法是使用以下命令之一,其findmnt --help描述如下:

  • findmnt -D或者findmnt --df
    • 模仿输出df(1)。此选项等效于-o SOURCE,FSTYPE,SIZE,USED,AVAIL,USE%,TARGET但排除所有伪文件系统。用于--all打印所有文件系统。

您可以将列表字段添加到默认值findmnt -Do+field,+field....您可以仅使用文件系统指定您自己的字段列表,通过省略类似-D的内容来显示+findmnt -Dofield,field

答案2

显示挂载点时,该-t选项mount也适用,并采用逗号分隔的文件系统类型列表:

mount -t ext3,ext4,cifs,nfs,nfs4,zfs

我不确定这是否是一个更好的解决方案。如果您开始使用(例如btrfs)并忘记将其添加到列表中,您将看不到它,也许也不会错过它。我宁愿在任何新的“无趣”文件系统弹出时主动过滤掉它们,即使该列表越来越长。

您可以积极尝试仅使用grep类似于 @Graeme 提议的有趣的挂载点,但由于您也对 NFS/CIFS 挂载感兴趣(不以 开头/),因此您应该这样做:

mount | grep -E --color=never  '^(/|[[:alnum:]\.-]*:/)'

--color有必要抑制/所找到的线条上首字母的着色)。正如 Graeme 指出的那样,也应该允许基于名称的 NFS 共享挂载。该模式选择以 a 开头的行/或“a-zA-Z0-9”的任意组合。接下来是:/(对于 NFS 安装)。

答案3

怎么样:

mount | grep '^/[^/]'

与物理磁盘相关的安装点始终以 a 开头,/因为第一个字段是设备的路径。cifs安装将以 so 排除行开始//,然后/再忽略它们。

更新

我看错问题了,我以为你想问排除 cifsnfs。试试这个:

 mount | grep -E '^[^ ]*[/:]'

答案4

使用块设备作为后备存储的文件系统列表可以从 获得/proc/filesystems。例如,您可以按如下方式使用它:

mount -t "$(grep -v '^nodev' /proc/filesystems | cut -f2 | paste -s -d ,)"

由于您希望文件系统由块设备和网络文件系统支持,因此它并不能完全消除手动维护列表的需要。但这样您只需要维护您使用的网络文件系统的列表。

我不知道如何/proc/filesystems处理那些使用多个块设备作为后备存储的文件系统(即文件系统中内置有 RAID 的文件系统)。你可能需要对那些特殊的人进行特殊对待。

相关内容