最高命令-如何减少显示的列


17

我们能否在top命令中获得特定的列,例如,我仅对内存利用率和CPU使用率列感兴趣。

如何将top命令的显示列减少为仅以上两列?


3
什么操作系统?有什么top变化?有数十种顶级实现。
斯特凡Chazelas

请向我们提供您的操作系统和最高版本(top -h)。
slm

Answers:


19

注意:假定您具有top(procps)的此版本。您可以使用以下命令进行检查:

$ top --version
    top: procps version 3.2.8
usage:  top -hv | -bcisSH -d delay -n iterations [-u user | -U user] -p pid [,pid ...]

procps通常是topFedora / CentOS / RHEL和其他变体附带的版本。

变更栏

如果在手册页中查找top,将看到标题为“ 2b。选择和订购列”的部分。有键盘快捷键用于切换不同字段/列的可见性。

例如:

  f,o     . Fields/Columns: 'f' add or remove; 'o' change display order
  F or O  . Select sort field
  <,>     . Move sort field: '<' next col left; '>' next col right

您可以ftop进入时使用键进入二级屏幕,在该屏幕上可以指定哪些列应切换为可见或不可见:

例如:

Current Fields:  ANOPQRSTUVbcdefgjlmyzWHIKX  for window 3:Mem
Toggle fields via field letter, type any other key to return 

* A: PID        = Process Id                                      * W: S          = Process Status
* N: %MEM       = Memory usage (RES)                              * H: PR         = Priority
* O: VIRT       = Virtual Image (kb)                              * I: NI         = Nice value
* P: SWAP       = Swapped size (kb)                               * K: %CPU       = CPU usage
* Q: RES        = Resident size (kb)                              * X: COMMAND    = Command name/line
* R: CODE       = Code size (kb)
...

还有更多,这些仅是示例。完成所需的列切换之后,请使用Esc退出选择屏幕。

保存配置

您可以使用Shift+ W保存更改,因此它们是默认设置:

  W         Write configuration file

该文件存储在此处,$HOME/.toprc如下所示:

$ more .toprc 
RCfile for "top with windows"       # shameless braggin'
Id:a, Mode_altscr=0, Mode_irixps=1, Delay_time=1.000, Curwin=2
Def fieldscur=AEHIoqTWKNMBcdfgjpLrsuvyzX
    winflags=129016, sortindx=19, maxtasks=0
    summclr=2, msgsclr=5, headclr=7, taskclr=7
Job fieldscur=ABcefgjlrstuvyzMKNHIWOPQDX
    winflags=63416, sortindx=13, maxtasks=0
    summclr=6, msgsclr=6, headclr=7, taskclr=6
Mem fieldscur=ANOPQRSTUVbcdefgjlmyzWHIKX
    winflags=65464, sortindx=13, maxtasks=0
    summclr=5, msgsclr=5, headclr=4, taskclr=5
Usr fieldscur=ABDECGfhijlopqrstuvyzMKNWX
    winflags=65464, sortindx=12, maxtasks=0
    summclr=3, msgsclr=3, headclr=2, taskclr=7

有关更多详细信息,请参见手册页的第5节“ 5.文件”。


有没有一种方法可以通过命令行标志更改列/字段?这将非常有用,例如,用于检查不同机器上的顶部并获得标准化输出。
naught101 '16

@ naught101-如果您有新问题,请在主站点上提问。评论并不是真的要这样做。
slm

2

[Centos-6 | Ubuntu 12.10]此cmd打印4个主要进程,按CPU使用率排序

top -bn 1 | grep "^ " | awk '{ printf("%-8s  %-8s  %-8s\n", $9, $10, $12); }' | head -n 5

输出量

%CPU      %MEM      COMMAND
7.7       0.2       top
0.0       0.3       init
0.0       0.0       kthreadd
0.0       0.0       migration/0

注意:head -n 5而不是4,因为我们还有列名

$ 9,$ 10,$ 12列表示CPU,MEM,COMMAND。使用“ top”命令获取列号

按内存使用量排序(您的“最高”必须支持-m才能运行此功能)

# this work on my centos-6 machine, NOT work on my Ubuntu 12.10
top -m -bn 1 | grep "^ " | awk '{ printf("%-8s  %-8s  %-8s\n", $9, $10, $12); }' | head -n 5

这是top的哪个版本?
slm

我使用centos-6.4。Ubuntu上的top命令不支持-m来排序我的内存使用情况。
阻尼帽

有趣的是,我正在使用Fedora(14),我正在获得procps版本的top。我只是仔细检查过,在CentOS 5 + 6上,它们也在使用顶级的procps。您的命令在F14上不起作用。它确实可以在CentOS 5 + 6上运行。仅供遇到此线程的人参考!
slm

1

以json格式查看并删除标头,

top -bn 1 | grep "^ " | awk '{ printf("%s%s%s\n","{CPU:"$9",","MEM:"$10",","CMD:"$12"}"); }' | head -n 6 | tail -n +2

输出如下

{CPU:6.4,MEM:0.3,CMD:gnome-terminal}
{CPU:6.4,MEM:1.9,CMD:chrome}
{CPU:0.0,MEM:0.0,CMD:init}
{CPU:0.0,MEM:0.0,CMD:kthreadd}
{CPU:0.0,MEM:0.0,CMD:ksoftirqd/0}

grep | awk | head | tail可以合并为一个awk
roaima

0

命令行配置
我不想通过覆盖用户来影响整个用户.toprc,因此我想出了一种解决方案,使每个用例具有单独的配置。
您可以top使用自定义配置文件来代替用户主目录中的配置文件。
只需将HOME变量更改为包含.toprc您所需文件的自定义目录即可。

# TOPRC_PROFILE_DIRECTORY contains .toprc (or can be created by saving using shift+w after configuring using keybindings) 
TOPRC_PROFILE_DIRECTORY="<your-directory>"
HOME="$TOPRC_PROFILE_DIRECTORY" top
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.