Red Hat Linux管理员速查手册

系统专区

一、用户管理

用户管理也称为账户管理,是Linux系统管理员在日常管理中十分常见的工作之一。为了管理好网络服务,为本地的计算机环境正确地配置账号,系统管理员需要对Linux的账户管理有透彻的了解。

1.用户管理基础操作

在Red Hat Linux中与用户账户管理相关的基本指令主要包括useradd、userdel、usermod,分别用于新增用户、删除用户、修改用户。

(1) 新增用户 ——useradd

语法格式:useradd [-d <用户主目录>] [-s <用户Shell程序>] [-g <组名>] [-G <组名>] 用户名

参数用途:

006.jpg

用该命令新增的用户,需通过passwd命令设置口令才能够登录。

(2)删除用户——userdel

语法格式:useradd [-r] 用户名

参数用途:

007.jpg

(3) 修改用户——usermod

语法格式:usermod [-d <用户主目录>] [-s <用户Shell程序>] [-g <组名>] [-G <组名>] 用户名

其参数的功能与useradd相同。

2. 深入用户管理

会使用前面所列的3个命令,只是能够完成最基本的用户账户操作,还无法有效地履行用户管理的职责。要深入地了解用户管理,必须了解7个概念,3个配置文件。

(1)7个概念

008.jpg

在Linux操作系统中,对于每一个用户账户而言,包括了7个方面的信息,也就是我们在此说的7个概念,它们如上表所示。

(2)3个配置文件

009.jpg

3.手动添加账户

能否手动完成用户账户的添加,是验证是否深入掌握了Linux用户账户管理的好办法。完整的过程包括以下内容:

(1)编辑passwd和shadow文件,定义用户账号

首先在/etc/passwd中添加一行,将相关信息填入:

user1:*:103:100::/home/user1:/bin/bash

然后再给/etc/shadow加入一个对应项:

user1:*:::::::

这样就创建了一个新用户user1,其用户ID是103,组ID是100,用户主目录是/home/user1,登录Shell是/bin/bash。值得注意的是,在编辑这两个文件时,应使用vipw,以保证同时只有一个用户编辑该文件。

(2)设置初始口令

使用passwd命令设置,格式为“passwd 用户名”。而且你可以使用pwconv命令让shadow文件中的内容与passwd文件中的内容保持一致。

(3)创建用户主目录(可选)

也就是创建passwd文件中设置的用户主目录,并修改其属主及相关的权限,以前述例子对应的设置就是:

mkdir /home/user1

chown user1.staff /home/user1

chmod 700 /home/user1

(4)将默认的启动文件复制到用户的主目录中(可选)

通过将配置文件放置到用户的主目录中,就可以自定义一些命令和工具。启动文件一般是以“.”开头,以“rc”结尾的文件,例如:

你可以将其他相类似的用户的启动文件复制到该用户目录下,并对该文件的属性进行修改。如果你还没有一组不错的默认启动文件,那你可以从/usr/local/lib/skel中找到一些合适的样例文件。

010.jpg

(5)将用户添加到/etc/group文件中(可选)

你可以修改/etc/group,将该用户的UID添加到对应组的相应字段上,这样就可以使该用户变为该组的成员。

不过在Red Hat Linux中,useradd是能够出色地完成其任务的,我们基本上无需采用这种复杂的方式,不过掌握这一过程是十分必要的。

4.手动删除用户

当有用户离开时,需要从系统中删除该用户的账号和相关文件。虽然Red Hat Linux中提供了userdel工具,但它表现得不够理想,请逐一对照以下步骤来完成:

①如果该用户已使用磁盘限额,则先把该用户的磁盘限额改为0。

②将用户从aliases文件(主要是指邮件别名)中删除,或者添加一个转发地址。

③ 删除用户的crontab文件和所有挂起的at作业。

④ 终止所有仍在运行的用户进程。

⑤ 删除/var/tmp或/tmp中用户拥有的所有临时文件。

⑥ 将用户从passwd、shandow和group文件中删除。

⑦ 删除用户主目录。

⑧ 删除用户的邮件存储文件。

这是最完整的用户删除操作,而userdel其实只完成了“将用户从passwd、shandow和group文件中删除”,可以实现“删除用户主目录”而已。

5.用户登录控制与监控

有时候我们需要临时禁止一个用户登录。要达到这一目的,我们可以有多种方法,下表则列出了一些常见的方法:

011.jpg

另外,作为Linux系统的管理员,还应该能够对用户的登录情况进行了解与分析,这样才能够更好监控用户。其主要的方法包括:实时状态监控和历史状态查询。

(1)实时状态监控——who

who命令用于查看用户信息,它可以提供目前在系统中登录的所有用户的清单、各用户所使用的终端、登录时间和登录状态等。通过它可以发现任何可疑的登录用户,从而保证系统的安全。其命令格式为:

语法格式:who [-Hiq]

参数说明:-H 显示出各个信息的标题。

-i:显示用户的idle时间,一分钟之内没有动作,标成“.”,一天之内没有动作,标成“old”。

-q:只显示出当前登录到系统的用户总数。

(2)历史状态查询——last

在/var/log/wtmp中包含用户登录系统和退出系统的记录,你可以通过last命令来解读该信息,其命令格式为:

语法格式:last [-aRx][-n <个数>][用户账号名…][终端号…]

参数说明:-a:把登录系统用户所在主机的主机名或IP地址显示在最后一行。

-R:不显示登录系统用户所在的主机名或IP地址。

-x:显示系统关机、重新启动、改变运行等级等信息。

-n<个数>:指定要查看最近多少个登录用户。

[用户账号名…]:指定查看某个用户账号的登录记录。

[终端号…]:指定查看从某个终端登录的记录。

二、文件与磁盘管理

与其他操作系统一样,在Linux系统下用户的数据和程序也是以文件的形式保存的。所以在使用Linux的过程中,经常对文件与目录进行操作。而磁盘则是文件系统的载体,与文件管理关系密切。

1.Linux文件系统基本概念

要熟练地掌握Linux文件系统管理的相关命令和操作,就必须对其常用的术语和概念有清晰的认识和了解:

(1)路径名称

在Linux系统中,文件系统表现为单个统一的层次结构,从目录“/”开始,通过一系列分层的子目录继续向下扩展,我们将“/”称为根目录。而为了找到某个特定文件而必须遍历的目录清单,再加上文件名就组成了“路径名称”,它可以是绝对路径(如/var/log,即从根目录开始),也可以是相对路径(如user1/abc,即从当前目录开始)。

(2)文件类型

在Linux中定义了7种不同的文件类型:

012.jpg

2.Linux文件权限管理

在Linux系统中,每一个文件和目录都有相应的访问许可权限,我们可以用它来确定谁可以通过何种方式对文件和目录进行访问和操作。文件或目录的访问权限分为可读、可写和可执行三种,分别以r,w,x表示,其含义为:

013.jpg

在文件被创建时,文件所有者可以对该文件的权限进行设置。对于一个文件来说,可以将用户分成3种,并对其分别赋予不同的权限:文件所有者、与文件所有者同组用户、其他用户。每一个文件或目录的访问权限都有3组,每组用3位表示,如:

d rwx r-x r--

(1)文件/目录权限设置——chmod

这是Linux系统管理员最常用到的命令之一,它用于改变文件或目录的访问权限。该命令有两种用法:

第一种用法:用包含字母和操作符表达式的文字设定法。

语法格式:chmod [who] [opt] [mode] 文件/目录名

参数格式:

014.jpg

第二种用法:用数字设定法。

语法格式:chmod [mode] 文件名

关键是mode的取值,一开始许多初学者会被搞糊涂,其实很简单,我们将rwx看成二进制数,如果有则用1表示,没有则用0表示,那么rwx r-x r--则可以表示成为:

111 101 100

再将其每3位转换成为一个十进制数,就是754。

例如,我们想让a.txt这个文件的权限为:

015.jpg

那么,我们先根据上表得到权限串为:rw-rw-r--,转换成二进制数就是110 110 100,再每3位转换成为一个十进制数,就得到664,因此我们执行命令:chmod 664 a.txt。

(2)改变文件的属主——chown

语法格式:chown [选项] 用户名 文件/目录名

其中最常用的选项是“R”,加上这个参数,可以将整个目录里的所有子目录和文件的属主都改变成指定用户。

(3)改变文件属组命令:chgrp

语法格式:chgrp 组名 文件名

命令说明:将指定“文件”的所属组改为“组名”所指定的组。

3.磁盘使用情况查询

系统软件和应用软件,都要以文件的形式存储在计算机的磁盘空间中,作为系统管理员应随时监视磁盘空间的使用情况。我们可以使用下面两个命令来实现:

(1)df命令

df,就是Disk Free,顾名思义就是检查磁盘上还剩下多少空间。下面是一个使用实例:

# df

FileSystem 1k-blocks Used Available Use% Mounted on

/dev/hda5 4134900 1749728 2175124 45% /

/dev/hda6 6048320 5741092 0 100% /home

共显示了6列信息:

①FileSystem:硬盘分区。

②1k-blocks:按K计算的分区大小。

③Used:已经使用的分区大小(按K计算)。

④Available:还要用的分区大小。

⑤Use%:已使用的空间所占百分比。

⑥Mounted on:挂接点。

(2)du命令

du,就是disk usage,就是看一下磁盘使用了多少。下面就是一个使用实例:

# pwd

/var/log

# du

4 ./uucp

776 .

在这里,我们使用du命令列出了/var/log目录所占用的磁盘空间。它统计出了该目录有一个子目录:uucp,占用了4K,而/var/log目录下的文件则共有776K。

该命令还有一些常用的选项,用来完成更多的功能:

① -a:将列出当前目录下所有的文件、子目录、子目录下的文件、子目录下的子目录……的磁盘占用情况。

② -b:以字节为单位表示占用的磁盘空间。

③ -c:在最后显示出一个统计值。

4.文件系统修复

Linux中ext2文件系统的可靠性是很高的,一般的损坏均可以使用“fsck -p”命令来修复。它可以安全地自动修复大部分常见的文件系统问题。

如果要对特定的某个分区进行修复,则可以使用“fsck -p 分区名”命令。如果fsck无法修复,那么除非你对文件系统有广博的知识,否则也无需尝试用手工修补的方式来拯救硬盘。

5.磁盘I/O分析

监视磁盘性能的常用命令是iostat,它接受的可选参数包括以秒为单位的时间间隔以及重复次数。不带参数的输出,通常包括以下几个字段:

016.jpg

在磁盘I/O分析中,应该注意的要点包括:

① 寻道的时间开销是影响磁盘性能最重要的因素。因此,在给新磁盘划分分区时,应该将需要同时访问的文件尽量归入同一个文件系统中。

② 如果有多块磁盘,则应该把一起使用的文件系统放置在不同的磁盘上,这样就可以让多个磁盘一起工作,以获得最高的磁盘性能。

③ 如果有多个磁盘,应尽量以一个专门的控制器来使用SCSI磁盘。

④ 换页通常会让系统变得很慢,因此应尽可能将交换空间散布在多个磁盘上。

三、进程管理

在Linux操作系统中,我们用“进程”来表示正在运行的程序。程序的内存使用、处理器时间和I/O资源就是通过进程来管理和监视的。

1.进程的使用情况分析

要了解Linux操作系统中进程的使用情况,ps是最好的工具。用户可用它来显示进程的PID、UID、优先级和控制终端。我们最常使用的参数组合是“ps -auxw”,它将列出以下的内容:

017.jpg

如果你在ps命令后加上参数“l”,那么还将查看到:

018.jpg

不过,ps的最大局限就是它只查看“执行ps命令”那一时刻的进程状态,难以了解系统运行全景,因此我们还需要使用top命令来完成这一任务。top命令会进行一个交互界面,自动每隔10秒更新一次数据,最活跃的进程显示在顶部。其显示结构内容是与ps命令相类似的。

2.失控进程处理

失控的进程通常包括两种:一种是过度占用了系统某种资源(如CPU时间、磁盘空间);另一种就是突然呈现狂暴行为的系统进程。通常当系统发生异常时,我们就应该着手寻找失控进程。

① 首先查看top的输出,寻找是否存在占用了过多的CPU时间进程,也就是寻找是否存在某个用户进程正在消耗的CPU时间比可以预计的多很多。

② 如果有这样的进程,则应该与该进程的属主联系,或寻找该进程的来源。

③ 如果短时间内不能够确定失控进程存在的原因,则可以使用“kill -STOP 进程号”命令发出信号,使该进程挂起。待问题确定后,再决定是用“kill -CONT 进程号”来重新启动进程,还是用“kill -KILL 进程号”来终止进程。

④ 如果发现一些合理的进程使用的CPU量过大,而应该用renice命令来重新设置其谦让值(即增大该值,使其优先级下降)。而如果是合理进程使用的内存过大,也可以使用limit memoryuse命令来设置其物理内存限制,例如:

limit memoryuse 32m:将物理内存限制在32M

3.性能监控及分析

对Linux系统的性能进行监控和分析,是使其保持最优状态的重要工作。虽然本部分的工作不完全属于进程管理的范畴,但它们之间的关系是十分密切的。

一般来说,对系统的性能检查要从CPU使用情况、内存使用情况、磁盘I/O情况3个角度进行监控与分析。磁盘I/O情况已在前面介绍了,现在再对另外两个进行介绍。

(1)CPU使用情况分析

对于CPU使用情况分析而言,应该采集的数据包括:总体利用率、平均负载、每个进程的CPU消耗量。

总体利用率有助于确定系统中CPU的运行速度是否为系统的性能瓶颈。对于这个信息,你可以利用Vmstat命令来获得。Vmsta命令包括两个参数:每行输出需监视系统的秒数(采样周期)、提供的报告数(如果没有指定,就会一直运行到手动按下Ctrl+C时终止)。Vmstat命令可以获得进程、内存、交换空间、I/O、系统和CPU的汇总信息。其中与CPU有关的数据包括3项:

019.jpg

而平均负载可让你对系统的总体性能有一个了解。平均负载实际上是可运行进程的平均数。一般来说,平均负载包括了等待磁盘和网络的I/O进程,因此它并不是CPU使用情况的纯粹指标,但仍然对CPU使用情况的分析十分有价值。我们可以通过uptime命令来获取负载平均值。它通常会给出3个数值,分别代表系统5、10、15分钟内的平均负载值。平均负载值如果越高,就越接近系统的性能极限。一般来说,该值达到3时就表示处于繁忙状态,到达6时通常是难以处理的负载。

而每个进程的CPU消耗量数据则能够表明占用系统资源最多的进程。在前面一小节中,我们已经介绍了使用top命令来获取该信息。

(2)内存使用情况分析

在Linux操作系统中,内存的活动基本上可以用3个数字来量化:活动虚拟内存的总量、交换率和调页率。

活动虚拟内存的总量就是内存的总需求量。你可以使用free命令来获得该值,一般来说,如果空闲部分低于系统总内存量的30%就表示存在问题。

交换率和调页率则表明内存中有多少比例正处于使用中。在Linux中,我们可以使用procinfo命令来获取。你可以使用该命令输出的page in/out和swap in/out两组字段来评估系统的调页和交换行为。事实上,page in和swap in基本上都属正常事件,而page out和swap put则一定表示数据被换出内存或交换分区,如果其值较大就意味着内存使用紧张。

四、网络管理

网络无处不在,对于Linux管理员而言,网络管理的工作是必不可少的内容。

1.网络基本配置指令

在Red Hat Linux中,提供了一系列与网络相关的工具、命令,只要掌握它们,就可以完成网络的基本配置工作。

(1)netconf

netconf是Red Hat Linux提供的Linuxconf的一部分,主要用于设置与网络相关的参数。它可以在consle下运行(文本菜单),也可以在X-Window中运行(图形界面)。在前面,我们介绍过了netconf的一些应用,它的使用比较简单,只要认识上面的英文就可以了,所以在此就不再多说。

(2)ifconfig

ifconfig是Linux系统中最常用的一个用来显示和设置网络设备的工具。其中“if”是“interface”的缩写。它可以用来设置网卡的状态,或是显示当前的设置。下面我们简单地说明常用的命令组合:

① 将第一块网卡的IP地址设置为192.168.0.1:

ifconfig eth0 192.168.0.1 (格式:ifconfig 网络设备名 IP地址)

②暂时关闭或启用网卡:

关闭第一块网卡:ifconfig eth0 down

启用第一块网卡:ifconfig eth0 up

③将第一块网卡的子网掩码设置为255.255.255.0:

ifconfig eth0 netmask 255.255.255.0(格式:ifconfig 网络设备名 netmask 子网掩码)

我们也可以同时设置IP地址和子网掩码:

ifconfig eth0 192.168.0.1 netmask 255.255.255.0

④将第一块网卡的广播地址设置为192.168.0.255:

ifconfig eth0 -broadcast 192.168.0.255

⑤将第一块网卡设置为不接收多播数据包:

ifconifg eth0 allmulti

如果要让其接收,则使用命令:ifconfig eth0 -allmulti

⑥查看第一块网卡的状态:

ifconfig eth0

如果要查看所有的网卡状态,则直接使用不带参数的ifconfig命令即可。ifconfig输出的状态信息是十分有用的。

图2.jpg
ifconfig输出的状态信息

其中有几个比较重要的状态,大家一定要能够读懂它:

020.jpg

(2)route

route命令是用来查看和设置Linux系统的路由信息,以实现与其他网络的通讯。要实现两个不同的子网之间的网络通讯,需要一台连接两个网络路由器或者同时位于两个网络的网关来实现。

在Linux系统中,我们通常设置路由是为了解决以下问题:该Linux机器在一个局域网中,局域网中有一个网关,能够让你的机器访问Internet,那么我们就需要将这台机器的IP地址设置为Linux机器的默认路由。

①增加一个默认路由:route add 0.0.0.0 gw 网关地址

②删除一个默认路由:route del 0.0.0.0 gw 网关地址

③显示出当前路由表:route

2.主要网络配置文件

(1)/etc/hosts

在该文件中存放的是一组IP地址与主机名的列表,如果在该列表中指出某台主机的IP地址,那么访问该主机时将无需进行DNS解析。

(2)/etc/host.conf

该文件用来指定域名解析方法的顺序,如:order hosts,bind。

它说明,首先通过/etc/hosts文件解析,如果在该文件中没有相应的主机名与IP地址的对应关系,再通过域名服务器bind进行解析。

(3)/etc/resolv.conf

在该文件中存放域名服务器的IP地址。

(4)/etc/protocols

Red Hat Linux 7.1系统使用该文件辨别本主机的,并通过它完成协议和协议号之间的映射,用户不应修改该文件。

(5)/etc/services

该用户用于定义现有的网络服务,用户无需修改它,它通常由安装网络服务的程序来维护。该文件包括网络服务名、网络端口号和使用的协议类型,其中网络端口号和使用的协议类型之间有一个斜杠分开,在设置行的最后还可以添加一些服务的别名。

(6)/etc/xinetd.d

在Linux系统中有一个超级服务程序inetd,大部分的网络服务都是由它启动的,如chargen、echo、finger、talk、telnet、wu-ftpd等……,在7.0之前的版本,它的设置是在/etc/inetd.conf中配置的,在Red Hat 7.0后,它就改成了一个xinetd.d目录。

在xinetd.d目录中,每一个服务都有一个相应的配置文件,我们以telnet为例,说明一下各个配置行的含义:

service telnet //说明该配置用来设置telnet服务

{

socket_type=stream //说明Socket连接类型是stream,也就是TCP

wait=no // 是指不等待到启动完成

user=root //是指以root用户启动服务进程

server=/usr/sbin/in.telnetd // 是指服务进程是/usr/sbin/in.telnetd

log_on_failure+=USERID //是用于做一些出错日志

disable=yes //是指禁止远方telnet,如果需要开放则将该配置改为:disable=no

}

修改了xinetd的配置,需要重启xinetd才能够生效,有两种方法可以实现:

①执行命令:/etc/rc.d/init.d/xinetd restart

②执行命令:killall -HUP xinetd

3.网络检测工具

在日常的管理与维护中,经常会涉及到网络故障的处理。在检测网络故障时,应该采用自下向上,从协议栈的最底层开始分析、逐一排除,例如可以依次检查:

①物理连接和链路的指示灯是否亮?

②接口的配置正确吗?

③ARP表能够显示出其他的主机吗?

④可以ping通本地主机地址吗?

⑤可以用IP地址ping通其他的本地主机吗?

⑤可以用主机名ping通其他的本地主机吗?

⑥可以ping通另一个网络上的主机吗?

⑦如telnet、ssh等高层应用是否能够正常工作。

在网络故障的实际检测中,常常使用的基本工具包括ping、traceroute、netstat。

(1)ping

ping是一个最常用的检测是否能够与远端机器建立网络通讯连接的命令。它是通过Internet控制报文协议ICMP来实现的。而现在有些主机对ICMP进行过滤,在这种特殊的情况下,有可能使一些主机ping不通,但能够建立网络连接。这是一种特例,在此事先说明。常见的ping应用如:

检测与某机器的连接是否正常:

ping 192.168.0.1;采用IP地址

ping www.csai.cn;采用主机域名地址

指定ping回应次数为4:在Linux下,如果你不指定回应次数,ping命令将一直不断地向远方机器发送ICMP信息。我们可以通过-c参数来限定:

ping -c 4 192.168.0.1

通过特定的网卡进行ping:有时,我们需要检测某块网卡(系统中有多块)能否ping通远方机器,这需要在执行ping命令时指出:

ping -I eth0 192.168.0.1

另外,提醒大家注意,只用ping命令是很难区分出是网络故障还是服务器故障的。ping不通只能说明其中存在问题。

(2)traceroute

如果你ping不通远方的机器,想知道是在什么地方出的问题;或者你想知道你的信息到远方机器之间都经过了哪些路由器,可以使用traceroute命令。顾名思义:trace是跟踪,route是路由,也就是跟踪路由。使用这个命令很简单:“traceroute 远程主机IP地址或域名”。这个命令的输出类似于:

1 路由器(网关)的IP地址 访问所需时间1 访问所需时间2 访问所需时间3

2 路由器(网关)的IP地址 访问所需时间1 访问所需时间2 访问所需时间3

………

最前面的数字代表“经过第几站”;路由器(网关)的IP地址就是“该站”的IP地址;访问所需时间1、2、3是指访问到这个路由器(网关)需要的时间。

(3)netstat

在Linux系统中,提供了一个功能强大的查看网络状态的工具:netstat。它可以让你得知整个Linux系统的网络情况。

021.jpg

监视网络连接的状态:如果不带参数执行netstat命令则只显示活动的TCP和UDP端口状态。用netstat -a即可以显示出所有的网络连接。其内容包括以下字段:

检查接口的配置信息:我们可以使用“netstat -i”来显示网络接口的状态,对于每一个接口而言,重要的信息包括以下部分:

022.jpg

检查路由表:如果你想检查本机的路由表,则可以通过“net

stat -r”命令实现。它的输入内容是一个包括以下字段的表项:

对于Linux主机而言,应该检查是否有一条默认路由(即目的地址是0.0.0.0)的记录,这点犹为重要。

023.jpg

查看各种网络协议的运行统计信息:使用“netstat -s”命令,将会以摘要的形式统计出IP、ICMP、TCP、UDP、TCPEXT形式的通信信息。要注意回应请求的数目、生成的回应数目以及回复回应的数目应该完全一致,否则就意味着网络存在一定问题。