Linux基础及应用教程(基于CentOS7)
上QQ阅读APP看书,第一时间看更新

第3章 多用户多任务管理

本章首先介绍了账户管理的相关概念、账户管理工具的使用以及用户口令管理,然后介绍了权限的相关概念及其命令工具的使用。最后介绍了进程的相关概念、查看进程、杀死进程以及作业控制等。

3.1 账户管理

3.1.1 账户管理概述

1.账户实质

Linux操作系统是多用户的操作系统,它允许多个用户同时登录到系统上,使用系统资源。当多个用户能同时使用系统时,为了使所有用户的工作都能顺利进行,保护每个用户的文件和进程,也为了系统自身的安全和稳定,必须建立起一种秩序,使每个用户的权限都能得到规范。为此,首先需要区分不同的用户,这样就产生了用户账户。

账户实质上就是一个用户在系统上的标识,系统依据账户ID来区分每个用户的文件、进程、任务,给每个用户提供特定的工作环境(如用户的工作目录、Shell版本以及X Window环境的配置等),使每个用户的工作都能独立不受干扰地进行。

2.用户和组

广义上讲,Linux的账户包括用户账户和组账户两种。

Linux系统下的用户账户(简称用户)有两种,普通用户账户和超级用户账户(或管理员账户)。普通用户在系统上的任务是进行日常工作,管理员在系统上的任务是对普通用户和整个系统进行管理。管理员账户对系统具有绝对的控制权,能够对系统进行一切操作,如操作不当很容易对系统造成损坏。因此即使系统只有一个用户使用,也应该在管理员账户之外建立一个普通用户账户,在用户进行日常工作的时候以普通用户账户登录系统。

除了用户账户之外,在Linux下还存在组账户(简称组)。组是用户的集合。在RHEL/CentOS中组有两种类型:私有组和标准组。当创建一个新用户时,若没有指定其所属的组,RHEL/CentOS就建立一个和该用户同名的私有组,此私有组中只包含这个用户自己。标准组可以包含多个用户,若使用标准组,在创建一个新的用户时就应该指定其所属的组。

从另一方面讲,同一个用户可以同属于多个组,如某单位有领导组和技术组等,Tom是该单位的技术主管,所以他既应该属于领导组又应该属于技术组。当一个用户属于多个组时,其登录后所属的组称为主组,其他的组称为附加组。

3.Linux环境下的账户系统文件

Linux下的账户系统文件主要有/etc/passwd、/etc/shadow、/etc/group和/etc/gshadow 4个文件。

1)/etc/passwd文件中每行定义一个用户账号,一行中又划分为多个字段定义用户账号的不同属性,各字段间用“:”分隔。例如:

978-7-111-53793-9-Part02-1.jpg

表3-1 中描述了这些字段的意义

3-1 /etc/passwd文件中各字段的含义

978-7-111-53793-9-Part02-2.jpg

2)/etc/passwd文件对任何用户均可读,为了增加系统的安全性,CentOS默认使用shadow passwords保护,将经过加密的用户口令保存在 /etc/shadow文件里,它只对root用户可读且提供了一些口令时效字段。/etc/shadow文件的内容形式如下:

978-7-111-53793-9-Part02-3.jpg

其中各字段的意义如表3-2所示

3-2 /etc/shadow文件中各字段的含义

978-7-111-53793-9-Part02-4.jpg

978-7-111-53793-9-Part02-5.jpg

3)/etc/group文件,将用户分组是Linux中对用户进行管理及控制访问权限的一种手段。每个用户都属于某一个组;一个组中可以有多个用户,一个用户也可以属于不同的组。当一个用户同时是多个组的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的主组,而其他组称为附加组。用户要访问附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组的成员。组的所有属性都存放在/etc/group文件中。/etc/group文件对任何用户均可读。下面是一个/etc/group文件的例子。

978-7-111-53793-9-Part02-6.jpg

与/etc/passwd文件类似,其中每一行记录了一个组的信息。每行包括4个字段,不同字段之间用冒号隔开。各字段的内容说明如表3-3所示。

3-3 /etc/group文件中各字段说明

978-7-111-53793-9-Part02-7.jpg

4)/etc/gshadow文件用于定义用户组口令、组管理员等信息,该文件只有root用户可以读取。下面是一个/etc/gshadow文件的例子:

978-7-111-53793-9-Part02-8.jpg

与/etc/group文件类似,其中每一行记录了一个组的信息。每行包括4个字段,不同字段之间用冒号隔开。其中各字段的内容说明如表3-4所示。

3-4 /etc/gshadow文件中各字段说明

978-7-111-53793-9-Part02-9.jpg

提示

账户管理的实质就是管理上述的4个账户系统文件。可以使用图形界面工具进行,也可以使用命令行工具进行,甚至还可以使用Web工具进行。

3.1.2 使用命令行工具管理账户

1.管理账户的命令行工具

表3-5中列出了管理账户的命令行工具的功能

3-5 管理账户的命令行工具的功能

978-7-111-53793-9-Part02-10.jpg

2.命令行账户管理工具使用举例

操作步骤3.1 命令行账户管理工具使用举例

978-7-111-53793-9-Part02-11.jpg

978-7-111-53793-9-Part02-12.jpg

3.1.3 口令管理和口令时效

1.使用passwd命令进行口令管理

创建用户账户之后,还要给新用户设置口令。为此需使用命令passwd,其格式是

978-7-111-53793-9-Part02-13.jpg

常用选项如表3-6所示

3-6 passwd命令的常用选项

978-7-111-53793-9-Part02-14.jpg

注意

(1)在输入口令时,屏幕上不会回显。口令的选取至少用8个字符,最好大小写字母和数字及特殊字符搭配使用,尽量不要用英文单词作为口令。

(2)只有管理员账户(root)可以更改其他用户的口令,普通用户只能更改自己的口令,且在更改口令之前,系统会要求用户输入旧的口令。

下面给出几个passwd命令的使用示例

操作步骤3.2 passwd命令的使用示例

978-7-111-53793-9-Part02-15.jpg

978-7-111-53793-9-Part02-16.jpg

2.chage命令

硬件计算能力如今已经非常强大,这大大地缩短了利用自动运行的程序来猜测口令的时间。口令时效是系统管理员用来防止机构内不良口令的一种技术。防止口令被攻击的方法就是经常改变口令。为安全起见,要求用户定期改变用户口令是明智之举。

口令时效意味着过了一段预先设定的时间后,用户会被提示创建一个新口令。它所根据的理论是,如果用户被强制定期改变口令,某个口令的破译对入侵者来说就只有有限的利用机会。这种用来强制用户在一段时间之后更改口令的机制称为口令时效。

在Linux系统上,修改口令时效分为:

● 对于未来要创建的所有用户的口令时效需修改/etc/login.defs文件的相关参数。

● 对已存在的用户修改口令时效是通过chage命令来管理。

(1)设置新添用户的口令时效

编辑/etc/login.defs,通过指定表3-7中描述的几个参数来设置口令实效的默认设定。

3-7 /etc/login.defs中与口令时效相关的参数

978-7-111-53793-9-Part02-17.jpg

2)设置已存在用户的口令时效

chage命令的格式是:

978-7-111-53793-9-Part02-18.jpg

表3-8中列出了chage命令的选项说明

3-8 chage命令的选项说明

978-7-111-53793-9-Part02-19.jpg

下面给出几个使用chage命令的例子

操作步骤3.3 使用chage命令的例子

978-7-111-53793-9-Part02-20.jpg

提示

1.也可以使用chage <用户名>进入交互模式修改用户的口令时效。

2.使用chage命令实质上是修改影子口令文件/etc/shadow中的与口令时效相关的字段值。

3.chage命令仅适用于本地系统账户,对LDAP账户和数据库账户不起作用。 注意

制订一项策略,定义多长时间后一个口令必须进行更改,然后强制执行该策略,是非常不错的一个做法。在解雇了某个雇员后,口令时效策略会保证该雇员不可能在被解雇3个月后发现他的口令依然可用。即使系统管理员忘了删除该雇员的账号,该账号也会因口令时效策略而被自动锁定。当然,这一点并不能成为不及时删除该雇员账号的理由,但是这个策略的确提供了一层额外的安全防护,尤其是在过去常常忽视及时清理账号的情况下。

3.1.4 用户和组状态

1.用户和组状态命令

表3-9中列出了一些常用的用户和组状态命令

3-9 常用的用户和组状态命令

978-7-111-53793-9-Part02-21.jpg

2.用户和组状态命令举例

下面给出用户和组状态命令的使用示例

操作步骤3.4 用户和组状态命令的示例

978-7-111-53793-9-Part02-22.jpg

978-7-111-53793-9-Part02-23.jpg

3.2 权限管理

3.2.1 操作权限概述

1.操作权限简介

Linux是多用户的操作系统,允许多个用户同时在系统上登录和工作。为了确保系统和用户的安全,Linux采取了很多的安全措施。用户在登入系统时需要输入用户名和口令,这样,就使系统可以通过用户的识别号(UID)来分别确定每个用户在登录系统后都做了些什么,也可以用来区别不同用户所建立的文件或目录。

普通用户在系统上受到权限的制约,一个普通用户若要切换至其他的普通用户甚至超级用户的工作目录,将会收到拒绝提示信息,例如:

978-7-111-53793-9-Part02-24.jpg

2.3种基本的权限

在Linux中,将使用系统资源的人员分为4类:超级用户、文件或目录的属主、属主的同组人和世界上的其他人员。由于超级用户具有操作Linux系统的一切权限,所以不用指定超级用户对文件和目录的访问权限。对于其他3类用户都要指定对文件和目录的访问权限,对每一类用户都有如表3-10所示的3种基本的权限需要说明。

3-10 文件或目录的3种基本的访问权限

978-7-111-53793-9-Part02-25.jpg

提示

1.目录上只有执行权限,表示可以进入或穿越该目录进入更深层次的子目录。

2.目录上只有执行权限,要访问该目录下的有读权限的文件,必须知道文件名。

3.目录上只有执行权限,不能列出目录列表也不能删除该目录。

4.目录上执行权限和读权限的组合,表示可以进入目录并列出目录列表。

5.目录上执行权限和写权限的组合,表示可以在目录中创建、删除和重命名文件。

3.查看文件和目录的权限

在Linux中通过给3类用户分配3种基本权限,就产生了文件或目录的9个基本权限位可以使用带l参数的ls命令查看文件或目录的权限,例如:

978-7-111-53793-9-Part02-26.jpg

每一行显示一个文件或目录的信息,这些信息包括文件的类型、文件的权限、文件的属主(第3列)、文件的所属组(第4列),还有文件的大小以及创建时间和文件名。

输出列表中每一行的第一列的第一个字母指示了该文件的类型。第一列的其余9个字母可分成3组,3个字母一组。这3组分别代表文件属主的权限、文件所属组的权限、其他用户的权限。每组中的3个栏位分别表示了读取权限(r)、写入权限(w)、执行权限(x)或没有相应的权限(-)。 提示

当某用户访问系统中的某文件时:

(1)若访问者的UID与文件的UID匹配,就应用用户(user)权限。

(2)否则,若访问者的GID与文件的GID匹配,就应用群组(group)权限

(3)如果都不匹配,就应用其他用户(other)权限。

通常将由ls-l命令输出的第一列称为文件或目录的权限字符串。表3-11中列出了几个权限字符串的说明。

3-11 权限字符串举例

978-7-111-53793-9-Part02-27.jpg

注意

把权限设为666会允许每个人对文件或目录都有读取和写入的权限。把权限设为777允许每个人都有读取、写入和执行的权限。这些权限可能会允许对机密文件的篡改,因此,一般来说,使用这类设置是不明智的。 3.2.2 更改操作权限

系统管理员和文件的属主可以根据需要来更改文件的权限。更改文件和目录的操作权限使用chmod命令进行,有两种设置方法:文字设定法和数值设定法。

1.文字设定法

chmod命令的文字设定法格式如下:

978-7-111-53793-9-Part02-28.jpg

其中第1个选项表示要赋予权限的用户,具体说明如表3-12所示

3-12 用户选项说明

978-7-111-53793-9-Part02-29.jpg

第2个选项表示要进行的操作,具体说明如表3-13所示

3-13 权限操作选项说明

978-7-111-53793-9-Part02-30.jpg

第3个选项是要分配的权限,具体说明如表3-14所示

3-14 分配权限选项说明

978-7-111-53793-9-Part02-31.jpg

操作步骤3.5 chmod命令的文字设定法举例

978-7-111-53793-9-Part02-32.jpg

978-7-111-53793-9-Part02-33.jpg

2.数值设定法

chmod命令的数值设定法格式如下

978-7-111-53793-9-Part02-34.jpg

其中,n1代表属主的权限,n2代表组用户的权限,n3代表其他用户的权限,这3个选项都是八进制数字,其意义如表3-15所示。

3-15 权限字符说明

978-7-111-53793-9-Part02-35.jpg

操作步骤3.6 chmod命令的数值设定法举例

978-7-111-53793-9-Part02-36.jpg

3.2.3 更改属主和同组人

管理员有时还需要更改文件的属主和所属的组。除了root用户之外,只有文件的属主才有权更改其属主和所属组,即用户可以把属于自己的文件转让给他人。改变文件的属主和组可以用chown命令,命令格式如下:

978-7-111-53793-9-Part02-37.jpg

操作步骤3.7 chown命令使用举例

978-7-111-53793-9-Part02-38.jpg

3.2.4 设置文件和目录的生成掩码

用户可以使用umask命令设置文件的默认生成掩码。默认的生成掩码告诉系统当创建一个文件或目录时不应该赋予其哪些权限。如果用户将umask命令放在环境文件.bash_profile)中,就可以控制所有新建的文件或目录的访问权限。

umask命令的格式如下:

978-7-111-53793-9-Part02-39.jpg

其中,u1表示的是不允许属主有的权限;u2表示的是不允许同组人有的权限;u3表示的是不允许其他人有的权限。

操作步骤3.8 umask命令使用举例

978-7-111-53793-9-Part02-40.jpg

978-7-111-53793-9-Part02-41.jpg

3.2.5 特殊权限设置

1.SUIDSGIDsticky-bit

除了上述的基本权限之外,还有特殊权限存在。由于特殊权限会拥有一些“特权”,因而用户若无特殊需要,不应该去打开这些权限,避免安全方面出现严重漏洞,甚至摧毁系统。3个特殊权限位是对可执行文件或目录进行的,使用了特殊权限将影响执行者的操作权限。对文件可以设置SUID和SGID特殊权限;对目录可以设置SGID和sticky-bit特殊权限。表3-16和表3-17中分别列出了文件和目录特殊权限的说明。

3-16 文件的特殊权限说明

978-7-111-53793-9-Part02-42.jpg

3-17 目录的特殊权限说明

978-7-111-53793-9-Part02-43.jpg

一个设置了SUID的典型例子是passwd程序,它允许普通用户改变自己的口令,这是通过改变/etc/shadow文件的口令字段实现的。然而系统管理员决不允许普通用户拥有直接改变/etc/shadow文件的权利,因为这绝对不是个好主意。解决方法是将passwd程序设置SUID,当passwd程序被执行时将拥有超级用户的权限,而passwd程序运行结束后又回到普通用户的权限。下面显示passwd程序的权限。

978-7-111-53793-9-Part02-44.jpg

一个设置了sticky-bit的典型例子是系统临时文件目录/tmp,这样就避免了不法用户存心破坏,恣意乱删其他用户放置的文件。下面显示/tmp目录的权限:

978-7-111-53793-9-Part02-45.jpg

2.SUIDSGID和sticky-bit的表示

从上面的显示可以看出:SUID是占用属主的x位置来表示的;SGID是占用组的x位置来表示的;sticky-bit是占用其他人的x位置来表示的。

SUID、SGID和sticky-bit也可用1位八进制数(3位二进制数)表示,如表3-18所示。

3-18 特殊权限的数值表示

978-7-111-53793-9-Part02-46.jpg

3.设置特殊权限

设置特殊权限仍旧使用chmod命令,并且依然有字符设定法和数值设定法之分。

●使用chmod命令的字符设定法时,可以使用s和t权限字符。

●使用chmod命令的数值设定法时,要使用4位八进制数值,其中第1位八进制数用于设置特殊权限,后3位八进制数用于设置基本权限。

操作步骤3.9 使用chmod命令设置特殊权限举例

978-7-111-53793-9-Part02-47.jpg

3.2.6 使用ACL权限

1.ACL权限

传统的UNIX/Linux使用UGO方式设置权限,具体地说就是通过user(用户)、group组)、other(其他人)与r(读)、w(写)、x(执行)的不同组合来实现的。随着应用的发展,这些权限组合已不能适应现时复杂的文件系统权限控制要求,具有一定的局限性。

例如,目录/data的权限如下:

978-7-111-53793-9-Part02-48.jpg

所有者与所属组均为root,在不改变所有者的前提下,要求用户tom对该目录有完全访问权限(rwx)。只能考虑以下两种办法(这里假设tom不属于root组)。

1)给/data的其他人增加rwx权限。由于tom被归为其他人,其将拥有rwx权限

978-7-111-53793-9-Part02-49.jpg

2)将tom加入到root组,并为root组分配rwx权限,那么其将拥有rwx权限

978-7-111-53793-9-Part02-50.jpg

以上两种方法其实都不合适:第一种方法将导致所有其他人都具有rwx 权限而非tom一个人;第二种方法将导致所有root的同组人都具有rwx 权限而非tom一个人。

因此传统的权限管理设置起来就力不从心了。为了解决这些复杂的权限控制问题,就有了IEEE POSIX 1003.1e 这个ACL的标准,Linux 也开发出了一套符合该标准的文件系统权限管理方案。

所谓ACL就是访问控制列表(Access Control List),为了与其他的ACL相区别,有时也称文件访问控制列表(FACL)。一个文件/目录的访问控制列表,可以针对任意指定的用户/组分配RWX权限。

支持ACL需要内核和文件系统的支持。Linux 从2.6版内核开始支持ACL。不是所有类型的文件系统均支持ACL,但Linux 2.6内核配合常用的 ext2/ext3/ext4、jfs、xfs、ReiserFS等文件系统,都可以支持ACL。

有两种类型的ACL:

●一种是存取ACL (access ACLs),针对文件和目录设置访问控制列表。

●一种是默认ACL (default ACLs),只能针对目录设置。如果目录中的文件没有设置

ACL,就会使用该目录的默认ACL。

2.CentOS 下的ACL

CentOS 7默认支持ACL。

●CentOS 7 的Linux内核版本 3.10.0支持ACL。

●默认使用的xfs和ext4文件系统也支持ACL。

●软件包acl提供了用于查看和设置ACL的工具。

3.使用setfacl设置ACL权限

setfacl命令的语法如下:

978-7-111-53793-9-Part02-51.jpg

表3-19中列出了setfacl命令的选项说明

3-19 setfacl命令的选项说明

978-7-111-53793-9-Part02-52.jpg

操作步骤3.10 使用setfacl命令设置ACL权限

978-7-111-53793-9-Part02-53.jpg

4.使用getfacl查看ACL权限

getfacl 命令用于查看文件或目录的ACL设置,其格式如下

978-7-111-53793-9-Part02-54.jpg

操作步骤3.11 使用getfacl命令查看ACL权限

978-7-111-53793-9-Part02-55.jpg

提示

1.若目录已设置了默认ACL,则新创建的文件将从其目录继承默认ACL设置

2.使用mv命令和cp-p命令操作文件时将保持ACL设置。

3.2.7 权限设置举例

下面的例子用于创建用户和组并为不同目录设置不同的权限。

操作步骤3.12 创建用户和组并为不同目录设置不同的权限

978-7-111-53793-9-Part02-56.jpg

3.3 进程管理

3.3.1 进程概述

1.进程的概念

进程(Process)是一个程序在其自身的虚拟地址空间中的一次执行活动。之所以要创建进程,就是为了使多个程序可以并发地执行,从而提高系统的资源利用率和吞吐量。

进程和程序的概念不同,下面是对这两个概念的比较。

●程序只是一个静态的指令集合;而进程是一个程序的动态执行过程,具有生命期,是

动态地产生和消亡的。

●进程是资源申请、调度和独立运行的单位,因此使用系统中的运行资源;而程序不能

申请系统资源,不能被系统调度,也不能作为独立运行的单位,因此不占用系统的运

行资源。

●程序和进程无一一对应的关系。一方面一个程序可以由多个进程所共用,即一个程序

在运行过程中可以产生多个进程;另一方面,一个进程在生命期内可以顺序地执行若

干个程序。

Linux操作系统是多任务的,如果一个应用程序需要几个进程并发地协调运行来完成相关工作,系统会安排这些进程并发运行,同时完成对这些进程的调度和管理任务,包括CPU、内存、存储器等系统资源的分配。

2.Linux中的进程

在Linux系统中总是有很多进程同时在运行,每一个进程都有一个识别号,叫作PID Process ID),用于与其他进程区别。系统启动后的第一个进程是systemd,其PID是1。systemd是唯一一个由系统内核直接运行的进程。新的进程可以用系统调用fork来产生,就是从一个已经存在的进程中派生出一个新进程,旧的进程是新产生的进程的父进程,新进程是产生它的进程的子进程。

当系统启动以后,systemd进程会创建login进程等待用户登录系统,login进程是systemd进程的子进程。当用户登录系统后,login进程就会为用户启动Shell进程,Shell进程就是login进程的子进程,而此后用户运行的进程都是由Shell衍生出来的。

在多用户多任务的Linux系统里,每个进程都与运行的用户和组相关联。除了进程识别号PID)外,在进程控制块(PCB)中每个进程还有另外4个与用户和组相关的识别号。它们是实际用户识别号(real user ID,RUID)、实际组识别号(real group ID,RGID)、有效用户识别号(effect user ID,EUID)和有效组识别号(effect group ID,EGID)。

RUID和RGID的作用是识别正在运行此进程的用户和组。一个进程的RUID和RGID就是运行此进程的用户的UID和GID。

EUID和EGID的作用是确定一个进程对其访问的文件的权限和优先权。除非产生进程的程序被设置了SUID和SGID权限之外,一般,EUID、EGID与RUID、RGID相同。若程序被设置了SUID或SGID权限,则此进程相应的EUID和EGID,将与运行此进程文件的所属用户的UID或所属组的GID相同。例如,一个可执行文件 /usr/bin/passwd,其所属用户是root(UID为0),此文件被设置了SUID权限。当一个UID为500、GID为501的用户执行此命令时,产生的进程的RUID和RGID分别是500和501,而其EUID是0,EGID是501。

尽管看上去有些烦琐,但是所有这些设计都是为了在一个多用户、多任务的操作系统中,所有用户的工作都能够安全可靠地进行,而这也是Linux操作系统的优秀性所在。

3.进程的类型

可以将运行在Linux系统中的进程分为3种不同的类型。

●交互进程:由一个Shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。

●批处理进程:不与特定的终端相关联,提交到等待队列中顺序执行的进程。

●守护进程:在Linux启动时初始化,需要时运行于后台的进程。

以上3种进程有各自的特点、作用和使用场合。

4.进程的启动方式

启动一个进程有两个主要途径:手工启动和调度启动。

(1)手工启动

由用户输入命令,直接启动一个进程便是手工启动进程。手工启动进程又可以分为前台启动和后台启动。

前台启动:手工启动一个进程的最常用方式。一般地,用户输入一个命令“ls -l”,这就已经启动了一个进程,而且是一个前台的进程。

后台启动:直接从后台手工启动一个进程用得比较少一些,除非是该进程甚为耗时,且用户也不急需要结果的时候。假设用户要启动一个需要长时间运行的格式化文本文件的进程,为了不使整个Shell在耗时进程的运行过程中都处于“瘫痪”状态,从后台启动这个进程是明智的选择。

在后台启动一个进程,可以在命令行后使用&命令,例如:

978-7-111-53793-9-Part02-57.jpg

2)调度启动

这种启动方式是事先进行设置,根据用户要求让进程自行启动运行,参见6.2节

3.3.2 查看进程

1.获取进程信息的命令

通过命令可以查看进程状态,获取有关进程的相关信息。例如

●显示哪些进程正在执行和执行的状态。

●进程是否结束、进程有没有僵死。

●哪些进程占用了过多的系统资源等。

表3-20中列出了常用的获取进程信息的命令。

3-20 获取进程信息的命令

978-7-111-53793-9-Part02-58.jpg

2.ps命令

在Linux中,可使用ps命令对进程进行查看。ps是一个功能非常强大的进程查看命令使用该命令使用户可以确定有哪些进程正在执行和执行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的系统资源等。总之,大部分信息都可以通过运行ps命令来获得。下面介绍ps命令的格式和常用选项。ps命令的格式如下:

978-7-111-53793-9-Part02-59.jpg

由于ps命令的功能相当强大,所以该命令有大量的选项参数,这里只介绍几个最常用的选项,如表3-21所示。

3-21 ps命令的常用选项

978-7-111-53793-9-Part02-60.jpg

表3-22中列出了ps命令输出的重要信息的含义

3-22 ps命令输出的重要信息的含义

978-7-111-53793-9-Part02-61.jpg

其中,在进程状态(STAT)一栏中表示状态的字符含义如表3-23所示

3-23 进程状态的字符含义

978-7-111-53793-9-Part02-62.jpg

3.进程显示命令举例

下面给出一些显示进程信息的例子

操作步骤3.13 显示进程的例子

978-7-111-53793-9-Part02-63.jpg

978-7-111-53793-9-Part02-64.jpg

提示

不加“-l”参数的pgrep命令的输出仅是符合条件进程的PID。若要显示这些进程更详细的信息,还需要使用如下形式之一:

●$ps-fp$(pgrep-d,XXXXX)。

●$pgrep-xXXXXX|xargsps-fp。

3.3.3 杀死进程

1.为什么要杀死进程

在系统运行期间,若发生了如下情况,就需要将这些进程杀死

●进程占用了过多的CPU时间。

●进程锁住了一个终端,使其他前台进程无法运行。

●进程运行时间过长,但没有预期效果或无法正常退出。

●进程产生了过多的到屏幕或磁盘文件的输出。

2.进程信号

进程信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。进程信号是最基本的进程间通信方式:可以在进程之间直接发送,而不需要用户界面;可以在Shell中通过kill命令发送给进程。

Linux对每种进程信号都规定了默认关联动作。可以使用如下命令查看可用的进程信号及其详细信息。

978-7-111-53793-9-Part02-65.jpg

表3-24中列出了一些常用进程信号的说明

3-24 常用进程信号说明

978-7-111-53793-9-Part02-66.jpg

3.可以发送进程信号的命令

表3-25中列出了常用的发送进程信号的命令

3-25 发送进程信号的命令

978-7-111-53793-9-Part02-67.jpg

可以使用上述命令为进程发送SIGTERM(15)或SIGKILL(9)信号杀死进程

4.杀死进程举例

下面给出一些杀死进程的例子。

操作步骤3.14 杀死进程的例子

978-7-111-53793-9-Part02-68.jpg

978-7-111-53793-9-Part02-69.jpg

提示

1.killall使用进程名称而不是PID,所以所有的同名进程都将被杀死

2.pkill/pgrep 在杀死进程时应使用精确匹配(-x),以免殃及池鱼。

3.3.4 作业控制

1.作业控制的含义

作业控制是指控制当前正在运行的进程的行为,也称为进程控制。作业控制是Shell的一个特性,使用户能在多个独立进程间进行切换。例如,用户可以挂起一个正在运行的进程,稍后再恢复其运行。bash记录所有启动的进程并保持对所有已启动的进程的跟踪,在每一个正在运行的进程生命期内的任何时候,用户可以任意地挂起进程或重新启动进程恢复运行。

例如,当用户使用Vi编辑一个文本文件,并需要中止编辑做其他事情时,利用作业控制,可以让编辑器暂时挂起,返回Shell提示符开始做其他的事情。其他事情做完以后,用户可以重新启动挂起的编辑器,返回到刚才中止的地方,就像用户从来没有离开编辑器一样。这只是一个例子,作业控制还有许多实际的用途。

2.实施作业控制的常用命令

表3-26中列出了作业控制的常用命令或操作快捷键。

3-26 作业控制的常用命令或操作快捷键

978-7-111-53793-9-Part02-70.jpg

这些命令常用于用户需要在后台运行却意外地放到了前台启动运行的时候。当一个命令在前台被启动运行时,会禁止用户与Shell的交互,直到该命令结束。由于大多数命令的执行都能很快完成,所以一般情况下不会有什么问题。但如果要运行的命令要花费很长时间的话,通常会把它放到后台,以便能在前台继续输入其他命令。此时,上面的命令就会派上用场了。

3.作业控制举例

下面给出一个例子说明作业控制命令的使用。

操作步骤3.15 作业控制命令的使用

978-7-111-53793-9-Part02-71.jpg

978-7-111-53793-9-Part02-72.jpg

提示

Windows用户通常有随时按快捷键〈Ctrl+S〉进行保存的习惯,但在Linux的终端上按快捷键〈Ctrl+S〉表示挂起终端,要解除挂起需按快捷键〈Ctrl+Q〉。

3.4 思考与实验

1.思考

1)Linux系统是如何标识用户和组的?

2)什么是标准组?什么是私有组?为什么使用了私有组?

3)什么是主组?什么是附加组?以主组登录后如何切换到附加组

4)简述私有组和主组的关系,简述标准组和附加组的关系。

5)简述Linux的4个账户系统文件及其各个字段的含义。

(6)举例说明使用useradd命令创建一个用户账号的具体执行过程。

(7)举例说明如何将一个用户账号添加到一个当前还不存在的组中。

(8)如何设置用户口令?如何锁定用户账号?如何设置用户口令时效?

(9)Linux文件系统的3种基本权限是什么?

(10)Linux文件系统的3种特殊权限是什么?何时使用它们?

(11)简述chmod命令的两种设置权限的方法。

(12)如何更改文件或目录的属主和/或同组人?

(13)为什么使用ACL?简述ACL的两种类型及其作用。

(14)什么是进程?它与程序有何关系?进程的类型?进程的启动方式

(15)如何查看进程?如何删除进程?

(16)什么是作业控制?什么是前台进程?什么是后台进程?

2.实验

(1)学会使用字符工具创建用户与组账号。

(2)学会设置用户口令并管理用户口令时效。

(3)学会设置文件和目录的操作权限。

(4)学会设置和使用ACL权限。

(5)学会显示和杀死进程。学会实施作业控制。

3.进一步学习

(1)学习SUN的集中式的账户系统NIS服务的配置和使用。

(2)学习使用OpenLDAP实现的集中式账户管理和应用。