首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只显示“有趣的”挂载点/过滤非感兴趣的类型

只显示“有趣的”挂载点/过滤非感兴趣的类型
EN

Unix & Linux用户
提问于 2015-01-02 09:13:57
回答 6查看 9K关注 0票数 25

我使用mount来显示挂载驱动器,我不想看到那些不太有趣的驱动器(即非物理驱动器)。所以我以前有一个脚本mnt

代码语言:javascript
复制
mount | grep -Ev 'type (proc|sysfs|tmpfs|devpts) '

在Ubuntu8.04下,只向我展示了ext3reiserfs挂载点。该行实际上被注释掉,现在我使用(用于Ubuntu12.04):

代码语言:javascript
复制
mount | grep -Ev 'type (proc|sysfs|tmpfs|devpts|debugfs|rpc_pipefs|nfsd|securityfs|fusectl|devtmpfs) '

只显示我的ext4zfs分区(我使用了reiserfs)。

现在我正在为Ubuntu14.04做准备,必须再次扩展脚本(cgroup,pstore)。有没有更好的方法来做到这一点,而不必扩展脚本?我只对挂载和挂载网络驱动器(nfscifs)的物理光盘感兴趣。

EN

回答 6

Unix & Linux用户

发布于 2015-01-02 12:35:03

不要使用mount

来自man mount

  • 名单上。
    • 维护列表模式只是为了向后兼容。
    • 要获得更健壮和可定制的输出,请使用findmnt(8),特别是在您的脚本中。
    • 注意,挂载点名称中的控制字符被替换为?

如文档所示,使用findmnt。下面是findmnt --help描述的一些有趣的选项:

  • -i--invert
    • 倒置匹配感

  • -R--submounts
    • 打印匹配文件系统的所有子挂载

  • -t--typeslist
    • 使用FS类型限制文件系统集

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

代码语言:javascript
复制
man findmnt
  • 示例
    • findmnt --fstab -t nfs
    • 打印/etc/fstab中定义的所有NFS文件系统。
    • findmnt --fstab /mnt/foo
    • 打印挂载点目录为/etc/fstab的所有/mnt/foo文件系统。它还打印--bind挂载,其中/mnt/foo是源。

你可以使用:

代码语言:javascript
复制
findmnt -it sysfs,cgroup,proc,devtmpfs,devpts,pstore,debugfs,hugetlbfs,mqueue,configfs

我相信这会过滤掉所有的伪文件系统。

不过,您也可以对mount做同样的操作:

代码语言:javascript
复制
mount -t nosysfs,nodevtmpfs...

可能更好的方法可能是使用以下命令之一,findmnt --help对此进行了说明:

  • findmnt -Dfindmnt --df
    • 模拟df(1)的输出。此选项等效于-o SOURCE,FSTYPE,SIZE,USED,AVAIL,USE%,TARGET,但不包括所有伪文件系统。使用--all打印所有文件系统。

可以将列表字段添加到findmnt -Do+field,+field的默认值中.您可以仅使用-D将显示的文件系统来指定您自己的字段列表,方法是省略+ (如findmnt -Dofield,field )。

票数 45
EN

Unix & Linux用户

发布于 2015-01-02 09:21:59

不如:

代码语言:javascript
复制
mount | grep '^/[^/]'

与物理磁盘相关的挂载点总是以/开始,因为第一个字段是设备的路径。cifs挂载将以//开始,因此使用第二个/排除行以忽略它们。

更新

我误解了这个问题,我以为你想把cifsnfs排除在外。试一试:

代码语言:javascript
复制
 mount | grep -E '^[^ ]*[/:]'
票数 8
EN

Unix & Linux用户

发布于 2021-02-19 02:01:15

结合这里的几个答案(并稍微扩展一下),以下是对我最有效的方法:

代码语言:javascript
复制
df -h | grep -P '^(F|/|[\w@.-]+:/)'

我是怎么到这里来的

  • findmnt -D是近在咫尺的,但它仍然包含许多我不想看到的tmpfs系统。
  • 当然,在模拟df -h的时候,为什么不直接运行呢?布局更好一些,唯一丢失的是FSTYPE列,我个人并不错过。(如有此情况,见下文。)
  • 接受的答案中的正则表达式几乎是完美的,但我对其进行了如下调整:
    • 我将grep -E替换为grep -P,这允许我用更紧凑的\w替换更冗长的[:alnum:]
    • .字符在一个字符类中时,没有必要转义它。
    • 如果用户包括在主机名中,远程挂载的文件系统可以包含@ (实际上我在计算机上有一个示例)。
    • 通过将F添加到替换中,我保留了标题行;这是一个精确的,但仍然方便。

  • 我本人并不需要--color=never (因为我不使用aliased grep),但是如果您需要它,您可以将它添加到系统中。

如果您确实需要查看FSTYPE列,您可以很容易地将此方法调整为findmnt,如下所示:

代码语言:javascript
复制
findmnt -D | grep -P '^(S|/|[\w@.-]+:/)'

请注意,在grep方面唯一真正的区别是,您必须将F替换为S,因为df's标题行以Filesystem开头,findmnt's以SOURCE开头。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/177014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档