如何阻止 Snaps 在 df 中列出?

Ubuntu正在使用snaps,如下所示
核心应用程序被打包为snaps
点击这里查看

enter image description here


所以,我的问题是,由于快照使用df命令显示,并且显然会淹没df
它只是淹没了df,并使其更难使用。有没有办法停止它?我假设由于snap计划更频繁地使用,要么它将不会在df中显示,要么df将成为一个更长的命令,带有更多的管道。

7你可以尝试使用 df | grep -v "/snap" 或类似的命令,但除此之外,没有其他方法了。Snaps已经挂载,所以会显示在显示挂载内容的命令结果中。 - dobey
2也许你可以在https://launchpad.net/+ubuntu/source/coreutils上提交一个错误报告,说明已安装的快照在输出中没有提供帮助。 - dobey
2您可以通过以下方式防止df列出snaps:df $(cut -d' ' -f3 /proc/mounts | sort -u | grep -v 'squashfs' | sed 's/^/-t /') - Martin Wimpress
2我设置了一个别名:alias df='df | grep -v "/snap"' - Mike Redrobe
4不要将 df 的结果传输到 grep 并删除 snaps,更清洁的解决方案是使用 grep 的 grep -v 选项来排除文件系统。Snaps 使用 squashfs。因此,您可以定义一个别名,例如 alias df='df -l -BM -Tx"squashfs"',以获取非 snap 列表作为默认值。 有关定义,请参见 [https://docs.snapcraft.io/the-snap-format/698]。 - Marcus
1@marcus 这是一个可行的解决方案。不妨将其作为答案而不是评论。 - Sergiy Kolodyazhnyy
我使用的是'df -h | egrep -vi snap'。 - Ronald Johnson
4个回答

你可以使用df的df -x选项来从结果中排除特定的文件系统。由于snaps使用squashfs文件系统,你可以定义一个类似的别名。
alias df='df -x"squashfs"'

获取非快照列表作为默认设置。
顺便说一下,可以查看此链接以了解快照格式的定义。

3我通常不赞成使用化名,但在这里可能会有例外。谢谢! - trueCamelType
1我仍然更喜欢grep解决方案,因为这将移除所有的squashfs文件系统,而不仅限于snaps。 - Jelle De Loecker
3不同之处在于 grep 解决方案会阻止 df 的其他参数起作用。 - tedder42
@tedder42 function df() { command df "$@" | grep -v "/snap"; } - mxmlnkn
1这种方法与答案中列出的正确使用df相比有何优势,@mxmlnkn? - tedder42
@tedder42,我更喜欢这种方式,因为可能还有其他有效的squashfs挂载用例,我想看看。我只想过滤snap。但是我只是作为回应评论了一下,说明如何使用函数并使用$@转发参数而不是别名来使命令行参数仍然起作用。 - mxmlnkn
5之前的函数还会删除那些恰好包含/snap的行。我的函数改进了这一点,同时隐藏了其他我不感兴趣的“文件系统”:function df() { command df $@ | grep -vE "(% /snap/)|(^tmpfs )|(^udev )"; } - Mark Jeronimus
1@MarkJeronimus 我不是正则表达式专家,但是那些用括号标记每个项周围的原子似乎是多余的。如果它们是必要的,你能解释一下为什么吗?谢谢。我认为"(% /snap/|^tmpfs |^udev )""% /snap/|^tmpfs |^udev "都应该可以正常工作。 - b-jazz
1我也不是正则表达式专家,在过去的经历中,我曾经为“alternatives”语法的不起作用而苦恼了很多。我想我是从某个地方复制/粘贴过来的,很高兴它能够工作。关于刚刚尝试的regex101.com,你应该使用Python语法来防止“/”被解释为正则表达式的分隔符。 - Mark Jeronimus
我还使用alias m='mount | g -v -e cgroup -e fs'来移除添加到挂载中的所有垃圾。 - alchemy
bash: g: command not found - undefined

所有的snap文件系统都以/snap/开头,因此可以使用以下命令:
df | grep -v /snap

使用-v参数可以反转grep搜索(列出不匹配的内容)。
这样做的好处是,如果需要的话,它仍然会显示squashfs文件系统。
如果你愿意,你仍然可以使用别名:
alias df='df | grep -v /snap'

与其他工具 (Pydf) 兼容

另外,由于这里使用的是管道而不是 df 的选项,因此您可以将其用于其他工具,比如 pydf

例如:

pydf | grep -v /snap

使用别名意味着您无法访问标志(df -h),因此我对此解决方案进行了调整,改用函数代替:df() { command df "$*" | command grep -v /snap; } 并将其添加到我的~/.bashrc。这样我仍然可以使用df -h(或其他标志),同时还能去除繁琐的大量 snap 挂载点列表。 - Compholio

我觉得这个很方便;
df -Thx squashfs

做这件事的方式数量是天文数字;)

df | sed /snap/d