Top Command - 如何减少显示的列

Top Command - 如何减少显示的列

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

如何将top命令的显示列减少到只有上面两列?

答案1

笔记:假设你有这个版本top(过程)。您可以使用此命令检查:

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

topprocps 通常是包含在 Fedora/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

f您可以在进入时使用该键top进入辅助屏幕,您可以在其中指定哪些列应切换为可见或不可见:

例如:

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. 文件”。

答案2

[Centos-6 | Ubuntu 12.10]此命令打印 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”命令获取列号

按内存使用情况排序(你的“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

答案3

以 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}

答案4

命令行配置
我不想通过覆盖 user 来影响我的整个用户.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

相关内容