使用 diff 时忽略“df -h”大小的变化

使用 diff 时忽略“df -h”大小的变化

我试图在服务器重新启动之前和之后比较许多其他基本服务的文件系统,以检查是否存在任何不匹配。

我目前正在将数据保存到文件中并使用进行比较差异命令

由于有很多服务器,这并不有效,因为这也会检查 FS 大小的差异;从下面可以看出。

diff -rs ./prechecks/file ./postchecks/file
10c10
< udev                                                                  7.8G  164K  7.8G   1% /dev
---
> udev                                                                  7.8G  156K  7.8G   1% /dev
13c13
< /dev/mapper/vg01-lvopt_IBM                                            9.9G  8.2G  1.2G  88% /opt/IBM
---
> /dev/mapper/vg01-lvopt_IBM                                            9.9G  8.3G  1.2G  88% /opt/IBM
18,19c18,19

我尝试过如果我们可以使用忽略选项,但我无法理解逻辑。

我想检查一下我们是否可以克服这个问题。这造成了损失,因为我每次都必须处理数百台服务器。

否则,有没有办法忽略选项卡 - 大小;用过的;有用;使用%;在 df -h 的输出中,如下所示,这将首先消除检查。

Filesystem                                      Size  Used Avail Use% Mounted on
/dev/mapper/vg00-lvroot                          20G   16G  4.5G  78% /

帮助我解决挑战。谢谢。!

编辑1: df --output=source,fstype,target是我的第一选择,但我无法在其他服务器上执行此操作 df: unrecognized option '--output=source,fstype,target' 尝试“df --help”以获取更多信息。还有其他解决方法吗?

答案1

如果您只想比较安装点,您可能需要比较命令的输出mount而不是命令本身。df

这还将比较挂载选项和文件系统类型,这也可能很好。

$ mount
server:/export/client/root on / type nfs (v3, udp, timeo=100, retrans=101)
server:/export/shared/usr on /usr type nfs (nodev, wxallowed, v3, tcp, soft, intr, timeo=100)
amd:20004 on /home type nfs (v2, udp, intr, timeo=100, retrans=101)
server:/export/shared/home on /tmp_mnt/server/export/shared/home type nfs (nodev, nosuid, v2, udp, soft, intr, timeo=100)

答案2

有没有办法忽略选项卡 - 大小;用过的;有用;使用%;

命令df输出字段可通过--output选项进行调整:

df -h --output='source'

上面只会输出文件系统名单

Filesystem
/dev/mapper/vg00-lvroot

- 输出[=FIELD_列表]
使用由FIELD_LIST定义的输出格式,或者如果省略FIELD_LIST则打印所有字段。


如果某些选项不受支持,请尝试以下解决方法awk

df -h | awk '{print $1}'

答案3

GNU diff 有两种忽略更改的方法。有一些选项可以忽略某些类型的差异,例如空格或大小写,但这些选项仅限于少数预设。还有一个选项可以忽略与某些模式匹配的行,但这只能让您忽略行,而不能忽略行内的某些更改。忽略空白更改 ( diff -w) 可以帮助您,以防列被格式化为不同的宽度,但要忽略某些数字,您需要其他东西。

忽略某些差异的常用方法是预处理两个文件,以删除或规范化您想要忽略的部分。例如,如果您想忽略已使用/可用/百分比列,假设您的卷名称和安装点不包含空格,则可以使用

awk '{print $1, $2, $6}'

作为预处理器。您可能还想对文件进行排序,除非您已经这样做了,因为枚举顺序之间的差异df并不显着。在具有进程替换的 shell 中(ksh、bash、zsh):

diff <(<./prechecks/file awk '{print $1, $2, $6}' | sort) \
     <(<./postchecks/file awk '{print $1, $2, $6}' | sort)

如果您对许多文件执行此操作,diff -rs请构建自己的循环来单独对文件调用 diff,而不是使用 。

答案4

您还可以考虑该命令的输出lsblk。这是一个仅限 Linux 的实用程序,但它列出了所有块设备,即使它们尚未安装。请参阅该选项的手册页-n,该选项禁用标题,以及该-o选项可让您指定所需的列。

相关内容