【问题标题】:Script to figure out the difference in disk space找出磁盘空间差异的脚本
【发布时间】:2017-06-10 05:46:33
【问题描述】:

我有一个显示磁盘使用输出的 Linux 命令

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       2.8T  1.1T  1.7T  39% /data/disk2
/dev/sdc1       2.8T  1.1T  1.7T  41% /data/disk3
/dev/sdd1       2.8T  1.1T  1.7T  40% /data/disk4

我需要帮助才能在脚本(Python 或 Bash)中继续执行此操作,以便让我知道磁盘之间的差异是否超过 5%。如果它们的不平衡度超过 5%,我将编写代码通过电子邮件发送结果。任何帮助将不胜感激。

【问题讨论】:

  • 我对 linux 很陌生,我唯一能想到的就是创建一个文件并在新生成的文件上使用 diff 命令。我相信有很多更简单的方法
  • 您应该针对特定问题提出特定问题。由于 Stack Overflow 向您隐藏了关闭原因:“要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题对于 Stack Overflow 来说是题外话,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。"

标签: python linux bash shell


【解决方案1】:

这个怎么样:

import re

s = """
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       2.8T  1.1T  1.7T  39% /data/disk2
/dev/sdc1       2.8T  1.1T  1.7T  41% /data/disk3
/dev/sdd1       2.8T  1.1T  1.7T  40% /data/disk4
"""

regex = re.compile(r'\d{1,2}%')

result = [int(a[:-1]) for a in regex.findall(s)]
# [39, 41, 40]

如果你想在最后比较它们......

if max(result) - min(result) > 5:
    print("Imbalanced!")
else:
    print("Balanced!")

当然,你可以像这样调用操作系统级别的函数并获得它们的输出:

command_output = subprocess.check_output(['df', '-h']).decode('utf-8')

【讨论】:

  • result = [int(a[:-1]) for a in regex.findall(p)] TypeError: expected string or buffer
  • @user3508766 什么是p
  • p = Popen(["ansible","dr-data","-m","shell","-a","df -h /data/disk*"], 标准输入=管道)
  • @user3508766 这是你的问题...Popen() 的结果不是字符串...试试我发布的内容:subprocess.check_output()
【解决方案2】:

也可以使用awk

df | awk '\
    BEGIN { \
        max=0; \
        min=2000; \
    } \
    NR>1 { \
      pf = $5; \
      sub( /\%/, "", pf ); \
      pf = pf + 0; \
      if ( pf > max ) max = pf; \
      if ( pf < min ) min = pf; \
    } \
    END { \
      diff = ( max - min ); \
      print diff \
    }'

【讨论】:

    【解决方案3】:

    awk解决方案:

    df -h | awk 'NR>1{ a[NR-1]=substr($5,1,length($5)-1) }
            END{ asort(a); print ((a[length(a)]-a[1]) > 5? "Not good!" : "Good!") }'
    

    输出(供您输入):

    Good!
    

    【讨论】:

    • 这应该没有单引号吗? df -h | awk NR>1{ a[NR-1]=substr($5,1,length($5)-1) } END{ asort(a); print ((a[length(a)]-a[1]) > 5? "不好!" : "好!") }
    • @user3508766,你在说什么?
    猜你喜欢
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2019-06-06
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多