尝试像熟练的工程师一样使用 top 命令

目录
你好。
我是Mandai,负责Wild 开发团队。
据说,当所谓的黑客绕过各种监控和封锁措施登录服务器时,他们输入的第一个命令是“w”命令,但当服务器管理员检测到异常时,他们输入的第一个命令可能是“ps”命令或“top”命令。
这次,我会更认真一些,介绍如何使用 top 命令,让你在人群中脱颖而出。
开始之前
运行 top 命令时,它会分为两个区域:上方的摘要区域显示整个系统的资源,下方的任务区域显示正在运行的进程。
下面我们将介绍的许多函数都会影响这些函数之一,我们将在解释中使用它们,所以请记住它们。
如何输入 top 命令
首先我想说的是,通过 SSH 登录后,就这么迅速地输入“top”命令,似乎有点业余。
与其他命令一样,top 命令也可以设置参数,所以没有理由不利用这一点。
最好在登录后花点时间思考一下你需要哪些参数。
例如,要查看正在执行的完整命令,请键入
top -c
我们假设这一点。
另外,如果您想更改默认的屏幕刷新率(3秒),
top -d 0.5 # 每 0.5 秒更新一次屏幕
我们假设这一点。
同时发布以上两项:
top -c -d 0.5 # 或 top -cd 0.5 # 以下命令无效:top -dc 0.5
如果屏幕刷新速度过快,负载会意外增加,所以要保持适中。
执行过程中你可以做什么
摘要区域显示切换
摘要区域大致分为三个部分。
- 正常运行时间和总体负载信息(l)以红色圆圈标出
- CPU 和任务信息 (t) 以绿色框括起来
- 内存和交换信息 (m) 被蓝色边框包围
您可以通过按相应的键(括号中的键)来显示/隐藏这些内容。
另一个重要的按键是“1”。如果您按下此键,如果您的CPU是多核的,则会分别显示每个核心的负载。
任务区域显示切换
默认的顶部屏幕可以让你了解当前的系统负载,但确实也有很多项目没有显示出来。
在 top 程序运行时,按下“f”键会显示 top 程序可以显示的项目列表,您可以设置项目的显示或隐藏。
在此屏幕上,您可以上下移动光标,因此请将光标移动到要显示的项目,然后按下“d”键或空格键将其加粗,该项目就会显示出来。
交换使用情况(出乎意料地难以获得)也可以在上屏幕上获得。
此外,如果在上下移动后按右键,则会选中整个项目;如果在该状态下按上下键,则可以调整项目的显示顺序。
下面的视频显示了交换空间的使用情况,并将其显示在命令的最前面。
信号传输
如果你想知道什么是信号,请查阅维基百科
在 top 命令中可以执行相当于“kill [pid]”的操作。
要做到这一点,请在 top 程序运行时按下“k”键。如果您此时不小心按下了“k”键,可以按 Esc 键退出。
任务区域上方将显示“要发出信号/终止的进程 ID”消息,请输入要终止的进程 ID。
接下来,屏幕会显示“发送进程 ID [PID] 信号 [15/sigterm]”的消息,请发送您要发送的信号名称/信号编号。
默认情况下,会发送 sigterm (15) 信号,如果进程没有因此停止,请尝试发送 sigkill (9) 信号。
我推荐这样做,因为你可以在查看顶部屏幕的同时终止进程。
专家级分屏模式(交替显示模式)
出于某种原因,top 有一个备用显示模式,可以将屏幕分成最多四个部分来查看正在运行的进程。
分屏模式(我们在这里就这么称呼它;man top 的翻译版本,它被称为交替显示模式)和常规全屏模式之间切换,请使用 Shift + a。
进入分屏模式时的屏幕布局如下:
这不是普通的顶部!也不是bug。
它的设计理念是,你可以设置最多四个不同的任务区域,并可以根据需要显示的项目进行调整和切换。
默认屏幕为 1,要切换到其他屏幕,请按“a”键向前移动,按“w”键向后移动。
此外,要跳转到特定页面,请按“g”键,然后按 1 到 4 之间的数字,但由于只有四个页面,您可能不需要使用此功能。
移动屏幕后,按 Shift + a 返回全屏模式,
这将改变任务栏视图,使进程充满整个屏幕。
对于每个屏幕,您可以使用“f”来调整字段并指定排序依据的字段,以便进行调整。
如果在分屏模式下调整程序后退出,更改将恢复到原始状态;因此,如果输出下面描述的设置文件,下次启动程序时,更改将反映在程序中。
启动时预定义输出状态
检测异常并检查系统顶部时,往往时间紧迫,因此每次都带参数运行命令会浪费时间。
在这种情况下,一种方法是将其写入配置文件。
定义显示状态的配置文件通常会输出到每个用户的名为“$HOME/.toprc”的文件中。
设置很简单;在顶部菜单中将显示设置调整到您喜欢的状态后,只需按“W”键即可退出。
注意是大写字母“W”,所以如果您关闭了大写锁定键,请按“Shift + w”。
生成的文件如下所示:
top 的配置文件(Linux 进程与窗口)Id:i,Mode_altscr=0,Mode_irixps=1,Delay_time=3.0,Curwin=0 2 fieldscur=\¨³´»½ÀÄ·º¹Å&')*+,-./012568<>?ABCFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij winflags=193844,sortindx=18,maxtasks=0,graph_cpus=0,graph_mems=0 summclr=1,msgsclr=1,headclr=3,taskclr=1 Job fieldscur=¥¦¹·º(³´Ä»½@<§Å)*+,-./012568>?ABCFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij winflags=161076, sortindx=0, maxtasks=0, graph_cpus=0, graph_mems=0 summclr=6, msgsclr=6, headclr=7, taskclr=6 1 fieldscur=\º»<½¾¿ ÀÁMBNÃD34·Å&'()*+,-./0125689FGHIJKLOPQRSTUVWXYZ[\]^_`abcdefghij winflags=193844, sortindx=21, maxtasks=0, graph_cpus=0, graph_mems=0 summclr=5, msgsclr=5, headclr=4, taskclr=5 Usr fieldscur=¥¦§¨ª°¹·ºÄÅ)+,-./1234568;<=>?@ABCFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij winflags=193844, sortindx=3, maxtasks=0, graph_cpus=0, graph_mems=0 summclr=3, msgsclr=3, headclr=2, taskclr=3 Fixed_widest=0, Summ_mscale=0, Task_mscale=0, Zero_suppress=0
说实话,在这种状态下,完全不清楚发生了什么(虽然如果单独检查每个部分,也不是完全看不懂),所以我认为最好避免手动创建这个文件。
反之,只要复制粘贴,配置正确的文件就可以应用到其他机器上,因此即使使用 chef 或 ansible 构建,也可以轻松反映出来。
为 top 命令准备多个配置文件
随着你对配置顶部屏幕的兴趣越来越浓厚,你可能需要准备多个屏幕设置,并根据不同的情况使用它们。
不过,正如前面提到的,top 的配置文件位于“$HOME/.toprc”。
事实上,这并不是正确的解释。
正确的格式是“$HOME/.[顶级名称]rc”。
我做了些实验,想看看顶级名称是什么意思。
# 检查当前 top 路径 $ which top /usr/bin/top # 在 /usr/bin/mytop 中创建指向 /usr/bin/top 的符号链接 $ sudo ln -s /usr/bin/top /usr/bin/mytop # 尝试运行它 $ mytop
这样可以正常工作,顶部也能正常打开。
现在,如果您更改任何字段或显示并保存,则会创建一个名为“$HOME/.mytoprc”的文件。
这样,您就可以创建符号链接并编写不同的配置文件。
您自定义的 top 命令将以不同的名称执行,因此不会影响正常的 top 命令。
以批处理模式启动
认为 top 命令仅仅是一个实时显示系统状态的工具是错误的;它和 vmstat 以及 sar 命令一样,也具有批处理模式,可以将输出结果发送到标准输出,方便用户进行处理和保存。
以下命令会将 top 命令的输出结果发送到标准输出。
top -b -n 5 -d 0.5
“-b”选项以批处理模式启动程序,“-n”选项指定显示次数,
“-d”选项指定显示间隔。
在这种情况下,顶部屏幕的结果将以 0.5 秒的间隔发送到标准输出 5 次。
当然,你可以将其通过管道传递给其他命令,但以下命令通常是不正确的。
top -b -n 5 -d 0.5 | head -n 5
如果你试一下,就会明白我的意思。
看看这条命令,你大概能想象出想要的结果,但上面的命令并不适合这个用途。
概括
顶部命令是一个很有用的命令,在很多情况下都很有用,但是您是否意识到,通过自定义它可以变得更加有用?
这就是它的完整样貌,但有趣的是,您可以根据自定义选项,将其做得非常精致。
我们就是这样全年365天、每天24小时监控服务器的。
就是这样。
3

