我们能否在 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 ...]
top
procps 通常是包含在 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