Linux服务器配置与管理
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3 Linux服务器的系统管理

RedHat Enterprise Linux的系统管理是Linux系统中一个非常重要的模块,本节将对Linux服务器系统的管理方式、文件资源、用户管理,以及硬件资源的管理进行详细的介绍。

2.3.1 Linux系统管理方式

Linux管理员的关键任务之一是对Linux系统进行管理,对系统管理的方式主要是对各种资源的管理,有以下几方面:

(1)文件资源的管理。

(2)用户的管理。

(3)硬件资源管理。

(4)网络管理。

(5)系统日志管理。

(6)进程管理。

2.3.2 文件资源管理

和执行其他许多任务时一样,Linux在文件资源管理中也为用户准备了必须的功能。本节将介绍Linux系统中文件管理的概念,包括常用命令格式、文件系统概念、文件类型、目录结构、文件系统及其安装。

1.常用命令格式

Linux提供了几百条命令,虽然这些命令的功能不同,但它们的使用方式和规则都是统一的。

Linux命令的一般格式是:

        命令名[选项][参数1][参数2]……

(1)命令名由小写的英文字母构成,往往是表示相应功能的英文单词或单词的缩写。例如,date表示日期;who表示谁在系统中;cp是copy的缩写,表示复制文件等。

(2)方括号中的部分对命令行来讲不是必须的,即可有可无。例如,可以直接在提示符后面输入命令date,显示当前的日期和时间;也可以在date命令名后面带有选项和参数,如“date –s 15:30:00”,设置系统时间为下午3点30分。

(3)选项是对命令的特别定义,以“-”开始,多个选项可用一个“-”连起来,如“ls-l-a”与“ls-la”相同。

(4)命令行的参数提供命令运行的信息,或者是命令执行过程中所使用的文件名。通常参数是一些文件名,告诉命令从哪里可以得到输入,以及把输出送到什么地方。

(5)如果命令行中没有提供参数,命令将从标准输入文件(即键盘)接收数据,输出结果显示在标准输出文件(即显示器)上,而错误信息则显示在标准错误输出文件(即显示器)上。可使用重定向功能对这些文件进行重定向。

2.文件系统概念

磁盘上的文件系统是层次结构的,由若干目录和其子目录组成,最上层的目录称做根(root)目录,用“/”表示。文件与目录的定义如下。

(1)文件系统:是磁盘上有特定格式的一片区域,操作系统通过文件系统可以方便地查寻和访问其中所包含的磁盘块。

(2)文件:文件系统中存储数据的一个命名的对象。一个文件可以是空文件(即没有包含用户数据),但是它仍然为操作系统提供了其他信息。

(3)目录:目录文件中包含许多文件的目录项,每个目录项包含相应文件的名字和I节点号。在I节点中存放该文件的控制管理信息,目录支持文件系统的层次结构,文件系统中的每个文件都登记在一个(或多个)目录中。

(4)子目录:被包含在另一个目录中的目录。包含子目录的目录称做父目录,除了root目录以外,所有的目录都是子目录,并且有它们的父目录。root目录就作为自己的父目录。

(5)文件名:用来标识文件的字符串,它保存在一个文件目录项中。

(6)路径名:通过斜线字符(/)结合在一起的一个或多个文件名的集合。路径名指定一个文件在分层树型结构(即文件系统)中的位置。

(7)当前工作目录:查看文件系统要使用一个参考点目录,它就称做当前工作目录。

用ls命令可以列出当前工作目录中所包含的文件和子目录的名字,如图2-47所示,这是默认方式。

图2-47 ls命令

3.文件结构

文件是Linux操作系统处理信息的基本单位。所有软件都组织成文件。

(1)文件的成分:无论文件是一个程序、一个文档、一个数据库,或者是一个目录,操作系统都会赋予它如下所示的同样的结构。

(2)索引节点:又称I节点,在文件系统结构中,包含有关相应文件信息的一个记录,这些信息包括文件权限、文件主、文件大小、存放位置、建立日期等。

(3)数据:文件的实际内容,它可以是空的,也可以非常大,并且有自己的结构。

4.命名文件

文件名保存在目录文件中。Linux的文件名几乎可以由ASCⅡ字符的任意组合构成,文件名最长可多达255个字符(某些较老的文件系统类型把文件名长度限制为14个字符)。在为文件命名时,遵循下面的惯例会使管理文件更加方便。

(1)文件名应尽量简单,并且能反映出文件的内容。文件名几乎没有必要超过14个字符。

(2)除斜线(/)和空字符(ASCII字符\0)以外,文件名可以包含任意的ASCⅡ字符,因为那两个字符被操作系统当做表示路径名的特殊字符来解释。

(3)习惯上允许使用下线符“_”和句点“.”来区别文件的类型,使文件名更易读。但是应避免使用以下字符,因为对系统的Shell来说,它们有特殊的含义。这些字符是:“;”、“|”、“<”、“>”、“`”、“″”、“′”、“$”、“!”、“%”、“&”、“*”、“?”、“\”、“(”、“)”、“[”、“]”。文件名应避免使用空格、制表符或其他控制字符。

(4)同类文件应使用同样的后缀或扩展名。

(5)Linux系统区分文件名的大小写。例如,名为letter的文件与名为Letter的文件不是同一个文件。

(6)以圆点“.”开头的文件名是隐含文件,默认方式下使用ls命令并不能把它们在屏幕上显示出来。同样,在默认情况下,Shell通配符并不匹配这类文件名。

5.文件名通配符

为了能一次处理多个文件,Shell提供了几个特别字符,称为文件名通配符(也称做扩展字符)。通过使用通配符可以让Shell查询与特别格式相符的文件名,用做命令参数的文件或目录的缩写,以简短的标记访问长文件名,可以用于任意的命令行。

主要的文件名通配符有:

(1)星号(*)

与0个或多个任意的字符相匹配,例如,le*可以代表letter、lease或le。星号匹配的是当前目录下的所有文件,但以圆点“.”开头的隐含文件除外。星号只与隐含文件匹配。

(2)问号(?)

问号只与一个任意的字符匹配,可以使用多个问号。例如,file?与文件file1、file2匹配,但不与file、file10匹配;而name.???与文件name.abc、name.xyz匹配,但不与文件name.ab匹配。

(3)方括号([])

与问号相似,只与一个字符匹配。它们的区别在于,问号与任意一个字符匹配,而方括号只与括号中列出的字符之一匹配。例如letter[123]只与文件letter1、letter2或letter3匹配,但不与文件letter12匹配。可以用短横线代表一个范围内的字符,而不用将它们一一列出。例如,letter[1-3]是letter[123]的简写形式。但是,要注意范围内的字符都按升序排列,即[A-Z]是有效的,而[Z-A]是无效的。方括号中可以列出多个范围,如[A-Za-z]可以和任意大写或小写的字符相匹配。方括号中如果以惊叹号“!”开始,表示不与惊叹号后的字符匹配。

上面介绍的所有符号都可以混和使用。例如,

        [!A-Z]*.?

代表所有不以大写字母开头,但倒数第二个位置是“.”的文件名。

6.文件类型

Linux操作系统支持普通文件、目录文件、符号链接文件等文件类型。

(1)普通文件

普通文件也称做常规文件,包含各种长度的字节串。核心对这些数据没有进行结构化,只是作为有序的字节序列把它提交给应用程序。应用程序自己组织和解释这些数据,通常把它们归并为下述类型之一。

①文本文件,由ASCII字符构成。例如,邮件、报告和称做脚本(Script)的命令文本文件,后者由Shell解释执行。

② 数据文件,由来自应用程序的数字型和文本型数据构成。例如,电子表格、数据库,以及字处理文档。

③ 可执行的二进制程序,由机器指令和数据构成。例如,上面所说的系统提供的命令。

使用file命令可以确定指定文件的类型。该命令可以将任意多个文件名当做参数,其一般使用格式是:file文件名[文件名...]

(2)目录文件

目录是一类特殊的文件,利用它可以构成文件系统的分层树型结构。如同普通文件那样,目录文件也包含数据;但目录文件与普通文件的差别是,核心对这些数据加以结构化,它是由成对的“I节点号/文件名”构成的列表。

① I节点号是检索I节点表的下标,I节点中存放有文件的状态信息。

② 文件名是给一个文件分配的文本形式的字符串,用来标识该文件。在一个指定的目录中,任何两项都不能有同样的名字。

每个目录的第1项都表示目录本身,并以“.”作为它的文件名。每个目录的第2项的名字是“..”,表示该目录的父目录。

注意 以“.”开头的文件名表示隐含文件,使用带-a选项的ls命令可以列出它们。

当把文件添加到一个目录中的时候,该目录的大小会增长,以便容纳新文件名。当删除文件时,目录的尺寸并不减少,而是核心对该目录项做上特殊标记,以便下次添加一个文件时重新使用它。ls命令不会列出这些未被使用的项。

在Linux系统中,除根目录(root)以外,所有文件和目录都包含在相应的目录文件中。下面介绍Linux系统的目录结构及主要的操作命令。

③ 目录结构

Linux文件系统采用带链接的树型目录结构,即只有一个根目录(通常用“/”表示),其中含有下级子目录或文件的信息;子目录中又可含有更下级的子目录或者文件的信息。这样一层一层地延伸下去,构成一棵倒置的树,如图2-48所示。

图2-48 Linux树型目录结构

在目录树中,根节点和中间节点(用圆圈表示)都必须是目录,而普通文件和特别文件只能作为“叶子”出现。当然,目录也可以作为叶子。

④ 用户主目录

注册进入系统后,主目录就是当前工作目录。主目录往往位于/home目录之下,并且与注册名相同。例如,/home/mengqc。通常主目录包含子目录、数据文件,以及用于注册环境的配置文件。

⑤ 路径名

迄今为止,所看到的文件仅是主目录下的文件。其实,还可以利用路径名访问在层次结构文件系统中任何地方的文件和目录。

为了访问文件,必须告诉系统文件在什么地方,即保存在哪个目录下。路径名描述了文件系统中通向任意文件的路径,有绝对路径和相对路径两种路径名。当为命令指定文件路径名时,需要指定两种路径形式的一种,不管它有多长或有多复杂。

● 绝对路径名

在Linux操作系统中,每一个文件有唯一的绝对路径名,它是沿着层次树、从根目录开始、到达相应文件的所有目录名连接而成,各目录名之间以斜线字符(/)隔开。例如,/home/mengqc/lib/func/file1。

绝对路径名总是以斜线字符(/)开头,它表示根目录。如果要访问的文件在当前工作目录之上,那么,使用绝对路径名往往是最简便的方法。

绝对路径名也称做全路径名,使用pwd命令可以在屏幕上显示出当前工作目录的绝对路径名,如图2-49所示。

图2-49 pwd命令

● 相对路径名

相对路径名利用相对当前工作目录的路径指定一个文件。

为了访问当前工作目录或其任意子目录中的文件,可以使用相对路径名。例如,如果工作目录是/home/mengqc/lib,为了列出目录/home/mengqc/lib/func中的文件file1,可以使用命令:ls –l func /file1。图2-50示出路径名的类型。

图2-50 路径名类型

注意,相对路径名不能以斜线字符(/)开头。

在图2-50中,绝对路径名为/home/mengqc/lib/func/file1;对应的相对路径名(当前目录是/home/mengqc/lib)为func/file1。

● 正确使用路径名

什么情况下使用绝对路径名?什么情况下使用相对路径名?取决于哪种方式涉及到的目录更少。路径短,不仅键盘输入少,而且节省系统搜索路径的时间,提高执行效率。例如,当前的工作目录是/etc/conf/cf.d,如果需要访问系统口令文件/etc/passwd,那么使用绝对路径名是/etc/passwd,使用相对路径名是../../passwd。绝对路径名/etc/passwd涉及的目录有两个,而相对路径名../../passwd涉及的目录却有3个。此时,使用绝对路径名更有效。

但是,如果当前工作目录是/home/mengqc/lib,要访问在func目录之下的file1文件,那么使用绝对路径名是/home/mengqc/lib/func/file1,使用相对路径名是func/file1。绝对路径名/home/mengqc/lib/func/file1涉及的目录有5个,而相对路径名涉及的目录只有两个。此时,使用相对路径名更有效。

如果不清楚当前工作目录与其他目录之间的关系,那么最好使用绝对路径名。

(3)链接文件

Linux具有为一个文件起多个名字的功能,称为链接。被链接的文件可以存放在相同的或不同的目录下。如果在同一目录下,二者必须有不同的文件名,而不用在硬盘上为同样的数据重复备份;如果在不同的目录下,那么被链接的文件可以与原文件同名,只要对一个目录下的该文件进行修改,就可以完成对所有目录下同名链接文件的修改。对于某文件的各个链接文件,我们可以给它们指定不同的存取权限,以控制对信息的共享和增强安全性。

文件链接分为硬链接和符号链接两种形式。

① 硬链接

建立硬链接时,是在另外的目录或本目录中增加目标文件的一个目录项,这样,一个文件就登记在多个目录中。图2-51中所示的m2.c文件就在目录mub1和liu中都建立了目录项。

图2-51 文件链接

创建硬链接后,已经存在的文件的I节点号(inode)会被多个目录文件项使用。一个文件的硬链接数可以在目录的长列表格式的第2列中看到,无额外链接的文件的链接数为1。

ln命令用来创建链接。默认情况下,ln命令创建硬链接。ln命令会增加链接数,rm命令会减少链接数。一个文件除非链接数为0,否则不会从文件系统中删除。

对硬链接有如下限制:

● 不能对目录文件作硬链接。

● 不能在不同的文件系统之间作硬链接。也就是说,链接文件和被链接文件必须位于同一个文件系统中。

② 符号链接

符号链接也称软链接,是将一个路径名链接到一个文件。这些文件是一种特别类型的文件。事实上,它只是一个小文本文件(如图2-51中的abc文件),其中包含它所链接的目标文件的绝对路径名,如图2-51中虚线箭头所示。被链接文件是实际上包含所有数据的文件,所有读写文件的命令,当它们涉及符号链接文件时,将沿着链接方向前进,找到实际的文件。

7.文件或目录的存取权限

使用文件命令对文件进行操作的前提是拥有相应的权限。下面我们介绍如何控制这些权限。

Linux为每个文件都分配了一个文件所有者,称为文件主,并赋予文件主唯一的注册名。对文件的控制取决于文件主或超级用户(root)。文件或目录的创建者对创建的文件或目录拥有特别使用权。

文件的所有关系是可以改变的,可以将文件或目录的所有权转让给其他用户,但只有文件主或root用户才有权改变文件的所有关系。文件所有权的标志是用户ID(UID)。

利用chown命令可以更改某个文件或目录的所有权。例如,超级用户把自己的一个文件myfile复制给用户xu。为了让用户xu能够存取这个文件,超级用户(root)应该把这个文件的属主设为xu,否则,用户xu无法存取这个文件,命令如下:chown xu myfile

如果改变了文件或目录的所有权,原文件主将不再拥有该文件或目录的权限。系统管理员经常使用chown命令,以便将文件复制到另一个用户的目录下以后,让该用户拥有使用该文件的权限。

8.文件系统及其安装

一个硬盘上可以同时存在多个文件系统,每个文件系统占据硬盘的一个独立分区。Linux文件系统可以根据需要随时装卸,从而实现文件存储空间的动态扩充和信息安全。在系统初启时,往往只有一个文件系统被安装上,即根文件系统,其上的文件主要是保证系统正常运行的操作系统的代码文件,以及若干语言编译程序、命令解释程序和相应的命令处理程序等构成的文件,此外,还有大量的用户文件空间。根文件系统一旦安装上,则在整个系统运行过程中是不能卸下的,它是系统的基本部分。其他的文件系统(例如,由软盘构成的文件系统)可以根据需要(如从硬盘向软盘复制文件),作为子系统动态地安装到主系统中,如图2-52所示。其中,mnt是为安装子文件系统而特设的安装节点。

图2-52 文件系统安装

经过安装之后,主文件系统与子文件系统就构成一个有完整目录层次结构的、容量更大的文件系统,这种安装可以高达几级。就是说,若干子文件系统可以并列安装到主文件系统上,也可以一个接一个地串连安装到主文件系统上。

已安装的子文件系统也可从整个文件系统上卸载下来,恢复安装前的独立状态。

(1)建立文件系统

当硬盘完成分区后,应该在该分区上建立文件系统。这一步工作是通过mkfs工具来完成的。例如,如果需要在分区/dev/hda1上建立ext2文件系统,并检查坏块,应该使用以下命令:

        #mkfs –c /dev/hda1

注意,只有root用户才能建立或安装/卸载文件系统。

(2)安装文件系统

创建文件系统后,需要使用命令mount将该文件系统安装到主文件系统中。命令mount有3个主要参数:

① 需要安装的文件系统类型,用“-t fstype”选项来指定,这与mkfs中的-t选项是一样的。

② 所需访问的文件系统所在分区名,通常是位于目录/dev中的特别设备文件;如果需要安装网络文件系统时,就使用该服务器上输出的目录名。

③ 安装新文件系统的路径名,也就是放置新文件系统的安装点(Mount Point)。通常这是一个空目录名,并且是专门为安装新文件系统而准备的。在Linux系统下,目录/media是常用的文件系统安装目录,默认情况下,CDROM和软盘驱动器都分别安装在其子目录下。当然,文件系统也可以被安装到其他空目录中。

(3)卸载文件系统

在关闭系统之前,为了保证文件系统的完整性,所有安装的文件系统都必须被卸载。通常在/etc/fstab文件中定义的文件系统都能够自动卸载。但是,对于手工mount的文件系统,在关闭系统之前必须手工卸载。有时候也需要在系统工作过程中手工卸载某个文件系统。手工卸载文件系统必须使用umount命令,umount命令将分区名或分区的安装点作为参数,格式如下:

        umount<分区名或分区的安装点>

例如,需要将已经安装到/media/cdrom目录下的软盘卸载,可以使用以下命令:

        #umount /media/cdrom

注意 对于正在使用的文件系统,不能使用umount命令卸载。

2.3.3 用户管理

在Linux中,每个普通用户都有一个账户,包括用户名、密码和主目录等信息。除此之外,还有一些系统本身创建的特殊用户,它们具有特殊的意义。其中最重要的是超级用户,在Linux中,它默认用户名是root。下面将介绍Linux用户管理功能。

1.理解单用户多任务、多用户多任务概念

Linux是一个多用户、多任务的操作系统,我们应该了解单用户多任务和多用户多任务的概念。

(1)Linux的单用户多任务

比如,用户beinan登录系统后,要打开gedit来写文档,但在写文档的过程中,感觉少点音乐,所以又打开xmms来点音乐;当然听点音乐还不行,MSN还得打开,想知道几个同志现在正在做什么,这样一样,在用beinan用户登录时,执行了gedit、xmms及msn等,当然还有输入法fcitx。简单地说,一个beinan用户,为了完成工作,执行了几个任务。

(2)Linux的多用户、多任务

有时可能是很多用户同时用同一个系统,但并不所有的用户都一定都要做同一件事,所以这就有多用户多任务之说。

举个例子,比如某个Linux服务器,上面有FTP用户、系统管理员、Web用户、常规普通用户等,在同一时刻,可能有的人正在访问论坛,有的可能在上传软件包管理子站,与此同时,可能还会有系统管理员在维护系统。浏览主页的是nobody用户,大家都用同一个;而上传软件包用的是FTP用户;管理员的对系统的维护或查看,可能用的是普通账号或超级权限root账号;不同用户所具有的权限也不同。要完成不同的任务需要不同的用户,也可以说不同的用户,可能完成的工作也不一样。

值得注意的是,多用户多任务并不是大家同时挤到一台机器的键盘和显示器前来操作机器,多用户可能通过远程登录来进行,比如对服务器的远程控制,只要有用户权限任何人都是可以上去操作或访问的。

(3)用户的角色区分

用户在系统中是分角色的,在Linux系统中,由于角色不同,权限和所完成的任务也不同。用户的角色是通过UID和识别的,在系统管理时,系统管理员一定要坚守UID唯一的特性。

● root用户:是系统唯一真实的,可以登录系统,也可以操作系统任何文件和命令,拥有最高权限。

●虚拟用户:这类用户也被称之为伪用户或假用户,与真实用户区分开来,这类用户不具有登录系统的能力,但却是系统运行不可缺少的用户,比如bin、daemon、adm、ftp、mail等;这类用户都是系统自身拥有的,而非后来添加的,当然我们也可以添加虚拟用户。

● 普通真实用户:这类用户能登录系统,但只能操作自己目录下的内容,权限有限,这类用户都是系统管理员自行添加的。

2.基本操作

增加一个用户newuser,然后用passwd newuser(然后根据提示两次输入新用户的密码。)如图2-53所示。

图2-53 增加用户

提示 用useradd增加一个用户后应该立刻用passwd给新用户修改密码,没有密码的新账号将不能使用。

用户可以用-d开关设置新用户的主目录(例如:useradd newuser –d /www),也可以用-g开关为用户指定新组名(例如:useradd newuser –g Linuxusers),还可以用-G开关把新用户设置成系统其他一些组的成员(例如:useradd newuser –G users,shutdown)。

提示 相应的,仅仅增加一个新组可以用命令groupadd。

3.修改现有用户的账号

(1)修改密码

普通用户可以用passwd修改自己的密码,只有管理员才能用passwd username为其他用户修改密码。

图2-54 修改用户密码设置

(2)修改用户Shell

使用chsh命令可以修改自己的Shell,只有管理员才能用chsh username为其他用户修改Shell设置。注意,指定的Shell必须是列入/etc/shells文件中的Shell,否则该用户将不能登录。

也可以使用usermod命令修改Shell信息,如下所示:

        #usermod –s (newshellpath)(username)

其中newshellpath和username应取相应的值。

(3)修改主目录设置

        Usermod –d (newhomedirectory)(username)

如果想将现有主目录的主要内容转移到新的目录,应该使用-m开关,如下所示:

        #usermod –d –m /www/newusernewuser

(4)修改UID

        #usermod –u UIDusername

主目录中所有该用户所拥有的文件和目录都将自动修改UID设置。但是,对于主目录该用户所拥有的文件,只能手工用chown命令修改所有权设置。

(5)修改默认组设置

        #username –g (groupname)or GIDusername

(6)修改账号的有效期

如果使用了影子口令,则可以使用如下命令来修改一个账号的有效期:

        #usermod –e MM/DD/YY username

例如,把用户newuser的有效期定为12/31/07:

        #usermod –e 12/31/07 newuser

(7)删除或禁止用户账号

使用userdel命令删除现有用户。例如,下面的命令将删除bluewind用户:

        #usedel bluewind

如果想同时删除该用户的主目录,以及其中所有内容,要使用-r开关来递归删除。值得注意的是你无法删除已经进入系统的用户,如果想强行完成,需要先killall有关它的进程,然后再运行userdel命令。

(8)如果只是想暂时禁止某个账号,可以使用下列方法:

① 使用无效的Shell。例如,使用usermod –s newshell username将用户的Shell改为/bin/false (最好把它列入/etc/shells文件里)。

② 使该账号过期。如果使用影子口令,可使用usermod –e MM/DD/YY username命令使该账号过期。

(9)如果想禁止所有账号(root账号当然除外)的访问,可以创建一个名为/etc/nologin的文件,说明系统暂时不允许访问。注意,必须确认还能用root直接登录才使用这个办法。

4.用户管理的高级内容

(1)建立多个超级用户

不少新系统管理员认为root用户是唯一的超级用户,其实root只是系统默认的超级用户的名称,root并非因为它叫root而成为超级用户的。随便打开一个/etc/passwd文件的例子,可以发现其中包含图2-55中所示的几行代码。

图2-55 建立超级用户

可以看到,root的UID和GID都被设置为0了。实际上,超级用户的重要条件就是UID和GID都等于0。也就是说,任何用户,只要它的UID和GID都为0,就跟超级用户没什么两样了。

所以,可以将任何普通用户变成超级用户。但是,这样做并没有好处,很多时候这都会增加系统的隐患。除非在组织中需要多个系统管理员管理同一个系统,这就需要有多个超级用户账号。这有利于各个管理员明确责任,通过日志知道不同的人分别做过什么事。

还有一种情况,也可能出现多个超级用户账号,那就是黑客入侵后设置一个看起来像普通账号的用户,而它的UID和GID却被修改为0。这样根本就不需要知道root用户密码,就可以执行超级用户权限了。要防止出现这种情况,必须借助一些软件的帮助,因为系统管理员不可能时刻注意passwd文件的变化。

(2)为普通用户分配特权

使用sudo命令可以允许普通用户执行超级用户才能执行的命令。一般情况下,超级用户的所有权限是不能轻易由普通用户执行的,这是网管工作的原则。所以,当一些用户必须访问某些内容时,我们可以配置sudo以允许单独的普通用户运行特权命令。

sudo命令允许已经在/etc/sudoers文件中指定的用户运行超级用户命令。例如,一个已经获得许可的普通用户可以运行:

        #sudo vi /etc/passwd

实际上,sudo的配置完全可以指定某个列入/etc/sudoers文件的普通用户可以做什么、不可以做什么。/etc/sudoers的默认配置行如图2-56所示。

图2-56 普通用户分配权限

① 其中空行或注释行(以#字符打头)为无用行。

② 可选的主机别名行:用来创建主机列表的简称。必须以Host_Alias关键词开头,列表中的主机必须用逗号隔开。例如:

        #Host_AliasREDHAT=binbu,qd

其中binbu和qd是两主机名,也可以用REDHAT(别名)统称它们。

③ 可选的用户别名行:用来创建用户列表的简称。用户别名行必须以User_Alias关键词开头,列表中的用户名必须以逗号隔开,其格式同主机别名行。

④ 可选的命令别名行:用来创建命令列表的简称。必须以Cmndalias开头,列表中的命令必须用逗号隔开。

⑤ 可选的运行方式别名行:也是用来创建用户列表的简称。不同的是,使用这样的别名可以告诉sudo程序以列表中某一用户的身份来运行程序。

⑥ 必要的用户访问说明行

在user处指定一个真正的用户名或定义过的别名,同样的,host也可以是一个真正的主机名或者定义过的主机别名。默认情况下,sudo执行的所有命令都是以root身份执行。如果你想使用其他身份可以指定。至于commandlist可以是以逗号分隔的命令列表,也可以是一个已经定义过的别名。例如:

        #lanfbinbu=/sbin/shutdown

这一句说明lanf可以在binbu主机上运行关机命令。

提示 可以在一行定义多个别名,中间用:隔开;可以在命令或命令别名之前加上!号,使该命令或命令别名无效;有两个关键词:ALL和NOPASSWD。ALL意味着“所有文件”(所有主机或所有命令),NOPASSWD意味着不用密码。

2.3.4 硬件资源管理

1.在Linux系统中,对硬件标识的判别依据

在很多论坛讨论区,我们经常看到有些人这样来描述自己的硬件“我的显示卡是XXX牌子的,Linux不支持怎么办?”。其实这样描述并不准确,大家也根本没有办法提供帮助;因为Linux对硬件的识别是以芯片组的厂商为依据的,而非硬件的品牌。因为现在硬件厂商大多是OEM的,也就是说硬件的主芯片是他们生产不了的,但他们会从硬件主芯片厂商处购买,焊接在自己的电路板上,这就是OEM的过程。

无论什么硬件都是以芯片组的厂商为标识的,而不是什么市场看到的这个品牌。举个例子,市场上可以看到有各种各样的显卡,其实,它们的芯片大多是ATI和NVIDIA的,所有的ATI和NVIDIA的驱动都是ATI和NVIDIA开发出来的。所以提问的时候,要把硬件的芯片型号说出来,芯片是驱动的唯一标识,而不是品牌。

2.在Linux中查看硬件信息的工具

在Linux中,并不是没有工具可以查看硬件的芯片信息,应该说Linux的工具能把硬件信息查看的更清楚。下面介绍几个常用的工具,其中最常用的工具还是lspci,其他的工具只作了解即可。

(1)PCI设备查看工具

Lspci-list allPCIdevices,该命令用来列出机器中的PCI设备,比如声卡、显卡、Modem、网卡等,主板集成设备也能列出来。lspci是读取hwdata数据库,hwdata由软件包hwdata提供。lspci命令有两个常用的参数:-b和-v。lspci也会把usb接口列出来,举例如图2-57所示。

图2-57 列出PCI设备

得到这些信息有什么用处呢?如果机器中有些设备支持的不好,我们就可以根据这些信息在网上搜索。比如怀疑声卡有问题,可以根据声卡信息相关的来搜索解决问题的办法。根据这些信息,也可以到硬件芯片组的官方去寻找答案或者驱动。

如果想知道硬件更为详细的内容,可以用lspci-v来查看。例如,可以通过lspci-v来查看硬件的irq中断情况等。又如,网卡不能正常工作,是不是irq存在冲突了?如果用您不知道怎么解决硬件驱动不了的情况,就要用lspci –v查看硬件信息,并将结果整段贴出来,以寻找解决问题的方法,所以学会提问也是极为重要的。

有的系统发行版本,还有lsusb的工具,可以自己尝试一下。

(2)存储设备查看和操作工具

我们查看存储设备的工具主要有fdisk、parted、cfdisk等,其中最常用也是最方便的是fdisk。使用实例如图2-58所示。

图2-58 存储设备察看

(3)系统控制信息查看工具

dmesg是一个显示内核缓冲区系统控制信息的工具。例如,系统在启动时的信息会看到/var/log/。

dmesg工具并不是专门用来查看硬件芯片组标识的工具,但通过这个工具能让我们知道机器中硬件的一些参数。因为系统在启动的时候,会写一些硬件相关的日志到/var/log/message*或/var/log/boot*文件中。如果用这个工具来查看一些硬件的信息,由于该命令包含的信息量很大,查看的时候需要一定耐心。

#dmesg –c命令可用来清理缓冲区,下次开机的时候还会自动生成。

(4)硬件浏览器

RedHat Enterprise Linux AS4自带了一个查看当前硬件配置的图形化浏览器,在应用程序/系统工具/硬件浏览器中可以打开硬件浏览器,如图2-59所示。

图2-59 硬件浏览器

3.不同的硬件有不同的配置工具和配置文件

不同的硬件有不同的配置工具,也有与之相应的配置文件。例如,关于显示器和显示卡的配置文件是/etc/X11/xorg.conf,对于老的Linux版本应该是/etc/X11/X86Config或X86Config-4;声卡的配置文件是/etc/modprobe.conf;文件系统的配置文件是/etc/fstab。xorg或X86的配置文件还包括鼠标、键盘等在X桌面环境下的配置和控制等。

声卡的配置工具,一般情况下是alsaconf。当然不同的发行版也有相应的硬件配置或管理工具,虽然图形化的工具使用起来很方便,但并不是万能的,他们的功能还是有极大的局限性。所以在硬件配置上,大多还是通过文本模式来操作的。

4.硬件驱动存放的位置

硬件驱动是必须由内核支持的,无论是用户自己安装驱动,还是内核自带的驱动都是如此。硬件驱动如果是直接植入内核的,驱动目录位于:/lib/modules/内核版本/kernel/目录或/lib/modules/内核版本/kernel/drivers目录中。

只有驱动在内核中以模块的方法支持的,或者用户自己安装的驱动,驱动目录才会位于/lib/modules/相应的目录下;如果是直接置入内核的,不会出现在/lib/modules驱动相关的目录。

5.硬件不被系统支持怎么办?

如果一个Linux系统不支持您的硬件,解决的办法无非是有两种,一种是下载驱动自己安装,Linux的驱动大多是开源社区开发的,厂商提供的比较少。有时也可能要重新编译内核,主要是按照驱动内部的说明文件进行;因为驱动本来是要内核支持的,编译内核也极为正常。

注意如果要重新编译内核,最好先把硬件情况摸清楚,如鼠标、光驱、软驱、USB设备;硬盘、文件系统……都要仔细的查看。