在上一篇博客中我们总结了处理文件和目录的指令学习,接下来我们来对Linux的系统管理命令展开学习,这也是我们在开始脚本编程之前需要学习的,如何通过命令行的命令来探查系统内部信息。

监测程序

在Linux系统中最复杂的任务就是跟踪已经在运行的程序,如何探查?

探查进程

当程序在Linux系统运行时,我们称之为进程(process)。

命令:ps

功能:输出运行在系统上的所有程序的许多信息。

缺点:稳健而带来的就是复杂性,参数过多(详见man ps),只能显示特定时间点的信息。

默认情况下:

例子解析:输出显示了程序的进程ID(process ID,PID),运行的终端(TTY),进程已使用的CPU时间。

Tip:ps 命令叫人头疼的地方在于它曾经有两个版本。每个版本都有自己的命令行参数集,这些参数控制着输出什么信息以及如何显示。最近,Linux开发人员已经将这两种ps命令格式合并到了单个ps命令中。

Linux系统主要支持3种类型的命令行参数:

1.Unix风格的参数,前面加破折线

一般来说,我们并不需要记住所有的参数,常用的是ps -ef ;ps -l 这两个命令。

2.BSD风格的参数,前面不加破折线

如上所示,Unix和BSD类型的参数有很多重叠的地方。使用其中某种类型参数得到的信息也同样可以使用另一种获得。大多数情况下,你只要选择自己所喜欢格式的参数类型就行了。

3.GNU风格的参数,前面是双破折线

在GNU长参数中一个着实让人喜爱的功能就是–forest参数。它会显示进程的层级信息,并用ASCII字符绘出可爱的图表。如下所示:

以上就是对三种风格的参数的简单介绍,我们只需要记住常用的几个命令即可。

ps -ef 所展示的扩展的信息包含以下几个方面:

UID:启动这些进程的用户。
PID:进程的进程ID。
PPID:父进程的进程号(如果该进程是由另一个进程启动的)。
C:进程生命周期中的CPU利用率。
STIME:进程启动时的系统时间。
TTY:进程启动时的终端设备。
TIME:运行进程需要的累计CPU时间。
CMD:启动的程序名称。

ps -l 指令多出的那些列:

F:内核分配给进程的系统标记。
S:进程的状态(O代表正在运行;S代表在休眠;R代表可运行,正等待运行;Z代表僵化,进程已结束但父进程已不存在;T代表停止)。
PRI:进程的优先级(越大的数字代表越低的优先级)。
NI:谦让度值用来参与决定优先级。
ADDR:进程的内存地址。
SZ:假如进程被换出,所需交换空间的大致大小。
WCHAN:进程休眠的内核函数的地址。

实时监测进程

ps命令虽然在收集运行在系统的进程信息时非常有用,缺点如上所述,为了解决特定时间点的问题,另一个命令就刚好合适:

命令:top

功能:实时显示进程信息

总体来说和ps命令并没有太大的不同,只是从特定时间点变成了实时。在默认情况下,top命令在启动的时候会按照使用CPU时间比例进行排序,键入f允许你选择对输出进行排序的字段,键入d允许你修改轮询间隔。键入q可以退出top。

当我们找到了占用系统大部分资源的进程之后,我们就要开始结束这些进程了。

结束进程

接上节所讲,作为系统的管理员,我们应该具备何时以及如何结束一个进程,在Linux进程中大多数是通过信号来通信:

命令:kill

功能:该命令可以通过PID给进程发出信号终止进程。

缺点:默认情况下,kill会向命令行发送一个TERM信号,只能使用PID而不是命令名。

TERM信号告诉进程尽可能停止,若是有不服管教的进程需要我们强制终止,可以使用 -s 参数。若是要检查是否有效,可以再次运行ps 和 top 命令。

命令:killall

功能:该命令可以通过进程名而不是PID来结束进程,也支持通配符,在系统因为负载过大而变慢时很有用。

命令:kill -9 进程ID

功能:强制结束该进程。

监测磁盘空间

系统管理员的另一个重要任务就是要监测系统磁盘的使用情况(也就是空间)。在Linux系统上有几个命令行命令用来帮助存储媒体:

挂载存储媒体

在文件管理中曾介绍Linux文件系统将所有的磁盘都并入一个虚拟目录下,在使用新的存储媒体之前需要把它放在虚拟目录下,这就叫做挂载。

现在大多数的系统都能自动挂载,若是用的发行版不支持自动挂载,就必须手动挂载了。

命令:mount

功能:挂载媒体,默认情况下也可以用来显示挂载的设备列表

mount命令主要提供四部分信息:

1.媒体的设备文件名

2.媒体挂载到虚拟目录的挂载点

3.文件系统类型

4.已挂载媒体的访问状态

手动挂载设备,需要以root用户登录,或者是以root用户运行sudo命令

手动命令:mount -t type device directory

type参数指定了磁盘被格式化的文件系统类型。

Tip:手动挂载的磁盘要先格式化才能进行挂载。

mount命令的参数:

命令:umount

功能:从Linux系统上移除一个可移动设备,就要先卸载。

实际格式:umount [directory | device]

若是有任何程序正在使用设备上的文件,系统是不会允许我们卸载它。

df命令的使用

学习挂载之后,我们需要查看设备还剩余多少的磁盘空间,df命令就显得很方便。

命令:df

功能:显示每个有数据的已挂载文件系统。

Tip:Linux系统后台一直有进程来处理文件或使用文件。df命令的输出值显示的是Linux系统认为的当前值。有可能系统上有运行的进程已经创建或删除了某个文件,但尚未释放文件。这个值是不会算进闲置空间的。

du命令的使用

df命令只能告诉我们宏观的磁盘的存储空间,并不能告诉我们细分的文件或者特定的目录,这个时候就要用到du命令来显示具体的占用的空间的文件。

命令:du

功能:显示当前目录下的所有文件和目录。

du命令的几个参数:

-c:显示所有已列出文件总的大小。
-h:按用户易读的格式输出大小,即用K替代千字节,用M替代兆字节,用G替代吉字节。
-s:显示每个输出参数的总计。

在我们查看了具体的文件之后就是要对它们使用文件处理命令进行处理。

处理数据文件

结合上节所述,当我们有大量的数据时,一般来说很难提取到有用的信息,但是Linux系统提供了命令行工具来处理大量的数据,这些命令可以帮助我们更好的应对。

排序数据

命令:sort

功能:sort命令是对数据进行排序的。默认情况下,sort命令按照会话指定的默认语言的排序规则对文本文件中的数据行排序。

缺点:默认情况下,sort命令会把数字当做字符来执行标准的字符排序,产生的输出可能根本就不是你要的。解决这个问题可用-n参数。

另一个常用的参数是 -M,按月排序,Linux的日志中经常会有时间戳来表明事件是什么时候发生的。

其他参数:

Tip:管道命令(|)将du命令的输出重定向到sort命令。

搜索数据

在海量的数据背景下,我们通常需要在大文件中找到一行或几行数据即可,这个时候我们就需要搜索数据了。

命令:grep pattern file

功能:在文件中查找数据。

若是要进行反向搜索,加入参数 -v 即可。

显示匹配模式的行的行号,加入 -n 参数即可。

若想知道有多少行含有匹配模式,加入参数 -c 。

若要指定多个匹配模式,可使用 -e 模式。

Tip:在默认模式下,也可使用正则表达式来定义查找匹配的模式。

压缩数据

在windows系统中我们经常使用的压缩文件就是zip文件。

Tip:compress文件压缩已经很少在Linux系统中见到了,基本现在都是使用gzip。

命令:gzip;gzcat;gunzip

功能:压缩文件;查看压缩文件的内容;解压文件。

缺点:该命令只能压缩一个文件,不能将多个文件压缩进一个压缩包。

gzip命令可以一次性指定多个文件名,也可以使用通配符来一次性批量压缩文件。

归档数据

为了解决压缩数据中不能同时压缩多个文件的缺点,还有另外的命令来解决这个问题。

命令:tar function [options] objects1 objects2

功能:能将多个文件在磁带设备中归档到一个文件。

Tip:文件名以.tgz结尾。这些是gzip压缩过的tar文件可以用命令tar -zxvf filename.tgz来解压。

总结

此篇博客是学完系统管理之后一些要点的总结,下一篇将是对Linux shell及其使用。