In this question有人要求提供在Linux中显示磁盘使用情况的方法。我想在cli-path中更进一步......如何将shell脚本从前一个问题的合理答案中获取输出并从中生成图形/图表(在png中输出)文件什么的)?这可能是一个常规问题要求的代码太多,但我的猜测是有人已经在某个地方铺设了一个oneliner ......
答案 0 :(得分:9)
如果某些ASCII字符对您来说足够“图形化”,我可以推荐ncdu。这是一个非常好的交互式CLI工具,它可以帮助我在不使用cd bigdir的情况下降级大型目录。 du -hs一遍又一遍。
答案 1 :(得分:6)
我会推荐munin。它专为此类设计而设计 - 绘制CPU使用情况,内存使用情况,光盘使用情况等。有点像MRTG(但是MRTG的主要目的是绘制路由器的流量图,除了带宽之外的任何东西都是非常黑的)
编写Munin插件很容易(这是项目目标之一)。它们几乎可以用任何东西编写(shell脚本,perl / python / ruby / etc,C,任何可以执行和生成输出的东西)。插件输出格式基本上是disc1usage.value 1234
。调试插件非常简单(与MRTG相比)
我已经在我的笔记本电脑上进行了设置,以监控光盘使用情况,带宽使用情况(通过我的ISP控制面板提取数据,它显示我的两个下载“垃圾箱”,上传和新闻组使用情况),平均负载和数量流程。一旦我安装了它(目前在OS X上稍微有些困难,但在Linux / FreeBSD上它是微不足道的),我在几分钟内写了一个插件,它第一次运行了!
我会描述它是如何设置的,但是munin网站会比我做得更好!
安装示例here
一些替代品是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写一些东西。
答案 2 :(得分:4)
我们使用RRDtool(数据存储后端到MRTG等工具)开展工作。我们每5分钟运行一个perl脚本,每个分区需要一个du并将其填充到RRD数据库中,然后使用RRD的图形函数来构建图形。需要一段时间才能确定如何设置.rrd文件(例如,我不得不重新学习RPN来完成我想做的一些计算)但是如果你有一些数据需要随时间变化, RRD工具是一个不错的选择。
答案 3 :(得分:1)
我想有几个选择:
对于纯CLI解决方案,请使用类似gnuplot的内容。有关示例用法,请参阅here。从学生时代起我就没有使用过gnuplot: - )
不是真正的纯CLI解决方案,而是下载类似JFreeChart的内容并编写一个简单的Java应用程序来读取标准输入并创建图表。
希望这有帮助。