在这个问题中,有人询问如何在 Linux 中显示磁盘使用情况。我想在 cli-path 中更进一步……一个 shell 脚本如何从前一个问题的合理答案中获取输出并从中生成图形/图表(以 png 格式输出文件什么的)?在常规问题中要求这可能有点过多的代码,但我的猜测是有人已经在某个地方放置了一个单行线......
4 回答
If some ASCII chars are "graphical" enough for you, I can recommend ncdu. It is a very nice interactive CLI tool, which helps me a lot to step down large directories without doing cd bigdir ; du -hs over and over again.
我会推荐munin。它专为这类事情而设计 - 绘制 CPU 使用情况、内存使用情况、磁盘使用情况等图表。有点像 MRTG(但 MRTG 主要用于绘制路由器的流量,用它绘制除带宽以外的任何东西都是非常骇人听闻的)
编写 Munin 插件非常容易(这是项目目标之一)。它们几乎可以用任何东西编写(shell 脚本、perl/python/ruby/etc、C、任何可以执行并产生输出的东西)。插件输出格式基本上是disc1usage.value 1234
. 并且调试插件非常容易(与 MRTG 相比)
我已经在我的笔记本电脑上设置了它来监控磁盘使用情况、带宽使用情况(通过从我的 ISP 的控制面板中提取数据,它会绘制我的两个下载“bin”、上传和新闻组使用情况)、平均负载和进程数。一旦我安装了它(目前在 OS X 上有点困难,但在 Linux/FreeBSD 上是微不足道的),我在几分钟内编写了一个插件,它第一次工作!
我会描述它是如何设置的,但是 munin 网站会比我做得更好!
这里有一个示例安装
一些替代品是 nagios 和仙人掌。您也可以使用 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
That'll make a simple ascii graph of the disc usage. I really really don't recommend you use something like this. Why? The log file will get bigger, and bigger, and bigger. The graph will get progressively slower to graph. RRDTool uses a rolling-database system to store it's data, so the file will never get bigger than about 50-100KB, and it's consistently quick to graph as the file is a fixed length.
In short. If you want something to easily graph almost anything, use munin. If you want something smaller and self-contained, write something with RRDTool.
我们在工作中使用RRDtool(MRTG 等工具的数据存储后端)推出了自己的产品。我们每 5 分钟运行一次 perl 脚本,每个分区获取一个 du 并将其填充到 RRD 数据库中,然后使用 RRD 的图形函数来构建图形。弄清楚如何设置 .rrd 文件需要一些时间(例如,我必须重新学习 RPN 才能进行一些我想做的计算),但是如果您有一些想要随时间绘制的数据, RRD 工具是一个不错的选择。
我想有几个选择:
对于纯 CLI 解决方案,请使用 gnuplot 之类的东西。有关示例用法,请参见此处。我从学生时代就没有使用过 gnuplot :-)
不是真正的纯 CLI 解决方案,而是下载JFreeChart 之类的东西并编写一个简单的 Java 应用程序来读取标准输入并创建图表。
希望这可以帮助。