我曾经mount
显示已安装的驱动器,我不想看到不太有趣的驱动器(即非物理驱动器)。所以我曾经有一个脚本mnt
可以做到:
mount | grep -Ev 'type (proc|sysfs|tmpfs|devpts) '
在 Ubuntu 8.04 下,只显示了我ext3
和reiserfs
挂载点。该行实际上已被注释掉,现在我使用(对于 Ubuntu 12.04):
mount | grep -Ev 'type (proc|sysfs|tmpfs|devpts|debugfs|rpc_pipefs|nfsd|securityfs|fusectl|devtmpfs) '
仅显示我的ext4
和zfs
分区(我放弃使用reiserfs
)。
现在我正在为Ubuntu 14.04做准备,脚本必须再次扩展(cgroup,pstore)。有没有更好的方法来做到这一点而无需扩展脚本?我只对已安装的物理磁盘和已安装的网络驱动器( nfs
、 )感兴趣cifs
。
答案1
不使用mount
。
从man mount
:
- 上市。
- 保留列表模式只是为了向后兼容。
- 为了更强大和可定制的输出使用
findmnt
(8),尤其是在您的脚本中。 - 请注意,安装点名称中的控制字符替换为?。
按照文档的建议使用findmnt
。以下是一些有趣的选项,如下所述findmnt --help
:
-i
或者--invert
- 颠倒匹配感
-R
或者--submounts
- 打印匹配文件系统的所有子安装
-t
或者--types
list
- 按 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 -Do
field,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 排除行开始//
,然后/
再忽略它们。
更新
我看错问题了,我以为你想问排除 cifs
和nfs
。试试这个:
mount | grep -E '^[^ ]*[/:]'
答案4
使用块设备作为后备存储的文件系统列表可以从 获得/proc/filesystems
。例如,您可以按如下方式使用它:
mount -t "$(grep -v '^nodev' /proc/filesystems | cut -f2 | paste -s -d ,)"
由于您希望文件系统由块设备和网络文件系统支持,因此它并不能完全消除手动维护列表的需要。但这样您只需要维护您使用的网络文件系统的列表。
我不知道如何/proc/filesystems
处理那些使用多个块设备作为后备存储的文件系统(即文件系统中内置有 RAID 的文件系统)。你可能需要对那些特殊的人进行特殊对待。