kaiyun全站网页版登录 [Linux探索之旅]第三部分第三课:监视系统活动,滴水不漏

发布于:25-07-18 播放次数:

内容简介

1、第三部分第三课:监视系统活动,滴水不漏

2、第三部分第四课预告:后台运行及合并多个终端

监视系统活动,滴水不漏

在上一堂课中,我们学习了《Linux探索之旅》第三部分第二课的内容,该课程主要围绕流、管道以及重定向这三个关键概念展开深入探讨。

通过阅读http://blog.csdn.net/frogoscar/article/details/48432381的内容,大家对Linux的命令行操作应当有了更深的理解,并且技能水平很可能已经提升到了一个较高的层次。若你尚未达到这一水平,那就请抓紧时间,立刻开始练习吧!

上一节课内容较为复杂,大家付出了很多努力。为此,这节课我们将适当减轻难度,让大家能够轻松愉快地完成学习。

观察当前主流的操作系统,绝大多数都支持多任务处理,Linux自然也不例外。由此开yun体育app官网网页登录入口,Linux具备同时管理多款运行中的应用程序的能力。

在先前的教学环节中,《Linux探索之旅》第二部分第五课——《用户与权限管理:掌握权力,尽显自由》

通过查阅(http://blog.csdn.net/frogoscar/article/details/47882761),我们可以了解到,Linux系统支持多用户操作。在这种系统中,众多用户能够跨越不同地点,通过网络连接实现对同一Linux系统的同步操作。

多用户多任务机制虽然有其优势,却也存在潜在风险。有时,个别用户或任务——即正在运行的程序——可能导致Linux系统承受过重负担,使其显得有些疲惫,处理任务显得过于繁重。

此刻,我们或许会好奇,究竟是谁胆敢做出如此行径?又是哪个程序竟敢让你的系统瘫痪?

如何才能停止一个不再响应的程序呢?

在Windows操作系统中,人们经常提及通过按下《Ctrl + Shift + Delete》这一组合快捷键,可以激活任务管理器,进而终止那些无响应的程序。

在Linux操作系统中,我们通常会借助其他工具和不同的技术手段来解决遇到的困境。在本章内容中,我们将学习到许多新的Linux命令。

闲话不说,我们开始学习吧。

w命令:都有谁,在做什么?

首个出现的指令是我们所遭遇的命令中最简短的,它仅由一个字母组成:w。

这个命令虽然简单,却非常实用,它能让我们迅速知晓当前系统中都有哪些用户正在登录,以及他们正在进行哪些操作。

若你管理着一台Linux服务器,有时它可能会出现负载过高、运行缓慢的情况,此时你应当登录至该服务器,并执行w指令,以便迅速掌握问题的具体状况。

大多数学习者是在个人电脑上完成这门课程的学习,通常情况下,他们的Linux系统中仅注册了一个账户,即他们本人。因此,执行w命令后,只会显示出该个人用户的相关信息。

图中显示,在当前的Linux操作系统中,仅有一位用户处于登录状态,此人正是我,我的用户名为oscar。

w命令所呈现的内容虽简短,却信息量颇丰,初看时难以迅速把握其具体含义。然而,实际上w命令提供的数据极具价值。

我们将这一整体内容拆分为若干个独立的部分进行阐述,遵循自上而下、自左至右的排列顺序。

时间(用date命令也可以做到)

在信息的第一行,我们发现了时间戳17:36:13,这标志着此刻的具体时间,即17点36分13秒。

我们之前已经接触过date这一命令,它具备展示当前日期、时间以及时区信息的功能。

观察date命令输出的信息,我们可以发现它展示了当前的时刻:星期一,九月十四日,下午五点五十秒,中欧夏令时,二零一五年。

Mon是Monday的缩写云开·全站体育app登录,表示《星期一》。

Sep是September的缩写,表示《九月》。

14是日期,表示14日。所以是9月14日。

17:50:57是当前时间。17点50分57秒。

CEST,即欧洲中部夏令时间,是相对于世界标准时间(UTC)而言,位于东两小时的时区。

2015是年份,就是2015年。

date命令显示的结果里,17时50分57秒这一部分对应于w命令所显示的时间信息。

运行时间(用uptime命令也可以做到)

w命令的输出中,紧跟在当前时间后面的是 up 25 min

"up在英语中代表‘正常运行’的含义,而min则是minute的简称,用以表示‘分钟’这一时间单位。"

因此,"up 25 min"意味着系统自启动并登录以来,已经持续运行了25分钟,这指的是从系统启动至当前所经过的时长。

这条信息相当实用,它表明每当系统进行重启或是关闭操作,其运行时长便会重新从零开始计算。

在Windows操作系统中,诸多应用程序在安装完毕后,往往需要用户重新启动电脑以完成安装过程。

在Linux系统中,通常无需频繁重启,通常只有在系统内核进行升级时才需要进行。这也是Linux广泛用于服务器部署的原因之一,因为对于网站服务器来说,保持7×24小时不间断运行是最佳选择。

系统运行时长通常被称作运行时间,在Linux系统中,有一个名为uptime的命令能够展示这一信息。

观察可得,uptime命令的输出结果与w命令显示的第一行信息完全相同,毫无差异。

众多知名网站的服务器,若你通过执行uptime指令查询其持续运行时长,往往能发现令人咋舌的数百天数据。Linux系统的稳定性和抗病毒性能,定能让你心悦诚服。

负载(同样可以用uptime命令获知)

在w命令的输出的第一行的右边,有三个数值,表示负载:

系统负载平均值为0.15,0.11,0.09。

"load"代表“负载”或“负荷”,“average”则指“平均值”。负载是衡量系统运行状况的一个重要参数,它反映了系统的平均工作强度。

这三个数值从左到右分别表示:

1分钟以内的平均负载(0.15)。

5分钟之内的平均负载(0.11)。

15分钟之内的平均负载(0.09)。

这些数值具体表示什么呢?

提及此事,情况略显繁复。通过查阅手册,我们了解到:这些数据反映了某一时间段内程序的平均运行活跃度(这相当于在CPU处理器上运行的程序数量)。简言之,进程就是正在运行的软件。

据此可以推断,在短短一分钟内,平均每分钟有0.15个进程在利用处理器资源,换言之,处理器大约有15%的时间处于工作状态。

电脑处理器的核心数量会影响其承载的数值大小。例如,单核处理器一旦负载数值超过1,便表明其已处于过载状态。对于双核处理器,当负载数值达到2时,也会出现过载现象。至于四核处理器,其负载数值超过4即视为过载,此类情况可按核心数量成倍增加。

有的服务器过载的时候负载的数值甚至能达到50那么多。

长时间内负载值若保持较高水平,则表明系统可能存在故障。此时,可通过执行tload命令来生成负载随时间变化的情况图,即负载曲线图。

tload

tload命令的输出(随时间变化):

图表中,横轴代表时间流逝,而纵轴的数值高低则反映了系统所承受的负荷程度;在左侧,坐标值突然上升,这一现象的出现是由于编辑人员启动了火狐网页浏览器所致。

登录的用户列表(用who命令也可以做到)

在w命令的输出结果中,除了首行之外,后续的每一行均可视为同一部分,这部分内容即为登录系统的用户名单。

这些信息揭示了当前系统中正在连接的用户名单,以及他们各自正在执行的任务内容,还有任务已经持续了多久。

观察到,两行内容均以"oscar"作为起始,而此刻我正身处个人电脑之中,故在Linux系统内仅我一人登录。那么,为何会出现两行"oscar"呢?若我们首先弄清楚每列所代表的信息,答案便一目了然。

USER:用户名(登录名)

在Linux系统中,预置了六个命令行终端以及一个图形界面终端,分别命名为tty1至tty7。在这六个命令行终端中,tty1至tty6负责提供全屏、黑底白字的控制台服务,这一特点在之前的课程中已有介绍。而tty7则专门作为图形终端使用,它对应的是我们启动Ubuntu桌面版时默认的图形用户界面,同样具备全屏功能。在Ubuntu系统中,您可以通过按下Ctrl+Alt+F1至F7组合键来在7个不同的终端间进行切换。除了这7个基础的大环境终端之外,我们还可以在tty7中启动多个非全屏的终端。这些终端通常是我们日常输入命令所使用的图形界面终端,它们的名字均以pts为前缀。您可以通过按ctrl + shift + T快捷键来打开这些终端。pts是伪终端从属的简称,意指模拟终端的从属端。当新启动一个图形界面终端时,其显示名称会标记为pts/0,正如图中所示。若再次启动一个图形界面终端,其名称将变为pts/1,以此类推。

用户所连接的服务器的IP地址,亦或是主机名,显示在FROM这一栏。然而,在本例中,我们并未对远程服务器进行登录操作,仅仅是利用本地电脑进行测试。因此,FROM栏所呈现的并非真正的IP地址。

LOGIN@:用户连接系统的时间。

IDLE:用户有多久没活跃了(没运行任何命令)。

WHAT:当下用户正运行的程序。

在我们的观察中,针对小编的情况,可以注意到存在两位用户以及两个奥斯卡奖项。其中,第一个奥斯卡奖项所关联的是登录Ubuntu操作系统的用户,正是我们在开机后所登录的用户。该用户所进入的是Ubuntu的图形用户界面。这一信息可以从“WHAT”这一栏中得知,显示为“gnome-sessi”,这表明了Gnome桌面系统的存在。第二个奥斯卡指向的是此刻我们正在操作的图形终端的启动者,同样也是奥斯卡。然而,在TTY那一栏显示的是pts/0,而在WHAT那一栏则标注着w,这表明用户执行了w命令。没错,这些信息正是w命令执行后的输出内容。

w命令尽管功能强大,然而所提供的信息却不够全面。接下来kaiyun.ccm,我们将探讨如何获取更为详尽的系统进程资料。

ps命令和top命令:列出运行的进程

简而言之,进程指的是那些被加载至内存并执行的应用程序。多数程序在运行过程中仅启动一个进程,比如Linux系统下的OpenOffice软件便是如此。然而,某些程序在运行时则会生成多个进程,比如Google的Chrome浏览器,每当打开一个新的标签页,就会相应地创建一个新的进程。

在网络服务器领域,Apache软件通常被用来向广大网民传输网页内容。在运行过程中,Apache会启动众多进程,这些进程各自承担着不同的职责。与此类似,像MySQL和PostgreSQL这样的数据库软件,在执行任务时也会产生多个进程。

所以,若你察觉某个程序启动了众多进程,这其实并不令人感到意外。

在Windows操作系统中,若需查看当前正在运行的进程,需按下Ctrl、Alt和Delete这三个键组合,随后在弹出的菜单中选择“进程”选项。

在Linux操作系统中,我们可以通过两个特定的命令来查看到底有哪些进程正在系统中运行。

ps:进程的静态列表

ps是Process Status的简称,其中process在英文中意为“进程”,而status则代表“状态”,因此ps命令的功能是展示系统当前运行的各个进程。

ps命令所呈现的进程清单并不会随时间流逝而自动刷新,它呈现的是一个固定不变的静态画面,仅反映了执行ps命令那一刻的进程状态,亦或者说,它是对某一时刻进程的瞬间捕捉,类似于拍摄了一张快照,英文中称作snapshot。

我们试着不加任何参数直接运行ps命令:

可以看到显示结果有四列:

进程标识符,简称PID。它代表的是process identifier。每个进程都拥有一个独一无二的进程号。在后续我们探讨如何终止进程时,进程号将是一个不可或缺的参数。

TTY:进程运行所在的终端。

TIME:进程运行了多久。

CMD:该字段显示了启动该进程的应用程序名称。若在进程列表中发现多行程序名称一致,则表明该应用程序创建了多个进程实例(如MySQL应用程序)。

在我所遇到的情况中,执行ps命令后,屏幕上显现出两个正在运行的进程,其一为bash,即负责控制当前终端的shell程序;其二则是ps命令本身。

两个进程,这就是全部了?

当然并非如此。当ps命令未带任何参数执行时,它仅会展示出在当前终端中,由执行该命令的用户所启动的进程。实际上,存在许多由root用户启动的进程,这些并未被包含在列表中。此外,还有一些进程,尽管它们是由当前用户启动的,但并非在当前终端内运行,同样也没有被展示出来。

ps命令的功能丰富,参数种类繁多。您可以通过输入man ps来详细了解。不必因为选项众多而感到困惑。

我们不可能介绍每个参数,下面就介绍一些常用的参数吧。

ps -ef:列出所有进程

-ef参数可以使ps命令列出所有用户在所有终端的所有进程。

观察发现,当使用-ef参数时,由于需要展示所有用户的所有进程,因此与之前未添加参数的ps命令相比,输出内容中增加了若干列信息。

UID代表user identifier的简称,意指《用户名》,即执行该进程的个体身份标识。

ps -efH:以乔木状列出所有进程

在上述命令的基础上,增加了一个H参数,这样ps命令就能以树状结构展示进程列表。其中,某些进程是其他进程的子进程。

在上面的图中,我们可以观察到/sbin/init这一程序(进程)已经启动了其他多个进程,例如udevd作为守护进程运行,还有portmap以及以守护模式运行的smbd等。

ps -u 用户名:列出此用户运行的进程

我们就用当前用户来测试看看:

观察可以发现,存在众多进程,而在单独使用ps命令时,仅显示两个进程,这主要是因为众多进程并非在pts/0终端中进行运行。

top:进程的动态列表

ps命令功能卓越,然而存在一不足之处:它仅能捕捉到某一特定瞬间的进程状态,记录下那一刻的进程列表。然而,实际情况是,我们的系统状态是持续变化的,某些进程在这一秒还在运行,下一秒就可能已经停止。因此,ps命令并不能为我们提供对系统进程的实时监控功能。

要获取一个随时间持续更新的进程清单,我们便需要借助top命令的功能。

这个列表是交互性的,而且实时更新。

您可以看到,此刻是凌晨4点02分41秒,系统已运行了3小时52分钟,同时,我们还能观察到用户数量以及系统的平均负载情况。

接下来的内容我们不再做过多阐述,因为这些内容牵涉到了操作系统领域的相关知识。

此处呈现的PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND等字段构成的序列,即为我们所说的进程列表。

但为什么相比之前ps -ef时进程少了这么多呢?

由于top命令不能展示所有进程,它仅呈现部分位于前列的进程,且这样做是为了确保整个信息区域能够恰好填满终端的一个页面空间。

这些进程通常依据对处理器使用率的高低进行排列,数值从高到低(参照“%CPU”这一栏),对处理器占用最多的进程位于列表首位。因此,若你发现系统运行缓慢或负载过重,查看列表前几项的进程信息会是一个有效的解决方法。

前文已述,top命令所展示的信息页面不仅会实时更新,而且支持用户进行交互操作。

我们用一些键盘的按键可以控制top的显示结果。

q:退出top

h:显示帮助文档,也就是哪些按键可以使用。按下任意键返回。

B:大写的B,加粗某些信息。

f:在进程列表中添加或删除某些列。

在调整进程列表的排序方式时,需指定依据哪一列进行排列。系统默认的排序依据是%CPU这一列。

u:依照用户来过滤显示。可以输入用户名,按回车。

k:结束某个进程。会让你输入要结束的进程的PID。

s:改变刷新页面的时间。默认地,页面每隔3秒刷新一次。

Ctrl + C和kill命令:停止进程

有时候,系统会卡住。这在Linux中也是会发生的。

在Linux中停止进程有几种方法:

Ctrl + C:停止终端中正在运行的进程

Ctrl+C这一快捷键至关重要,需牢记于心,因为它能便捷地终止终端内正在执行的应用程序(进程)。值得注意的是,此快捷键仅在终端环境下具备此功能,而在常规的图形界面操作中,它则充当了复制功能的快捷键,与Windows系统中的操作并无二致。

不妨分享一个Linux系统中的小窍门,在终端界面中,若想复制一段文字,只需用鼠标点击并拖拽以选中该段内容,随后轻触鼠标滚轮的中心部位,所选文字便会自动粘贴至终端窗口。

kill命令:结束一个进程

Ctrl+C快捷键仅对当前终端内正在执行的应用程序有效,然而在Linux操作系统中,存在众多我们无法直接观察到的进程,它们在幕后默默运行。

这时候就需要请出kill命令了。

"kill在英语中代表‘杀死’,虽然听起来略显《小暴力》,然而这一指令却极其实用。"

执行kill指令时,需指定要终止的进程的编号,即我们之前观察到的进程标识符PID。该编号是一个数字,我们能够通过运行ps指令或top指令来查询到进程的PID。

例如:

kill 8461

我们同样能够一次性终止多个进程,只需用空格分隔各个进程的进程标识符即可。

kill 8461 8561 1706

有时即便kill命令针对的是某个进程,它却未能成功结束,导致进程停滞(因为kill命令通常会以较为温和的方式结束进程)。面对这种情况,我们该如何是好?是否存在一种更为直接且高效的处理方法呢?

是有的,我们可以用kill -9来立即强制结束进程。比如:

kill -9 7291

立即结束PID是7291的进程,非常《野蛮粗暴》。

killall:结束多个进程

我们曾提及,在运行同一程序的过程中,可能会同时启动若干进程。若你希望一次性终止这些进程,应如何操作呢?

自然,您可以通过输入kill加进程号(PID)逐一终止这些程序,然而我们这里提供了一种更为高效的解决方案——那就是使用killall命令。

“all”在英语中代表“全部”,因此“killall”这一命令的目的在于终止所有需要结束的进程。

与kill命令不同,在使用killall命令时,需直接跟上程序名称,而非进程号(PID)。

目前,我已启动了多款图形界面终端,并在每个终端内执行了查找文件的find指令。

通过执行命令ps -u oscar | grep find,我能够检索到多个运行中的find进程。

我要结束所有这些find进程,可以这么做:

killall find

halt命令和reboot命令:停止和重启系统

既然我们刚刚掌握了使用kill命令来终止进程的方法,那么接下来我们就应该学习如何操作以关闭并重新启动整个Linux系统了。

尽管你很可能已经掌握了通过图形界面进行系统开关机的操作方法,然而,若涉及命令行操作,可能你尚不熟悉其具体步骤。

halt:关闭系统

需要以root身份才能关闭系统,所以我们可以这么做:

sudo halt

reboot:重启系统

同样地,需要以root身份才能重启系统,我们可以这么做:

sudo reboot

实际上,执行halt和reboot这两个操作时,系统都会调用Linux系统中另一个名为shutdown的命令。

读者可以查阅shutdown命令的说明书,或者上网查找相关信息,了解如何利用shutdown命令进行计划性的电脑关机或重启操作(网上有众多教程可供参考)。

算是留给大家的小作业了。

总结

Linux是多任务多用户的操作系统。

使用w命令,我们可以查看当前系统中登录的用户情况,包括他们的活动内容,同时还能获取到系统当前时间、运行时长以及系统负载等相关信息。

ps命令能够展示进程的静态快照,而top命令则具备动态交互特性,能够实时刷新显示界面。

组合键Ctrl + C结束当前终端中正在运行的程序。

kill指令能够终止程序运行,它需要跟上一个进程的标识码,即PID,这是一个数字。倘若常规的kill命令未能成功使进程终止,导致程序陷入停滞,我们便可以转而使用带有-9参数的kill命令,以此强制结束该进程。

halt命令关闭系统,reboot命令重启系统。

第三部分第四课预告

今天的课就到这里,一起加油吧!

下一课我们学习:后台运行及合并多个终端