在Linux中只使用CLI工具生成磁盘使用情况图表

11
这个问题中,有人询问如何在Linux中显示磁盘使用情况。我希望能够进一步发展这个命令行的功能...不妨编写一个shell脚本,从诸如先前问题的合理答案的输出中获取数据,并生成一个图表/图形(输出到png文件或其他格式)。这可能需要一些代码,在一个普通的问题中询问可能有些多余,但我的猜测是,某个人已经在某处拥有了一个简短的命令行。
4个回答

10
如果你认为某些 ASCII 字符已足够“图形化”,我可以推荐 ncdu。这是一个非常好的交互式命令行工具,可以帮助我在不反复使用 cd bigdir; du -hs 的情况下逐步浏览大型目录。

+1 对于远程 du -sh 的完美增强!喜欢这个工具,使用和删除工作流也非常快速! - barrymac

6
我建议使用 munin。它专门设计用于绘制CPU使用率、内存使用率、磁盘使用率等图形,就像MRTG一样(但MRTG主要用于绘制路由器的流量图,用它来绘制除带宽以外的任何内容都是hackish的)。
编写Munin插件非常容易(这是项目目标之一)。它们可以用几乎任何东西编写(shell脚本、perl/python/ruby等、C、任何可以执行并产生输出的东西)。插件输出格式基本上是disc1usage.value 1234。与MRTG相比,调试插件非常容易。
我在我的笔记本电脑上设置了它来监视磁盘使用情况、带宽使用情况(通过从我的ISP控制面板拉取数据,它绘制我的两个下载“bin”、上传和新闻组使用情况)、负载平均值和进程数量。一旦我安装好了它(在OS X上目前稍微有点困难,但在Linux/FreeBSD上很简单),我花了几分钟编写了一个插件,第一次就成功了!
我想描述它的设置方式,但munin网站会做得比我更好!

这里有一个示例安装在这里

一些替代方案是nagios和cacti。您还可以使用rrdtool编写类似的东西。 Munin,MRTG和Cacti基本上都是基于此图形工具构建的更易于使用的系统。

如果您想要非常简单的东西,您可以做...

import os
import time
while True:
    disc_usage = os.system("df -h / | awk '{print $3}'")
    log = open("mylog.txt")
    log.write(disc_usage + "\n")
    log.close()
    time.sleep(60*5)

然后..

f = open("mylog.txt")
lines = f.readlines()

# Convert each line to a float number
lines = [float(cur_line) for cur_line in lines]

# Get the biggest and smallest
biggest = max(lines)
smallest = min(lines)

for cur_line in lines:
    base = (cur_line - smallest) + 1 # make lowest value 1
    normalised = base / (biggest - smallest) # normalise value between 0 and 1
    line_length = int(round(normalised * 28)) # make a graph between 0 and 28 characters wide
    print "#" * line_length

那将制作一个简单的ASCII磁盘使用情况图表。我非常非常不建议您使用这样的东西。为什么?日志文件会变得越来越大。图表将逐渐变慢。RRDTool使用滚动数据库系统存储其数据,因此该文件永远不会超过约50-100KB,并且由于文件长度固定,绘图速度始终很快。
简而言之。如果您想轻松绘制几乎任何内容,请使用munin。如果您想要更小和自包含的东西,请使用RRDTool编写一些东西。

4

我们使用RRDtool(像MRTG这样的工具的数据存储后端)在工作中自己制作了图表。我们每5分钟运行一个Perl脚本,对每个分区进行一次du并将其塞入RRD数据库,然后使用RRD的graph函数来构建图表。虽然需要一些时间来设置.rrd文件(例如,我不得不重新学习RPN来做我想做的一些计算),但如果您有一些要随时间绘制图形的数据,则RRDtool是一个不错的选择。


1

我猜有几个选项:

  1. 对于纯CLI解决方案,请使用类似gnuplot的东西。请参见此处以获取示例用法。自从我还是学生以来,我就没有使用过gnuplot :-)

  2. 虽然不是纯CLI解决方案,但可以下载类似JFreeChart的东西,并编写一个简单的Java应用程序,读取stdin并创建您的图表。

希望这可以帮助到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接