Linux作为操作系统软件,是沟通计算机系统硬件和应用软件的桥梁。学习RHCE,当然也应自硬件始,不过,操作系统毕竟属于软件,所以对硬件知识的了解只需要掌握一些基本的就可以了。其实,对这些基本硬件知识的理解不仅有助于系统管理员很好地配置Linux,而且有助于解决Linux系统上的诸多故障。
★系统架构(Architecture)
我们知道Linux是以支持大量系统架构而著称的。不过,对于RHCE而言,只需考虑普通PC都能支持的Intel架构(i386)就行,从而免去了学习那些系统架构相关知识的麻烦。
★Intel通信通道
一般PC机上所支持的通道无外乎以下三种:
1) 中断请求端口(IRQ):主要用于键盘、打印机等设备的中断请求服务。
2) 输入/输出地址:CPU和计算机其它部分通信的内存地址。
3) 直接内存存取通道(DMA):主要用于那些具有独立处理器的计算机设备。
由于RedHat对即插即用的支持已经相当出色,这些通道相关的配置差不多对系统管理员已然透明了。不过,学习它们,将有助于我们解决一些特殊的故障。下面我们分别来了解一下相关情况:
1) IRQ设置:按准确的定义,IRQ是当某一外围设备(如网卡、鼠标、串口等)向CPU请求处理时间时所发送的请求信号。一般而言,计算机上每个相连设备都需要自己的IRQ端口,而且这个端口往往是一直占用的(可移动设备除外)。如果IRQ耗尽了,有些PCI设备及USB设备是可以共享IRQ的。
实践分析:如果机器上的USB端口或PCI卡出现问题,首先检查BIOS。不少BIOS中都包含了“激活PCI共享”和“支持USB连接”的选项。
2) 关于IRQ冲突:在某些PC上,IRQ可谓宝贵资源,随着连接设备增多,可能会发生IRQ冲突。一旦冲突发生,可以考虑手工设置IRQ,如果没有可用的IRQ了,那就必须牺牲某个连接设备。需要注意的是,有些IRQ是不允许改动的,因为它们是为主板上控制设备所预留的,千万不要与它们冲突。在Linux中,可以浏览/proc/interrupts来查看哪些中断已经使用,哪些还未使用。
3) 输入/输出地址:每个计算机设备都需要一个输入/输出地址,这是那些请求CPU服务的数据所存放的位置。I/O地址一般以十六进制编码列出。有些典型的I/O地址,如串口COM1,COM2,COM3和COM4,它们分别对应的I/O地址为:03f8,02f8,03e8和02e8。在Linux中,可以浏览/proc/ioports来查看已分配的I/O地址情况。
4) 直接内存地址:通常用来直接在设备间传输信息,而无需通过CPU。现代PC的许多部分都不需要CPU,例如声卡和显卡。尽管DMA通道不要CPU的干预,但这些设备仍然配置了IRQ端口,有8个标准DMA通道(0-7)。注意DMA 4是保留的,不能用于任何设备。在Linux中,可以浏览/proc/dma来查看已分配的DMA地址。
★内存
对于Redhat Enterprise Linux 5(以下简称RHEL 5)而言,最小的内存需求为256MB(实际还可以更小,但内存太少不够满足系统的正常工作要求)。
RHEL 5可以支持很大数量的内存,一般而言,内存的限制来源于硬件。
实践分析:对于Linux服务器而言,系统对内存的需求随着用户数的增加而增加,而那些大型程序,如数据库,对内存的消耗也是很大的。
★硬盘
Linux系统是安装在硬盘上的,显然,硬盘对系统的支持是十分紧密的。从硬件角度来看,你应该了解:
1) 标准PC只能管理最多4个IDE驱动器,而且不能识别PATA驱动器。
2) 更新的PC可以控制更多的SATA驱动器。
3) 如果有SCSI硬件的支持,机器可以支持多达31个SCSI驱动器。
4) 不管使用多少PATA、SATA还是SCSI驱动器,Linux的启动文件(/boot目录下)必须安装在前两个硬盘中,否则,就需要用驱动软盘来启动系统。
5) 尽管能将Linux安装在USB或IEEE 1394硬盘上,却不能直接从这些驱动器启动。
文本编辑器对于Linux系统配置作用重大,是系统管理员常用的主要工具。流行的Linux文本编辑器有:vi、pico、joe和emacs等。下面着重对vi进行一些介绍:
★为什么选择vi?
vi也许不是Linux下最好用的文本编辑器,但是凭借其在Unix上的历史地位,它毫无疑问是使用最广泛的,另外,在一些特殊环境下(如使用急救软盘时),它可能也是唯一的选择。
RHEL 5对文本编辑器的支持能力更强了,它使用的是vi的升级版本vim。而且,即使在急救模式下也提供了其他类型的文本编辑器。
实践分析:如果在急救模式下尝试启动emacs或pico,实际启动的是joe编辑器。
★vi的两种模式:
vi中最基本的两种编辑模式是:命令模式和插入模式。打开文件时默认进入命令模式,通过某些命令操作再可进入插入模式。
关于vi的详细信息可以参见其man页,或者输入vimtutor命令。
下面这几个操作是vi中最常用的,每个系统管理员都应该运用自如:
1) 打开文件:直接运行“vi filename”即可。
2) 查找:以“/”开头,后面接要查找的对象。例如:要在某文件中查找“test”单词,则输入“/test”即可。查找命令会自动找到第一个匹配项,如果需要继续查找下个匹配项,输入“n”即可。当查找到文件末时,编辑器会给出提示,然后又从文件开端进行再次搜索。
3) 保存修改:要保存对编辑内容的修改,使用:w命令。如果保存修改的同时要退出编辑器,可以使用:wq命令(另一种方法是使用:x命令)。
4) 关闭文件:这个很简单,就是使用:q。
5) 放弃修改:也很简单,使用:q!。
6) 编辑:在文本编辑时常用的命令有:x —— 删除当前字符;dw —— 删除当前单词;dd —— 删除当前行;p —— 从当前缓冲中取文本;u —— 撤销修改。
7) 插入:进入插入模式只需按下“i”即可,如果输入“o”会新起一行,同时也进入插入模式。如果插入字符完毕,可按ESC键退回命令模式。
8) 复制与粘贴:使用yy可复制当前行,然后用p命令取出复制内容。
9) 到文首或文末:如果编辑大文件,怎样到文件首和文件末就显得特别重要。到文件首可以使用:1命令,到文件末可以使用:$或G命令。
实践分析:有些特殊定制的vi命令,如vipw、vigw和visudo分别用来查看/etc/passwd、/etc/group和/etc/sudoers。
在操作系统中,任何东西都可以看作是文件,文件是操作系统逻辑组织的基本单元。对于Unix和Linux文件系统而言,文件系统层次标准(FHS)是其组织规范的主要参考。对文件目录结构稍有了解的人都知道,文件系统通常由根目录(/)出发,不断延伸出一层一层的子目录。★在Linux中,常用的一级子目录包括:
目录名 | 描述 |
/bin | 集中存放一些必要的命令工具,最好不要单独挂载,否则你会找不到那些你亟需的实用程序。 |
/boot | 包含Linux的启动文件以及内核。默认情况下为100M,这对准备RHCE考试足矣 |
/dev | 集中存放各类设备驱动程序,该分区不要单独挂载 |
/etc | 集中存放一些基本的配置文件 |
/home | 集中存放用户的主目录 |
/lib | 内核和实用程序的编译库文件,该分区不要单独挂载 |
/media | 可移动介质的挂载点 |
/misc | 使用automounter挂载本地目录的标准挂载点 |
/mnt | 老的用于移动介质的挂载点 |
/net | 使用automounter挂载网络目录的标准挂载点 |
/opt | 第三方应用程序文件的常用存放地 |
/proc | 集中存放当前内核相关进程以及内核配置信息等 |
/root | root用户的主目录 |
/sbin | 集中存放一些系统管理命令,该分区不要单独挂载 |
/selinux | 与安全升级Linux相关的当前配置 |
/smb | 使用automounter挂载远端共享Microsoft网络目录的标准挂载点 |
/srv | 常用于各种非RedHat版本的网络服务器 |
/tftpboot | 当安装了TFTP服务器时会存在 |
/tmp | 集中存放临时文件,默认情况下,RedHat会自动周期性地清空该目录 |
/usr | 集中存放一些对所有用户可用的小程序,包含许多系统管理命令和实用程序 |
/var | 集中存放可变数据,如日志和打印机缓冲文件等 |
★设备文件
许多媒介设备在Linux系统中是以文件的形式来管理的,例如:硬驱、软驱、光驱等。另外一些通过PC插槽或端口存取的设备如串口、USB、并口、IEEE 1394等,也有专门的设备文件。
绝大多数的外围设备都能自动侦测到,典型的设备文件如下:
设备 | 设备文件 |
软驱 | 第一软驱(A:):/dev/fd0;第二软驱(B:):/dev/fd1 |
PATA(IDE)硬驱 PATA(IDE)光驱 | 第一驱:/dev/hda;第二驱:/dev/hdb;第三驱:/dev/hdc;第四驱:/dev/hdd |
SATA或SCSI硬驱 SATA或SCSI光驱 | 第一驱:/dev/sda;第二驱:/dev/sdb;……;第二十七驱:/dev/sdaa;…… |
并口 | 第一口:/dev/pd1;第一磁带驱动器:/dev/pt1 |
USB驱动器 | 视具体连接设备而定 |
IEEE 1394设备 | 实际上是SCSI标准,参照SCSI设备文件规则 |
注意:在/dev下的许多文件只是对标准设备文件的引用,往往是为了更容易识别。如/dev/cdrom和/dev/dvd。
★文件系统工具
Linux文件系统可以通过三个工具进行创建、检查或修复:fdisk、mkfs和fsck。当然,Linux里文件系统工具还不止这三个,例如parted等,但这三个无疑是最常用的,下面分别对它们进行简要介绍(具体的帮助信息可参考man页):
1) fdisk:fdisk我们并不陌生,因为在Windows系统中这是基本的工具,实际上,虽然Linux中的fdisk与Windows中的fdisk有些相似,但功能支持要大得多。在使用fdisk之前,首先须明确所要处理的硬盘。例如:如果要处理第一IDE硬盘,可以输入:#fdisk /dev/hda。fdisk命令常用的选项有:
选项 | 描述 |
a | 指定可引导Linux分区 |
d | 删除一个分区 |
l | 显示可用分区类型,fdisk可以创建所列类型的文件系统 |
n | 创建一个新的分区(在自由空间足够的情况下) |
p | 显示现有分区情况 |
q | 退出而不保存修改 |
t | 修改分区的系统标识(类型) |
w | 保存修改并退出 |
2) mkfs:主要用来格式化Linux分区。例如,如果需要格式化/dev/hda1为ext3文件系统,可以直接输入:#mkfs -t ext3 /dev/hda1。如果分区已经用ext3文件系统格式化过,现在需要重新格式化,此时mkfs可以自动识别文件系统类型为ext3,输入:#mkfs /dev/hda1即可。
3) fsck:该命令类似于Windows上的chkdsk命令,它主要用来对文件系统进行检查和修复。注意:在运行该命令之前,务必先卸载所检查的分区,在检查修复完成之后,再重新挂载该分区。例如:
#umount /var
#fsck –t ext3 /dev/sda6
#mount /dev/sda6 /var
如果分区已经用ext2或ext3文件系统格式化过,现在需要对该分区进行检查,此时fsck实际自动调用e2fsck命令,此时无须指定分区类型,输入:#fsck /dev/sda6即可。
★LVM
逻辑卷管理器(LVM)是一种可跨分区创建文件系统的工具。它的引入,借鉴了Unix文件系统的优点,可以灵活使用和配置文件系统,从而大大提高Linux系统的可靠性和可用性。使用LVM可以很方便地实现磁盘分区的扩容,一个文件系统甚至可以跨越多个硬盘。下面简要介绍一下创建LVM分区的过程:
1) 添加新的硬盘
2) 创建新的分区,将一个或多个分区指定为LVM文件系统类型(可使用fdisk工具)
3) 备份/home目录,将其分区指定为LVM文件系统类型
4) 使用vgscan工具扫描Linux的LVM文件系统以创建备用的信息库
5) 使用pvcreate /dev/partition命令创建(物理)卷。
6) 将卷添加到指定的卷组:vgcreate groupname /dev/partition1 /dev/partition2…
7) 创建逻辑卷:lvcreate -L xyM –n volname groupname,这里的xy表示卷的大小
8) 使用mkfs格式化逻辑卷为指定的文件系统
9) 用pvdisplay、vgdisplay和lvdisplay命令分别检查所创建的卷、卷组和逻辑卷信息
★关于mount
mount是一个与文件系统操作紧密相关的常用命令,它主要用来在指定位置挂载本地或网络分区。挂载点不是固定的,可以由系统管理员任意指定,当然,管理员必须对挂载目录拥有足够的操作权限。FHS规定了一些标准的挂载点,例如早期的/mnt/floppy和/mnt/cdrom之类,其挂载操作如下:
#mount -t vfat /dev/fd0 /mnt/floppy
#mount -t iso9660 /dev/cdrom /mnt/cdrom
还有一些挂载点可以由automounter来自动确定。
文件的操作主要考虑Linux系统中一些与文件相关的常用命令,这些命令是日常系统管理不可或缺的工具,如果你能达到信手拈来的境界,那才证明你确实具备了RHCE的能力。下面分类作一些简要介绍。
★文件浏览
1)~
这个符号在Linux中表示当前用户的主目录,例如,你的用户名为dz,主目录为/home/dz,那么~就等价于/home/dz,显然这省事多了。常用命令搭配:cd ~和ls ~。
2) 路径(path)
操作系统中的路径无外乎两种:绝对路径和相对路径。在Linux中注意这两者的差别,特别是当运行脚本程序时,绝对路径往往是必须的。
3) pwd
它是“打印工作目录”的缩写,显然,它的作用就是显示当前所处位置的绝对路径。当你在浩如烟海的文件中迷失方向时,试试这个就好。
4) cd
cd的意思是改变目录,你想跳转到哪个目录就可用它,后面既可接绝对地址也可接相对地址。常用的有:cd ..和cd ~。
5) ls
这个命令实在用得太多了,不夸张地说,在Linux庞大的文件系统中,没有它你简直寸步难行。它的用法也不少,最基本的作用是显示当前目录下的文件,搭配不同的选项,它可以显示各类文件信息。常用的选项有:-a —— 显示隐藏文件;-l —— 显示文件完整信息;-t —— 将文件按时间排序显示;-i —— 显示i节点号等。各选项可以组合使用,这样ls可以展示出更强大的功能来。
★查找文件
1)find
find也是个十分强大的命令,它与正则表达式配合,可以实现各种各样的查找。不过,这里只介绍其最简单最常用的用法。例如,你希望查找passwd这个文件,可以使用如下命令:
#find / -name passwd
这会从根目录起搜索整个文件系统,当然,也可以直接指定某个子目录作为搜索范围。
2)locate
find的查找可能会比较费时间,特别是当系统中文件很多时。locate则不同,它可以利用已有的文件信息库,实现文件的快速定位,而且,它查找时并不需要完整的文件名。当然,文件信息库的更新一般每天一次,所以会有一些不同步的情况发生。如果你想立即更新文件信息库,可以运行一次updatedb命令。
★文件内容操作
1)cat
这只“猫”是操作文本文件内容的最基本工具。最简单的用法是cat filename,这样会显示指定文件的文本内容,当然,如果文件内容很多,你的眼睛可能来不及浏览,这时可以写成cat filename | more来一页页浏览。cat后也可接多个文件,这样你可以一次浏览多个文件。
2)more和less
more和less实际是比较近似的,都是为了阅读大文件的方便,其中more filename可以从头至尾一页页浏览(只能向后翻页);而less filename则不仅可以一页页浏览,而且可以向前和向后翻页。
3)head和tail
又是一对反义词,不过这次它们的作用也确实是相对的。head filename显示一个文件的前10行;而tail filename显示一个文件的最后10行。你还可以通过控制-nx选项来设定显示的行数(注意这中间没有空格),例如tail -n20 /etc/passwd将显示/etc/passwd文件的最后20行。
★文件的创建
1)cp
cp是个文件复制命令,它最基本的用法是cp file1 file2,表示将file1的内容复制到file2,这样实际新创建了一个file2文件(如果file2文件已存在,会提示你是否覆盖)。其实cp的作用不仅如此,它还可以复制目录(如果复制的目录包括子目录,最好采用-r选项)。
2)mv
mv是移动文件命令,相当于给文件改名,它最基本的用法是mv file1 file2,如果是跨分区移动文件,文件的i节点号可能改变。
3)ln
ln用来创建链接文件。链接文件可用来设置文件别名或共享文件,Linux系统通常包含两类链接文件:硬链接是原文件的副本,如果硬链接文件在同一分区,其i节点号是相同的,当删除了原始文件之后,链接文件仍然可用。软链接(符号链接)是原文件的重定向,实际指向的是同一个文件(类似于Windows下的快捷方式),如果删除了原始文件,软链接文件虽然存在,但失去了指向,成为垃圾文件。
4)touch
touch可用来创建一个空文件(touch filename),不过这并非touch的主要作用。
★文件过滤器
Linux系统中有丰富的命令用于过滤文件内容,简单的如sort、grep,复杂的如sed、awk等。下面分类进行简要介绍:
1) sort
sort主要用于文件内容的排序。默认情况下,sort按每行第一个字母进行排序,常用的有sort /etc/passwd,这将使其输出按用户名排序。
2) grep和egrep
grep命令用来在文件中查找某个条目,它返回含有该条目的整行,例如:grep ‘Zhang Ming’ /etc/passwd可用来查找指定的用户信息。而egrep功能更为强大,它可以采用正则表达式来实现更灵活的查找。
3) wc
wc是个小巧的工具,它的功能就是单词计数,它可返回一个文件的行数、单词数和字符数(注意其顺序),其用法为:wc filename。也可搭配选项来返回指定项目计数(-c返回字符数;-l返回行数;-w返回单词数)。
4) sed
sed是个十分强大的命令,不仅可以在文件中查找,还可以替换,它与正则表达式的搭配也使其显得更为简单灵活。要仔细研究它的用法,可以专门写上一本书,下面只举个简单的例子:如果希望将exp文件中的Windows单词替换为Linux,并将其保存为newexp文件,可以输入如下命令:
#sed ‘s/Windows/Linux/’ exp > newexp
当然,这样只是替换了文件中第一个匹配的Windows单词,如果要替换文件中所有匹配项,可以将命令修改为:
#sed ‘s/Windows/Linux/g’ exp > newexp
5) awk
awk是一个更为专业化的工具,它拥有一些数据库操作的工具。它可以按关键字查找某行并指定输出该行的某个部分,举个实用的例子,下面这条命令:
#awk ‘/Zhang/ {print $1’ /etc/passwd
可以输出/etc/passwd中每个姓Zhang的用户的用户名。
★管理命令
Linux系统管理员应该很熟悉下面两个基本管理命令:
1) ps
ps命令用处不小,它可以用来查看进程的各项信息,而且凭借其搭配的选项,可为系统运行故障提供很好的诊断工具。常见的一种用法是:当管理员希望kill掉某个进程时,却不知道它的进程号,此时可以运行ps aux | grep processname。
2) who和w
这两个命令基本类似(w显示信息更详细,而who则更为直观),都是用来查看当前登录系统的用户,这在对系统作安全性分析时很有用。
★通配符
了解通配符对文件的模糊查找大有帮助,基本的有:
通配符 | 描述 |
* | 匹配任意字符(甚至是空字符) |
? | 匹配单个字符 |
[] | 匹配某个范围,例如ls x[123]表示与x1,x2,x3匹配 |
在RHEL中,标准的Linux打印后台程序已经是CUPS(Common Unix Printing System)。它的安装和配置都要比以前的lp打印程序简便。
★配置打印机
有三种配置的基本方法:
1)直接编辑打印机配置文件:/etc/cups目录下的文件,由于配置文件比较长,而且选项也并不直观,要进行直接配置无疑是件很困难的事情。
2)使用基于Web的配置工具,其端口号为631。
3)使用Red Hat Printer Configuration工具。
★添加打印机
添加打印机最简单的方法是上面的方法3),其启动命令是system-config-printer。在打印机的配置上,还是建议选择GUI工具,这样可以在RHCE考试中赢得更多的时间。
★打印命令
在Linux中与打印相关的有三个基本命令,具体如下:
1) lpr:基本打印命令。lpr filename表示打印指定文件。
2) lpq:查询打印队列状态信息。lpr -l可列出等待的打印作业号。
3) lprm:删除指定打印作业,需要指定打印队列中的作业号。