社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 112235阅读
  • 89回复

★ Linux&Unix→专辑 ★

楼层直达
级别: 光盘初级
发帖
301
飞翔币
335
威望
48
飞扬币
1311
信誉值
0
只看该作者 30 发表于: 2007-05-05
引用
Linux Shell →至尊再现


引用
第一篇:超级工具/Terminals,xterms 和 Shells


引用
超级工具

您或许听过这样的论调:命令行(the mommand line)早就已经过时了,那东西神秘兮兮的,等等。有些人甚至觉得*作系统中应该没有这些命令才好。
事实是上,您可以不懂任何 shell ,就能使用 Linux 。您启动系统后可以直接进入 X Window ,最后在 X Window 下关机。
我坚信,用 Linux 而不懂 shell ,就象开车只会用头档(first gear)一样。当然,最初看起来,直接而简单,在大多数情况下都管用。但速度慢,而且无法真正体验驾驶的乐趣。
对,命令行很有趣。就象用一大堆收集到的积木,竟可以完成许多意想不到的创举,一些极其复杂的工作,只需几行命令就可以解决。这是因为,在 Unix 中,shell 可不是简单的命令解释器(典型的有 Windows 中的 DOS ),而是一个全功能的编程环境。
这并不意味着 shell 非常容易学通,您知道,好事多磨,这还是要花点工夫的。;-) 但请相信我,这绝对值得。您在很短时间内,就能被一大帮门外汉吹捧为 Unix wizard(奇才) 。*grin*
为了说明 shell ,这里需要一些背景知识。
Terminals, xterms 与 Shells
追溯到 Unix 诞生的那个年代,当时还没有现在流行的"个人计算机"。被称为计算机的机器,还是吞吐磁带与 magnetic memory (用术语'core'来表示系统 memory)的庞然大物。DEC 公司(现在的 Compaq)推出的 PDP-11 ,体积小(被称为 mini)而且价格底,在大学中引起了巨大的反响,很多学校直到那时才买得起一台计算机(PDP-11 物美价廉,只有 10000$)。

这些机器的*作系统由汇编语言、机器语言写成,所以运行起来效率很高,但都无法移植(unportable)。每家计算机公司都给自己的机器配上独有的*作系统,然后再销售。

这种笨拙的作法很快就被人们意识到了,于是就开始兴建一个可以在不同品牌机器上运行的*作系统。1969 年,Ken Thompson 开始写后来成为 Unix 的第一行代码。(Thompson 曾经参加了一个项目:MULTICS,Unix 是与这有关的一个玩笑词) 其实,Dennis Ritchie 为这个新的*作系统设计了一种新的编程语言-- C 语言后,事情才真正开始。

虽然 Unix 的效率不及原来的*作系统,但有三个突出的优点:可以任意移植到其他机器,其中的 C 语言大大简化了编程,而且这些都 free 。很快,全美国的大学都忙着开始为机器安装 Unix 。

终端(Terminals)

Unix 是可以在许多种机器上运行的*作系统,但人们又如何使用这些机器呢?他们是通过哑终端来连接到这些机器,也就是用键盘、显示器及足够的 electronics (电子元件)组成的机器与中央计算机(central computer)相连。在这些终端上,用户可以敲字符(teletypy),这就是字符串'tty'表示终端设备文件,和'getty'命令的名称来历。

您可能会问,现在这些东西都在哪儿。 这些终端的厂家无法达成一项最终标准,这导致每种牌子的终端都有各自的键盘布局、各自的在屏幕上显示字符的方法、发送或接收什么信号表示什么字符、控制代码等等。

为了避免这些混乱,就创建了一个含有所有不同终端特性的(capability)文件,这就是'termcap'。用一个工具打开'/etc/termcap'瞧瞧,可别吓着了 ;-) 。

Linux 终端大多数用'vt100'或'linux'作为终端类型。
xterms

在八十年代初期,产生了一个 Unix 的图形子系统-- the X Window System 。九十年代早期,为了更好地实现基于 Intel 的 Unix 类系统上(如FreeBSD、NetBSD、Linux)的应用,产生了一个系统分支-- XFree86 。

X Window 中一个很大的好处是可以运行多个虚拟(virtual)终端。甚至在 X Window 下就有这么个应用程序--'xterm'。您将发现'xterm'和'virtual terminal'在很多情况下都是一样的。有的地方说'打开一个 xterm',其实您不是非要用'xterm'程序,其他的终端模拟器(terminal emulator),如 rxvt、konsole、aterm、eterm、wterm 等等,一样有效。

终端模拟器(又称为虚拟终端)通过伪(pseudo) tty 设备-- pty 与系统相连,并且使用自己的显示标准-- xterm 。这导致不同的终端模拟器可能在一些按键或程序上存在细小的差别,这取决于模拟器多大程度上遵守了'xterm'的显示标准。

Shells

为了在终端中运行程序,需要 shell 。shell 是*作系统的一部分,用来与用户打交道,并且可以用来协调各个命令。

第一个真正的 Unix shell -- 'sh',亦称为'Bourne shell',诞生于 1975 年,作者是 Steve Bourne 。很快,出现了其他 shell ,如基于原始'Bourne shell'的'ksh'、'zsh',后者常用作专属 Unixes 系统中的标准 shell ;也有一些从 C 语言中衍生出来的 shell ,如'csh'或'tcsh'。

在 Linux 中,标注的 shell 是'bash',即 the GNU Bourne-Again Shell (有点玩笑的味道……)。这个 shell 功能非常强大(甚至有人觉得太庞大了),压缩的 man page 就有 50 KB 。

Shell 起步

首先,有一点小说明:在平常应用中,建议您不要用'root'帐号运行 shell ,如果您还是新手,这一点尤其要注意。作为普通用户,不管您有意还是无意,都无法破坏系统;但如果是'root',那就不同了,只要敲几个字母,就可能导致灾难性后果。

当您登入系统或打开一个 xterm 窗口,首先看到的是提示符(prompt)。Red Hat Linux 的标准提示符包括了您的用户名、登入的主机名(没有设置的话,是'localhost')、当前所在的目录(working directory)、提示符号:

[tom@belbo tom]$

我以用户名'tom'登入名为'belbo'的主机,当前在我的 home 目录--'/home/tom'中。'root'的提示符:

[root@belbo root]#

除了不同的用户名外,提示符号由'$'变成了'#'。根据 Bourne shell 的传统,普通用户的提示符以'$'结尾,而超级用户用'#'。

提示符的每个部分都可以定制,您在后面将有更深的了解。

要运行命令的话,您只要在提示符后敲进命令,然后在按 键。shell 将在其路径中(详情见后)搜索这个命令,找到以后就运行,并在终端里输出相应的结果(如果有的话),命令结束后,再给出新的提示符:

[tom@belbo tom]$ whoami
tom
[tom@belbo tom]$

顺带指出,当您敲 ENTER 时,光标(cursor)在哪里并不要紧,因为 shell 总是会整行地读取。

基本的命令有:'ls'(list directory ,列出目录内容)、'cp'(copy ,复制)、'mv'(move / rename ,移动/重命名),'cd '(change directory ,改变目录),这些命令后面都可以跟上一帮可选项,这方面 man page 有详细的介绍(man ls, man mv 等等)。
在您动身前往 shell 领地前,这里有几个术语(terminology)的简短说明。命令可能带一些可选项(options)、参数(arguments):

mv -i file dir

其中'-i'是命令'mv'的一个可选项,而'file'和'dir'则是参数。所有可选项在该命令的 man page 都中有详细的介绍(此例中用 man mv),而参数则由您提供。可选项决定命令如何工作,而参数则用于确定命令作用的目标。

到目前为止,介绍得有点象许多人厌恶轻视的 DOS shell ,但伴随着下面的介绍,您将会有新的体验。




引用
第二篇:自动补齐/命令行的历史记录/编辑命令行/可用的 Shell 快捷方式


引用
Unix (及后继者 Linux)在命令行下面诞生,因此,Unix 中的命令行有许多非常实用的功能。在本篇中,我们将来作一些了解。

自动补齐

如何用'cd'(改变目录,change directory)最快地从您当前所在的 home 目录跳到'/usr/src/redhat/'呢?

cd /usrr

这称为'命令行自动补齐'(automatic command line completion),这在平常应用中是不可缺少的。让我们仔细看看这个例子:

cd /u

扩展成了 cd /usr/ ,很简单吧。下面的

cd /usr

扩展为 cd /usr/src/ 。如果您只敲了cd /us,'/usr'下匹配的('cd /u*/s*')三个子目录将列出供您选择:'/usr/sbin'、'/usr/share'和'/usr/src'。

因此, 键可以很方便地用于根据前几个字母,来查找匹配的文件或子目录。比如,ls /usr/bin/zip 将列出所有'/usr/bin'下面,以字符串'zip'开头的文件或子目录。当然,完成这类任务还有更厉害的命令,但这个方法确实很管用。

另外,碰到长文件名时就显得特别方便。假设您要安装一个名为'boomshakalakwhizbang-4.6.4.5-i586.rpm'的 RPM 包,您输入 rpm -i boom ,如果目录下没有其他文件能够匹配,那 shell 就会自动帮忙补齐。

cd /usrl

将扩展成 cd /usr/src/linux ,并等待继续。'/usr/src'中有两个匹配的目录:'/usr/src/linux-[...]'、'/usr/src/linux'。如何告诉 shell 您想要后面的那个呢?只要跟一个斜线(/ ,slash),就可以选择后面的那个了。

假如您不确定是'/usr/src/linux/Documentation'还是'/usr/src/linux/documentation'。而您知道,Linux 是区分大小写的。如果已经仔细读过前面部分的话,您想到可以用:

cd /usrl/d

扩展成了'/usr/src/linux/drivers/',因此应该是'Documentation'(大写的'D')。

这种补齐对命令也有效:

[tom@belbo tom]$ gre

grecord grefer grep

[tom@belbo tom]$ gre

在这里 shell 将列出所有以字符串'gre'开头的已知命令。

命令行的历史记录

通过按向上方向键,您可以向后遍历近来在该控制台下输入的命令。用向下方向键可以向前遍历。与 SHIFT 键连用的话,您还可以遍历以往在该控制台中的输出。您也可以编辑旧的命令,然后再运行。

后,shell 就进入"reverse-i(ncremental)-search"(向后增量搜索)模式。现在输入您要找的命令的首字母:

(reverse-i-search)`':. 敲入 'i'可能会变成:

(reverse-i-search)`i': isdnctrl hangup ippp0

如果您再按 键,上面的命令将再次执行。而如果您按了向右、向左方向键或 ,上面的命令将回到普通的命令行,这样您就可以进行适当编辑。

编辑命令行

通过光标和功能键(Home、End 等键),您可以浏览并编辑命令行,如果您需要,还可以用键盘的快捷方式来完成一般的编辑:

l :删除从光标到行尾的部分

l :删除从光标到行首的部分

l :删除从光标到当前单词结尾的部分

l :删除从光标到当前单词开头的部分

l :将光标移到行首

l :将光标移到行尾

l :将光标移到当前单词头部

l :将光标移到当前单词尾部

l :插入最近删除的单词

l :重复前一个命令最后的参数。

例如:您用命令 mkdir peter/pan/documents/tinkerbell 新建了一个目录,现在您向用命令'cd'进入该目录,您可以用 cd !$,shell 将把前一个命令'mkdir'的参数添加到现在的'cd'后面。

当您更深入了解Linux后,将看到这些快捷方式在其他应用程序下输入时,有时也有效,比如,在浏览器中的输入框中。

可用的 Shell 快捷方式

Red Hat Linux 带有不少快捷方式,其中一部分是 bash 原来就有的,而还有一些则是为您预先设置的(在后面您将看到如何设置)。

由于 home 目录是每位用户的活动中心,许多 Unix 对此有特殊的快捷方式。

'~'就是您的 home 目录的简写形式。我们假设您在其他目录,想把一个名为'sometext'的文件复制到您 home 目录下的 'docs'子目录中。除了输入:

cp sometext /home/myusername/docs

您还可以用简写:

cp sometext ~/docs

理论上,这也可以应用在命令'cd'上。无论当前路径在哪里,cd ~ 将回到您的 home 目录。其实还可以简化,只要键入 cd ,就可以返回 home 目录了。

Red Hat Linux 为您提供了一些预先设置的快捷方式(称为'别名',aliases),比如:

l ll :将执行'ls -l -k'(以长格式列出目录内容,包括一些文件属性,并以 KB 而不是 byte 为单位显示文件大小)

l ls :将执行'ls -F --color=auto'(列出目录内容,加上文件类型标识,并使用颜色)

现在,您应该对 shell 及一些快捷方式有了进一步的了解,下面我们来看看除了应用一些简单的命令,shell 还能作什么。


[ 本帖最后由 尉迟小乐 于 2007-5-5 12:01 编辑 ]
级别: 光盘初级
发帖
301
飞翔币
335
威望
48
飞扬币
1311
信誉值
0
只看该作者 31 发表于: 2007-05-05
引用
第三篇:命令的排列/命令的任务调度/命令的替换


引用
命令的排列

现在您将看到一些常用的命令排列。您可能想在一行中给出所有命令,然后就可以把注意力转移到其他地方。没问题,shell 允许您在不同的命令之间,放上特殊的排列字符(queuing characters) 。这儿将介绍最常用的两种。

请注意,为了看起来更清楚,我在这些字符两旁加了空格。而在实际应用中,您不一定要这么做,'ls -a ; du -hs'和'ls -a;du -hs'的效果是一样的。

command1 ; command2

先执行 command1 ,不管 command1 是否出错,接下来执行 command2 。

例如:

ls -a ; du -hs

将先在屏幕上列出目录中的所有内容,然后列出所有目录及其子目录所占磁盘大小。

command1 && command2

只有当 command1 正确运行完毕后,才执行 command2 。

例如:

ls -a bogusdir && du -hs

将返回 ls: bogusdir: No such file or directory ,而'du'则根本没有运行(这是因为您没有'bogusdir'目录)。如果您将符号换成了';','du'将被执行。

为了进一步说明';'和'&&'的区别,及一般命令排列的用处,下面举一个经典的例子:Linux 内核的编译和安装。

要编译、安装 Linux ,您需要执行一串命令:'make dep'、'make clean'、'make bzImage'、'make modules'、'make modules_install'和'make install'。如果要等一个命令完成后,再输入下一个,再等,再输入,……,那就太麻烦了。另一方面,每个命令只有当前面的命令都正确执行完毕后,才能开始执行。如果您用';'来排列命令,则即使有命令执行失败,后面的也照常运行,最后,您可能在'/boot'目录下得到一个有问题的内核映像(image)。而用'&&':

make dep && make clean && make bzImage && make modules && make modules_install && make install

不需要中途打断,就可以编译内核及其模块,并完成后面的安装。

命令的任务调度

当您在终端里运行一个命令或开启一个程序时,终端要等到命令或程序运行完毕后,才能再被使用。在 Unix 中,我们称这样的命令或程序在前台(foreground)运行。如果您想在终端下运行另一个命令,则需要再打开一个新的终端。

但这里还有一个更优雅的办法,称为任务调度(jobbing)或后台(backgrounding)。当您运用任务的调度或将命令置于后台,终端就立即解放了,这样一来,终端立即就可以接受新的输入。为实现这样的目的,您只需在命令后面添加一个 & :

gqview &

告诉 shell 将图片查看器'GQview'放到后台去执行(即当成 job 来运行)。

命令 jobs 将告诉您,在这个终端窗口中,运行着哪些命令与程序:

jobs

[1]+ Running gqview &

当您要关闭终端窗口时,这一点就很重要,因为关闭终端将导致所有在其中运行的任务都将被中止,在此例中,如果您关闭了终端,由这个终端开启的 GQview 程序也将被关闭。

但如何将前台运行的一个程序放到后台去?没问题:

gqview



[2]+ Stopped gqview

bg

[2]+ gqview &

组合键 将挂起终端中正在运行的程序,然后您就可以用 bg 命令将其放到后台去执行。

请注意,在后台运行图形应用程序有时候是有用处的,这样可以在终端下显示这个程序的出错信息,虽然这对您可能没有直接的帮助,当如果碰到了麻烦,向别人询问时,这些出错提示就有用武之地了。

一些图形程序,很可能还处在测试期(Beta),尽管在后台执行,也会在终端中输出一些信息。如果您对此不满,可以用下面命令:

command &>/dev/null &

这不仅将程序送到后台执行,还将其输出发到'/dev/null'文件。'/dev/null'是系统的"碎纸机" (shredder),所有送到那里的信息都将消失殆尽。

命令的替换

命令替换(Command substitution)是一项很实用的功能。我们假设,您想看看 XFree86 文档中的 'README.mouse'文件,但您不知道这个文件的位置。但您是位机灵的用户,已经听说了'locate'命令,也安装了'slocate'包,您就可以用:

locate README.mouse

发现那个文件在'/usr/X11R6/lib/X11/doc'。现在您就可以在终端里用'less'或在文件管理器中进入那个目录然后读取文件。而命令替换可以给您带来一些便捷:

less $(locate README.mouse)

一步到位。命令'locate README.mouse'的输出(= /usr/X11R6/lib/X11/doc/README.mouse)作为'less'的参数,然后就可以显示文件内容了。

这种机制的语法是:

command1 $(command2)

除了'$( )',您还可以用后引号(backquote):

command1 `command2`

这样虽然可以减少输入,但可读性差,而且很容易就和没有替换功能的一般单引号混淆。我更欣赏前一种方法,但这最终起决于您。

这里有另外一个例子。我们假设,您打算结束一个名为'rob'的程序。您先得用命令'pidof'找出相应的进程号(Process ID),然后以这个 PID 为参数,运行'kill'命令,这样就可以结束'rob'程序。除了用:

pidof rob

567

kill 567

您还可以试试:

kill `pidof rob`

怎么样,效率有所提高吧?

在下一篇中,我将接着介绍 shell 的另外两种实用的机制:文件名匹配、输出重定向。





引用
第四篇:文件名匹配/输出重定向


引用
文件名匹配

文件名匹配使得您不必一一写出名称,就可以指定多个文件。您将用到一些特殊的字符,称为通配符(wildcards)。

假设您想用'rm'命令删除目录下所有以字符串'.bak'结尾的文件。除了在'rm'后跟上所有文件名作为参数,您还可以用通配符'*':

rm *.bak

'*'可匹配一个或多个字符。在本例中,您告诉 shell 将命令'rm'的参数扩展到"所有以'*.bak'结尾的文件",shell 就将扩展后的参数告诉'rm'命令。

您将看到,shell 在命令执行前,就将读取并解释命令行。正是因为这个,您才可以将通配符用于 shell 命令的参数中。

让我们更进一步地来认识通配符'*'。假定您有个目录,其中含文件'124.bak'、'346.bak'及'583.bak'。您想只保留文件'583.bak',可以用:

rm *4*.bak

shell 就将'*4*.bak'扩展成"所有含'4'并以'.bak'结尾的字符串"。

注意到 rm 4*.bak 无法工作,因为这匹配的是以'4'开头的文件。由于目录中没有这样的文件,shell 将这个模式扩展为空的字符串,故'rm'将返回出错信息:

rm: cannot remove `4*.bak': No such file or directory

如果您想保留文件'345.bak',而删除'124.bak'和'583.bak'。这看起来有些难度,因为被删文件的名称除了后缀其他都不同。但幸运的是,您可以用不含有来指定文件:

rm *[!6].bak

这将被读为:除了以'6.bak'结尾的文件,删除其他所有以'.bak'结尾的文件。您必须将取反号(negation sign)与取反字符(这里是 6)放到括号中,不然的话,shell 会将惊叹号(exclamation mark)解释成历史记录替换的开始(the beginning of a history substitution)。取反号在本篇介绍的所有匹配模式中都有效。

请注意:通配符'*'与取反号连用,很容易产生问题。猜猜

rm *[!6]*.bak

表示什么?这个命令将删除所有文件,甚至包括名称中包含'6'的文件。如果您将通配符'*'放到了取反号前面和后面,实际上取反号将失效,因为 shell 将其解释为"所有名称中任何位置都不含该字符的文件"。在我们的例子里,只有文件'666.bak'不符合该模式。

第二个通配符是问号(question mark):'?'。在匹配时,一个问号只能代表一个字符。为了示范其用途,我们在上例的假设中添加两个新文件:'311.bak~'和'some.text'。现在,列出所有在点号后有四个字符的文件:

ls *.????

问号通配符能够有效地避免上面提到的'取反号陷阱'(negation trap):

rm *[!4]?.*

将扩展成"所有除了点号前倒数第二个字符为'4'的文件",也就是只保留文件'346.bak'。

您可能会问,有没有其他匹配方式?到目前为止,您只看到了在指定位置匹配唯一字符的方法。但其实您也可以这样:

ls [13]*

将列出所有以字符'1'或'3'开头的文件;在我们的例子中,文件'124.bak'、'311.bak~'和'346.bak'匹配。注意到您必须用中括号将匹配的模式括起来,否则模式只匹配以字符串'13'开头的文件。

接下来,您将高兴地看到还可以定义匹配的范围:

ls *[3-8]?.*

将列出所有点号前倒数第二个字符落在'3'到'8'范围的文件。在我们的例子中,匹配的文件是'346.bak'和'583.bak'。

引用 shell 的特殊字符

但是,上面的那些机制存在一个缺点:shell 总在命令执行前,试着进行扩展。有时候,会变得很棘手:

l 文件名包含特殊字符。假设您在那个目录中还有一个名为'!56.bak'的文件。下面试图进行模式匹配:

rm !*

rm

rm: too few arguments

shell 将'!*'解释成历史记录的替换(加入前一个命令的所有参数),而不是匹配方式。

l 命令本身带特殊字符作参数。一些 Linux 下的命令行工具,比如 (e)grep、sed、awk、find 及 locate ,都使用自己的正则表达式(regular expressions)。这些表达式与模式匹配看起来惊人地相似,但在某些地方又有所不同。

但为了使这些特殊命令生效,shell 就不能先将其当作模式匹配来解释:

find . -name [1-9]* -print

find: paths must precede expression

应该是:

find . -name '[1-9]*' -print

./346.bak

./124.bak

./583.bak

./311.bak~

您可以通过反斜线(back slash)来引用特殊字符,比如 ! 、$ 、? 或空格:

ls \!*

!56.bak

或者用(单)引号:

ls '!'*

!56.bak

请注意,要看清楚引号应该放在什么位置。命令 ls '!*' 将查找名为'!*'的文件,这是由于通配符也在引号间,所以只能依照字面来解释。

输出重定向

Unix 的理念是汇集许多小程序,每个东东都有特殊的专长。复杂的任务不是由大型软件完成,而是运用 shell 的机制,组合许多小程序共同完成。重定向就在其中发挥着重要的作用。

在多个命令间重定向

这要通过管道(pipe),由管道符号|来标识。语法是:

command1 | command2 | command3 等等

这种格式您一定已经见到过了。管道经常将一个程序的输出送到'more'或'less'来阅读。

ls -l | less

其中,第一个命令提供目录内容,第二个则将其以翻页的方式显示。更复杂的例子如:

rpm -qa | grep ^x | less

第一个命令给出所有已安装的 RPM 包,第二个则将其过滤(filter:'grep'),只剩下以'^x'开头的包,第三个命令则将结果以翻页的方式显示。

重定向至文件

有时,您希望将命令的输出结果保存到文件中,或以文件内容作为命令的参数。这可以通过'>'和'<'来实现。

command > file

将 command 的输出保存到 file 中,这将覆盖 file 中的内容:

ls > dirlist

将当前目录的内容保存到'dirlist'文件。

command < file

将 file 内容作为 command 的输入:

sort < dirlist > sdirlist

将文件'dirlist'的内容送到命令'sort',然后再将排序后的结果送到文件'sdirlist'。当然,您也可以一步到位:

ls | sort > sdirlist

一种特殊的方式是'command 2> file'。这将 command 执行的出错信息送到 file 中。这个您到时候会需要……

另一种*作符是'>>',这将输出添加到已存在的文件中:

echo "string" >> file

将 string 加到文件 file 中。这是不打开文件而完成编辑的好办法!

但是,'<'和'>'*作符都有一个重要的限制:

command < file1 > file1

将删除 file1 的内容,而

command < file1 >> file1

却可以很好地工作,将加工过的 file1 内容加回到文件中。

是不是有点多?;-) 不必惊慌,您完全可以按照自己的速度,一步步地来学习。别忘了,实践是最好的学习方法……

熟知了许多 shell 的机制后, 您可能急着想知道如何来定制环境。在后面的两篇中,您将得到这方面的启示。在最后一篇中,还有一段如何处理 shell 出错信息的常见问答(FAQ),及一些配置技巧。
级别: 光盘初级
发帖
301
飞翔币
335
威望
48
飞扬币
1311
信誉值
0
只看该作者 32 发表于: 2007-05-05
引用
第五篇:bash 配置文件/提示符/改变 $PATH


引用
bash 配置文件

在您的 home 目录下,运行

ls .bash*

您将看到这些文件:

l .bash_history :记录了您以前输入的命令,

l .bash_logout :当您退出 shell 时,要执行的命令,

l .bash_profile :当您登入 shell 时,要执行的命令,

l .bashrc :每次打开新的 shell 时,要执行的命令。

请注意后两个的区别:'.bash_profile'只在会话开始时被读取一次,而'.bashrc'则每次打开新的终端(如新的 xterm 窗口)时,都要被读取。按照传统,您得将定义的变量,如 PATH ,放到'.bash_profile'中,而象 aliases(别名)和函数之类,则放在'.bashrc'。但由于'.bash_profile'经常被设置成先读取'.bashrc'的内容,您如果图省事的话,就把所有配置都放进'.bashrc'。

这些文件是每一位用户的设置。系统级的设置存储在'/etc/profile'、'/etc/bashrc'及目录'/etc/profile.d'下的文件中。但您得习惯用各自的配置文件:编辑不需要'root'权限,还可以使您的设置更有个性。当系统级与用户级的设置发生冲突时,将采用用户的设置。

读取'.bashrc'的内容,您如果要省点事的话,就把您所有的配置都放进'.bashrc'。

上面的这些文件是每位用户的设置,系统级的设置存储在'/etc/profile'、'/etc/bashrc'及目录'/etc/profile.d'下的文件中。您最好习惯使用各自的配置文件:编辑不需要'root'权限,还可以使您的设置更具个性。当系统级与用户级的设置发生冲突时,将优先采用用户的设置。

提示符

每次当您打开一个控制台(console)或 xterm 时,最先看到的就是提示符(prompt),类似于:

account@hostname ~ $

在默认设置下,提示符将显示您的用户名、主机名(默认是'localhost')、当前所在目录(在 Unix 中,'~'表示您的 home 目录)。

按照传统,最后一个字符可以标识您是普通用户($),还是'root'(#)。

您可以通过 $PS1 变量来设置提示符。命令

echo $PS1

将显示当前的设定。其中可用字符的含义在 man bash 的'PROMPTING'部分有说明。

如何才能完成理想的设置呢?对于健忘的初学者来讲,默认设定有些不友好,因为提示符只显示当前目录的最后一部分。如果您看到象这样的提示符

tom@localhost bin $

您的当前目录可能是'/bin'、'/usr/bin'、'/usr/local/bin'及'/usr/X11R6/bin'。当然,您可以用

pwd (输出当前目录,print working directory)

能不能叫 shell 自动告诉您当前目录呢?

当然可以。这里我将提到的设定,包括提示符,大都包含在文件'/etc/bashrc'中。您可以通过编辑各自 home 目录下的'.bash_profile'和'.bashrc'来改变设置。

在 man bash 中的'PROMPTING'部分,对这些参数(parameter)有详细说明。您可以加入一些小玩意,如不同格式的当前时间,命令的历史记录号,甚至不同的颜色。

在'~/.bashrc'中,我喜欢的设定是:

PS1="\[\033[1m\][\w]\[\033[0m\] "

'root'在'~/.bashrc'中的设定 是:

PS1="\[\033[0;31m\][\w]\[\033[0m\] "

这样我得到的提示符就是:

[/usr/bin]

当用'root'时,变成:

[/usr/bin]

我已经除掉了主机名和用户名,因为我用不着这些。但我首先想一眼就能看出我的身份是普通用户还是'root'。注意到,普通用户的提示符可以是黑底白字,或白底黑字。

要在终端上获得恰当的颜色调配, 您可以编辑下面这个脚本color ,赋予执行权限(chmod +x color),然后再运行。

#!/bin/bash

#

# This file echoes a bunch of color codes to the

# terminal to demonstrate what's available. Each

# line is the color code of one forground color,

# out of 17 (default + 16 escapes), followed by a

# test use of that color on all nine background

# colors (default + 8 escapes).

#

T='gYw' # The test text

echo -e "\n 40m 41m 42m 43m\

44m 45m 46m 47m";

for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' \

'1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' \

' 36m' '1;36m' ' 37m' '1;37m';

do FG=${FGs// /}

echo -en " $FGs \033[$FG $T "

for BG in 40m 41m 42m 43m 44m 45m 46m 47m;

do echo -en "$EINS \033[$FG\033[$BG $T \033[0m";

done

echo;

done

echo

一种更适当的设定:

PS1="\u: \w\\$ "

这样,提示符就变成:

user_name: /usr/bin$

您可以通过命令 export 来测试不同的设置(比如,export PS1="\u: \w\\$ ")。如果找到了适合的提示符,就将设置放到您的'.bashrc''中。这样,每次打开控制台或终端窗口时,都会生效。

您甚至可以给提示符设定主题(theme),也就是搭配不同的颜色,使其看起来象很棒的 ol
的 C64 提示符。如果您对此感兴趣,可以看一下
Bashish(http://hem.passagen.se/arnognulf/index2.html)。

改变 $PATH

'$PATH'与'$PS1'一样,也是环境变量。输入

set

将列出所有当前定义的环境变量。

您看到的这些环境变量在 shell 的配置文件中定义,可能是用户自己的配置文件,也可能是由'root'通过'/etc'下面的系统级文件定义的。如果您使用 X ,更多的一些变量将由 X 、您的窗口管理器或桌面环境的启动文件配置。

如果对这些设置不很清楚,您暂时最好不要随便改动。了解如何改变 $PATH 变量很有用,因为这个变量决定了 shell 将到哪些目录中寻找命令或程序。如果要执行的命令的目录在 $PATH 中,您就不必输入这个命令的完整路径,直接输入命令就可以了。一些第三方软件没有将可执行文件放到 Linux 的标准目录中。因此,将这些非标准的安装目录添加到 $PATH 是一种解决的办法。此外,您也将看到如何处理一般的环境变量。

首先,作为惯例,所有环境变量名都是大写。由于 Linux 区分大小写,这点您要留意。当然,您可以自己定义一些变量,如'$path'、'$pAtH',但 shell 不会理睬这些变量。

第二点是变量名有时候以'$'开头,但有时又不是。当设置一个变量时,您直接用名称,而不需要加'$':

PATH=/usr/bin:/bin:/usr/local/bin:/usr/X11R6/bin

要获取变量值的话,就要在变量名前加'$':

echo $PATH

/usr/bin:/bin:/usr/local/bin:/usr/X11R6/bin

否则的话,变量名就会被当作普通文本了:

echo PATH

PATH

处理 $PATH 变量要注意的第三点是:您不能只替换变量,而是要将新的字符串添加到原来的值中。在大多数情况下,您不能用'PATH=/some/directory',因为这将删除 $PATH 中其他的所有目录,这样您在该终端运行程序时,就不得不给出完整路径。所以,只能作添加:

PATH=$PATH:/some/directory

这样,PATH 被设成当前的值(以 $PATH 来表示)+新添的目录。

到目前为止,您只为当前终端设置了新的 $PATH 变量。如果您打开一个新的终端,运行 echo $PATH ,将返回旧的 $PATH 值,而看不到您刚才添加的新目录。因为您先前定义的是一个局部环境变量(仅限于当前的终端)。

要定义一个全局变量,使在以后打开的终端中生效,您需要将局部变量输出(export),可以用'export'命令:

export PATH=$PATH:/some/directory

现在如果您打开一个新的终端,输入 echo $PATH ,也能看到新设置的 $PATH 了。请注意,命令'export'只能改变当前终端及以后运行的终端里的变量。对于已经运行的终端没有作用。

为了将目录永久添加到您的 $PATH ,只要将'export'的那行添加到您的'.bash_profile'文件中。

请不要在'.bashrc'中设置 PATH ,否则会导致 PATH 中目录的意外增长。您每次打开一个新的 shell ,'.bashrc'都会作用。所以如果在该文件中添加目录,您每次打开一个终端,目录又会被添加。这将导致 PATH 变量由于目录复制,不断地增长。





引用
第六篇:命令的别名、Shell 函数/从这里出发/Shell 常见问题


引用
命令的别名、Shell 函数

记住所有的命令及各自带的可选项,然后每次一一输入,这确实有点枯燥。但幸运的是,您可以为常用命令定义快捷方式。这些快捷方式可以用较简单的命令别名(alias),或复杂一些的 shell 函数的语法来定义。

命令的别名

例如,我用下面的命令来上传 MUO 中的文件:

rsync -e ssh -z -t -r -vv --progress /home/tom/web/muo/rsmuo/docs muo:/www/mandrakeuser/docs

显然,如果每次都要逐一输入,那我早晚会变成木头。因此我在'~/.bashrc'中定义了别名:

alias upmuo='rsync -e ssh -z -t -r -vv --progress /home/tom/web/muo/rsmuo/docs muo:/www/mandrakeuser/docs'

现在,我只要输入 upmuo 就可以完成上传任务了。

定义别名的语法是:

alias shortcut='command'

命令中有空格的话 ,就需要用引号(如在命令与可选项间就有空格)。请注意,您可以用单引号或双引号,但他们是有区别的。

单引号将剥夺其中的所有字符的特殊含义,而双引号中的'$'(参数替换)和'`'(命令替换)是例外。这意味着,如果您想在别名中应用变量或命令的替换,就得用双引号。看一下上面的例子,我在'.bashrc'中定义了一个称为 MUOHOME 的变量:

export MUOHOME=$HOME/web/muo/rsmuo/docs

要在上面的别名中用上这个变量,我就必须用双引号:

alias upmuo="rsync -e ssh -z -t -r -vv --progress $MUOHOME muo:/www/mandrakeuser/docs"

否则,别名将查找一个名为'$MUOHOME'的目录或文件。

您可以用'alias'在命令行快速地创建别名,或将命令放到各自的'~/.bashrc',或放到系统级的'/etc/profile.d/alias.sh'中(而在 Mandrake Linux 8 以前的版本里,用的是'/etc/bashrc')。要删除一个别名,只要输入:unalias alias 。运行 alias 将列出您系统中所有定义的别名。

如果看一下'~/.bashrc'和'/etc/profile.d/alias.sh',您会发现系统已经定义了一些别名。您可以为同一个命令定义多个别名。当然,您得先确认别名与其他程序名不同,比如象 alias rm='ls -l' 这样的就不能工作。您可以在命令行输入这些快捷方式,测试一下。如果 shell 找不到相同名称的命令,那您就可以将其用作别名了。

以下别名可能有用(不要忘了引号!) :

l alias rpmq='rpm -qa | grep' :现在 rpmq string 就将列出所有名称中含有 string 的已安装 RPM 包,

l alias ls='ls -ho --color | more' :ls 将以彩色分页方式列出文件,文件大小以 KB为单位,

l alias use='du --max-depth=1 | sort -n | more' :use 将子目录按大小排好,并以分页方式列出,

目录的别名也可以是可移动的介质:alias dlm='/mnt/cdrom/RedHat/RPMS/' 。

提示:将有相似功能的别名以相同字母开头,比如将所有目录的别名以'd'作开头,这样有助于记忆。

我相信,您将会用到这些功能。

Shell 函数

写 shell 函数涉及到了 shell 脚本,这超出了我们讨论的范围(也不在我的掌握范围之内 ;-))。事实上,shell 函数属于 shell 脚本,但可以在同一 shell 下被预加载(preload)和执行(而一般的 shell 脚本至少要打开一个 sub-shell)。

通过 shell 函数,您可以做很多 aliases 无法完成的事情。下面就是一个例子:

function apros() { apropos $1 | egrep -v '(3|\(n\)'; }

定义了一个新命令,称为'apros'。apros name 将先执行'apropos name'(即在 man page 中搜索命令),然后将得到的输出送到管道(|),接着用'egrep'过滤,排除第'3'和第'n'章节的 man page ,这个命令可能没什么大用处,但可以整理'apropos'命令的输出。

函数允许您在函数内部任何位置,使用运行时的参数。而别名,则只允许在命令行尾放一个参数(比如前面的别名'rpmq')。

'$1'就是位置参数(positional parameter),表示函数第一个参数的位置标识符。依此类推,还有'$2'等。

function apros() { apropos $1 | egrep -v "\($2"; }

如果您这样运行'apros'命令:

apros name man_section_number

这个命令将搜索标题中含 name 的 man pages ,但排除 man_section_number 部分:

apros menu 3

将搜索标题含'menu'的 man page ,但排除第三章节(关于编程的)。注意到您得引用(quote) 两次,而且还用到了双引号:

l 您必须引用'egrep'的搜索模式,这样可以不至于被 shell 误解。

l 您必须用双引号,这样第二个参数才能被正确解释。

l 您必须引用圆括号,这样使'egrep'按字面意思对待对待参数。

是不是有点意思?;-)

shell 函数的处理类似于别名:将其放到您的'.bashrc'文件,这样就能永久生效了。

从这里出发

我们谈到的只是 shell 的一个开头。掌握了shell 脚本,您就可以做很多事情,比如将任务自动化,纠正别人脚本中的错误,按照您的习惯定制 Linux 系统。如果您打算学习某种复杂的编程语言,那 shell 脚本也是一个很好的开端,因为基本概念都是类似的。

BASH Programming - Introduction HOW-TO:

http://www.ibiblio.org/mdw/HOWTO/Ba...ntro-HOWTO.html

将更深入这些主题,并且将把您带到 shell 编程的世界。然后可以继续阅读我强烈推荐的 Advanced Bash-Scripting Guide(http://www.ibiblio.org/mdw/LDP/abs/....html),作者是 Mendel Cooper 。

如果您偏好纸书,那我推荐 S. Veeraraghavan 的《Teach Yourself Shell Programming》,Sams 出版社。我倒觉得 O'Reilly 公司由 Newham/Rosenblatt 写的《Learning the bash Shell》,不过尔尔,但这可能只有我这么看 ;-) 。

除了这些,就是练习,练习,再练习。阅读其他人写的 shell 脚本,看看他们在做什么,怎么做,为什么那样做。

请不要用'root'测试您的脚本。Have fun 。

级别: 光盘初级
发帖
301
飞翔币
335
威望
48
飞扬币
1311
信誉值
0
只看该作者 33 发表于: 2007-05-05
引用
解析LINUX系统目录


引用
  根文件系统一般应该比较小,因为包括严格的文件和一个小的不经常改变的文件系统不容易损坏。损坏的根文件系统一般意味着除非用特定的方法(例如从软盘)系统无法引导,所以不应该冒这个险。
  根目录一般不含任何文件,除了可能的标准的系统引导映象,通常叫/vmlinuz 。所有其他文件在根文件系统的子目录中。
  /bin
  引导启动所需的命令或普通用户可能用的命令(可能在引导启动后)。
  /sbin
  类似/bin
,但不给普通用户使用,虽然如果必要且允许时可以使用。
  /etc
  特定机器的配置文件。
  /root
  root用户的家目录。
  /lib
  根文件系统上的程序所需的共享库。
  /lib/modules
  核心可加载模块,特别是那些恢复损坏系统时引导所需的(例如网络和文件系统驱动)。
  /dev
  设备文件。
  /tmp
  临时文件。引导启动后运行的程序应该使用/var/tmp ,而不是/tmp ,因为前者可能在一个拥有更多空间的磁盘上。
  /boot
  引导加载器(bootstrap
loader)使用的文件,如LILO。核心映象也经常在这里,而不是在根目录。如果有许多核心映象,这个目录可能变得很大,这时可能使用单独的文件系统更好。
  /mnt
  系统管理员临时mount的安装点。程序并不自动支持安装到/mnt 。 /mnt 可以分为子目录(例如/mnt/dosa
可能是使用MSDOS文件系统的软驱,而/mnt/exta 可能是使用ext2文件系统的软驱)。
  /proc , /usr , /var ,
/home
  其他文件系统的安装点。
  /etc
目录包含很多文件。下面说明其中的一些。其他的你应该知道它们属于哪个程序,并阅读该程序的man页。许多网络配置文件也在/etc 中,它们在《网络管理指南》中说明。
  /etc/rc or /etc/rc.d or /etc/rc?.d
  启动、或改变运行级时运行的scripts或scripts的目录,更详细的信息见关于init 的章。
  /etc/passwd
  用户数据库,其中的域给出了用户名、真实姓名、家目录、加密的口令和用户的其他信息。格式见passwd 的man页。
  /etc/fdprm
  软盘参数表。说明不同的软盘格式。用setfdprm 设置。更多的信息见setfdprm 的man页。
  /etc/fstab
  启动时mount -a命令(在/etc/rc 或等效的启动文件中)自动mount的文件系统列表。 Linux下,也包括用swapon
-a启用的swap区的信息。见4.8.5节和mount 的man页。
  /etc/group
  类似/etc/passwd
,但说明的不是用户而是组。见group 的man页。
  /etc/inittab
  init 的配置文件。
  /etc/issue
  getty 在登录提示符前的输出信息。通常包括系统的一段短说明或欢迎信息。内容由系统管理员确定。
/etc/magic
  file
的配置文件。包含不同文件格式的说明,file 基于它猜测文件类型。见magic 和file 的man页。
  /etc/motd
  Message Of The Day,成功登录后自动输出。内容由系统管理员确定。经常用于通告信息,如计划关机时间的警告。
  /etc/mtab
  当前安装的文件系统列表。由scripts初始化,并由mount
命令自动更新。需要一个当前安装的文件系统的列表时使用,例如df 命令。
  /etc/shadow
  在安装了影子口令软件的系统上的影子口令文件。影子口令文件将/etc/passwd 文件中的加密口令移动到/etc/shadow
中,而后者只对root可读。这使破译口令更困难。
  /etc/login.defs
  login 命令的配置文件。
  /etc/printcap
  类似/etc/termcap ,但针对打印机。语法不同。
  /etc/profile ,
/etc/csh.login , /etc/csh.cshrc
  登录或启动时Bourne或C
shells执行的文件。这允许系统管理员为所有用户建立全局缺省环境。各shell见man页。
  /etc/securetty
  确认安全终端,即哪个终端允许root登录。一般只列出虚拟控制台,这样就不可能(至少很困难)通过modem或网络闯入系统并得到超级用户特权。
  /etc/shells
  列出可信任的shell。chsh
命令允许用户在本文件指定范围内改变登录shell。提供一台机器FTP服务的服务进程ftpd 检查用户shell是否列在 /etc/shells
文件中,如果不是将不允许该用户登录。
  /etc/termcap
  终端性能数据库。说明不同的终端用什么"转义序列"控制。写程序时不直接输出转义序列(这样只能工作于特定品牌的终端),而是从/etc/termcap
中查找要做的工作的正确序列。这样,多数的程序可以在多数终端上运行。见termcap 、 curs_termcap 和terminfo 的man页。
  /dev目录
  /dev 目录包括所有设备的设备文件。设备文件用特定的约定命名,这在设备列表中说明
(见[Anv])。设备文件在安装是产生,以后可以用 /dev/MAKEDEV 描述。 /dev/MAKEDEV.local
是系统管理员为本地设备文件(或连接)写的描述文稿 (即如一些非标准设备驱动不是标准MAKEDEV 的一部分)。
  /usr
文件系统经常很大,因为所有程序安装在这里。 /usr 里的所有文件一般来自Linux distribution;本地安装的程序和其他东西在/usr/local
下。这样可能在升级新版系统或新distribution时无须重新安装全部程序。 /usr
的有些子目录在下面列出(一些不太重要的目录省略了,更多信息见FSSTND)。
usr/X11R6
  X
Window系统的所有文件。为简化X的开发和安装,X的文件没有集成到系统中。 X自己在/usr/X11R6 下类似/usr 。
  /usr/X386
  类似/usr/X11R6 ,但是给X11 Release 5的。
  /usr/bin
  几乎所有用户命令。有些命令在/bin
或/usr/local/bin 中。
  /usr/sbin
  根文件系统不必要的系统管理命令,例如多数服务程序。
  /usr/man , /usr/info , /usr/doc
  手册页、GNU信息文档和各种其他文档文件。
  /usr/include
  C编程语言的头文件。为了一致性这实际上应该在/usr/lib 下,但传统上支持这个名字。
  /usr/lib
  程序或子系统的不变的数据文件,包括一些site-wide配置文件。名字lib来源于库(library);
编程的原始库存在/usr/lib 里。
  /usr/local
  本地安装的软件和其他文件放在这里。
  /var/catman
  当要求格式化时的man页的cache。man页的源文件一般存在/usr/man/man*
中;有些man页可能有预格式化的版本,存在/usr/man/cat* 中。而其他的man页在第一次看时需要格式化,格式化完的版本存在/var/man
中,这样其他人再看相同的页时就无须等待格式化了。 (/var/catman 经常被清除,就象清除临时目录一样。)
  /var/lib
  系统正常运行时要改变的文件。
  /var/local
  /usr/local
中安装的程序的可变数据(即系统管理员安装的程序)。注意,如果必要,即使本地安装的程序也会使用其他/var 目录,例如/var/lock 。
  /var/lock
  锁定文件。许多程序遵循在/var/lock
中产生一个锁定文件的约定,以支持他们正在使用某个特定的设备或文件。其他程序注意到这个锁定文件,将不试图使用这个设备或文件。
  /var/log
  各种程序的Log文件,特别是login (/var/log/wtmp log所有到系统的登录和注销) 和syslog
(/var/log/messages 里存储所有核心和系统程序信息。 /var/log 里的文件经常不确定地增长,应该定期清除。
  /var/run
  保存到下次引导前有效的关于系统的信息文件。例如, /var/run/utmp 包含当前登录的用户的信息。
  /var/spool
  mail, news, 打印队列和其他队列工作的目录。每个不同的spool在/var/spool
下有自己的子目录,例如,用户的邮箱在/var/spool/mail 中。
  /var/tmp
  比/tmp
允许的大或需要存在较长时间的临时文件。 (虽然系统管理员可能不允许/var/tmp 有很旧的文件。)
  /proc
文件系统是一个假的文件系统。它不存在在磁盘某个磁盘上。而是由核心在内存中产生。用于提供关于系统的信息(originally about processes,
hence the name)。下面说明一些最重要的文件和目录。 /proc 文件系统在proc man页中有更详细的说明。
/proc/1
  关于进程1的信息目录。每个进程在/proc 下有一个名为其进程号的目录。
  /proc/cpuinfo
  处理器信息,如类型、制造商、型号和性能。
  /proc/devices
  当前运行的核心配置的设备驱动的列表。
  /proc/dma
  显示当前使用的DMA通道。
  /proc/filesystems
  核心配置的文件系统。
  /proc/interrupts
  显示使用的中断,and how many of each there have been.
  /proc/ioports
  当前使用的I/O端口。
  /proc/kcore
  系统物理内存映象。与物理内存大小完全一样,但不实际占用这么多内存;it is generated on the fly as programs
access it. (记住:除非你把它拷贝到什么地方,/proc 下没有任何东西占用任何磁盘空间。)
  /proc/kmsg
  核心输出的消息。也被送到syslog 。
  /proc/ksyms
  核心符号表。
  /proc/loadavg
  系统"平均负载";3个没有意义的指示器指出系统当前的工作量。
  /proc/meminfo
  存储器使用信息,包括物理内存和swap。
  /proc/modules
  当前加载了哪些核心模块。
  /proc/net
  网络协议状态信息。
  /proc/self
  到查看/proc
的程序的进程目录的符号连接。当2个进程查看/proc 时,是不同的连接。这主要便于程序得到它自己的进程目录。
  /proc/stat
  系统的不同状态,such as the number of page faults since the system was booted.
  /proc/uptime
  系统启动的时间长度。
  /proc/version
  核心版本。
级别: 光盘初级
发帖
301
飞翔币
335
威望
48
飞扬币
1311
信誉值
0
只看该作者 34 发表于: 2007-05-05
引用
Linux的压缩文件剖析


引用
  对于刚刚接触Linux的人来说,一定会给Linux下一大堆各式各样的文件名给搞晕。别个不说,单单就压缩文件为例,我们知道在Windows下最常见的压缩文件就只有两种,一是,zip,另一个是.rap。可是 Linux就不同了,它有 .gz、.tar.gz、tgz、bz2、.Z、.tar等众多的压缩文件名,此外windows下的.zip和.rar也可以在Linux下使用,不过在Linux使用.zip和.rar的人就太少了。本文就来对这些常见的压缩文件进行一番小结,希望你下次遇到这些文件时不至于被搞晕

   在具体总结各类压缩文件之前呢,首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录什么的变成一个总的文件,压缩则是将一个大的文件通过一些压缩算法变成一个小文件。为什么要区分这两个概念呢?其实这源于Linux中的很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你就得先借助另它的工具将这一大堆文件先打成一个包,然后再就原来的压缩程序进行压缩。

   Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进行压缩了,所以首先就来讲讲tar命令的基本用法:

   tar命令的选项有很多(用man tar可以查看到),但常用的就那么几个选项,下面来举例说明一下:

   # tar -cf all.tar *.jpg
   这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。

   # tar -rf all.tar *.gif
   这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
# tar -uf all.tar logo.gif
   这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。

   # tar -tf all.tar
   这条命令是列出all.tar包中所有文件,-t是列出文件的意思

   # tar -xf all.tar
   这条命令是解出all.tar包中所有文件,-t是解开的意思

   以上就是tar的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压文件,tar提供了一种特殊的功能。这就是tar可以在打包或解包的同时调用其它的压缩程序,比如调用gzip、bzip2等。

   1) tar调用gzip

   gzip是GNU组织开发的一个压缩程序,.gz结尾的文件就是gzip压缩的结果。与gzip相对的解压程序是gunzip。tar中使用-z这个参数来调用gzip。下面来举例说明一下:

   # tar -czf all.tar.gz *.jpg
   这条命令是将所有.jpg的文件打成一个tar包,并且将其用gzip压缩,生成一个gzip压缩过的包,包名为all.tar.gz

   # tar -xzf all.tar.gz
   这条命令是将上面产生的包解开。

   2) tar调用bzip2

   bzip2是一个压缩能力更强的压缩程序,.bz2结尾的文件就是bzip2压缩的结果。与bzip2相对的解压程序是bunzip2。tar中使用-j这个参数来调用gzip。下面来举例说明一下:

   # tar -cjf all.tar.bz2 *.jpg
   这条命令是将所有.jpg的文件打成一个tar包,并且将其用bzip2压缩,生成一个bzip2压缩过的包,包名为all.tar.bz2

   # tar -xjf all.tar.bz2
   这条命令是将上面产生的包解开。
3)tar调用compress

   compress也是一个压缩程序,但是好象使用compress的人不如gzip和bzip2的人多。.Z结尾的文件就是bzip2压缩的结果。与 compress相对的解压程序是uncompress。tar中使用-Z这个参数来调用gzip。下面来举例说明一下:

   # tar -cZf all.tar.Z *.jpg
   这条命令是将所有.jpg的文件打成一个tar包,并且将其用compress压缩,生成一个uncompress压缩过的包,包名为all.tar.Z

   # tar -xZf all.tar.Z
   这条命令是将上面产生的包解开

   有了上面的知识,你应该可以解开多种压缩文件了,下面对于tar系列的压缩文件作一个小结:

   1)对于.tar结尾的文件

   tar -xf all.tar

   2)对于.gz结尾的文件

   gzip -d all.gz
   gunzip all.gz

   3)对于.tgz或.tar.gz结尾的文件

   tar -xzf all.tar.gz
   tar -xzf all.tgz

   4)对于.bz2结尾的文件

   bzip2 -d all.bz2
   bunzip2 all.bz2

   5)对于tar.bz2结尾的文件

   tar -xjf all.tar.bz2

   6)对于.Z结尾的文件

   uncompress all.Z

   7)对于.tar.Z结尾的文件

   tar -xZf all.tar.z

   另外对于Window下的常见压缩文件.zip和.rar,Linux也有相应的方法来解压它们:

   1)对于.zip

   linux下提供了zip和unzip程序,zip是压缩程序,unzip是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:

   # zip all.zip *.jpg
   这条命令是将所有.jpg的文件压缩成一个zip包
# unzip all.zip
   这条命令是将all.zip中的所有文件解压出来

   2)对于.rar

   要在linux下处理.rar文件,需要安装RAR for Linux,可以从网上下载,但要记住,RAR for Linux
不是免费的;可从http://www.rarsoft.com/download.htm下载RAR for Linux 3.2.0,然后安装:

   # tar -xzpvf rarlinux-3.2.0.tar.gz
   # cd rar
   # make

   这样就安装好了,安装后就有了rar和unrar这两个程序,rar是压缩程序,unrar是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:

   # rar a all *.jpg
   这条命令是将所有.jpg的文件压缩成一个rar包,名为all.rar,该程序会将.rar 扩展名将自动附加到包名后。

   # unrar e all.rar
   这条命令是将all.rar中的所有文件解压出来

  到此为至,我们已经介绍过linux下的tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、 zip、unzip、rar、unrar等程式,你应该已经能够使用它们对.tar、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、. Z、.tar.Z、.zip、.rar这10种压缩文件进行解压了,以后应该不需要为下载了一个软件而不知道如何在Linux下解开而烦恼了。而且以上方法对于Unix也基本有效。

  本文介绍了linux下的压缩程式tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、zip、 unzip、rar、unrar等程式,以及如何使用它们对.tar、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、.Z、. tar.Z、.zip、.rar这10种压缩文件进行操作。
级别: 光盘初级
发帖
301
飞翔币
335
威望
48
飞扬币
1311
信誉值
0
只看该作者 35 发表于: 2007-05-05
引用
Linux之软件安装方法全析


引用

在Windows下安装软件时,只需用鼠标双击软件的安装程序,或者用Zip等解压缩软件解压缩即可安装。在Linux下安装软件对初学者来说,难度高于Windows下软件安装。下面我就详细讲解Linux下如何安装软件。

  先来看看Linux软件扩展名。软件后缀为.rpm最初是Red Hat Linux提供的一种包封装格式,现在许多Linux发行版本都使用;后缀为.deb是Debain Linux提供的一种包封装格式;后缀为.tar.gz、tar.Z、tar.bz2或.tgz是使用Unix系统打包工具tar打包的;后缀为.bin 的一般是一些商业软件。通过扩展名可以了解软件格式,进而了解软件安装。

  RPM格式软件包的安装

  1.简介
  几乎所有的Linux发行版本都使用某种形式的软件包管理安装、更新和卸载软件。与直接从源代码安装相比,软件包管理易于安装和卸载;易于更新已安装的软件包;易于保护配置文件;易于跟踪已安装文件。

  RPM全称是Red Hat Package Manager(Red Hat包管理器)。RPM本质上就是一个包,包含可以立即在特定机器体系结构上安装和运行的Linux软件。

  大多数Linux RPM软件包的命名有一定的规律,它遵循名称-版本-修正版-类型-MYsoftware-1.2 -1.i386.rpm 。

  2.安装RPM包软件
  # rpm -ivh MYsoftware-1.2 -1.i386.rpm

  RPM命令主要参数:

  -i 安装软件。
  -t 测试安装,不是真的安装。
  -p 显示安装进度。
  -f 忽略任何错误。
  -U 升级安装。
  -v 检测套件是否正确安装。
  

  这些参数可以同时采用。更多的内容可以参考RPM的命令帮助。

  3.卸载软件
  # rpm -e 软件名

  需要说明的是,上面代码中使用的是软件名,而不是软件包名。例如,要卸载software-1.2.-1.i386.rpm这个包时,应执行:
  #rpm -e software

4.强行卸载RPM包
  有时除去一个RPM是不行的,尤其是系统上有别的程序依赖于它的时候。如果执行命令会显示如下错误信息:

  ## rpm -e xsnow
  error: removing these packages would break dependencies:
  /usr/X11R6/bin/xsnow is needed by x-amusements-1.0-1
  

  在这种情况下,可以用--force选项重新安装xsnow:

  ## rpm -ivh --force xsnow-1.41-1.i386.rpm
  xsnow
  

  这里推荐使用工具软件Kleandisk,用它可以安全彻底清理掉不再使用的RPM包。

  5.安装.src.rpm类型的文件
  目前RPM有两种模式,一种是已经过编码的(i386.rpm),一种是未经编码的(src.rpm)。
  rpm --rebuild Filename.src.rpm

  这时系统会建立一个文件Filenamr.rpm,在/usr/src/redflag/RPMS/子目录下,一般是i386,具体情况和Linux发行版本有关。然后执行下面代码即可:
  rpm -ivh /usr/src/regflag/RPMS/i386/Filename.rpm

  使用deb打包的软件安装

  deb是Debian Linux提供的一个包管理器,它与RPM十分类似。但由于RPM出现得早,并且应用广泛,所以在各种版本的Linux中都常见到,而Debian的包管理器dpkg只出现在Debina Linux中。它的优点是不用被严格的依赖性检查所困扰,缺点是只在Debian Linux发行版中才能见到这个包管理工具。

  1. 安装
  # dpkg -i MYsoftware-1.2.-1.deb

  2. 卸载
  # dpkg -e MYsoftware

使用源代码进行软件安装

  和RPM安装方式相比,使用源代码进行软件安装会复杂一些,但是用源代码安装软件是Linux下进行软件安装的重要手段,也是运行Linux的最主要的优势之一。使用源代码安装软件,能按照用户的需要选择定制的安装方式进行安装,而不是仅仅依靠那些在安装包中的预配置的参数选择安装。另外,仍然有一些软件程序只能从源代码处进行安装。

  现在有很多地方都提供源代码包,到底在什么地方获得取决于软件的特殊需要。对于那些使用比较普遍的软件,如Sendmail,可以从商业网站处下载源代码软件包(如http://www.sendmail.org )。一般的软件包,可从开发者的Web站点下载。下面介绍一下安装步骤:

  1.解压数据包
  源代码软件通常以.tar.gz做为扩展名,也有tar.Z、tar.bz2或.tgz为扩展名的。不同扩展名解压缩命令也不相同,如下
引用:
压缩包的类型 命令
.gz gunzip
.Z uncompress
.zip unzip
.bz2 bunzip2

注解:使用这些命令时还要加一些参数,不过在图形界面下可以用专用软件直接解压的,我就是这么用的,比较方便,和windows下一样用就可以了的

  
  2.编译软件
  成功解压缩源代码文件后,进入解包的目录。在安装前阅读Readme文件和Install文件。尽管许多源代码文件包都使用基本相同的命令,但是有时在阅读这些文件时能发现一些重要的区别。例如,有些软件包含一个可以安装的安装脚本程序(.sh)。在安装前阅读这些说明文件,有助于安装成功和节约时间。

  在安装软件以前要成为root用户。实现这一点通常有两种方式:在另一台终端以root用户登录,或者输入“su”,此时系统会提示输入root用户的密码。输入密码以后,就将一直拥有root用户的权限。如果已经是root用户,那就可以进行下一步。

通常的安装方法是从安装包的目录执行以下命令:

  gunzip soft1.tar.gz
  cd soft1
  #. /configure #配置#
  make #调用make#
  make install #安装源代码#
  

  删除安装时产生的临时文件:
  #make clean

  卸载软件:
  #make uninstall

  有些软件包的源代码编译安装后可以用make uninstall命令卸载。如果不提供此功能,则软件的卸载必须手动删除。由于软件可能将文件分散地安装在系统的多个目录中,往往很难把它删除干净,应该在编译前进行配置。

  .bin文件安装

  扩展名为.bin文件是二进制的,它也是源程序经编译后得到的机器语言。有一些软件可以发布为以.bin为后缀的安装包,例如,流媒体播放器 RealONE。如果安装过RealONE的Windows版的话,那么安装RealONE for Linux版本(文件名:r1p1_linux22_libc6_i386_a1.bin)就非常简单了:
  #chmod +x r1p1_linux22_libc6_i386_a1.bin
  ./ r1p1_linux22_libc6_i386_a1.bin

  接下来选择安装方式,有普通安装和高级安装两种。如果不想改动安装目录,就可选择普通安装,整个安装过程几乎和在Windwos下一样。

  .bin文件的卸载,以RealONE for Linux为例,如果采用普通安装方式的话,在用户主目录下会有Real和Realplayer9两个文件夹,把它们删除即可。

  Linux绿色软件

  Linux也有一些绿色软件,不过不是很多。Linux系统提供一种机制:自动响应软件运行进程的要求,为它设定好可以马上运行的环境。这种机制可以是一种接口,或者是中间件。程序员编写的程序可以直接拷贝分发,不用安装,只要点击程序的图标,访问操作系统提供的接口,设定好就可以工作。若要删除软件,直接删除就可以,不用链接文件。这是最简单的软件安装、卸载方式。

  上面介绍了Linux软件安装的方法,对于Linux初学者来说,RPM安装是一个不错的选择。如果想真正掌握Linux系统,源代码安装仍然是Linux下软件安装的重要手段
级别: 光盘初级
发帖
301
飞翔币
335
威望
48
飞扬币
1311
信誉值
0
只看该作者 36 发表于: 2007-05-05
引用
Linux操作系统12则经典应用技巧


引用
1、处理特殊的文件名 假设Linux系统中有一个文件名叫“-ee”,如果我们想对它进行操作,例如要删除它,按照一般的删除方法在命令行中输入rm -ee命令,界面会提示我们是“无效选项”(invalid option),原来由于文件名的第一个字符为“-”,Linux把文件名当作选项了,我们可以使用“--”符号来解决这个问题,输入“rm -- -ee”命令便可顺利删除名为“-ee”的文件。如果是其他特殊字符的话可以在特殊字符前加一个“”符号,或者用双引号把整个文件名括起来。

  2、直接进行Linux的安装工作

  在安装Linux操作系统时,可以利用该系统光盘中的一个名为“loadlin.exe”的软件,将Linux核心直接调入内存,由Linux核心代替当前操作系统来接管计算机,并进入Linux的安装界面。在安装Linux时,我们只要在运行对话框中输入“loadlin E:imagesvmlinuz root=/dev/ram initrd=E:imagesinitrd.img”这个命令就可以直接安装Linux了;其中“E:imagesvmlinuz”为Linux的核心名。

  3、消除Xwindows下的死机现象

  我们可以用两个常用的方法来消除这种现象:第一,用键盘上的复合键“Ctrl+Alt+Backspace”来关闭当前正在运行的任务;第二,首先按住键盘上的“Ctrl+Alt+F2”复合键,让系统切换到另一个操作台,然后登录到系统,再执行“#ps -ax/grep startx”命令,这将会列出你的Xserver的进程标识,接着在命令行中输入如下命令就能消除Xwindows下的死机现象:#kill -9 PID_Number,最后通过“Alt+F1”复合键返回到原来的平台。

  4、快速关闭Linux系统

  最新版本的Linux/UNIX系统借鉴了大型机的技术,采用了抗掉电的日志式文件系统,可以自动跟踪保存用户数据,自动同步刷新文件系统,用户完全可以随手关闭电源,从而达到快速关闭系统的目的。

5、巧妙使用“rm”命令

  我们可以使用带“-r”参数的“rm”命令来删除一个非空目录,例如我们在命令行中输入“rm -r bbb”这样的命令,表示系统将把bbb目录中包含的所有文件和子目录全部删除掉。

  6、巧妙使用“Tab”键

  大家知道在Linux字符界面中输入命令时,有时需要输入很多字符,如果经常这样逐个地输入字符,比较麻烦。假设键入的字符足以确定该目录下一个惟一的文件时,我们只需按键盘上的“Tab”键就可以自动补齐该文件名的剩下部分,例如要把目录/ccc下的文件“ddddddd-1.2.3.tar.gz” 解包时,当我们在命令行中键入到“tar xvfz /ccc/d”时,如果该文件是该目录下惟一以“d”打头的文件的话就可以直接按下“Tab”键,这时命令会被自动补齐为:tar xvfz /ccc/ddddddd-1.2.3.tar.gz ,从而提高了输入效率。

  7、多用鼠标拷贝与粘贴来提高操作速度

  Linux系统安装后,每次启动到字符界面时都会自动运行一个叫“gpm”的程序,该程序运行后就可以用鼠标来拷贝与粘贴了。具体做法是按住鼠标左键拖动使要拷贝的地方突出显示,这时突出显示的区域已经被拷贝,再按鼠标右键拷贝的内容就会被粘贴在光标所在位置了。如果我们在Xwindow下运行 Linux系统,拷贝与粘贴的操作与在Windows 9x系统下一样。

  8、快速启动Linux系统

  在 DOS下,有一种简单快速启动Linux的方法,那就是load Linux。loadlin.exe是DOS下的可执行程序,它可以在纯DOS环境下迅速启动Linux,而且无需重启计算机,通常我们可以在光盘的 “/kernels”目录下找到这个程序。如果不知这个程序被放置于安装盘的何处,可以使用“find -name loadlin*”命令来寻找。找到之后将其复制到DOS分区中,同时还需要复制一份你所使用的Linux内核文件。可以通过Windows直接从光盘复制,也可在Linux环境下使用“mcopy”命令将文件复制到DOS分区;接着再编写一个名为“Linux.bat”的批处理文件,文件内容如下:c: loadlin c:vmlinuz root=/dev/hda1 ro(我们假设loadlin.exe和vmlinuz这两个内核文件都在c盘根目录下,“root”为Linux的根设备,而且Linux处于硬盘第一分区,所以设备名为“/dev/hda1”,“ro”意为readonly)。以后在DOS下要启动Linux时,运行“Linux.bat”就可以了。

9、增加虚拟缓存

  使用命令:mkswap /dev/hda(假设Linux的驱动器是/dev/hda),swapon /dev/hda;要自动启动Swap,可以把新的分区加入到etc/fstab中去,照着原来swap的写就行了。用"free"检查swap的大小, Linux支持最多16个交换分区,每个交换分区最大128M,没有空闲分区的时候,可以用个大文件来建立。

  下面是执行的一系列命令:

  #dd if=/dev/zero of=swapfile bs=1024 count=8192
  #mkswap swapfile 8192
  #sync
  #swapon swapfile

  10、巧妙使用Tab键

  大家知道在Linux字符界面中输入命令时,有时需要输入很多字符,如果经常这样逐个逐个地输入字符,比较烦琐。假设键入的字符足以确定目录下一个唯一的文件时,我们只须按键盘上的Tab 键就可以自动补齐该文件名的剩下部分,例如要把目录/ccc 下的文件ddddddd-1.2.3.tar.gz 解包时,当我们在命令行中键入到tar xvfz /ccc/d时,如果该文件是该目录下唯一以d起头的文件的话就可以直接按下键盘上的Tab键,这时命令会被自动补齐为:tar xvfz /ccc/ddddddd-1.2.3.tar.gz,从而提高了输入效率。

  11、多用拷贝与粘贴来提高操作速度

  Linux系统安装后,每次启动到字符界面时都会自动运行一个叫gpm的程序,该程序运行后就可以用鼠标来拷贝与粘贴了。具体做法是按住鼠标左键拖动让要拷贝的地方突出显示,这时突出显示的区域已经被拷贝, 再按鼠标右键拷贝的内容就会被粘贴在光标所在位置了。如果我们在Xwindow下运行Linux系统,拷贝与粘贴的操作与在普通的Win9x系统下一样。

  12、提高读盘速度

  在Linux下进行一些设置,让Linux在32位输入输出方式和DMA通道方式下进行工作。设置时,在Linux命令界面中输入命令/sbin/hdparm -cl /dev/hda来打开32bit传输方式,输入命令/sbin/hdparm -dl /dev/hda来打开DMA传输方式,接着再输入命令/sbin/hdparm -kl /dev/hda来使硬盘在Reset之后仍然保持上述的设置,通过这些设置,我们就能提高Linux的读盘速度到1倍以上。
级别: 光盘初级
发帖
301
飞翔币
335
威望
48
飞扬币
1311
信誉值
0
只看该作者 37 发表于: 2007-05-05
引用
献给初学Linux的朋友们——Linux入门教程


引用
第1章:系统简介

1.1 系统新特性
1) 采用了最新的Linux 2.4.2版稳定内核,支持更多硬件设备,具有很高的性能指标;
2) 采用了最新的图形系统Xfree86 4.0.3,提供了强大的硬件支持;
3) 引入了全图形安装界面,使得安装更为简单;
4) 增加了国际化语言支持,但最可恨的是支持了Big5,却没有简体中文,真可气;
5) 显著改进了对多CPU计算机的支持,而对于单CPU的计算机器,则提供了高达4G的用户进程空间,同时取消了PCI总线的限制,虚拟内存可高达64G物理内存,支持多用户和集体使用,可谓是企业级的操作系统;
6) 对移动存储设备提供了出色的支持,包括:可"热插拔"USB设备、ZIP驱动器和各种光盘刻录机。Red Hat Linux 7.1主要采用了一个叫做updfstab的程序模块,使得它能对各种移动存储设备的支持,安装和卸载这些设备也是变得很容易了;
7) 加入了一些新的系统配置工具来方便用户管理以及Linux系统使用,例如apacheconf, bindconf, 和printconf等,这些工具能方便的分别让用户通过GUI图形用户界面来配置APACHE,BIND,和打印机。要知道,以往版本中要配置上述的几个服务可是很复杂的。要手动修改不少参数;
8) 另外,还增强了对PCMCIA 设备的支持,这对使用PCMCIA 设备的笔记本电脑的用户来说是非常重要的;
9) 在安全方面做了许多修补工作,安全缺省设置可保证端口关闭,新的防火墙屏蔽可使用用户任意打开或关闭;
10)捆绑了大量最新的应用软件、服务器软件。

1.2 系统硬件需求
Linux发展到今天,已经摆脱了以前的硬件支持不好的窘境,它凭借自己的实力赢得了市场,现在众多硬件厂商都使自己的产品能够在Linux下工作。
1)CPU:Redhat Linux 7.1在安装光盘上内提供了对许多CPU的支持程序,几乎您在安装时不会因为CPU的原因受阻。不过对于一些类似Intel 80386、80486,AMD 486、5x86、K5等的老CPU,系统虽然提供了支持,但未针对这些CPU进行优化,可能导致性能不佳。另外,如果想构建多CPU的系统,那么可选的CPU为:Intel Celeron、Pentium、 Pentium II、Pentium II Xeon、Pentium III、Pentium III Xeon、Pentium Pro、Pentium with MMX。
2)主板:Red Hat Linux 7.1支持所有X86兼容主板
3)内存:建议64M以上,最好128M
4)CDROM:支持所有的IDE接口的光驱,大部分SCSI接口的光驱也能够识别;
5)SCSI卡:支持Adapterc 152x、154x、274x、284x、294x、394、aic7890-based卡,以及大部分流行的SCSI卡。除非你有SCSI接口的存储设备,否则不需要该设备。
6)显卡:
对于Linux系统而言,在字符终端方式下,所有的显卡都支持的。但是如果要让你的显示工作在X Window图形界面下,就需要根据显卡的不同进行相应的设置。在早期,显卡经常困扰着初学者,不过现在显卡的支持变得好了很多。大部分显卡都能够在安装时被识别,自动完成设置。唯一遇到无法识别的常见显卡是Intel的i810,你可以到Intel的网站上找到帮助(http://support.intel.com/support/gr...xinstal.htm)。
7)声卡:
在Red Hat Linux 7.1中提供了更多的声卡支持,就连Creative Labs Sound Blaster Live声卡都可以"即插即用"了。不过一些小牌子的声卡常会出现支持不好的情况。
8)网卡:支持Ne2000兼容网卡,大部分PCI网也支持的较好。
9)其它:
Redhat Linux 7.1支持所有X86兼容主板;支持所有市面上销售的键盘、鼠标、软驱;支持所有品牌的内存,至少需要8M内存,建议配备64M以上。
在Red Hat的网站上有一份详细的硬件兼容性列表,你可以通过它获得更多详细的信息:http://hardware.redhat.com/hcl/genp...gi?pagename=7.1


第2章:安装指南

2.1 安装前的准备
1、收集系统资料:为了能够顺利安装和设置Linux系统,你必须将以下资料记录在案,以备系统安装时使用:
硬盘:数量, 容量和类型;
内存:您的计算机所装内存的数量;
CD-ROM:接口类型(IDE, SCSI);
SCSI卡:卡的型号;
网卡:网卡的型号;
鼠标:鼠标的类型(串口、PS/2、总线型),协议(Microsoft,Logitech, MouseMan, 等等),按键的数量,对串口鼠标还要知道它接在哪个串口;
显示卡:显示卡的型号(或者它用的芯片组), 显示内存的数量;(大多数PCI总线的显卡可以被安装程序自动识别.)
显示器:型号,以及水平和垂直刷新频率的范围。
你可以用Windows的控制面板 -> 设备管理器来获取相应资料,当然还可以查阅相应的随机资料。
2、检查CMOS设置:
Anti vrius:Disable 关闭该选项,防止安装时死机,因为安装程序要写主引导扇。
Swap A,B:Disable 以免启动时可能出现问题。
Boot Sque:CDROM,A,C 让计算机从光盘启动。
Memory Hole:Disable 若未关闭,则LINUX只能识别16M内存。
3、了解LINUX的硬盘分区的命名设计与文件系统知识:
Linux安装至少要两个分区:Linux native(文件)分区和Linux Swap(交换)分区。主分区用作存放LINUX的文件,交换分区为运行LINUX时提供虚拟内存。
交换分区每个16~32M,最多可以有8个,具体可根据内存的多少来决定。一般来说,建一个16M的交换分区就可以了。
文件分区则根据需要和硬盘大小来决定,一般来说不应少于200M。
由于我们接触最多的是DOS操作系统,所以大多数人都习惯于使用类似于\\\\\\'C:\\\\\\'的符号来标识硬盘分区,但这在LINUX却不是这样。Linux的命名设计比其他操作系统更灵活,能表达更多的信息。Linux通过字母和数字的组合来标识硬盘分区,如"hda1",其具体含义是:分区名的前头两个字母表明分区所在设备的类型,例如hd指IDE硬盘,sd(指SCSI硬盘);第三个字母分区在哪个设备,按a,b,c,d的顺序排列,如hda是IDE 1口的主硬盘,则IDE 2口的主硬盘就应该是hdc了;最后的数字在该设备上的分区顺序,前四个分区(主分区或扩展分区)用数字1 到4表示, 逻辑分区从5开始, 例如: hda3表示第一个IDE硬盘上的第三个主分区或扩展分区。
在Linux的文件系统中,不论有几个文件分区,全部集合于一个树形的目录结构中。比如说,你可以将某个分区指定给/(根目录)使用,某个分区指定给/usr目录使用,然而但你进入Linux系统后,你根本感觉不到他们在不同的分区中,你只是感觉都在一棵树上。不过如果你只有一个文件分区,一定要给/(根目录)使用。
4、为硬盘作好安装LINUX的准备:
一般说来,大家电脑上的硬盘跟我一样已经全部用于MS-DOS/WIN操作系统的分区。为了能够安装LINUX,只好为LINUX重新分配硬盘空间。我立马把朋友的硬盘借来,数据统统备份下来,再重装系统。不过有三种可供选择的方法:
1) 将MSDOS下的最后一个逻辑盘上的数据全部移到其它分区中,将该逻辑盘用分区工具删除,将这部分空间给LINUX使用。
2) 重新将硬盘分区,这是最直接和最麻烦的一种方法。具体操作如下:
. 备份用户的文件
. 用MS-DOS系统盘启动系统
. 用FDISK删除原有分区,重建新的分区,将分配给LINUX的空间留下来不分配给任何一个分区
. 重新安装原来的用户系统
3) 利用一些分区工具在不删除硬盘原有数据的情况下重新分区。如分区魔术师等。

2.2 从CDROM安装Red Hat Linux 7.1
我们可以通过光盘、硬盘、网络安装Red Hat Linux 7.1系统,最常见的方法就是使用光盘安装。使用光盘安装无外乎就是三个要求:
1) 你的主板支持光盘启动
2) 你有光驱
3) 你有Red Hat Linux 7.1安装光盘
通常情况下,这是没问题的。笔者也建议您使用光盘安装,这样是这简单的。随着Linux系统下的应用软件逐渐增多,一张光盘已无法容纳,Red Hat Linux 7.1安装光盘有两张,第一张可以直接从光盘启动,包含了大部分的软件包和一些安装工具。第二张光盘则是许多附加的软件包。不过这次与以往不同的是,Red Hat公司专门进行了改进,安装程序可以从多个光盘读取资料。安装的时候,你就会发现中途提示你更换第二张光盘。现在我们就一起开始Red Hat Linux 7.1安装之旅。
第一步:选择安装模式
塞入第一张光盘,让计算机从CDROM启动,将会出现了简洁的欢迎信息。这时可以选择不同的安装模式:
1) 图形模式:直接按回车即可,整个安装过程就象Windows一样,而且可以使用鼠标操作。不过此时的Red Hat好象对显卡很挑剔,有的出现屏幕太大,找不到按钮,有的则根据无法显示图形界面。如果是这样,你可以按下热启动键重选文本模式进行安装。
2) 文本模式:输入text,再按回车。就会进入文本模式的安装界面,有一定经验的人还是使用这种方式比较好。
3) 专家模式:输入expert,再按回车。在这种情况下,安装程序就好象没有脑子一样,所有的东西都要您来决策。除非你十分熟悉Linux,并且有一些特殊的硬件安装程序无法正确配置,否则不要使用这种方式。
4) 救援模式:这不是在首次安装时使用的,它仅是用于原有的Linux系统无法正常启动的情况下使用。这种方式下,你将进入一个微型的Linux系统,并且提供了许多恢复Linux的工具供你使用。
5) 驱动盘模式:如果你有特殊的硬件驱动盘,需要在安装时提供给Linux系统使用,则你就输入"linux dd",再按回车,安装程序会提供机会让你插入驱动软盘。
建议使用文本模式进行安装。

第二步:选择语言
Red Hat Linux 7.1提供了18种不同的语言,可惜还是没有中文,只能选择"english"。然后继续。
注:Red Hat公司已在近期推出了中文版,大家可以找来试一试。

第三步:选择键盘
在此选择us,继续。
注:笔者试过在Red Hat Linux 7.1下使用罗技公司的Logitech iTouch无线键盘,那么普通的104键盘更不会有问题了。

第四步:选择安装方式
Red Hat Linux 7.1提供了Workstation,Server,Laptop,Custom,Upgrade Existing(分别是工作站,服务器,笔记本电脑,用户自定义,升级老版本)这五种安装方式。我们可以根据自己的实际需要来选择安装方式。
1) Workstation:工作站方式。对于一般用户建议使用此方式。工作站类型安装将会清除掉所有硬盘上原有的所有Linux分区,对于非Linux分区(如Windows 98)会置之不理。这种方式安装十分简单,而且如果你的机器上如果原来有Windows 98的话,安装完后,会自动完成LILO双启动的配置。但是,如果你的机器上原来是NT的话,那就千万不要使用这种方式,否则你的NT可能再也无法启动。
2) Server System:服务器系统方式。警告:采用这种方式安装,将会干掉所有硬盘上所有分区的一切信息。这绝对不是开玩笑!许多初学者已经付出了血与泪的代价。通常在你需要在一台空PC上构建一台网络服务器,才选择它。
3) Laptop:便携机、笔记本方式。笔顾名思义,当你在笔记本电脑上安装时,建议采用该方式。
4) Custom System:定制安装。对于Linux有一定了解的朋友,建议使用该方式,自由地构建Linux。在下第一次安装Linux的时候就勇敢地采用了这种方式。
5) Upgrade Existing System:升级现有系统。假设你的硬上有老版本的Red Hat Linux的话,这是你最佳的选择。
建议使用"定制安装"。

第五步:进行硬盘分区
首先,会让你选择不同的分区工具:Disk Druid和fdisk,建议使用Disk Druid。
在Disk Druid的主界面的最上面是\\\\\\'Current Disk Partitions\\\\\\'区,列出各个硬盘分区的信息。每行由五个项目组成:Mount Point -- 指定该分区对应的Linux系统目录;Device -- 硬盘分区的设备名;Requested -- 分区定义时申请的最小空间;Actual -- 当前分配给这个分区的空间;Type --分区类型。
而中间的是\\\\\\'Drive Summaries\\\\\\'区,一行对应一个物理硬盘,每行由六个项目组成:Drive -- 硬盘的设备名;Geom [C/H/S] -- 硬盘的物理信息,包括柱面、 磁头和扇区的数量;Total -- 硬盘所有可用空间;Used -- 硬盘已分配空间;Free -- 硬盘未分配空间;Bar Graph -- 硬盘已用空间表示图。
最下面的是Disk Druid的按钮区,由五个按钮组成:Add -- 申请一个新的分区; Edit -- 修改在\\\\\\'Current Disk Partitions\\\\\\'区中选中的分区的属性;Delete -- 删除\\\\\\'Current Disk Partitions\\\\\\'区中选中的分区;Ok -- 确认分区操作,重写硬盘分区表;Back -- 不保存修改而退出,回到前一个屏幕,重新开始。
我建议为Linux分一个根分区,一个交换分区(建议64M、128M或256M),即:
用Tab选择Add钮,按回车,这时屏幕上将会出现一个题为\\\\\\'Edit New Partition\\\\\\'的对话框。首先我们在Mount Point项中,输入这个分区所对应的系统目录:"/"(根目录);接着在Size(Megs)项中,输入分区的大小;在Type这一项中用光标上、下键键选择适当的分区类型,我们选中Linux的文件分区Linux native;最后按OK确认。这样我们就成功地建立起一个为Linux所用的分区了。当然如果你的硬盘空间允许,你完全可以再建立一个或几个分区给Linux使用。接着用同样的方法给Linux增加一个交换分区,不同的仅在于Mount Point项让它空着,在Type项目中选择Linux Swap。
注:如果你在前面选择的是图形界面安装的话,将会提供一个图形化的分区界面,使用起来也是很方便的,而且还可以使用自动分区的办法。让安装程序自已创建分区。
在做这一步时需要谨慎,不要不小心删掉原来的分区,那就惨了。确认没有错后,按OK按钮继续。然后根据提示将新的Linux分区格式化,以便使用。

第六步:LILO配置
LILO,就是Linux Loader,即Linux引导器,它负责启动Linux操作系统。我们可以通过配置它实现双启动。首先,安装程序会让你填写有什么内核参数需要传给LILO,通常是不需要的。接着,会询问你要将LILO安装在什么位置,通常有两种选择:1)第一硬盘的主引区(MBR);2)Linux分区的引导扇。
如果你想使用LILO来做双启动的话,你需要选择第一种,如果是想用Linux启动软盘或其它系统引导器引导Linux的话,那就选择第二种。

第七步:设置主机名
随便为你的机器取一个名字。

第八步:选择系统安全等级
这也是Red Hat Linux 7. 1提供的新选项,它提供了三种选择:
1) High:如果你选择High级,那么所有来自外界的网络访系问都将被禁止;
2) Medium:默认的级别,选择该级别,则对于外界的网络访问仅限于该系统提供的网络服务;
3) No firewall:最低的安全保障,任何外界的网络访问都将被允许。

第九步:常用选项设置
接着,设置鼠标、选择你需要支持的语言种类(注意,这里是提供了中文支持的哟),以及时区(图形界面下应点China,而在文本模式下则应选择PRC)。
第十步:用户设置
1) 首先设置系统管理员(就是root用户)密码,系统管理员是系统的最高权限者,拥有该系统,所以这个密码是十分重要的;
2) 接着安装程序提供了一个增加用户的工具,你可以通过这个工具很轻松地添加系统用户。
3) 最后是关于用户认证的配置:
a. Shadow Passwords:默认是选中的,请不要修改。该功能是用来保护密码安全的;
b.使用MD5密码加密:默认也是选中的,请不要修改,它也是保护密码安全的;
c.使用NIS:当你要通过网络上的NIS服务器进行用户验证时,请填写相关信息;
d.使用LDAP:当你要通过网络上的LDAP服务器进行用户验证时,填写相关信息;
e.使用Kerberos:当你要使用Kerberos系统进行用户验证时,填写相关信息;

第十一步:选择软件包
这一步是安装过程中最重要的一步,你可以根据提示选择你需要的软件。安装程序将所有的软件分成了许多类:
Printer Support:打印机支持
X Window System:X Window系统
GNOME:桌面管理器GNOME
KDE:桌面管理器KDE
Mail/WWW/News Tools:一些收发Mail、WEB浏览、新闻阅读的常用工具
DOS/Windows Connectivity:提供DOS和Windows的兼容工具
Graphics Manipulation:图形操作软件
Games:游戏软件
Multimedia Support:多媒体支持软件
Laptop Support:笔记本电脑专用的支持软件
Networked Workstation:网络工作站工具,如Telnet、FTP等客户端
Dialup Workstation:拔号上网工具
News Server:新闻服务器
NFS Server:网络文件系统服务器
SMB(Samba)Server:Samba(就是NetBIOS协议)服务器系统
IPX/Netware?? Connectivity:IPX协议支持软件
Anonymous FTP Server:匿名FTP服务器
SQL Server:postgresql 与MySQL数据库服务器
Web Server:WEB服务器(Apache)
DNS Name Server:域名服务器
Network Management Workstation:网管工作站,提供一些SNMP支持
Authoring/Publishing:出版方面的软件
Emacs:著名的集成编辑软件
Development:开发工具包
Kernel Development:内核开发包,包括内核源程序
Utilities:一些常见工具,如Linuxconf
Everything:所有软件包,如果你的Linux分区足够大(2400M以上),那么你可以选中它,将所有的软件都装上。
注:在选择界面之下,有一个选项,选中时它会列出详细的软件安装列表,你还可以进行一些选择。
选择完要安装的软件包后,系统会自己进行软件包依赖检查,接着就开始了文件的拷贝。这时你可以休息一下了。不过与以前不一样,拷贝到一半时,需要你更换光盘!

第十二步:制作启动盘
安装完成之后,会提示你制作一张Linux启动软盘。虽然不是很有用,但是对于初学者而言还是做一张备用为好。因此在以下情况时,能够用得上:
1) 准备将LILO放在Linux分区中,可以通过软盘引导Linux;
2) 装在MBR上的LILO程序在安装Windows时被覆盖,则可以使用这张软盘引导,再运行"/sbin/lilo",重新往MBR上写LILO程序;
3) 当系统崩溃时,可以使用Linux启动软盘启动,做一些恢复。

第十三步:拷贝文件
接下来就是历时最长,也是最核心的过程:拷贝文件。Linux安装程序将你所选择的软件包通通拷贝到硬盘分区中。要注意的是,在安装过程中是需要你换第二张光盘的。

第十四步:配置显卡/X Window
接下来,安装程序将自动检测你的显卡、显示器,由于Red Hat Linux 7.1采用了最新的XFree86 4.0,所以对显示卡的支持更好了,大部分显卡都可以被识别,由于无法识别的话,那就只好等安装完以后再配置了。
如果你的显卡、显示器都幸运地被识别,那么安装程序将要求你选择图形界面的分辨率,如果你的显卡很好,那就选择800*600*24位色或1024*768*24位色,象我使用的显卡太老,就只好选择800*600*16位色。你也可以选择多种(启动后,可以使用Ctrl+Alt +和-来切换)。
设置完分辨率后,安装程序将测试X Window,如果你的选择正常的话,那么你可以看到漂亮的X Window,那你也就可以轻松地按OK,表示确定。
按下OK按钮后,安装程序会询问你的Linux系统是否一启动就进入X Window,默认为"是"。不过我是不喜欢,在此选择了"NO",这样启动Linux后将进入字符状态,需要X Window时再执行startx命令手动启动。

好,到此大功告成,Red Hat Linux 7.1将提示你取出光盘,重新启动电脑,带着小红帽子的企鹅落户你家了。
注:Red Hat Linux 7.1在第一次启动时将会自己运行一个叫Kudzu的程序,用来完成一些硬件添加操作,通常是网卡和声卡。操作十分简单,你只需选择Configure按钮,系统会帮助你完成这些硬件的配置工作。

2.3 其它安装方式简介
如果你没有光驱的话,那么你还可以通过以下几种方式来完成安装:
1) 从FTP站点安装
2) 从NFS服务器安装
3) 从SMB共享卷安装
4) 从硬盘安装
1.制作Linux启动盘
如果采用这些安装方式,那你首先得制作两张Linux启动盘。
1) 在安装光盘上找到LINUX启动盘的映象文件,/images目录下的boot.img(启动盘)和supp.img(扩展盘)这两个文件。
2)从/images、/install或/dosutils目录中找到制作映象盘的工具RAWRITE.EXE。
3)将映象文件和RAWRITE.EXE拷入同一目录,然后在DOS命令行下执行RAWRITE:
C:linst>RAWRITE
Enter disk image source file name:在这里输入映象文件名
Enter target diskette drive:在这里输入目标盘符如A:
2.从FTP站点安装
要使用这种方式安装必须满足以下条件之一:
1) 你的机器与存放着安装盘的FTP服务器以局域网形式相连;
2) 在你的局域网的FTP服务器上有安装盘。
要注意,你的FTP服务器必须支持长文件名,才可能成功安装。你需要使用Linux的启动盘和扩展盘启动,并配置有效的域名服务器或指定FTP服务器的IP地址,进行安装。
3.从NFS服务器安装
如果在你的局域网中有一台NFS服务器的话,你可以将安装盘复制到NFS服务器上,然后用Linux的启动盘启动,访问NFS服务器进行安装。同样的,这也需要NFS服务器能够支持长文件名。
4.从SMB共享卷安装
将安装盘放到一个支持共享卷的Windows 9x/NT/2000服务器上,然后使用Linux启动盘与扩展盘启动,通过访问共享卷中的安装盘实现安装。
5.从硬盘安装
这种方式适合于从网上下载了安装盘的用户,首先,你可以将Red Hat Linux包文件拷贝到您的硬盘:
1) 所有的文件都要放在一个硬盘分区上;
2) 将所有的内容放在RedHat目录下;
3) 然后将要安装的包拷贝到另一个子目录RPMS
接着就可以使用Linux的启动盘与扩展盘启动进行系统安装。
第3章:Red Hat Linux 7.1使用基础
linux入门教程<二>[灌水]

3.1 登录和退出系统

1. 启动系统
通常LILO是安装在MBR上的,计算机启动后,MBR上的程序被执行,将出现一个不是很漂亮的图形:左边是一个小红帽图像,右边列出了可以启动的操作系统,你可以使用键盘箭头切换。刚安装好后默认值是Linux,也就是你不选择,一会儿将自己启动Linux。
如果你想默认的选择是Windows的话,那你可以在启动Linux后,用vi修改/etc目录下的lilo.conf文件,加上default=windows,然后再执行/sbin/lilo重新生成LILO。

2. 用户登录
Linux是一个真正意义上的多用户操作系统,用户要使用该系统,首先必须登录,使用完系统后,必须退出。用户登录系统时,为了使系统能够识别该用户,必须输入用户名和密码,经系统验证无误后才可以登录系统使用。
Linux下有两种用户:
1) root用户:超级权限者,系统的拥有者,在Linux系统中有且只有一个root用户,它可以在系统中任何操作。在系统安装时所设定的密码就是root用户的密码。
2) 普通用户:Linux系统可以创建许多普通用户,并为其指定相应的权限,使其有限地使用Linux系统。
关于用户的管理,我们将在后面详细说明。
用户登录分两步进行:
1) 输入用户的登录名,系统根据该登录名来识别用户;
2) 输入用户的口令,该口令是用户自己选择的一个字符串,对其他用户完全保密,是登录系统时识别用户的唯一根据,因此每一个用户都应该保护好自己的口令!
系统在建立之初,仅有root用户,其它的用户则是由root用户创建的。由于root用户的权限太大了,所以如果root用户误操作将可能造成很大的损失。所以建议系统管理员为自已新建一个用户,只有需要做系统维护、管理任务时才以root用户登录。
下面就是一个登录实例:(其中黑体字为输入)
Red Hat Linux release 7.1 (Seawolf)
Kernerl 2.4.2-2 on an i686
Home login:root
Password:
在上面的例子中,我们发现在Password后面是空的,其实并不是不输入密码,而是在输入时,Linux系统不会把它显示出来,这样用来保护密码!
如果登录成功的话,我们将获得Shell(Shell是用来与用户交互的程序,它就象DOS中的COMMAND.COM,不过在Linux下可以有多种Shell供选择,如bash、csh、ksh等)提示符,如果以root用户登录的话,那么获得的提示符是"#",否则将是"$"。
提示:如果当时在安装时设置为一启动就进入图形界面的话,那系统启动后,用户登录界面将是图形化的,有点象Windows,而且当你输入正确的用户名与密码,就会直接进入X Window。这个设置是可以修改的:
在/etc目录下有一个inittab文件,其中有一行配置:
id:3:default
其中,数字3就是代表一启动进入字符终端,如果改为5则代表一启动进入X Window。

3. 修改口令
为了更好地保护用户帐号的安全,Linux允许用户在登录之后随时使用passwd命令修改自己的口令。修改口令需要经历:
1) 输入原来的口令,如果口令输错,将中止程序,无法修改口令;
2) 输入新的口令;
3) 提示重复一遍新的口令,如果两次输入的口令相吻合,则口令修改成功。
需要注意的是,Red Hat Linux 7.1为了更好地保护口令,如果你输入的新口令过于简单,它将会拒绝修改。下面就是一个修改口令的实例:(其中黑体字为输入)
$ passwd
Changing password for user1
(current) UNIX password: ?? 在些输入原来的密码
New UNIX password: ?? 输入新的密码
Retype new UNIX password: ?? 再输入一遍新的密码
Passwd:all authentication tokens updated successfully ?? 修改成功!
注意,在这里输入的口令同样不会显示出来。
而如果是root用户修改口令,则不需要输入老密码!也就是说,它可以修改任何用户的口令。

4. 退出登录
不论你是root用户还是普通用户,只需简单地执行exit命令就可以退出登录。

5. 关闭机器
在Linux系统中,普通用户是无权关闭系统的!只有root用户才能够关闭它。当然如果你是按关机按钮则别当别论。我们可以通过以下几种方法实现:
1) 按下CTRL+ALT+DEL组合键,这样系统将重新启动!
2) 执行reboot命令,这样系统也将重新启动!
3) 执行shutdown -h now命令,这样系统将关闭计算机!
4) 执行halt命令,可以关闭计算机。
注意千万不要随意采用硬关机、重启动键等方式关闭系统,那样会导致Linux文件系统遭受破坏!

6. 虚拟控制台
Linux是真正的多用户操作系统,可以同时接受多个用户的远程和本地登录,也允许同一个用户多次登录。Linux为本地用户(也就是做在计算机面前的用户)提供了虚拟控制台访问方式,允许用户在同一时间从不同的控制台进行多次登录。
虚拟控制台的选择可以通过按ALT键加上F1-F6六个功能键来实现。例如,用户登录后,按一下ALT+F2组合键,用户又可以看到"login:"提示符,这其实就是第二个虚拟控制台,而这时再按下ALT+F1组合键,用户则又可以回到第一个虚拟控制台。
大家可以通过使用虚拟控制台来感受Linux系统多用户的特性。例如用户可以在某一虚拟控制台上进行的工作尚未结束时,就可以切换到另一个虚拟控制台上开始另一项工作。例如在开发软件时,可以在一个控制台上编辑程序,在另一个控制台上进行编译,在第三个控制台上查阅信息。


3.2 文件与目录操作
与其它操作系统一样,在Linux系统下用户的数据和程序也是以文件的形式保存的。所以在使用Linux的过程中,是经常要对文件与目录进行操作的。现在我们就以一个Window用户的立场来学习一下Linux下的文件与目录操作方法。

1. 文件名与文件类型
文件名是一个文件的标识。从这个角度来说,文件名的规则与Windows 9x下的是基本上相同的。它同样是由字母、数字、下划线、圆点组成,最大的长度是255个字符。
与Windows 9x一样,Linux系统中也有普通文件和目录文件,不过目录文件在Window中被简称为目录就是了。而在Linux系统中有一种特殊的文件,那就是设备文件。在Linux系统中,把每一个I/O设置都映射成为一个文件,可以象普通文件一样处理,这就使得文件与设备的操作尽可能统一。从用户的用户来说,对I/O设备的使用和一般文件的使用几乎一样,这样就可以不必了解I/O设备的细节。

2. 目录结构
与Windows下一样,在Linux中也是通过目录来组织文件的。但不同的是,在Linux下只有一个根目录,而不象Windows那样一个分区一个根目录。如果有多个分区的话,就需要将其它分区mount到根目录上来用。
大家回忆一下当时为Linux分区时,有一个选项要填,那就是Mount Point,我们将其中一个写成了"/",也就是根目录(这点与Windows相反,一个是"\",一个是"/",真是天生冤家)。其它的则可能是/home、/usr。
安装完系统后,你会发现/home、/usr就是根目录下面的home、usr目录!对了,整个分区就用于该目录了。
安装完Linux后,有许许多多的目录,下面我们就说明一些重要的目录:
/bin:存放着一百多个Linux下常用的命令、工具
/dev:存放着Linux下所有的设备文件!
/home:用户主目录,每建一个用户,就会在这里新建一个与用户同名的目录,给该用户一个自己的空间
/lost+found:顾名思义,一些丢失的文件可能可以在这里找到
/mnt:外部设备的挂接点,通常用cdrom与floppy两个子目录!它的存在简化了光盘与软盘的使用。你只需在塞入光盘后,运行:mount /mnt/cdrom,就可以将光盘上的内容Mount到/mnt/cdrom上,你就可以访问了。不过你使用完成后,应该离开该目录,并执行umount /mnt/cdrom。同样的,软盘就是mount /mnt/floppy和umount /mnt/floppy了。
/proc:这其实是一个假的目录,通过这里你可以访问到内存里的内容。
/sbin:这里存放着系统级的命令与工具
/usr:通常用来安装各种软件的地方
/usr/X11R6 X Window目录
/usr/bin与/usr/sbin 一些后安装的命令与工具
/usr/include、/usr/lib及/usr/share 则是存放一些共享链接库
/usr/local 常用来安装新软件
/usr/src Linux源程序
/boot:Linux就是从这里启动的
/etc:这里存放在Linux大部分的配置文件
/lib:静态链接库
/root:root用户的主目录,这就是特权之一!
/var:通常用来存放一些变化中的东西!
/var/log:存放系统日志
/var/spool:存放一些邮件、新闻、打印队列等
另外,要说明的是,在Linux下"当前目录"、"路径"等概念与Windows下是一样的。
3. 显示文件内容
使用过DOS命令的人都应该知道,我们可以使用type命令来查看一个文件的内容。在Linux下有五个相关的命令,功能各有千秋,不过它们都象type命令一样,只能用来查看文本文件。
1) cat命令
cat命令是最象type命令的,使用的方法很简单:"cat 文件名"。不过比type命令更强大的是,它可以同时查看多个文件:"cat 文件名一 文件名二"。
2) more命令
如果文本文件比较长,一屏无法显示完,那么使用cat命令就可能无法看清。这里我们可以简单地使用more来代替cat命令即可。其效果与type 文件名/p类似。使用more命令将一次显示一屏文本,显示满后,停下来,并提示出已显示全部内容的百分比,按空格键就可以看到下一屏。
3) less命令
less命令的功能几乎和more命令一样,也是按页显示文件,不同之处在于less命令在显示文件时允许用户既可以向前又可以向后翻阅文件。
?? 向前翻:按b键;
?? 向后翻:按p键;
?? 指定位置:输入百分比
?? 退出:q
我经常使用more和less,几乎不使用cat查看文件。
4) head命令
通过head命令可以仅查看某文件的前几行,格式为:
head 行数 文件名
如果未指定行数,则使用默认值10。
5) tail命令
与head命令相对应的,我们可以使用tail命令来查看文件尾部的内容。通常用来实时监测某个文件是否被修改,通常用来观察日志。如:
tail -f maillog

4. 编辑文件
在Red Hat Linux 7中有许多文字编辑工具,其中最常用的应该是vi,这是一个广泛应用于所有UNIX系统的编辑器。它的使用有些特别:
首先,可以使用命令"vi 文件名"打开一个文件。
刚启动的时候,vi处于命令状态,不能够输入任何字符。在这个状态下,可以使用方向键进行移动,而需要输入内容时,你需要输入"i"或"a"命令进入编辑状态。编辑完成后,你需要按下"ESC"键回到命令状态。
在命令状态下,你可以输入":q!"不存盘退出,输入":wq"存盘退出。

5. 文件的复制、删除与移动
大家都早已熟知在DOS下我们可以使用copy、del、move命令来实现文件的复制、删除与移动。下面我们说说如何在Linux系统中做以上操作。
1) cp命令:文件/目录复制命令
它的语法格式为:cp [选项] 源文件或目录 目标文件或目录
常用的选项有:
?? a 该选项常在复制目录时使用,它保留链接、文件属性,并递归地复制目录,就象DOS中的xcopy /s一样
?? f 如果目标文件或目录已存在,就覆盖它,并且不做提示
?? i 与f选项正好相反,它在覆盖时,会让用户回答"Y"来确认
?? p 使用该选项,复制文件时将保留修改时间和访问权限
?? r 若给出的源是一个目录,那么cp将递归复制该目录下所有的子目录和文件,不过这要求目标也是一个目录名
另外,大家要注意的是,如果源是文件名,目标是目录名的话,那么使用cp命令可以指定多个源文件名。如:
$ cp a.txt b.txt /home/user1
该命令将把a.txt和b.txt文件复制到/home/usr1目录中。
2) rm命令:文件/目录删除命令
它的语法格式为:rm [选项] 文件 …
常用的选项有:
?? f 在删除过程中不给任何指示,直接删除
?? r 指示rm将参数中列出的全部目录和子目录都递归地删除
?? i 交互式的删除,每个文件在删除时都给出提示
使用rm命令时一定要小心,特别是以root用户登录时,我就看到过一个朋友在使用rm命令删除/home/tmp目录时将命令"rm -rf /home/tmp"误输成了 "rm -rf / home/tmp",结果等他走回电脑面前,整个系统都被删除了!
3) mv命令:文件/目录移动命令
它的语法格式为:mv [选项] 源文件或目录 目标文件或目录
常用的选项有:
?? f 如果操作要覆盖某已有的目标文件时不给任何指示
?? i 交互式的操作,如果操作要覆盖某已有的目标文件时会询问用户是否覆盖
mv命令的执行效果与参数类型的不同而不同!
第一参数(源) 第二个参数(目标) 结果
文件名 文件名 将源文件名改为目标文件名
文件名 目录名 将文件移动到目标目录
目录名 目录名 目标目录已存在:源目录移动到目标目录
目标目录不存在:改名
目录名 文件名 出错

6. 目录相关操作
1) 创建新目录:mkdir,它的使用与DOS下的md相同:mkdir 目录名;
2) 删除空目录:rmdir,它的使用与DOS下的rd相同:rmdir 目录名;
3) 改变目录:cd,它的使用与DOS下的cd命令基本相同,唯一一个不同的是,不管目录名是什么,cd与目录名之间必须有空格,也就是:"cd/"、"cd.."、"cd."都是非法的,而应该输入:"cd /"、"cd .."、"cd .",如果直接输入命令"cd",而不加任何参数,将回到这个用户的主目录。
4) 显示当前目录:pwd
5) 列目录命令:ls,相当于DOS下的dir
它的语法为:ls [选项] [目录或文件]
常用的选项有:
?? a 显示指定目录下所有的子目录与文件,包括隐藏文件;
?? c 按文件的修改时间排序
?? l 采用长格式来显示文件的详细信息,每个文件一行信息,其内容为:文件类型与权限 链接数 文件属主 文件属组 文件大小 最近修改时间 文件名

7. 文件与目录的权限操作
在Linux系统中,每一个文件和目录都有相应的访问许可权限,我们可以用它来确定谁可以通过何种方式对文件和目录进行访问和操作。文件或目录的访问权限分为可读、可写和可执行三种,分别以r,w,x表示,其含义为:
r w x
文件 可读 可写 可执行
目录 可列出目录 可在目录中做写操作 可以访问该目录
在文件被创建时,文件所有者可以对该文件的权限进行设置。
对于一个文件来说,可以将用户分成三种,并对其分别赋予不同的权限:
1) 文件所有者
2) 与文件所有者同组用户
3) 其它用户
每一个文件或目录的访问权限都有三组,每组用三位表示,如:
d rwx r-x r--
第一部分:这里的d代表目录,其它的有:- 代表普通文件 c 代表字符设备文件;
第二部分:文件所有者的权限字,这里为r w x表示可读、可写、可执行 (目录的可执行指的可以进入目录);
第三部分:与文件所有者同组的用户的权限字,这里为r - x表示可读、不可写、可执行。由于同组用户之间交流较多,让他看看文件,别乱改就行了嘛。
第四部分:其它用户的权限字,这里为- - -,当然给我无关的人嘛,我的文件当然不但不给你写,也不让你读。
1) 文件/目录权限设置命令:chmod
这是Linux系统管理员最常用到的命令之一,它用于改变文件或目录的访问权限。该命令有两种用法:
?? 用包含字母和操作符表达式的文字设定法
其语法格式为:chmod [who] [opt] [mode] 文件/目录名
其中who表示对象,是以下字母中的一个或组合:
u:表示文件所有者
g:表示同组用户
o:表示其它用户
a:表示所有用户
opt则是代表操作,可以为:
+:添加某个权限
-:取消某个权限
=:赋予给定的权限,并取消原有的权限
而mode则代表权限:
r:可读
w:可写
x:可执行
例如:为同组用户增加对文件a.txt的读写权限:
chmod g+rw a.txt
?? 用数字设定法
而数字设定法则更为简单:chmod [mode] 文件名
关键是mode的取值,一开始许多初学者会被搞糊涂,其实很简单,我们将rwx看成二进制数,如果有则有1表示,没有则有0表示,那么rwx r-x r--则可以表示成为:
111 101 100
再将其每三位转换成为一个十进制数,就是754。
例如,我们想让a.txt这个文件的权限为:
自己 同组用户 其他用户
可读 是 是 是
可写 是 是
可执行
那么,我们先根据上表得到权限串为:rw-rw-r--,那么转换成二进制数就是110 110 100,再每三位转换成为一个十进制数,就得到664,因此我们执行命令:
chmod 664 a.txt
2) 改变文件的属主命令:chown
语法格式很简单:chown [选项] 用户名 文件/目录名
其中最常用的选项是"R",加上这个参数,可以将整个目录里的所有子目录和文件的属主都改变成指定用户。
3) 改变文件属组命令:chgrp
该命令也很简单:chgrp 组名 文件名
3.3 用户管理

用户管理,主要的工作就是建立一个合法的用户帐户、设置和管理用户的密码、修改用户帐户的属性以及在必要时删除已经废弃的用户帐号。

1. 增加一个新用户
在Linux系统中,只有root用户才能够创建一个新用户,如下的命令将新建一个登录名user1的用户。
# useradd user1
但是,这个用户还不能够登录,因为还没给它设置初始密码,而没有密码的用户是不能够登录系统的。在默认情况下,将会在/home目录下新建一个与用户名相同的用户主目录。如果需要另外指定用户主目录的话,那么可以使用如下命令:
# useradd -d /home/xf user1
同时,该用户登录时将获得一个Shell程序:/bin/bash,而假如你不想让这个用户登录,也就可以指定该用户的Shell程序为:/bin/false,这样该用户即使登录,也不能够执行Linux下的命令:
# useradd -s /bin/false user1
在Linux中,新增一个用户的同时会创建一个新组,这个组与该用户同名,而这个用户就是该组的成员。如果你想让新的用户归属于一个已经存在的组,则可以使用如下命令:
# useradd -g user user1
这样该用户就属于user组的一员了。而如果只是想让其再属于一个组,那么应该使用:
# useradd -G user user1
完成了这一操作后,你还应该使用passwd命令为其设置一个初始密码。

2. 删除一个用户
删除用户,只需使用一个简单的命令"userdel 用户名"即可。不过最好将它留在系统上的文件也删除掉,你可以使用"userdel -r 用户名"来实现这一目的。

3. 修改用户属性
在前面我们看到了在新建一个用户的时候如何指定它的用户主目录,如何指定它的Shell,如何设置它所属的组…等等。在Linux中提供了一个命令来实现:
usermod -g组名 -G 组名 -d 用户主目录 -s 用户Shell
还有一种直接的方法,那就是修改/etc/passwd文件,在这个文件中每个用户占用一行,它的内容为:
用户名:密码:用户ID:组ID:用户全名:用户主目录:用户Shell
不过值得注意的是,密码这一项通常是用一个*号代替的,你是看不到的。

4. 增加一个组
还记得Linux的文件可以为同组的人、非同组的人设置不同的访问权限吗?我们可以根据自己的需要创建用户组:
groupadd 组名

5. 删除一个组
同样的,我们有时会需要删除一个组,它的命令就是groupdel 组名。

6. 修改组成员
如果我们需要将一个用户加入一个组,只需编辑/etc/group文件,将用户名写到组名的后面。例如将newuser用户加入到softdevelop组,只需找到softdevelop这一行:
softdevelop:x:506:user1,user2
然后在后面加上newuser,形成:
softdevelop:x:506:user1,user2,newuser
另外,在Red Hat Linux中还提供一个图形化的用户管理工具:userconf,通过它可以更直接地进行用户管理。
linux入门教程<三>[灌水]

3.4 进程管理

Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统;多任务是指Linux可以同时执行几个任务,它可以在还未执行完一个任务时又执行另一项任务。
在Linux系统上所有运行的东西都可以称之为一个进程。每个用户任务、每个系统管理守护进程,都可以称之为进程。Linux用分时管理方法使用所有的任务共同分享系统资源。下面我们就看一下如何控制这些进程。

1. 启动进程
在Linux系统中有两种启动进程的方法:
1) 直接输入命令,就将直接启动一个进程
?? 在普通情况下,进程将在前台执行,这时我们无法再执行新的命令
?? 如果我们在命令之后加上一个"&",那行进程将会放在后台执行,我们仍然可以执行新的命令
2) 通过at、cron、crontab命令可以像Windows中的计划任务一样定时启动某个进程,具体的使用方法大家可以使用man 命令名来查询。

2. 查看进程
在Linux系统中,我们可以使用ps命令来查看正在运行的进程例如:
列出属于当前用户的进程:
# ps
PID TTY TIME CMD
16767 pts/1 0:00 ps
18029 pts/1 0:00 bash
其中PID代表进程ID,TTY是该进程是由哪个控制台启动的,CMD则是命令。
如果你想列出更详细的信息,则可使用命令:"ps -auxw"。

3. 终止进程
一个进程在任务完成之后,将会自动完成。如果要中途中止该进程的话,有两种方法:
1) 对于在前台运行的程序,直接通过组合键CTRL+C就可以中止进程;
2) 而对于在后台运行的程序,则需要通过前面介绍的ps命令找到它的进程号,然后使用"kill 进程号"来终止该进程。


3.5 磁盘管理

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

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列信息:
1) FileSystem:硬盘分区
2) 1k-blocks:按K计算的分区大小
3) Used:已经使用的分区大小(按K计算)
4) Available:还要用的分区大小
5) Use%:已使用的空间所占百分比
6) Mounted on:挂接点
可以看到/home是另一个分区,现在空间已经用完了!这都时当时没有规划好!
如果对与以K为计算单位表示硬盘空间,那么你可以使用df -m,这样就会以M为计算单位。

2. du命令
du,就是disk usage,就是看一下磁盘使用了多少。下面就是一个使用实例:
# pwd
/var/log
# du
4 ./uucp
776 .
在这里,我们使用du命令列出了/var/log目录所占用的磁盘空间。它统计出了该目录有一个子目录:uucp,占用了4K,而/var/log目录下的文件则共有776K。
该命令还有一些常用的选项,用来完成更多的功能:
?? -a 将列出当前目录下所有的文件、子目录、子目录下的文件、子目录下的子目录…的磁盘占用情况
?? -b 以字节为单位表示占用的磁盘空间
?? -c 在最后显示出一个统计值
3.6 软件安装

在Red Hat Linux下,应用软件的安装包通常有两种格式:
1) rpm包,如software-1.2.3-1.i386.rpm。它是Redhat Linux创造的一种包封装格式。
2) tar包,如software-1.2.3-1.tar.gz。它是使用UNIX系统的打包工具tar打包的。
而且,大多数Linux应用软件包的命名也有一定的规律,它遵循:
名称-版本-修正版-类型
例如:
sfotware-1.2.3-1.i386.rpm
软件名称:software
版本号:1.2.3
修正版本:1
可用平台:i386,适用于Intel 80x86平台。
类型:rpm,说明是一个rpm包。
根据Linux应用程序软件安装包中的内容不同可以分为::
1) 是可执行文件,也就是解开包后就可以直接运行的。在Windows中所有的软件包都是这种类型。安装完这个程序后,你就可以使用。不过下载时要注意这个软件是否是你所使用的平台,否则将无法正常安装。
2) 另一种则是源程序,也就解开包后,你还需要使用编译器将其编译成为可执行文件。这在Windows系统中是几乎没有的,因为Windows的思想是不开放源程序的。
通常,用tar打包的,都是源程序;而用rpm打包的则常是可执行程序。

1.搞定使用rpm打包的应用软件
rpm可谓是Redhat公司的一大贡献,它使Linux的软件安装工作变得更加简单容易。
1) 安装:
我只需简单的一句话,就可以说完。执行:
rpm -ivh rpm软件包名
更高级的,请见下表:
rpm参数 参数说明
-i 安装软件
-t 测试安装,不是真的安装
-p 显示安装进度
-f 不管任何错误
-U 升级安装
-v 检测套件是否正确安装
这些参数可以同时采用。更多的内容可以参考RPM的命令帮助。
2) 卸载:
我同样只需简单的一句话,就可以说完。执行:
rpm -e 软件名
不过要注意的是,后面使用的是软件名,而不是软件包名。例如,要安装software-1.2.3-1.i386.rpm这个包时,应执行:
rpm -ivh software-1.2.3-1.i386.rpm
而当卸载时,则应执行:
rpm -e software。

2. 搞定使用tar打包的应用软件
1) 安装:
整个安装过程可以分为以下几步:
?? 取得应用软件:通过下载、购买光盘的方法获得;
?? 解压缩文件:一般tar包,都会再做一次压缩,如gzip、bz2等,所以你需要先解压。如果是最常见的gz格式,则可以执行:"tar -xvzf 软件包名",就可以一步完成解压与解包工作。如果不是,则先用解压软件,再执行"tar -xvf 解压后的tar包"进行解包;
?? 阅读附带的INSTALL文件、README文件;
?? 执行"./configure"命令为编译做好准备;
?? 执行"make"命令进行软件编译;
?? 执行"make install"完成安装;
?? 执行"make clean"删除安装时产生的临时文件。
好了,到此大功告成。我们就可以运行应用程序了。但这时,有的读者就会问,我怎么执行呢?这也是一个Linux特色的问题。其实,一般来说,Linux的应用软件的可执行文件会存放在/usr/local/bin目录下!不过这并不是"放四海皆准"的真理,最可靠的还是看这个软件的INSTALL和README文件,一般都会有说明。
2) 卸载:
通常软件的开发者很少考虑到如何卸载自己的软件,而tar又仅是完成打包的工作,所以并没有提供良好的卸载方法。一般都提供 make uninstall 来卸载软件的。


要想成为一套优秀的操作系统,除了性能稳定、功能齐全之外,还应该拥有一个友好的操作系统,否则只会呆在研究室里,难以普及。
在UNIX系统下,大多都是采用X Window做为图形界面的。1984年,麻省理工学院与DEC制定了Athena计划,这就是X Window 第一个版本。1988年1月成立了一个非盈利性的X联盟,负责制定X Window的标准。在Linux出现后,Xfree86 Project Inc.基于Linux实现了一个开源的X Window系统:XFree86。
X Window与其他的图形界面系统相比,有几个特点:
?? 良好的网络支持:X Window采用了C/S网络结构,程序间可以通过网络来通信,而且有良好的网络透明性,也就是说用户不需知道程序在使用远端主机资源。
?? 个性化的窗口界面:X Window并未对窗口界面作统一性的规范,程序员可以根据需求自行设计,其中最有名的就是后面要介绍的GNOME与KDE。
?? 不内嵌于操作系统:X Window只定义了一个标准,而不属于某个操作系统,因此可在不同的操作系统上运行相同的X Window软件。
整个X Window由三个部分组成:
?? X Server:主要是控制输出及输入设备的程序,并维护相关资源,它接收输入设备的信息,并将其传给X Client,而将X Client传来的信息输出到屏幕上。所以不同的显卡就需要选择不同的X Server,在配置X Window时最主要的就是配置X Server
?? X Client:它才是应用程序的核心部分,它是与硬件无关的,每个应用程序就是一个X Client
?? X protocol:X Client与X Server之间的通信语言就是X protocol
为了使得X Window更加易于使用,各个不同的公司与组织都针对其做了许多集成桌面环境。如AIX上的CDE,SUN的OpenServer,而在Linux下则主要是GNOME与KDE的双雄会。下面我们就一起来了解一下它们。

4.2 GNOME简介
GNOME最初是由墨西哥的程序设计师Miguel De Icazq发起的,它受到了Red Hat公司的大力支持。它现在属于GNU(GNU is Not UNIX)计划的一部分,主要目的是希望能够为用户提供一个完整、易学易用的桌面环境,并为程序设计师提供强大的应用程序开发环境。
1997年8 月,为了克服KDE所遇到的QT许可协议和单一C++依赖的困难,以墨西哥的Miguel de Icaza为首的250程序员就开始了一个新项目,完全从头开始,这就是GNOME。经过14个月的共同努力,终于完成了这个工程。现在GNOME已得到了占Linux 市场份额最大发行商Red Hat 的支持,拥有了大量应用软件,包括文字处理软件Go,电子表格软件Gnumeric,日历程序GNOMEcal,堪与PhotoShop 媲美的图形图像处理软件Gimp 等。
现在GNOME与KDE成为了两大竞争阵营,必将使得Linux更加易于使用。
GNOME中还提供了大量的应用软件,它们都放在GNOME的"开始"(一个小脚丫)à Programs中,包括了许许多多的应用软件,下面就是其中的一些:
1. Applications:应用软件
1) Dia:一个工程图编辑器,适用于绘制电路图;
2) Calendar:一个集日历与日程表于一身的好工具;
3) Address Book:一个通讯录
4) GEdit:一个功能类似于Windows下的记事本的文本编辑器;
5) Gnumeric:Linux下的一个类似于EXCEL的电子表格软件;
6) Time tracking tools:一个用于提醒时间的小工具;

2. Games:游戏软件
1) Gnome Milnes:GNOME下的扫雷;
2) Gnibbles:贪吃蛇游戏;
3) Freecell:Windows下的空当接龙游戏;

3. Graphics:图形处理软件
1) Electric Eyes:一个十分优秀的图形处理软件,可谓GNOME下的AcdSee呀!
2) XPDF:一个在Linux阅读PDF文档的工具;
3) The Gimp:一个十分优秀的绘图软件,与Photoshop很象!

4. Internet:Internet应用软件
1) Dialup Configuration Tool:一个界面十分友好的拔号上网设置工具;
2) gFTP:一个FTP客户端
3) pine:一个E-Mail客户端软件
4) Netscape :大名鼎鼎的浏览器软件,被微软从Windows平台挤下来的
5) RH Network monitor:网络流量显示

5. Multimedia:多媒体软件
1) Audio Mixer:声音控制器
2) CD Player:CD播放器
3) XMMS:与Winamp是一个模子里出来的


4.3 KDE简介
KDE项目在1996年10月发起的,其目的是在X-Window上建立一个完整易用的桌面环境。KDE现在除了拥有KFM(类似于IE4.0)、KPresenter(类似PowerPoint)、KIllustrator(类似CorelDraw或 Illustrator)等重量级软件,还有体贴用户的GUI配置软件可以帮助用户配置Unix/Linux,使其深受使用者欢迎。
但由于KDE是基于由TrollTech公司开发的Qt程序库的,所以也受到了许多批评。虽然Qt本身作为一基于C++的跨平台开发工具是非常优秀,但可惜的是它不是自由软件。Qt的License允许任何人使用Qt编写免费软件及免费拷贝给其他用户使用,但如果利用Qt编写非免费软件则需要购买他们的License。更重要的是任何人都不可以随意修改Qt源代码。如果TrollTech公司更改Qt License、公司倒闭或给人收购等都会令KDE前功尽弃。
在KDE中,也有许许多的应用软件,它们被分组放在"开始"(一个K字)菜单中,说实在的,我感觉KDE的软件应用比GNOME更多,图形界面也更好。
1. Office:办公软件
这就是大名鼎鼎的Koffice套件。
1) Kword:字处理软件
2) Kspread:象Excel的电子表格处理软件
3) Kpresenter:一个类似于PowerPoint的演示软件
4) Kchart:一个电子图表软件
5) Kiiiustrator:一个电子出版软件

2. Develop:开发工具
1) Kdevelop:一个KDE下的集成开发环境

3. Applications:应用软件
1) Advanced Editor:一个增强型的文本编辑软件
2) Emacs:这是一个功能强大的编辑软件,在GNOME中也有,它的原形是字符终端下的Emacs
3) Organizer:一个日程安排软件

4. Internet:Internet软件
1) Kppp:一个十分友好的拔号上网配置工具
2) Kmail:一个十分漂亮的Email 客户端,有点象Outlook!
3) Chat Client:一个IRC客户端
4) KPPPLoad:一个网络流量工具
5) Netscape:大名鼎鼎的WEB浏览器,在GNOME中也有集成

4.4 使用窗口管理器
Red Hat Linux 7.1默认安装后,X Window将使用GNOME做为窗口管理器,除非你在安装时将GNOME去掉,而选择了KDE包。通常我们可以将这两个包都安装上,到使用的时候再选择。
1) 在字符终端下执行以下命令,则以后X Window的窗口管理器都成了KDE:
# switchdesk KDE
2) 如果你又不想使用KDE了,则可以使用以下命令转回GNOME:
# switchdesk GNOME
4.5 汉化Red Hat Linux 7.1
1.安装 TrueType 字体
要在系统里使用中文TrueType字体,最好先禁用xfs字体服务器, xfs在启动时会自动更新字体目录下的fonts.dir文件,这样会影响到我们所作的修改。
以root身份登陆,然后执行setup工具,在Service中关闭xfs。
1)修改XF86Config-4 配置文件
进入/etc/X11目录,用vi编辑XF86Config-4文件,如下进行相应的修改:

Section "Files"
# FontPath "unix/:7100" ;注释掉这一行,加入下面的几行
FontPath "/usr/X11R6/lib/X11/fonts/misc:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/misc"
FontPath "/usr/X11R6/lib/X11/fonts/Type1"
FontPath "/usr/X11R6/lib/X11/fonts/Speedo"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi"
FontPath "/usr/X11r6/lib/X11/fonts/TrueType"
EndSection

Section "Module"
Load "dbe" # Double-buffering
Load "GLcore" # OpenGL support
Load "dri" # Direct rendering infrastructure
Load "glx" # OpenGL X protocol interface
Load "extmod" # Misc. required extensions
Load "v4l" # Video4Linux
Load "xtt" ;加入这一行
EndSection
2)获取字体文件simsun.ttf
新建一个目录:/usr/X11R6/lib/X11/fonts/TrueType ,然后将Windows所在的分区mount上来,然后将simsum.ttf复制到该目录。
3)生成字体列表
cd /usr/X11R6/lib/X11/fonts/TrueType
# ttmkfdir>fonts.dir
# vi fonts.dir 修改字体列表文件,使其与下面类似
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-ascii-0
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-fcd8859-15
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-iso8859-1
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-gb2312.1980-0
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-koi8-r
#cp fonts.dir fonts.scale
4)修改 gtk 的字体定义
# vi /etc/gtk/gtkrc.zh_CN
修改后的内容如下:
style "gtk-default-zh-cn" {
f
}
class "GtkWidget" style "gtk-default-zh-cn"

2.安装中文输入法Chinput 3.0.1
1)首先下载以下几个软件包:
Chinput-3.0.1-1.i386.rpm
pth-1.3.7-3.i386.rpm
unicon2-im.tar.gz
2)然后安装:
# rpm -ivh pth-1.3.7-3.i386.rpm
# rpm -ivh Chinput-3.0.1-1.i386.rpm --nodeps
# cp unicon2-im.tar.gz /usr/lib
# cd /usr/lib
# tar vfxz unicon2-im.tar.gz
# rm unicon2-im.tar.gz
# ln -s libstdc++-2-libc6.1-1-2.9.0.so libstdc++-libc6.1-2.so.3
3)修改Chinput的一些配置
# cd /usr/lib/ZWinPro
# vi Chinput.ad 修改以下几个地方
...
chinput.gblocale=zh_CN.gb2312
chinput.big5locale=zh_CN.gb2312
...
chinput.gbfont=-misc-SimSun-medium-r-normal--14-*-*-*-*-*-gb2312.1980-0
chinput.big5font=-misc-SimSun-medium-r-normal--14-*-*-*-*-*-gb2312.1980-0
...
(注意:在这个文件里不能出现空格,只能用 Tab 代替)
4)修改~/.bashrc文件,新增以下几行:
export LC_ALL=zh_CN.GB2312
export LANG=zh_CN.GB2312
export XMODIFIERS=@im=Chinput

3.汉化 GNOME
重启后,执行startx时,你在GNOME中就可以显示中文了。紧接着,你可以通过在Program->设定->Session->Startup Programs里面把chinput加入启动运行程序里面就完成了 GNOME的中文环境和输入法的安装了。

4.汉化 KDE
如果是KDE系统,则打开 Preferences->Personalization->Country & Language,选择中文,再打开 Look & Feel->Fonts,选择相应的字体,并把字符集改成gb2312.1980-0。最后再打开桌面上的 Autostart 目录,新建一个应用程序( Chinput )的连接,以后每次启动后就可以使用中文输入法了.
linux入门教程<四>[灌水]

第5章:网络应用

5.1 常用网络命令
在Red Hat Linux 7.1系统提供了与网络相关的工具,掌握好这些工具是十分必要的:
第一类:设置工具
1.netconf:
netconf是Red Hat Linux提供的Linuxconf的一部分,主要用于设置与网络相关的参数。它可以在consle下运行(文本菜单),也可以在X-Window中运行(图形界面)。在前面,我们介绍过了netconf的一些应用,它的使用比较简单,只要认识上面的英文就可以了,所以在此就不再多说。BTW,如果你设置好了X-Window的话,用用图形界面的netconf,会更漂亮的哟。
2.ifconfig
ifconfig是Linux系统中最常用的一个用来显示和设置网络设备的工具。其中"if"是"interface"的缩写。它可以用来设备网卡的状态,或是显示当前的设置。
下面我们简单地说明常用的命令组合:
1) 将第一块网卡的IP地址设置为192.168.0.1:
ifconfig eth0 192.168.0.1 (格式:ifconfig 网络设备名 IP地址)
2) 暂时关闭或启用网卡:
关闭第一块网卡:ifconfig eth0 down
启用第一块网卡:ifconfig eth0 up
3) 将第一块网卡的子网掩码设置为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
4) 将第一块网卡的广播地址设置为192.168.0.255:
ifconfig eth0 -broadcast 192.168.0.255
5) 将第一块网卡设置为不接收多播数据包:
ifconifg eth0 allmulti
如果要让其接收,则使用命令:ifconfig eth0 -allmulti
6) 查看第一块网卡的状态:
ifconfig eth0
如果要查看所有的网卡状态,则直接使用不带参数的ifconfig命令即可。
ifconfig输出的状态信息是十分有用的,下面,我们就简单说明一下:
有几个状态比较重要:
?? UP/DOWN:网卡是否启动了,如果是DOWN的话,那肯定无法用的;
?? RX packets中的errors包的数量如果过大说明网卡在接收时有问题;
?? TX packets中的errors包的数量如果过大说明网卡在发送时有问题;
3.route
route命令是用来查看和设置Linux系统的路由信息,以实现与其它网络的通讯。要实现两个不同的子网之间的网络通讯,需要一台连接两个网络路由器或者同时位于两个网络的网关来实现。
在Linux系统中,我们通常设置路由是为了解决以下问题:该Linux机器在一个局域网中,局域网中有一个网关,能够让你的机器访问Internet,那么我们就需要将这台机器的IP地址设置为Linux机器的默认路由。
1) 增加一个默认路由:
route add 0.0.0.0 gw 网关地址
2) 删除一个默认路由:
route del 0.0.0.0 gw 网关地址
3) 显示出当前路由表
route
第二类:诊断工具
1.ping
ping是一个最常用的检测是否能够与远端机器建立网络通讯连接。它是通过Internet控制报文协议ICMP来实现的。而现在有些主机对ICMP进行过滤,在这种特殊的情况下,有可能使得一些主机Ping不通,但能够建立网络连接。这是一种特例,在此事先说明。
同样的,在此不罗列ping命令的所有可选参数,而是通过实例来说明一些常用的组合,需要更详细地了解的,可以通过www.linuxaid.com.cn网站在线培训的命令查询工具获得。
1) 检测与某机器的连接是否正常:
ping 192.168.0.1
ping www.linuxaid.com.cn
也就是说,我们可以用IP地址或域名来指定机器。
2) 指定ping回应次数为4:
在Linux下,如果你不指定回应次数,ping命令将一直不断地向远方机器发送ICMP信息。我们可以通过-c参数来限定:ping -c 4 192.168.0.1
3) 通过特定的网卡进行ping:
有时,我们需要检测某块网卡(系统中有多块)能否ping通远方机器。我们需要在执行ping命令时指出:
ping -I eth0 192.168.0.1
2.traceroute
如果你ping不通远方的机器,想知道是在什么地方出的问题;或者你想知道你的信息到远方机器都经过了哪些路由器,可以使用traceroute命令。顾名思义:trace是跟踪,route是路由,也就是跟踪路由。
使用这个命令很简单:
traceroute 远程主机IP地址或域名
这个命令的输出类似:
1 路由器(网关)的IP地址 访问所需时间1 访问所需时间2 访问所需时间3
2 路由器(网关)的IP地址 访问所需时间1 访问所需时间2 访问所需时间3
………
1) 最前面的数字代表"经过第几站";
2) 路由器(网关)的IP地址就是"该站"的IP地址;
3) 访问所需时间1、2、3是指访问到这个路由器(网关)需要的时间。

3.netstat
在Linux系统中,提供了一个功能十分强大的查看网络状态的工具:netstat。它可以让您得知整个Linux系统的网络情况。
1)统计出各网络设备传送、接收数据包的情况:
使用命令:netstat -i
这个命令将输出一张表,其中包括:
Iface:网络接口名 MTU:最大传输单元
RX-OK:共成功接收多少个包 RX-ERR:接收的包中共有多少个错误包
RX-DRP:接收时共丢失多少个包 RX-OVR:共接收了多少个碰撞包
TX-OK:共成功发送多少个包 TX-ERR:发送的包中共有多少个错误包
TX-DRP:发磅时共丢失多少个包 TX-OVR:共接收了多少个碰撞包
2)显示网络的统计信息
使用命令:netstat -s
使用这个命令,将会以摘要的形式统计出IP、ICMP、TCP、UDP、TCPEXT形式的通信信息。
3)显示出TCP传输协议的网络连接情况:
使用命令:netstat -t
这个命令的输出也是一张表,其中包括:
Local Address:本地地址,格式是IP地址:端口号
Foreign Address:远程地址,格式也是IP地址:端口号
State:连接状态,包括LISTEN、ESTABLISHED、TIME_WAIT等。
4)只显示出使用UDP的网络连接情况:
使用命令:netstat -t
输出格式也是一样的。
5)显示路由表:
使用命令:netstat -r
这个命令的输出与route命令的输出相同。

5.2 网络配置文件
在Red Hat Linux 7.1中有一些用于存放网络配置的文件:
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
该用户用于定义现有的网络服务,用户无需修改它,它通常由安装网络服务的程序来维护。该文件包括网络服务名、网络端口号和使用的协议类型,其中网络端口号和使用的协议类型之间有一个斜杠分开,在设置行的最后还可以添加一些服务的别名。
5./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
{
socket_type=stream
wait=no
user=root
server=/usr/sbin/in.telnetd
log_on_failure+=USERID
disable=yes
}
第一行,说明该配置用来设置telnet服务。
第二行,说明Socket连接类型是stream,也就是TCP
第三行,是指不等待到启动完成
第四行,是指以root用户启动服务进程
第五行,是指服务进程是/usr/sbin/in.telnetd
第六行,是用于做一些出错日志
第七行,是指禁止远方telnet,如果需要开放则将该配置改为:disable=no
修改了xinetd的配置,需要重启xinetd才能够生效,有两种方法可以实现:
1) 执行如下命令:
/etc/rc.d/init.d/xinetd restart
2) 执行如下命令:
killall -HUP xinetd

5.3 网络服务访问限制
在Red Hat Linux 7.1中加强了网络安全的防范,如果你安装时安全等级不是在最低一级的话,那么本机之外的所有访问都可能被拒绝。这是因为在Red Hat 7.1中做了一些默认的ipchains设置,这是Linux内置的防火墙机制,它可以使用一些规则来允许或禁止某种访问。
它的规则存放在/etc/sysconfig/ipchains文件中,如果你想让它暂时不生效,那你可以运行/etc/rc.d/init.d/ipchains stop,那么所有的规则都被取消,所有的网络访问都将被允许。
你可以运行/etc/rc.d/init.d/ipchains status来获知现在对网络访问的限制。关于这方面的知识,本文限于篇幅无法详细介绍,有兴趣的读者可参考《Linux防火墙》一书。

5.4 WEB服务器
在Linux系统中最适合于做服务器的当数Apache,Red Hat Linux 7.1中集成了Apache 1.3.19版,你只要在安装时选中WEB服务器,那么系统将自动完成Apache服务器的安装,在默认情况,WWW服务就已经启动了。
如果你在安装时没有选择WEB服务器包,那也没有关系,你只需执行以下命令即可:
1) 将Red Hat Linux 7.1安装光盘的第一张放入光驱,然后执行如下命令:
# mount /mnt/cdrom
2) 转到apache安装文件所在目录:
# cd /mnt/cdrom/RedHat/RPMS
3) 使用RPM完成安装:
# rpm -ivh apache-1.3.19-5.i386.rpm
现在,你就已经拥有一个基于Linux的WEB服务器了,它的配置文件位于/etc/httpd/conf目录下,你可根据需要进行相应的修改,修改完后执行:/etc/rc.d/init.d/httpd restart即可。而WEB服务的主目录则在/var/www/html目录下,你可以将你的WEB页传到这里就可以更新了。
而如果每一个用户都想要拥有一个自己的主页的话,则:
1) 首先在自己的用户主目录下建一个public_html目录:
# cd
# mkdir public_html
2) 然后将自己的用户主目录的权限改为大家可读
# chmod 755 用户主目录
3) 这样你就可以使用"localhost/~用户名/"访问到每个用户的主页了。
5.5 FTP服务器
在Red Hat Linux 7.1中集成了Wu-FTP 2.6.1做为FTP服务器,在你安装时只要选择了FTP包的话,那么你的Linux服务器就是一台FTP服务器了,如果当时没有安装的话,也没有关系,跟安装apache一样:
1) 将Red Hat Linux 7.1安装光盘的第一张放入光驱,然后执行如下命令:
# mount /mnt/cdrom
2)转到wu-ftp安装文件所在目录:
# cd /mnt/cdrom/RedHat/RPMS
3)使用RPM完成安装:
# rpm -ivh wu-ftp-2.6.1-16.i386.rpm
由于FTP服务是由xinetd超级服务器创建的,所以关于FTP服务器的配置在/etc/xinetd.d目录下的wu-ftpd文件中:
service ftp
{
socket_type=stream
wait=no
user=root
server=/usr/sbin/in.ftpd
server_args=-l -a
log_on_success+=DURATION USERID
log_on_failure+=USERID
nice=10
disable=no
}
下面,我们介绍一些关于FTP服务器的管理方法:
1、 暂时关闭FTP服务
有两种方法可以使FTP服务暂停:
1) 以root用户身份执行:
# ftpshut now
这样就会在/etc目录下生成一个shutmsg的文件,这时FTP服务器将无法使用,直到你删掉这个文件。
2) 修改配置文件/etc/xinetd.d/wu-ftpd,将disable=no改为disable=yes,然后重启xinetd。
2、 禁止某用户使用FTP服务
有两种方法可以禁止某用户使用FTP服务器:
1) 在/etc/ftpuser中写入该用户帐号名
2) 在/etc/ftpaccess中写入一行配置:
deny-uid 用户名
用这种方法还可以禁止一个组的用户使用
deny-gid 组名
3、 禁止匿名用户(anonymous)登录FTP服务器
有许多种方法可以实现,但我觉得最简单有效的方法就是将anonymous写入配置文件:/etc/ftpuser中,就可了。

5.6 文件服务器
我们还可以使用Red Hat Linux 7.1内置的Samba为局域网内的Windows主机做文件服务器。如果在安装系统时选择了SMB服务器软件包的话,那么安装完以后,Samba服务就已经Ready了。
不过为了方便配置,建议安装一下swat,它提供了一个WEB界面的配置工具。它的安装包是第二张光盘的/RedHat/RPMS/samba-swat-2.0.7-36.i386.rpm。
安装完以后,它会在xinetd.d目录中新建一个swat文件,其内容为:
service swat
{
port=901
socket_type=stream
wait=no
only_from=127.0.0.1
server=/usr/sbin/swat
log_on_failure+=USERID
disable=yes
}
我们看到disable的值是yes,也就是说,现在swat还没有启用,因此,我们需要将其改为disable=no,然后重启xinted。另外,由于这里有一句:
only_from=127.0.0.1
说明只能在本机使用swat,而如果你想在Windows中用IE来配置的话,请将这句注释掉或删掉。
下面,我们以设置一个大家都可以访问的homes目录为例,说明SWAT的设置方法:
1) 打开IE浏览器,在地址栏上输入Linux的主机名或IP以及":901",例如:
http://192.168.0.1:901
2) 如果连接正常,将出一个登录提示窗,要求输入用户名与密码,在此以root为用户名,并输入root用户的密码,再单击确定;
3) 如果输入无误,将出现Samba的配置界面:Swat的首页;
我们可以看到在Swat界面中,最上面有7个图标,分别是:HOME(首页)、GLOBALS(全局设置)、SHARES(共享设置)、PRINTERS(打印机)、STATUS(状态)、VIEW(查看)、PASSWORD(密码)
4) 首先,我们单击GLOBALS图标,将出现GLOBALS设置页面,其中我们对以下几项进行设置:
?? BaseOption à Workgroup:在些输入工作组名(如NetBIOS中的工作组名)
?? BaseOption à Netbios name:主机名
?? SecurityOption à Security:选择安全等级,在些选择"SHARE"
?? SecurityOption à hosts allow:允许的主机,通常写入你的网络号,如192.168.0.
?? SecurityOption à hosts deny:如果你不让某台机器使用,则写入它的IP地址
修改完后,点击"Commit Changes"按钮(在7个图标的下边一些),保存设置。
5) 然后,单击SHARES图标,进行共享设置:
第一步:在Create Share按钮的右边文本框中输入要设置的共享名
第二步:单击"Create Share"按钮;
第三步:确认"BaseOptions à Path的值为你想共享的目录,例如/home/smb/test(注意这必须是已经存在的目录);
第四步:将"SecurityOptions à writeable"的值设置为Yes,使该目录共享为可写;
第五步:将"SecurityOptions à guest ok"的值设置为Yes,使该目录无需密码访问;
第六步:在"SecurityOptionsàhosts allow、hosts deny"中设置相应的主机IP;
第七步:将"BrowseOptionsàbrowseable"设置为Yes,使其便于使用
最后,点击"Commit Changes"按钮,保存设置。
现在,我们就可以在Windows 9x上通过网络邻居访问到这台Samba服务器,并且有一个可读、可写的共享目录。
在平时使用的时间,系统管理员可以点击"STATUS"按钮,切换到状态页面对其进行监测,在这个页面上,你可以:
1) 启动(Start smbd按钮)、停止Samba(Stop Smbd按钮)服务,以及重启服务(Restart smbd按钮);
2) 另外,你可以看到当前与Samba服务器建立的连接(Active Connections),并且可以按下"X"按钮,中止它的访问;
3) 同时你还可以检测到正在访问的文件夹(Active Shares),正打开的文件(Open Files)。
Samba服务还可以对用户进行认证,与Window NT域进行集成等强大的功能,在些限于篇幅就不详细介绍,有兴趣的读者可以参考《实战Samba》一书。

再介绍几个不错的linux站
http://linuxeden.com/
http://www.chinaunix.net/
http://www.chinalinuxpub.com/
http://lydr.myrice.com/


[ 本帖最后由 尉迟小乐 于 2007-5-5 12:22 编辑 ]
级别: 光盘初级
发帖
301
飞翔币
335
威望
48
飞扬币
1311
信誉值
0
只看该作者 38 发表于: 2007-05-05
引用
LINUX架设WEB服务器


引用
一、什么是WWW服务


引用
现在在Internet上最热门的服务之一就是环球信息网WWW(World Wide Web)服务,Web已经成为很多人在网上查找、浏览信息的主要手段。WWW是一种交互式图形界面的Internet服务,具有强大的信息连接功能。它使得成千上万的用户通过简单的图形界面就可以访问各个大学、组织、公司等的最新信息和各种服务。

商业界很快看到了其价值,许多公司建立了主页,利用Web在网上发布消息,并反它作为各种服务的界面,如客户服务、特定产品和服务的详细说明、宣传广千以及是渐增长的产品销售和服务。商业用途促进了环球信息网络的迅速发展。

如果你想通过主页向世界介绍自己或自己的公司,就必须将主页放在一个WEB服务器上,当然你可以使用一些免费的主页空间来发布。但是如果你有条件,你可以注册一个域名,申请一个IP地址,然后让你的ISP将这个IP地址解析到你的LINUX主机上。然后,在LINUX主机上架设一个WEB服务器。你就可以将主页存放在这个自己的WEB服务器上,通过它把自己的主页向外发布。

WWW是基于客户机/服务器方式的信息发现技术和超文本技术的综合。WWW服务器通过HTML超文本标记语言把信息组织成为图文并茂的超文本;WWW浏览器则为用户提供基于HTTP超文本传输协议的用户界面。用户使用WWW浏览器通过Internet访问远端WWW服务器上的HTML超文本,如下图所示:

http协议

WWW浏览器 ¬ ¾ ¾ ¾ ¾ ® WWW服务器
 

在WWW的客户机/服务器工作环境中,WWW浏览器起着控制作用,WWW浏览器的任务是使用一个URL(Internet地址)来获取一个WWW服务器上的WEB文档,解释这个HTML,并将文档内容以用户环境所许可的效果最大限度地显示出来。整个流程如下:
 

WWW浏览器根据用户输入的URL连到相应的远端WWW服务器上;
 
 

取得指定的WEB文档;
  

断开与远端WWW服务器的连接。
 

也就是说,平时我们在浏览某个网站的时候是每取一个网页建立一次连接,

读完后马上断开;当需要另一个网页时重新周而复始


[ 本帖最后由 尉迟小乐 于 2007-5-5 12:26 编辑 ]
级别: 光盘初级
发帖
301
飞翔币
335
威望
48
飞扬币
1311
信誉值
0
只看该作者 39 发表于: 2007-05-05
引用
二、WWW服务器软件的比较和选择


引用
目前,在世界各地有许多公司和学术团体,根据不同的计算机系统,开发出不同的WWW服务器,如Apache、CERN httpd、Microsoft Internet Information System、NCSA httpd、Plexus httpd、WebSite等。在UNIX/LINUX系统中常用的有:CERN、NCSA、Apache三种

 

CERN httpd
 

这是最早期的WWW服务器软件,用C语言编写,现在功能有限,用户在

缩减中。有兴趣的话可以在:ftp://ftp.w3.org/pub/WWW/bin中找到它。

 

NCSA httpd
 

这是在WWW服务器发展初期,美国国家超级计算机应用中心(NCSA)

在1995年创建的当时一流的WWW服务器。它也是用C语言编写的,程序小、速度快。但是现在NCSA WWW服务器的主要开发人员已经离开了NCSA,这个服务器项目已经停顿了。相信大家不会选择一个没有发展的WWW服务器软件吧!

当然,由于它的特殊历史地位,相信使用它的人现在还不少。如果你需要可以在ftp://ftp.ncsa.uiuc.edu获取它。

 

Apache
 

根据著名的WWW服务器调查公司所作的调查,世界上百分之五十以上的

WWW服务器都在使用Apache,是世界排名第一的WEB服务器。

Apache的诞生极富有戏剧性。当NCSA WWW服务器项目停顿后,那些使用NCSA WWW服务器的人们开始交换他们用于该服务器的补丁程序,他们也很快认识到成立管理这些补丁程序的论坛是必要的。就这样,诞生了Apache Group,后来这个团体在NCSA的基础上创建了Apache。

Apache的主要特征是:

¨ 可以运行上所有计算机平台;

¨ 支持最新的HTTP 1.1协议;

¨ 简单而强有力的基于文件的配置;

¨ 支持通用网关接口CGI;

¨ 支持虚拟主机;

¨ 支持HTTP认证;

¨ 集成Perl脚本编程语言;

¨ 集成的代理服务器;

¨ 具有可定制的服务器日志;

¨ 支持服务器端包含命令(SSI)

¨ 支持安全Socket层(SSL)

¨ 用户会话过程的跟踪能力;

¨ 支持FastCGI;

¨ 支持Java Servlets。

我们还有什么理由放弃这个功能强大而且前途光明的WWW服务器软件呢?
级别: 光盘初级
发帖
301
飞翔币
335
威望
48
飞扬币
1311
信誉值
0
只看该作者 40 发表于: 2007-05-05
引用
三、安装Apache


引用
下面我们就开始漫漫征服Apache之旅,通过循序渐进的需求实例,一步步地学习使用Apache,从入门到精通。

3.1 系统需求

运行Apache不需要太多的计算资源。它在有6-10MB硬盘空间和8MB RAM的Linux系统上运行得很好。然而,只运行Apache可能不是你想做的事情。更可能的是,你想运行Apache来提供WWW服务、启动CGI进程以及充分利用所有WWW能够提供的令人惊奇的功能。在这种情况下,你需要提供反映负载要求的额外的磁盘空间和内存空间。也就是说,如果仅仅是启动WWW服务并不需要太多的系统资源,但是想要能为大量的客户提供服务就需要更多的系统资源。

3.2 获取软件

你可以在http://www.apache.org中获得Apache的最新版。而几乎所有的Linux发行版中均包含有Apache软件包,你也可以直接使用它。

需要注意的是,Apache软件包有两种:一种是源代码,下载后需要自己重新编译;另一种是可执行文件,下载后只需解压就可以使用。

3.3 安装软件

你可以通过以下三种方法安装Apache服务器。

1.如果你安装的Linux版本中带用Apache的话,就在选择所要安装的服务器的时候,将httpd这个服务选上,Linux安装程序将自动完成Apache的安装工作,并做好基本的配置。

2.使用可执行文件软件包,这比较适合那些对编译工作不是太熟悉的初级用户,因为它相对比较简单。

下载软件包apache_1.2.4.e.tar.gz

tar xvzf apache_1.2.4.e.tar.gz

这就完成了安装工作,简单吧!

如果你使用的是RedHat Linux的话,你也可以下载apache_1.2.4.rpm软件安

装包,然后使用rpm –ivh apache_1.2.4.rpm命令安装。

3.如果你想把Apache服务器充分利用起来的话,就一定要自己编译Apache
定制其功能。

下载包含Apache源代码的软件包apache_1.2.4.tar.gz;

然后用tar命令将它解开;
将当前目录改变为Apache源代码发行版的src目录;

将配置样本文件(Configuration.tmpl)复制为Configuration文件;

编辑Configuration文件中的配置选项:

Makefile配置选项:一些编译选项:

¨ “CC=”一行指定用什么编译软件编译,一般为“CC=gcc”;

¨ 如果需要将额外的标志(参数)指定给C编译软件,可以使用:

EXTRA_CFLAGS=

EXTRA_LFLAGS=

¨ 如果系统需要特殊的库和包含文件,可以在这里指定它们:

EXTRA_LIBS=

EXTRA_INCLUDES=

¨ 如果你要改变代码优化设置的话,你须将下面一句去掉注释,然

后改成你所需要的值:

#OPTIM=-O2 

Rule配置选项:用来决定需要什么功能,一般情况下无需改变。  

模块配置:模块是Apache的组成部分,它为Apache内核增加新功能。通过使用模块配置,可以自定义在Apache服务器中需要什么功能,这个部分也是Apache灵活性的表现。模块配置行如下所示:
 

AddModule modules/standard/mod_env.o

如果你需要Apache服务器具备什么功能,就将那个模块用AddModule语句加到配置文件Configuration中去。

下表列出了Apache的模块功能:

mod_access
提供基于主机的访问控制命令
Ö

mod_actions
能够运行基于MIME类型的CGI脚本或HTTP请求方法
Ö

mod_alias
能执行URL重定向服务
Ö

mod_asis
使文档能在没有HTTP头标的情况下被发送到客户端
Ö

mod_auth
支持使用存储在文本文件中的用户名、口令实现认证
Ö

mod_auth_dbm
支持使用DBM文件存储基本HTTP认证
´

mod_auth_mysql
支持使用MySQL数据库实现基本HTTP认证
´

mod_auth_anon
允许以匿名方式访问需要认证的区域
Ö

mod_auth_external
支持使用第三方认证
´

mod_autoindex
当缺少索引文件时,自动生成动态目录列表
Ö

mod_cern_meta
提供对元信息的支持
´

mod_cgi
支持CGI
Ö

mod_dir
能够重定向任何对不包括尾部斜杠字符命令的请求
Ö

mod_env
使你能够将环境变量传递给CGI或SSI脚本
´

mod_expires
让你确定Apache在服务器响应请求时如何处理Expires
´

mod_headers
能够操作HTTP应答头标
´

mod_imap
提供图形映射支持
Ö

mod_include
使支持SSI
Ö

mod_info
对服务器配置提供了全面的描述
´

mod_log_agent
允许在单独的日志文件中存储用户代理的信息
´

mod_log_config
支持记录日志
Ö

mod_log_referer
提供了将请求中的Referer头标写入日志的功能
´

mod_mime
用来向客户端提供有关文档的元信息
Ö

mod_negotiation
提供了对内容协商的支持
Ö

mod_setenvif
使你能够创建定制环境变量
Ö

mod_speling
使你能够处理含有拼写错误或大小写错误的URL请求
´

mod_status
允许管理员通过WEB管理Apache
Ö

mod_unique_id
为每个请求提供在非常特殊的条件下保证是唯一的标识
´

表一:Apache模块功能一览表


在src目录下执行:“. /configure”;

编译Apache:执行命令“make”;

根据机器性能的不同,经历一段5-30分钟的编译,就大功告成了。

将编译好的可执行文件httpd复制到/etc/httpd/bin目录下;

将Apache发行版的配置文件:access.conf、httpd.conf、mime.types、srm.conf文件复制到/etc/httpd/conf目录下。到此为止,安装完成。
3.4 一些说明

在Red Hat Linux 6.0中,Apache将自己的所有配置文件和日志文件放在了“/etc/httpd”目录下,其中“/etc/httpd/conf”下为配置文件,“/etc/httpd/log”下为日志文件。

同时,它将建立“/home/httpd”目录,并在其下建立三个子目录:“html/”:在这个目录下存放HTML(主页)文件;“cgi-bin/”:在这个目录下可以存放一些CGI程序;“icons/”:在这个目录下是服务器自带的一些图标。

级别: 光盘初级
发帖
301
飞翔币
335
威望
48
飞扬币
1311
信誉值
0
只看该作者 41 发表于: 2007-05-05
引用
四、配置Apache基础篇,让WWW服务器跑起来


引用
Apache服务器软件的配置文件主要有:“access.conf”:用于设置系统中的存取方式和环境;“httpd.conf”:用于设置服务器启动的基本环境;“srm.conf”:主要用于做文件资源上的设定;“mime.type”:记录Apache服务器所能识别的MIME格式。

在具体讲解之前,我们必须告诉大家,Apache已经在安装时就采用了一系列的缺省值,已经让WWW服务器跑起来了。你只需要将装上Linux+Apache的主机联入Internet,然后将主页存放到“/home/httpd”目录下即可。

下面介绍一些最主要的配置选项的含义,以便大家用最小的精力、最小的配置准备好服务器。
4.1 httpd.conf
httpd.conf是主配置文件。它告诉服务器将如何运行。

一、最重要的配置选项ServerType standalone | inetd
这个配置选项指定如何运行WEB服务器。Apache可以使用两种方法来运行服务器:standalone(独立的)和inetd(由inetd运行的)。
standalone参数表示WEB服务进程以一个单独的守候进程的方式在后台侦听是否有客户端的请求,如果有就生成一个子进程来为其服务。

inetd参数表示WEB服务不是以一个单独的守候进程的形式支持。而是由Inetd这个超级服务器守候进程进行代劳,当它收到一个客户端的WEB服务请求的时候,再启动一个WEB服务进程为其服务。

从功能的角度看,这两种方法几乎是相同的。但它们之间实际有很大区别,区别在于服务器的性能。一个由inted运行的服务器进程在它结束对请求服务的同时立刻退出。而在standalone模式下,子WWW服务器进程在退出之前要挂起一段时间,这就给它们提供了机会,可以重新用来服务新的请求。

在standalone模式下,不存在对每个请求启动新进程的开销,所以它的效率更高;而inetd模式被认为比standalone模式更具安全性。

standalone模式:
此种模式下,WWW服务器侦听特定端口的连接请求。当客户机发出到特定端口地址的连接请求时,主服务器进程启动子WWW服务进程来服务该请求。另外还需要告诉主服务器进程侦听的特定端口地址,使用命令:
Port [number] (缺省值为80)

inetd模式
inetd是侦听有小于1024的端口连接请求的Internet守护进程(一个服务器进程)。与前面的方法不同,当客户系统发出到WWW服务器的连接请求时,inetd启动一个WWW服务器进程,由此进程服务此请求,完成服务后即退出。

如果选择通过inetd服务器来运行Apache,需要编辑/etc/inetd.conf文件为Apache添加一条新的记录:
httpd stream tcp nowait httpd /etc/httpd/bin/httpd –f /etc/httpd/conf/httpd.conf
修改了/etc/inetd.conf文件后,就需要修改/etc/services中添加一行httpd 80/tcp httpd
做完以上修改后,需要重新启动inetd进程。首先,使用以下命令取得inetd的进程ID:
ps auxw |grep inetd
然后执行命令:kill –HUP
在RedHat Linux中,默认是采用inetd服务器来运行Apache,所以只要你在安装时选择了httpd,以上工作在安装时就已经代你完成了。

二、其它配置选项
Server Admin命令,用来设置WEB管理员的E-Mail地址。这个地址会出现在系统连接出错的时候,以便访问者能够将情况及时地告知WEB管理员。
命令格式: Server Admin [you E-Mail address]
例:Server Admin admin@xxx.com

ErrorLog命令,用来指定错误记录文件名称和路径。
命令格式: ErrorLog [log filename]
例:ErrorLog /var/httpd/error.log

Timeout命令,只要客户端超过这里设定的秒数还没有完成一个请求的话,服务端将终止这次请求服务。如果网络速度较慢的话,建议在此设置较大的数值。以给客户端更多机会。
命令格式: Timeout [second]
例:Timeout 120

ServerRoot命令,它指定在何处保存服务器的配置、错误及日志文件。
命令格式: ServerRoot [fully qualified path name]
例:ServerRoot /etc/httpd

ServerName命令,它配置服务器的Internet主机名
命令格式: ServerName [host name]
例:ServerName www.xxx.com

4.2 srm.conf
srm.conf是资源配置文件,用它来告诉服务器你想在WWW站点上提供什么资源以及在哪里和如何提供它们。
DocumentRoot命令,用来指定主文档的地址。
命令格式: DocumentRoot [Path]
例:DocumentRoot /home/httpd/html

UserDir命令,用来指定个人主页的位置。如果你有一个用户test,那么它主目录是“/home/test”,当客户端输入“http://yourdomain/~test”,系统就会到对应的目录“/home/test/UserDir/”中去寻找。其中“UserDir”就是在UserDir命令中设置的指定目录。
命令格式: UserDir [Path]
例: UserDir Public_html

DirectoryIndex命令,用来声明首页文件名称。一般地,我们使用“index.html”或"index.htm”作为首页的文件名。如果这样设置后,那么客户端发出WEB服务请求时,将首先调入的主页是在指定目录下文件“index.html”或“index.htm”。
命令格式: DirecotryIndex [filename]
例:DirecotryIndex index.html index.htm

ScriptAlias命令,为脚本程序目录起个别名,具体可见4.7小节。
命令格式: ScriptAlias [/alias/] [fullly qualified path for script directory]
例: ScriptAlias /cgi-bin/ /home/httpd/cgi-bin

4.3 access.conf的配置
access.conf文件用来设置WWW站点上诸如文件、目录和脚本项目的访问权限。该文件的第一段非注释部分如下:

Option Indexes Includes ExecCGI FollowSymLink
AllowOverride None
Order allow , deny
allow from all


大家应该注意到,这一个部分是以开始,以结束的。这表示在其中间的部分都是针对指定目录 “/home/httpd/html”而言的。

1.Option命令有很多的参数,各个参数的意义如下所示:
All 准许以下所有功能(MultiViews除外);
MultiViews 准许内容协商的Multiviews;
Indexes 若该目录下无index文件,则准许显示该目录下的文件以供选择;
IncludesNOEXEC 准许SSI(Server-side Includes),但不可使用#exec和#include功能;
Includes 准许SSI;
FollowSymLinks 准许符号链接到其他目录;
ExecCGI 准许该目录下可以使用CGI。

2.而AllowOverride命令则是用来决定是否准许在“access.conf”文件中设定的权限是否可以被在文件“.htaccess”中设定的权限覆盖。它有两个参数:
All 准许覆盖;
None 不准许覆盖。

3.Order命令:用来设定谁能从这个服务器取得控制。它也有两个参数:
allow 可以取得控制;
deny 禁止取得控制。

现在我们一起来看看关于目录“/home/httpd/html”的设置的含义:它使得这个目录,如果不存在index.htm文件时,列出目录信息以供选择,准许SSI,允许执行CGI程序,开启了动态连接。它不允许再使用在文件“.htaccess”中设定来覆盖这里所设置的权限。使所有的人都可以取得控制。

该文件的第二段非注释部分如下:



Option ExecCGI

AllowOverride None



这个表示目录“/home/httpd/cgi”的设置为,当前目录下可以执行CGI程序。不允许再使用在文件“.htaccess”中设定来覆盖这里所设置的权限。

需要说明的是,不同的LINUX系统中,可以在这个文件中看到的信息不完全相同,但是根据这里给出的信息,大家可以参照命令的解释自行理解文件中的设置,以及根据自己的需要进行相应的修改。

4.4 使新的配置生效

在上面,我们可能已经根据新的需求更改了相应的配置选项,如果我们要使得这个新的配置立即生效。我们就必须重新启动WEB服务进程。在LINUX中,我们可以十分方便地使用命令行来使得WEB服务进程重启。

/etc/rc.d/init.d/httpd restart
级别: 光盘初级
发帖
301
飞翔币
335
威望
48
飞扬币
1311
信誉值
0
只看该作者 42 发表于: 2007-05-05
引用
五、为用户开辟个人主页空间


引用
如果我们利用了LINUX系统架设了一台WEB服务器,我们不仅可以存放公司的主页,而且还可以为公司的每一个员工提供一块个人主页的空间。
首先,为需要个人主页空间的员工在LINUX上开设一个帐号。这样,它就拥有了一个用户主目录“/home/用户帐号名”。
addusr 用户帐号名
passwd 用户帐号名
在用户主目录下建立一个目录“public_html”,然后为其设置相应的权限。
cd ~用户帐号名
mkdir public_html
chmod 755 public_html
确认在srm.conf文件中的UserDir命令设置的是public_html目录。
让员工将自己的个人主页上传到自己用户主目录下的public_html目录中。
现在就可以使用“http://www.company.com/~用户帐号名”来访问员工的个人主页了。

级别: 光盘初级
发帖
301
飞翔币
335
威望
48
飞扬币
1311
信誉值
0
只看该作者 43 发表于: 2007-05-05
引用
六、用Apache实现虚拟主机服务


引用
6.1 什么是虚拟主机服务

所谓的虚拟主机服务就是指将一台机器虚拟成多台WEB服务器。举个例子来说,一家公司想从事提供主机代管服务,它为其它企业提供WEB服务。那么它肯定不是为每一家企业都各准备一台物理上的服务器,而是用一台功能较强大的大型服务器,然后用虚拟主机的形式,提供多个企业的WEB服务,虽然所有的WEB服务就是这台服务器提供的,但是让访问者看起来却是在不同的服务器上获得WEB服务一样。

具体地说,就是,我们可以利用虚拟主机服务将两个不同公www.company1.comwww.company2.com的主页内容都存放在同一台主机上。而访问者只需输入公司的域名就可以访问到它想得到的主页内容。

用Apache设置虚拟主机服务通常可以采用两种方案:基于IP地址的虚拟主机和基于名字的虚拟主机,下面我们分别介绍一下它们的实现方法。以便大家在具体的应用中能够选择最合适的实现方法。

6.2 设置实现基于IP地址的虚拟主机服务

实现前提

这种方式需要在机器上设置IP别名,也就是在一台机器的网卡上绑定多个

IP地址去为多个虚拟主机服务。而且要使用这项功能还要确定在你的LINUX内核中必须支持IP别名的设置,否则你还必须重新编译内核。

下面举一个拥有两个虚拟主机的服务设置,以供参考。

2.配置步骤

假设,我们用来实现虚拟主机服务的机器,首先已经为自己提供了WEB服务,现在将为新的一家公www.company1.com提供虚拟主机服务。

规划IP地址:为虚拟主机申请新的IP地址。(假设本机IP地址为202.101.2.1)
 

  www.company1.com 202.101.2.2

2) 让ISP作好相应的域名解析工作。

3) 为网卡设置IP别名:

  /sbin/ifconfig eth0:0 202.101.2.2 netmask 255.255.255.0

4) 重新设置“/etc/httpd/conf/httpd.conf”,在文件中加入:

 

ServerAdmin webmaster@yourdomain.com

DocumentRoot /home/httpd/www.company1.com

ServerName www.company1.com

ErrorLog /var/log/httpd/www.company1.com/error.log



5)建立相应的目录。

  mkdir /home/httpd/www.company1.com

mkdir /var/log/httpd/www.company1.com/error.log
6)将相应的主页内容存放在相应的目录中即可。

3.不利因素

这种虚拟主机的实现方法有一个严重的不足,那就是,每增加一个虚拟主机,就必须增加一个IP地址。而由于IP地址空间已经十分紧张,所以通常情况下是无法取得这么多的IP地址的。而且从某种意义上说,这也是一种IP地址浪费。

6.3 设置实现基于名字的虚拟主机服务

而基于名字的虚拟主机服务,是比较适合使用的一种方案。因为它不需要更多的IP地址,而且配置简单,无须什么特殊的软硬件支持。现代的浏览器大都支持这种虚拟主机的实现方法。当然,这也就是指一些早期的客户端浏览器也许不支持这种虚拟主机的实现方法。

正是以上原因,我们没有理由不使用基于名字的虚拟主机服务而使用基于IP地址的虚拟主机服务。配置基于名字的虚拟主机服务需要修改配置文件:“/etc/httpd/conf/httpd.conf”,在这个配置文件中增加以下内容。

  NameVirtualHost 202.101.2.1



ServerAdmin webmaster@yourdomain.com

DocumentRoot /home/httpd/www.company1.com

ServerName www.company1.com

ErrorLog /var/log/httpd/www.company1.com/error.log





ServerAdmin webmaster@yourdomain.com

DocumentRoot /home/httpd/www.company2.com

ServerName www.company2.com

ErrorLog /var/log/httpd/www.company2.com/error.log


也就是在基于IP地址的配置基础上增加一句:NameVirtualHost 202.101.2.1而已。在本例中,为了体现只需要增加一次,所以特别地设置了两个虚拟主机服务。

最后也是建立相应的目录,将主页内容放到相应的目录中去就可以了。
级别: 光盘初级
发帖
301
飞翔币
335
威望
48
飞扬币
1311
信誉值
0
只看该作者 44 发表于: 2007-05-05
引用
七、配置CGI


引用
7.1 什么是CGI

CGI是独立于语言的网关接口规范,它实际上可以用任何广泛流行的应用程序开发语言来实现,包括C、C++、Perl、Shell脚本甚至Java。

WEB服务器从客户端得到某个URL,它告诉WEB服务器,必须运行一个CGI外部应用程序。那么WEB服务器启动这一应用程序,等待它完成并返回输出结果。最后,它将此应用程序的输出结果传输给另一端的WEB客户。

7.2 为CGI配置Apache

那么如何使Apache能处理CGI请求呢?我们必须通过相应的配置过程告知Apache在哪里存储CGI程序,指明CGI程序的扩展等,以下我们逐一介绍一下设置的内容与步骤。

 

创建存储CGI程序的目录
 

创建集中的CGI程序目录只是建立CGI环境的开始。如果要考虑提高安全

性的话,应将集中的CGI程序目录保存在DocumnetRoot目录外,使得访问者不能直接访问CGI程序。

第一步:在DocumentRoot目录外创建一个目录,然后将所有的CGI程序都集中存放在这个目录下。例如,你可创建一个/home/httpd/public/apps的目录作为CGI程序的大本营。

第二步:为CGI程序目录创建别名,也就是编辑配置文件httpd.conf,加入:

ScriptAlias /cgi-bin/ /home/httpd/public/apps

这样做后,当客户访www.xxx.com/cgi-bin/li.cgi时,WEB服务器就会自动执行WEB服务器上的/home/httpd/public/apps/li.cgi文件。

第三步:为CGI目录设置合适的权限,一般是只允许Apache有读取和执行的权限但没有写的权限。

 

允许用户访问cgi-bin
 

我们已经在4.5小节中介绍了如何给用户开辟个人主页空间,但如果你的

用户需要使他的主页更具有活力,往往会向你申请cgi-bin访问服务。下面我们就介绍一个Apache服务器为用户提供的两种cgi-bin访问方法。

1)使用Directory或DirectoryMatch容器

当在配置文件srm.conf中用UserDir命令被赋值为目录名称时,Apache就

把它作为用户WWW站点的顶层目录。例如:

UserDir Public_html

当Apache接www.xxx.com/~user的请求,就到/home/user/Public_html取出主页发送给客户。

如果要为每个用户添加CGI支持就在Apache的配置文件access.conf中添加下列配置:



Options ExecCGI

AddHandler cgi-script .cgi .pl



注:将DirectoryMatch换成Directory亦可

在这种方法中,Apache服务器www.xxx.com/~user/cgi-bin请求翻译成为了/home/user/Public_html/cgi-bin/,并允许执行任何带有正确扩展名(.cgi或.pl)的CGI程序。

 

使用ScriptAliasMatch命令
 

通过使用ScriptAliasMatch命令,也可以为每个用户添加CGI支持。例如:

ScriptAliasMatch ~([a-z]+)/cgi-bin/(.*) /home/$1/public_html/cgi-bin/$2

这个命令将用户名与$1相匹配,其中$1与~([a-z]+)相等。将/cgi-bin/后面的任何内容与$2相匹配,其中$2与(.*)相等。

这个设置也就实现了www.xxx.com/~user/cgi-bin/xxx.cgi请求解释为:

/home/user/Public_html/cgi-bin/xxx.cgi

那么大家想一想,如果你想将这个请求解释为:

/home/httpd/public/apps/xxx.cgi

该如何设置呢?对,应该是:

ScriptAliasMatch ~([a-z]+)/cgi-bin/(.*) /home/httpd/public /apps/$2

7.3 Apache为CGI提供的环境变量

Apache服务器提供了许多环境变量可以用于CGI程序的编写,了解它们也一定有助于写出充分利用Apache的CGI程序,所以在此也对此作一简单介绍。

 

服务器变量
 

服务器变量由Apache设置用来通知CGI程序有关Apache的情况。通过使

用这些变量,CGI程序能确定有关服务器的不同信息:Apache的版本,管理员的E-Mail地址等。

 

SERVER_SOFTWARE
 

这个变量是WWW服务器Apache的版本号,它的值形如:Apache/Version,

如Apache/1.3;

 

GATEWAY_INTERFACE
 

这个变量的值是当前CGI规范的版本号,其值形如:CGI/1.1;

 

SERVER_ADMIN
 

如果在httpd.conf文件中有设置站点管理员的e-mail地址的话,这个变

量就会存放着这个e-mail地址;

 

DOCUMENT_ROOT
 

这个变量存放在是被访问的WWW站点的DocumentRoot命令指定的值。

 

客户请求变量
 

Apache提供的有关客户请求方的环境变量有许多,以下只是有选择性地介

绍一些最常见的。

 

SERVER_NAME
 

此变量可以告诉CGI程序它访问的是哪一个主机。这个值可以是IP地址也

可以是完整的主机名;

 

HTTP_ACCEPT
 

此变量被赋值为客户所能接受的MIME类型的列表,如:

HTTP_ACCEPT=image/gif;

 

HTTP_ACCEPT_CHARSET
 

此变量被赋值为客户所能接受的字符集,如:

HTTP_ACCEPT_CHARASET=iso-8859-1.,*,utf-8;

 

HTTP_ACCEPT_LANGUAGE
 

此变量被赋值为客户所能接受的语言,如:HTTP_ACCEPT_LANGUAGE=en;

 

HTTP_ACCEPT_AGENT
 

这个变量指定发出请求的系统正在运行的浏览器类型和操作系统;

 

HTTP_PORT:服务端口;
 

 

REMOTE_HOST:客户端的IP地址或IP名称信息;
 

 

REMOTE_PORT:客户端的端口号;
 

7.4 一点提示

若干年来,通过网关接口(CGI)已成为服务器端应用程序开发的事实标准。但随着时间的推移,发现在沉重的CGI负担下许多WWW服务器系统的表现不尽人意。这是因为CGI规范存在瓶颈问题:每当客户系统请求CGI应用程序时,WWW服务器就必须启动新的CGI进程,直到完成任务后结束进程。这在负载不高时,会工作正常。但是,在高负载时,繁多的进程将成为性能的瓶颈问题。

所以现在开始出现新的标准来弥补这一不足,其中FastCGI是很有前途的一种新的开放式标准。

你可以在Apache中通过添加mod_fastcgi.c模块来支持FastCGI。