将Linux的top命令输入到指定文件时的乱码问题
原文链接 https://lanffy.github.io/2014/03/25/%E5%B0%86Linux%E7%9A%84top%E5%91%BD%E4%BB%A4%E8%BE%93%E5%85%A5%E5%88%B0%E6%8C%87%E5%AE%9A%E6%96%87%E4%BB%B6%E6%97%B6%E7%9A%84%E4%B9%B1%E7%A0%81%E9%97%AE%E9%A2%98
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
根据需求,项目需要读取linux系统环境参数,所以需要将top命令的输出结果输入到文件中。用重定向命令如下:top > result.txt 。用vi打开文件: vi result.txt 。显示的结果却是这样的,看图更方便:
于是分析出一下几个原因:
1.其他命令是否出现相同问题?
2.是否是文件编码格式问题导致?
3.是否是系统平台问题导致?
下面一个一个测试:
1.测试命令:ls > testls.txt 结果如图:
测试命令:ps -ef > testps.txt 结果如图:
可以得出结论,其他命令没有出现这样的情况,排除原因1.
2.看看result.txt文件的编码格式 vi result.txt进入文件输入: ":set fileencoding" 后按回车显示utf-8,如下图:
于是也可以排除不是文件编码的问题;排除原因2;
3.将 result.txt 文件拿到windows系统中打开,显示如下图:
也出现了乱码情况,所以也不是系统平台的原因。。。这下原因3也排除了。
这下该怎么办呢???
最后能想到的只有命令本身了,因为其他命令没有出现这种情况,所以会想到在top命令的参数中会有蹊跷。 下面是linux top命令的详解:http://rockhooray.blog.51cto.com/938613/832621 可以发现,在想要输出内容到文件中则需要使用批处理模式。详细介绍如下:
-b 批处理模式操作
1.开启top工作在批处理模式,这样在需要将top的输出信息输出 到其他程序或文件时非常有用。在这种模式下,top不接受任何输入操作,直到通过-n 设置的重复次数后,或者退出top才终止。
2.在终端中输入top -b 将不断重复地显示任务信息,直到按Ctrl+C终止为止,在终端中输入top -b -n 10 ,top将显示10次后终止,也就是分10个批次显示完后就退出。
所以只需要在命令中指定为批处理模式问题就解决啦: top -b -n 10 > result.txt 结果就不在展示了。