QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1590|回复: 11

Windows 到 Linux 之旅: 系列文章概述

[复制链接]
发表于 2005-9-4 20:56:04 | 显示全部楼层 |阅读模式
Windows 到 Linux 之旅: 系列文章概述               
       
       
       
       
内容:
第 1 部分. Linux 思想
第 2 部分. 控制台速成班
第 3 部分. Webmin
第 4 部分. 用户管理
第 5 部分. Linux 日志
第 6 部分. 使用文件系统
第 7 部分. 网络
第 8 部分. 备份与恢复
第 9 部分. 安装软件
参考资料
关于作者
对本文的评价
相关内容:
为您的 Linux 应用开发加油提速
从这里开始学习 Linux
Linux 用户技术 FAQ
developerWorks Toolbox subscription
订阅:
developerWorks 时事通讯
指引开发者走向 Linux 的路线图

级别: 初级

Chris Walden
电子商务架构师, IBM Developer Relations
2003 年 3 月

Column iconIBM 电子商务架构师 Chris Walden 将通过他在
developerWorks 上发表的九篇系列文章来指导您如何在
Linux 环境中运用您的 Windows
操作技巧。他无所不谈,从日志到网络,从命令行到帮助系统
—— 甚至包括如何通过可用的源代码来编译软件包。

您正在从 Windows 走向 Linux。您知道您需要 Linux
的稳定性、灵活性以及价格的低廉等特点,但您的脑海中还会有很多问题。Linux
像 Unix 吗?Unix
难学吗?您从哪里开始学起?是否有径可循?

本系列文章就是帮助您将所积累的经验和知识运用于
Linux
环境中。这份参考资料对您来说并不是永远都必备,但是,初学时它可以帮您解决一些问题,为您指出一条新的而且我认为是充满乐趣的计算途径。当您沿着这条路走下去时,您将发现很多新的参考资料,可以帮助您学习、诊断和管理
Linux。

我们假定您已经安装了
Linux。如果您还没有装,那么到 Linux.org
去看看您需要装哪一个版本。当您准备好要安装时,您可以找到相应的下载链接。

第 1 部分. Linux 思想
在 Linux 中获得成功的第一个步骤是学习 Linux
思想。将您已经知道的套用到使用 Linux 的方法中去。



第 2 部分. 控制台速成班
Linux
控制台具有强大而灵活的功能。如果过了相当一段时间您还要用很多时间去查看命令的提示,那么您应该花费一些时间复习一下那些您将不断用到的常见命令,来更好地熟悉这个环境。



第 3 部分. Webmin
虽然理解管理的具体细节很重要,但如果有工具可用通常会更方便。而且,一个高层应用程序可以简化复杂的配置过程。不管您是初学者还是经验丰富的管理员,Webmin
都可以帮助您只通过指向和选择就可以完成配置任务。


第 4 部分. 用户管理
如果一个系统中没有任何用户,那它还是一个系统吗?学习
Linux 中管理用户的方法。



第 5 部分. Linux 日志
Linux
扩展了日志的使用。它不会对您隐瞒任何事情。熟练使用日志将让您可以监控系统的健康状态,跟踪系统和用户活动。



第 6 部分. 使用文件系统
文件系统是每一个服务器的核心部分。Linux
文件系统具有极大的灵活性。



第 7 部分. 网络
当今时代在没有网络的状况下工作是无法想像的。只有在网络中才可以发挥
Linux 潜力。不过,Linux
网络看起来很独特。您需要学习一些新术语和新工具。



第 8 部分. 备份与恢复
备份的数据是应对灾难的第一道防线。Linux
提供了多种选择,其中不乏一些很简单的方法。



第 9 部分. 安装软件
Linux
可以使用预先包装的二进制文件,或者您可以用源文件自己编译程序。用于安装
Linux
程序的工具非常实用,有很多您意想不到的功能。



转载自:http://tinyurl.com/dksbz


--
Ray
 楼主| 发表于 2005-9-4 20:56:49 | 显示全部楼层
Windows 到 Linux 之旅: 第 2 部分. 控制台速成班

IBM 电子商务架构师 Chris Walden 将通过他在
developerWorks 上发表的九篇系列文章来指导您如何在
Linux 环境中运用您的 Windows
操作技巧。本部分将介绍各种不同的 shell
和一些最基本的 Linux 命令。

Linux
中的所有管理任务都可以在控制台中完成。许多情况下,使用控制台比使用图形化的程序更快捷,而且还可能实现额外的功能。不仅如此,所有的控制台任务都可以写到脚本中,这样就可以自动执行。为了真正地驾驭您的
Linux
环境,您将希望掌握如何在控制台中工作。如果您曾经使用过
DOS/Windows,本文将引导您开始使用 Linux 控制台。

进入控制台
如果您的系统引导进入文本模式(为了降低服务开销,服务器通常是这样配置的),那么您在以文本形式登录后就已经在控制台中了。在典型的
Linux 系统中,通过组合键 Ctrl + Alt + (F1 - F6)
您可以切换到另外的控制台。每一个控制台是系统中一个完全独立的会话,不同的用户可以同时使用。

这一多控制台的特点与 Windows 中的多桌面不同。在
Linux
中,每一个控制台可以分别由完全不同的用户来控制。例如,您可能在控制台
1 中以 root身份登录,而在控制台 2 中以 joeuser
身份登录。两个控制台在各自的用户空间中运行不同的程序。与此类似,不同的用户可以远程登录到同一个
Windows 系统中。就这一点来说,Linux
更像是主机而不是简单的服务器或工作站。

如果您是在图形模式下,那么您可以打开一个 终端
(terminal)以进入控制台窗口。通常在桌面的任务条上会有终端的按钮。您也可以从上下文菜单(在桌面上单击右键)打开终端


命令
在控制台中可以使用的命令很多。其中有一些实际上只在编写脚本时才会用到。这里介绍一些您最可能用到的命令。不要忘记,所有的命令和选项都区分大小写。
-R 与
-r不同,会去执行不同的操作。控制台命令几乎全都是小写的。

cd
使用我们所熟悉的 cd
命令可以在目录间切换。一定注意的是在 Linux
中用的是正斜杠 (/),而不是您所熟悉的反斜杠
(\)。反斜杠也用到了,但只是用来说明命令需要换行继续,这样可以提高比较长的命令的可读性。

ls
ls
命令用于列出一个目录下的所有文件。可以使用许多不同的开关更改列表的表示形式:

列出文件
ls -l
        以长格式列出文件,包括文件大小、日期和时间、属性
ls -t         对文件以时间排序
ls -S         对文件以大小排序
ls -r         与一个排序开关组合起来使用,逆序排列。 ls -t
将最新的文件显示在列表的顶部。 ls -t
将最新的文件显示在底部。
ls -h         易读格式。使用 k、M、G
等来标识文件的大小,而不是以字节为单位。
ls -a         显示目录中所有的文件,包括隐藏文件

cp
使用 cp 命令来复制文件。这个命令与 DOS 下的 copy
命令基本一样。基本的开关如下:

复制文件
cp -R         递归地复制文件;当需要复制整个目录时会用到
cp -f         强制复制并覆盖已有的文件,不询问用户
cp -l         链接文件,而不是复制;见下面的说明

使用复制命令创建链接
用 cp
命令可以创建指向一个文件或者整个文件结构的硬链接。使用
-l
开关来指明操作是链接复制。所有的目录仍作为目录创建,但所有的文件会被设置为硬链接。

cp -lR /data/accounting/payroll /data/management/hr

上面的命令将把整个目录结构及其下面的文件从
/data/accounting/payroll 复制到
/data/management/hr/payroll。目录结构下的所有文件将被设置为硬链接。这样使一个文件在同一个文件系统中可以具备不同的视图。这也是有用的安全技术,使得在不同的目录下对同一文件有不同的访问权限。

mv
使用 mv
命令来移动和重命名文件。这个命令的工作方式基本上与
DOS 中的 move
命令一样,不过它可以移动整个目录结构及所有文件。

cat
使用 cat 命令来查看文件的内容。它相当于 DOS 中的
type
命令。它将把文件的内容转储到另一个文件、屏幕或者其他命令。
cat 是concatenate
的简写,还可以将一系列的文件合并为一个大文件。

more
使用命令 more
可以以分页的方式查看文件。它基本上与 DOS 中的 more
命令相同。

less
less
命令也是用来查看文件,但是它支持上下滚屏以及在文档中进行文本搜索。

vi
有一些人可能会说 vi 表示“virtually impossible”。它是
Unix 中的一个历史悠久的文本编辑器。 vi
并不真正直观,但是现在几乎所有的类 Unix
环境中都有 vi 。对于 Linux
中安装的版本有一个内置的教程,一旦您熟悉了 vi
,只需几次击键就可以完成不可思议的任务。说实话,没有任何编辑器能够取代
vi 来编辑密码和配置文件。

man
使用 man 命令来查看命令的文档。man 是 manual
的缩写。几乎每一个命令都有相应的文档。要深入了解
man ,请输入以下命令:

man man

info
info 命令与 man
命令类似,不过它提供了超链接文本,可以更方便地浏览文档。

哪个 shell?
DOS/Windows 与 Linux 的最重要的区别之一是 Linux 的命令
shell 是与操作系统相分离的一层。不同的 shell
环境影响您具备不同的功能,比如可编辑的命令行和历史命令回查等。shell
还决定了脚本中函数的语法。在 DOS/Windows
中,编写脚本程序只有一种情况,那就是使用效率低下的
BAT
文件。它的确可以完成很多功能,但除了完成那些基本的任务,复杂些的任务就需要脚本编写者具有极强的创造性。在
Linux
中,脚本中可以有循环,不仅可以执行基本的条件语句,很多在编程语言中才有的功能它都具备。如果您擅长编写
BAT 文件,那么 shell 脚本更会使您大展才华。

默认的 shell 是每个用户帐号的一个参数。Linux
中典型的默认 shell 是 /bin/bash,不过也可以用其他的
shell。每个 shell 的 man 文档实际上都非常好,都对各种
shell
及其使用进行了详细的说明。仅仅阅读下面的解释是不够的,应该从下面列出的
shell 中选择一个,去查看它的 man 文档。

bash
bash shell 是 Bourne shell 的一个免费版本,它是最早的
Unix shell,包括许多附加的特点。Bash
有可编辑的命令行,可以回查历史命令,支持 tab
键补齐以使用户避免输入长的文件名。

csh
C shell 使用的是“类C”语法,借鉴了 Bourne shell
的许多特点,只是内部 shell 命令集有所不同。

ksh
Korn shell 的语法与 Bourne shell 相同,同时具备了 C shell
的易用特点。许多安装脚本都使用 ksh
,即使您不把它作为您的主
shell,您也应该在系统中安装它。

tcsh
TC shell 是 C shell 的一个增强版本,与 C shell
完全兼容。

zsh
Z shell 是 Korn shell 的一个增强版本,具备 bash shell
的许多特色。

Shell 规则
您只需在控制台中执行相应的命令就可以随时切换
shell。只要在文件顶部放置一个井号 (#!) 指向需要的
shell,脚本就可以指定想要运行的
shell。当脚本运行的时候,不管用户所处的 shell
环境是什么,它都会在正确的 shell
环境中运行。下面例子中的这行代码指出脚本需要在 C
shell 下运行:

#!/bin/csh
给我做链接,这样就更安全!

Linux
文件系统最重要的特点之一是它的文件链接。链接是对文件的引用,这样您可以让文件在文件系统中多处被看到。不过,在
Linux
中,链接可以如同原始文件一样来对待。链接可以与普通的文件一样被执行、编辑和访问。对系统中的其他应用程序而言,链接就是它所对应的原始文件。当您通过链接对文件进行编辑时,您编辑的实际上是原始文件。链接不是副本。有两种类型的链接:硬链接和符号链接。

硬链接只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为
inode)。当您移动或删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件的位置,这样有助于文件的安全。如果您删除的文件有相应的硬链接,那么这个文件依然会保留,直到所有对它的引用都被删除。

符号链接是一个指针,指向文件在文件系统中的位置。符号链接可以跨文件系统,甚至可以指向远程文件系统中的文件。符号链接只是指明了原始文件的位置,用户需要对原始文件的位置有访问权限才可以使用链接。如果原始文件被删除,所有指向它的符号链接也就都被破坏了。它们会指向文件系统中并不存在的一个位置。

两种链接都可以通过命令 ln <source> <target> 来创建。 ln
默认创建的是硬链接。使用 -s
开关可以创建符号链接。


# Create a hard link from MyFile in the current


# directory to /YourDir/MyFile


ln MyFile /YourDir





# Create a symbolic (soft) link from MyFile in


# the current directory to /YourDir/YourFile


ln -s MyFile /YourDir/Yourfile



在上面的例子中,MyFile、/YourDir/MyFile 和 /YourDir/Yourfile
会被看成是同一个文件。

走出您的 shell
对 Linux
管理来说,必须学习在控制台环境下工作。虽然有一些工具可以让您避免使用控制台,但是您会受到那些工具的很多限制。进入控制台很简单,使用
man 和 info 命令访问命令文档也很方便。


--
Ray
回复

使用道具 举报

 楼主| 发表于 2005-9-4 20:57:24 | 显示全部楼层
Windows 到 Linux 之旅: 第 1 部分. Linux 思想

不同之处与相似之处

Chris Walden
电子商务架构师, IBM Developer Relations
2003 年 11 月

Column iconIBM 电子商务架构师 Chris Walden 将通过他在
developerWorks 上发表的九篇系列文章来指导您如何在
Linux 环境中运用您的 Windows
操作技巧。我们首先来认识 Linux 和 Windows
之间的不同之处与相似之处,并学会不要总是通过重新引导系统来解决问题。

您已经开始从 Windows 转向
Linux,这可能是您自己的决定,也可能是“不得已而为之”。无论出于何种原因,您原来非常熟悉的工作方式和工具可能都将变得完全不同。不但如此,您可能还需要培训别人如何去轻松地管理
Linux。管理绝不是循规蹈矩,成功地管理计算环境是一项创造性的工作。实现这一转变就如同一个熟练的油画家转而去从事雕塑一样。

开放的标准使得 Linux 也要遵循 Windows
管理的基本模式,这对用户来说的确是好消息。虽然两者的一些术语并不相同,工具也有一些区别,但是根本的原理是一样的。更好的消息是,当您习惯
Linux
的工作方式后,您将具有更大的工具集来控制和维护您的环境。Linux
的强大之处在于它的稳定性和灵活性。一旦您领悟了
Linux
的思想,您将可以完成更多的任务,使更多的任务自动化,更多地以远程方式完成任务。

Linux 与 Windows 有一些类似
在讨论 Linux 与 Windows
有多大不同之前,让我们先来看看这两者有哪些相似之处。

用户和组
Linux 和 Windows
都是多用户操作系统。都可以由许多不同的用户来使用,为每个用户提供单独的环境和资源。基于用户身份来控制安全性。都可以以组成员的方式来控制资源的访问权限,这样在用户数目较大时可以不必为每一个帐号设置权限。

用户和组可以集中管理,让多个服务器共享相同的用户和身份验证数据。

文件系统
Linux 和 Windows
都支持多种文件系统。文件资源可以通过 NetBIOS、FTP
或者其他协议与其他客户机共享。可以很灵活地对各个独立的文件系统进行组织,由管理员来决定它们在何处可以以何种方式被访问。

端口和设备
两种操作系统都支持各种物理设备端口,比如并口、串口和
USB 接口。支持各种控制器,比如 IDE 和 SCSI
控制器。Linux 还支持很多“刚刚上市”的标准硬件。

网络
Linux 和 Windows 都支持多种网络协议,比如 TCP/IP、NetBIOS

IPX。都支持多种类型的网络适配器。都具备通过网络共享资源的能力,比如共享文件和打印。都可以提供网络服务能力,比如
DHCP 和 DNS。

服务
Linux 和 Windows
都提供服务。所谓服务,指的是那些在后台运行的应用程序,可以为系统和远程调用该服务的计算机提供一些功能。在系统引导的时候可以单独控制并自动启动这些程序。(注意:Linux
中沿用了 Unix 的习惯,称这种应用程序为 daemon,)

Linux 与 Windows 的不同
虽然有一些类似之处 ,但 Windows 和 Linux
的工作方式还是存在一些根本的区别。这些区别只有在您对两者都很熟悉以后才能体会到,但它们却是
Linux 思想的核心。

Linux 的应用目标是网络而不是打印
Windows
最初出现的时候,这个世界还是一个纸张的世界。Windows
的伟大成就之一在于您的工作成果可以方便地看到并打印出来。这样一个开端影响了
Windows 的后期发展。

同样,Linux 也受到了其起源的影响。Linux
的设计定位于网络操作系统。它的设计灵感来自于 Unix
操作系统,因此它的命令的设计比较简单,或者说是比较简洁。由于纯文本可以非常好地跨网络工作,所以
Linux 配置文件和数据都以文本为基础。

对那些熟悉图形环境的人来说,Linux
服务器初看可能比较原始。但是 Linux
开发更多关注的是它的内在功能而不是表面上的东西。即使是在纯文本的环境中,Linux
同样拥有非常先进的网络、脚本和安全能力。执行一些任务所需的某些表面上看起来比较奇怪的步骤是令人费解的,除非您认识到
Linux 是期望在网络上与其他 Linux
系统协同执行这些任务。Linux
的自动执行能力也很强,只需要设计批处理文件就可以让系统自动完成非常详细的任务。Linux
的这种能力来自于其基于文本的本质。

可选的 GUI
Linux 有图形组件。Linux
支持高端的图形适配器和显示器,完全胜任图形相关的工作。现在,许多数字效果艺术家在
Linux
工作站上来进行他们的设计工作,而以前这些工作需要使用
IRIX 系统来完成。但是,图形环境并没有集成到 Linux
中,而是运行于系统之上的单独一层。这意味着您可以只运行
GUI,或者在需要时才运行
GUI。如果您的系统主要任务是提供 Web
应用,那么您可以停掉图形界面,而将其所用的内存和
CPU 资源用于您的服务。如果您需要在 GUI
环境下做一些工作,可以再打开它,工作完成后再将其关闭。

Linux
有图形化的管理工具,以及日常办公的工具,比如电子邮件、网络浏览器和文档处理工具等。不过,在
Linux 中,图形化的管理工具通常是控制台 (命令行)
工具的扩展。也就是说,用图形化工具能完成的所有工作,用控制台命令同样可以完成。同样,使用图形化工具并不妨碍您对配置文件进行手工修改。其实际意义可能并不是特别显而易见,但是,如果在图形化管理工具中所做的任何工作都可以以命令行的方式完成,这就表示那些工作也可以由一个脚本来实现。脚本化的命令可以成为自动执行的任务。Linux
同时支持这两种方式,并不要求您只用文本或者只用
GUI。您可以根据您的需要选择最好的方法。

Linux
中的配置文件是人类可读的文本文件,这与过去的
Windows 中的 INI 文件类似,但与 Windows
的注册表机制在思路上有本质的区别。每一个应用程序都有其自己的配置文件,而且通常不与其他的配置文件放在一起。不过,大部分的配置文件都存放于一个目录树
(/etc)
下的单个地方,所以看起来它们在逻辑上是在一起。文本文件的配置方式使得不通过特殊的系统工具就可以完成配置文件的备份、检查和编辑工作。

文件名扩展
Linux 不使用文件名扩展来识别文件的类型。相反,Linux
根据文件的头内容来识别其类型。为了提高人类可读性您仍可以使用文件名扩展,但这对
Linux
系统来说没有任何作用。不过,有一些应用程序,比如
Web
服务器,可能使用命名约定来识别文件类型,但这只是特定的应用程序的要求而不是
Linux 系统本身的要求。

Linux
通过文件访问权限来判断文件是否为可执行文件。任何一个文件都可以赋予可执行权限,这样程序和脚本的创建者或管理员可以将它们识别为可执行文件。这样做有利于安全。保存到系统上的可执行的文件不能自动执行,这样就可以防止许多脚本病毒。

什么是内核?
Linux
实际上只是内核;它实现了多任务和多用户功能,管理硬件,分配内存,激活应用程序的运行。

对初学者来说,最重要的是要明白奇数的内核版本(比如
2.3、2.5、2.7)是实验用的、正在开发的内核。
稳定的、正式发行的内核版本号是偶数的(比如
2.4、2.6、2.8)。

重新引导是最后的手段
如果您使用 Windows
已经很长时间了,您可能已经习惯出于各种原因(从软件安装到纠正服务故障)而重新引导系统。在
Linux 思想中您的这一习惯需要改变。Linux
在本质上更遵循“牛顿运动定律”。一旦开始运行,它将保持运行状态,直到受到外来因素的影响,比如硬件的故障。实际上,Linux
系统的设计使得应用程序不会导致内核的崩溃,因此不必经常重新引导(与
Windows 系统的设计相对而言)。所以除了 Linux
内核之外,其他软件的安装、启动、停止和重新配置都不用重新引导系统。

如果您确实重新引导了 Linux
系统,问题很可能得不到解决,而且还会使问题更加恶化。学习并掌握
Linux 服务和运行级别是成功解决问题的关键。学习 Linux
最困难的就是克服重新引导系统的习惯。

另外,您可以远程地完成 Linux
中的很多工作。只要有一些基本的网络服务在运行,您就可以进入到那个系统。而且,如果系统中一个特定的服务出现了问题,您可以在进行故障诊断的同时让其他服务继续运行。当您在一个系统上同时运行多个服务的时候,这种管理方式非常重要。

命令区分大小写
所有的 Linux 命令和选项都区分大小写。例如, -R 与
-r不同,会去做不同的事情。控制台命令几乎都是小写的。我们将在“
第 2 部分.
控制台速成班”中对命令进行更详细的介绍。

我应如何定位 Linux?
从管理 Windows 到管理 Linux
的转变是很麻烦的。不过,作为一个 Windows
管理员,您有自己的优势。您对计算的工作方式的理解依然可用。能否成为一个成功的
Linux
管理员将取决于您对两者区别的认识以及操作习惯的调整。

Linux 相对于 Windows 的许多变化都是有益的。空闲的 GUI
的开销被归还给服务。任务可以脚本化并可以自动执行。配置文件基于文本并且人类可读。在大多数情况下不必重新引导系统。实际上,您应该抑制重新引导系统的冲动。


--
Ray
回复

使用道具 举报

 楼主| 发表于 2005-9-4 20:57:42 | 显示全部楼层
Windows 到 Linux 之旅: 第 3 部分. Webmin 简介(插图缺,sorry)

一个基于浏览器的管理工具

级别: 中级

Chris Walden
电子商务架构师, IBM Developer Relations
2004 年 1 月

Column iconIBM 电子商务架构师 Chris Walden 将通过他在
developerWorks 上发表的九篇系列文章来指导您如何在
Linux 环境中运用您的 Windows 操作技巧。本部分介绍了
Webmin
的安装和使用,它是一个基于浏览器的管理工具,可以应用于
Linux
和其他一些平台,提供了可以完成很多管理和操作任务的图形化界面。

从 Windows 环境的管理转到 Linux
环境的管理时所面临的挑战之一是,您需要去学习利用新的工具。作为一个管理员,您希望理解操作系统的细节以发挥它的最大功效。但是,当您还处在学习阶段时,就需要去完成具体的工作。

为加速您驾驭 Linux 的进度,我们将安装一个叫做 Webmin
的程序。如 Webmin.com(参阅
参考资料中的链接)所言:“Webmin 是一个基于 Web 的
Unix
系统管理界面。借助任何支持表格和表单的浏览器(和
File Manager 模块所需要的
Java),您就可以设置用户帐号、Apache、DNS、文件共享,等等。Webmin
包括一个简单的 Web 服务器和许多 CGI
程序,这些程序可以直接修改系统文件,比如
/etc/inetd.conf 和 /etc/passwd 。Web 服务器和所有的 CGI
程序都是用 Perl 5 编写的,没有使用任何非标准 Perl
模块。”

Webmin 事实上可以运行于所有的类 Unix 平台,包括
Linux、AIX、HPUX、Solaris、OS X,等等。它具有一个 Web
前端,可以完成 Linux
中的诸多管理任务。它可以以本地方式或者远程方式运行于任意图形化浏览器中。Webmin
使用 SSL 来保证安全,防止侦听。当您学习 Linux
管理时,Webmin 将为您节省很多时间。Webmin
还可以帮您完成那些还不能自动执行的繁琐的任务。

Webmin
是可扩展的。作者提供了一个开发向导,而且已经出现了一些第三方的模块。您也可以设计您自己的模块,以使
Webmin 永远可以按您的需要进行调整。

安装 Webmin
使用 Webmin 的第一个步骤是安装。Webmin
在少数的发行版本中已经附带,不过从 Webmin
网站下载也很简单 (参阅 参考资料中的链接)。

写作本文时,Webmin 的最新版本是 1.90
。根据您所使用的 Linux
发行版本,正确的安装方法不尽相同。如果您使用的是
Red Hat Linux 或者是 UnitedLinux
发行版本的一种(SuSE、Turbo、Connectiva 或者
Caldear),那么最简单的是使用 RPM
安装方法。如果您用的是其他的发行版本,那么您需要去阅读您的发行版本的文档和
Webmin
安装说明来选择最好的安装方式。以下我们假定是以
RPM 方式进行安装。

首先检查您的系统上是否已经安装了
Webmin。在文本终端中输入:


rpm -q webmin

如果您的系统已经安装了
Webmin,您会得到它的版本号:


Webmin-1.090-1

否则您会看到没有安装 Webmin 的提示:


package webmin is not installed

安装软件包
在 Linux 上大多数软件包的安装都是像本文中安装 Webmin
这样简单。要了解更多有关软件包的安装和7载——甚至有关自源代码编译应用程序——的信息,请参阅本系列文章的
第 9 部分。

即便已经安装了
Webmin,它的版本也可能会低于当前可用的最新版本。在这种情况下,您可以使用下面的命令来对它进行升级或者重新安装:


rpm -Uvh webmin-1.090-1.noarch.rpm

在进行冗长的更新时会输出一行带有 #
标记的进度条。

RPM noarch
您会注意到 Webmin 被作为“noarch”软件包列出来。由于
RPM
是二进制文件,它们通常为特定的体系结构进行编译,比如
i386 或者
ppc。在错误的体系结构上安装软件包会导致错误的结果。因为
Webmin 是用 Perl 编写的,而 Perl
是体系结构无关的,所以 Webmin 被标识为“noarch”。

当 Webmin
安装后,默认是启用的。但是这样安装并没有启用
SSL。SSL 需要安装一个称为 Net::SSLeay 的 Perl
模块。如果不装这个模块,Webmin
只有从本地控制台运行时才是安全的。在本文的最后将简要介绍
Webmin 的安全使用。

Practical Extraction and Reporting Language (Perl)
Perl 是 1987
年出现的一种多平台的解释性编程语言。它在多种平台都可以使用,包括
Windows,具有成熟完善的脚本功能。Perl
的强项在于文本处理,广泛应用于 Web CGI 编程。Perl
可以通过添加模块来进行扩展,这些模块实际上是函数库,也是用
Perl 编写的。大多数模块,事实上包括 Perl
本身,都可以遵循 The Artistic
License这一许可而自由获得(参阅
参考资料中的链接)。

使用 Webmin
使用您喜欢的 Web 浏览器来访问
Webmin。其中文件浏览器和 telnet/ssh
客户机这两个工具是基于 applet
的,需要在您的浏览器上安装有 Java Runtime
Environment。这两个工具会带来便利,但并不是不可或缺的。其余所有模块都没有特殊的要求。

将您的浏览器指向系统的 10000 端口,以开始使用
Webmin。在本地系统的浏览器中,您应该输入
http://localhost.localdomain:10000/
。首先您看到的将是一个登录界面。

Webmin
的用户与操作系统的用户是分开的。这就使得您不通过常规的
Unix 验证机制就可以通过 Webmin
来设置进行管理的用户。不过,如果您想让某些用户可以使用
Webmin,您可以将他们加入 Webmin 用户列表,让 Webmin
通过 Unix 工具来对其进行验证,而不再使用 Wemin
的内部验证机制。可以控制每个用户对 Webmin
模块的访问。例如,Helpdesk
职员只可以使用密码功能,而其他职员可以访问所有的模块。

安装完成后,root 用户会被自动创建,密码为系统的
root 密码。Webmin
根据登录记录日志,这样,在一个多管理员的环境中,可能更应该创建一个具有
root
用户权限的管理员组,并为使用此系统的每个人分别去创建用户。您第一次必须以
root 身份登录。

root 用户
在 Linux 中,首要的管理员用户称为 root。root
用户对整个系统有完全的控制权。不可以滥用 root。

Webmin 窗体
您看到的第一个屏幕将是 Webmin Configuration
Section。在这里您可以配置 Webmin
用户、配置模块和查看活动日志。顶部的图标可以在
Webmin
中不同的模块窗体间进行切换。所有的模块都是可配置的,您可以根据自己的需要对它们进行重组。

图 1. Webmin 配置屏幕
Webmin 配置屏幕

用户也可以使用 Webmin
有一个图标用来配置可选的 Usermin
软件包,这个软件包提供了一个基于 Web
的工具,用户可以借助它完成修改密码、管理系统邮件等任务。使用
Usermin 不能访问系统配置文件。Usermin 和 Webmin
都将是免费的产品。

System窗体可以进行操作系统的总体配置。在这里,您可以配置文件系统、用户、组和系统通常的引导行为。您可以控制系统中运行的服务,通过选择
Bootup 和 Shutdown
图标来决定它们是否自动启动。不过,对那些服务的具体配置是由
Servers 窗体完成的。尤其要注意“Software
Package”工具,它可以方便地查看您系统中已经安装的软件包,以及到发行版本升级库和
rpmfind.net 的接口,rpmfind.net 是 Internet 上的一个公用的
RPM 库(参阅 参考资料中的链接)。

Servers
窗体可以对您可能会在系统中运行的各个服务进行配置。BIND
和 DHCP 工具非常便捷。同时 Samba
工具也很好用,可以为 Windows
和其他客户机配置文件和打印机的共享。SMTP 服务器
Sendmail 以其极复杂的配置文件而出名。Webmin Sendmail
工具同样为您解决了这一问题。

图 2. Webmin 服务器屏幕
Webmin 服务器屏幕

Networking
窗体所提供的工具可以用来配置网络硬件和进行一些复杂的网络控制,比如防火墙。所有的工具都要去修改标准的配置文件,因此您在
Webmin
中所做的任何工作都可以由相对应的控制台工具来完成。

Hardware
窗体用于配置物理设备,主要是打印机和存储设备。特别值得关注的是逻辑卷管理
(Logical Volume Management,LVM)
工具,它可以帮您可视化地管理您的 Linux
系统上的动态卷。

Cluster 窗体中的工具用于管理集群系统。
集群在这里指的是其配置需要同步的一组相关系统。系统可以在进行系统故障检测时同步用户、组、软件包等配置。这些工具可以帮助您构建热错误恢复系统和其他需要同步的系统。集群是一个高级的主题,可能需要安装一些您的
Linux 发行版本没有自带的软件包。

Others
窗体中有各种各样的工具,您可能会发现它们很有用。“SSH/Telnet
Login”和“File Manager”工具需要 applet
支持,只有在您的浏览器上安装了 JRE
以后才可以运行。“Perl Modules”工具可以使您紧跟 Perl
模块的发展,它可以直接连接到 Internet 上的
CPAN。“File
Manager”工具为服务器的文件系统提供了一个像浏览器一样的视图,如果您是在远程工作,那么不通过您的工作站的内存就可以对文件进行移动和复制。
“SSH/Telnet Login” 工具是一个远程 shell
控制台,使您可以通过浏览器进入控制台。

结束语
Webmin 是一个用 Perl
编写的基于浏览器的管理应用程序。Webmin
是可扩展的,除了用于 Linux 之外,还可以用于其他类
Unix
操作系统。安装完成后,可以在本地或者远程浏览器通过一个特定的端口,通常是
10000,来进入
Webmin。它具有可以指向和点击的界面,可以完成各种
Linux
管理任务,包括用户管理、网络防火墙和网络设备的配置。

Webmin 安装和使用都是免费的,它是一个很好的管理
Linux 环境的工具,如果您以前用的是 Windows
的图形化管理工具。Webmin
工具是基于控制台的工具的前端,因此使用这两种工具进行配置效果是一致的,它们都可以可靠地完成管理任务。


--
Ray
回复

使用道具 举报

 楼主| 发表于 2005-9-4 20:58:10 | 显示全部楼层
Windows 到 Linux 之旅: 第 4 部分. 用户管理

密码、组和它们的映像

级别: 初级

Chris Walden
电子商务架构师, IBM Developer Relations
2004 年 1 月

Column iconIBM 电子商务架构师 Chris Walden 将通过他在
developerWorks 上发表的九篇系列文章来指导您如何在
Linux 环境中运用您的 Windows
操作技巧。在本部分,我们使用 Webmin
界面和命令行添加、删除用户和组,并介绍了密码和组文件的映像。

Linux 中的用户管理与 Windows
中的用户管理很相似,但又很不相同。两个系统都是多用户系统,基于用户身份来控制他们对资源的访问。两个操作系统都允许将用户分组管理以简化访问控制,以避免为众多用户分别设置权限。不过,相同之处也仅此而已。

超级用户
在 Linux 中,超级用户称为 root。root
用户可以控制所有的程序,访问所有文件,使用系统上的所有功能。对
root
用户来说没有不可以做的事情。就管理的角度而言,root
的权限是至高无上的。所以,root
帐号一定要通过安全的密码保护起来,这一点非常重要。您不应该使用
root 身份来处理日常的事务。

其他用户也可以被赋予 root
特权,但一定要谨慎行事。通常您可以配置一些特定的程序由某些用户以
root 身份去运行,而不必赋予他们 root 权限。

创建新用户
可以通过命令行或者 Webmin 等工具来创建新用户。

添加用户的命令是 useradd
。例如,从控制台中创建一个新用户:

useradd -c "normal user" -d /home/userid -g users\


-G webadm,helpdesk -s\ /bin/bash userid


这个命令创建了一个名为“userid”(命令的最后一个参数)的新用户。“normal
user”是对这个用户的注释。userid
的主目录将是“/home/userid”。userid 的主组将是
users,但他也被加入到“webadm”和“helpdesk”这两个组。userid
将使用“/bin/bash”shell 作为他的常规控制台环境。

使用 Webmin
创建新用户简单而且直观。使用您喜欢的浏览器登录到
Webmin,切换到 System 窗体。选择“Users and
Groups”工具,然后点击 Create a new user。

图 1. Webmin 的 Create User 屏幕
图 1. Webmin 的 Create User 屏幕

填写好用户的详细信息,然后点击
Create。用户创建完成。

用 GUI 工具添加用户在“ Basic tasks for new Linux
developers”一文中也讨论了。

修改密码
可以从控制台使用 passwd 命令来修改用户的密码:


passwd userid

只有 root 用户可以用 passwd
修改其他用户的密码。输入完命令后,系统将提示您输入并确认您要设置的密码。如果两次输入一致,用户的标识就会更新,密码修改成功。从控制台输入
passwd
,用户可以修改自己的密码;在这种情况下,系统会向用户询问原来的密码,验证通过后才可以输入新密码。

大多数的 Linux 发行版本安装时都会启用 password cracker
模块,用于修改密码。这个模块将检查密码是否遵循了良好的密码设置习惯。如果用户使用了不安全的密码,它将自动警告用户。您可以将系统配置为要求用户必须使用安全的密码。root
在设置不安全的密码时也会被警告,但是仍然可以设置成功。

在 Webmin 中,可以使用 System窗体中的“Change
Passwords”模块来修改密码。在列表中选择一个用户,然后在空白处输入新密码。

删除用户
可以从控制台使用 userdel 命令来删除用户。


userdel -r userid

使用可选的
-r开关可以将用户的主目录及所有相关信息全部删除。如果想要保留用户主目录,那么不要使用
-r开关。这个开关不会自动删除系统中所有属于这个用户的文件,只是删除他的主目录。

如何组织用户
Linux 的配置是基于文本的。Linux
中的所有用户都存放于 /etc/passwd 文件中。您可以使用
more 命令来分页查看这个文件:

more /etc/passwd

/etc 目录
不要忘记,Linux 的大多数配置文件都是在 /etc
目录下。

这个文件的结构非常直观。每一行是一个新用户,参数用冒号隔开。


userid:75000:75000::/home/userid:/bin/bash

第一列是用户名。第二列是用户的密码。第三列是用户的数字
ID。第四列是用户的主组的
ID。第五列是用户的全名,或者是注释。第六列是用户主目录的位置,这个目录通常位于
/home 目录下,目录名与用户 ID
相同。第七列是用户的默认控制台 shell。

Password 文件结构
Login ID        Password        User ID        Group ID        Comment        Home directory        Default shell
userid        x        75000        75000                /home/userid        /bin/bash

注意上面的例子中 Password
列是一个“x”。这并不是说用户的密码是“x”。以前密码曾经是以平文本的形式存储在这个文件中。现在也还有这样的配置,但由于密码容易泄露,已经很少有人再这样做了。解决的方法是创建
shadow password。在 /etc/passwd
文件中存放密码的位置只是存放一个“x”,而经过加密的密码存放于
/etc/shadow
文件中。这项技术通过将用户信息与密码数据分离而提高了安全性。MD5
密码加密算法支持更为可靠的密码,从而进一步提高了安全性。一个映像密码条目的样例如下所示:

映像密码和用户权限
Linux 用户管理的特点之一在于它沿袭了 UNIX
风格,使用 passwd 文件。登录的用户必须可以读取
/etc/passwd
文件,以判断他的用户名是否存在。如果将用户名和密码存放在同一个文件中,潜在的攻击者就可能获得密码;他们可以下载
/etc/passwd
文件,然后以暴力破解的方法获得密码。映像文件不必所有人都可读,这样攻击者将不能获得任何形式的密码。

这种方法还是不最好的,因为攻击还是可以得到 一些
用户信息。更好的方法是将用户保存于一个单独的地方,比如使用
LDAP。

userid:$1$z2NXZR19$PZpyL84DmPKBXMeURaXXM.:12138:0:186:7:::

所有的映像密码过程都是在后台进行,您只需要启用这项功能,别的什么都不用去做。


Linux 中的组与 Windows
中的组很类似。您可以创建一个组,然后将成员添加到这个组的列表中。可以以组为单位来分配资源。隶属于同一个组的成员可以访问同一资源。

使用控制台命令 groupadd 创建组很简单:


groupadd mygroup

这将创建一个名为“newgroup”的没有任何成员的组。组存放于
/etc/group
文件中。每一个组由单独的一行列出,如下所示:

mygroup:527:

第一列是组的名字。第二列是一个密码。同样,“x”说明真正的密码存放在
/etc/gshadow
映像文件中。第三列是组的一个数字索引。在第三列之后将是以逗号隔开的组的成员的用户
ID。

可以使用 gpasswd 命令向组中添加成员,要使用 -a
开关,后面跟要添加的用户名:


gpasswd -a userid mygroup

删除组的成员还是使用这个命令,不过使用的开关是
-d 而不是 -a :


gpasswd -d userid mygroup

也可以通过直接编辑 /etc/group 文件来对组进行修改。

编辑 passwd 文件时要当心
直接编辑 /etc/passwd 文件和 /etc/group
文件的真正危险在于有可能偶然失误而造成 ID
编号的重复。所有的资源都通过 ID
编号而不是用户或组的名字来确定用户的身份。如果您不小心造成了
ID
编号的重复,那么可能会有一些意想不到的事情发生。例如,如果您将一个用户的
ID 编号设置为 0 (root 用户的
ID),那个用户的身份将是
root!。另外,如果您在文件中删除了用户行或者组行,那么对应的用户或组也就被删掉了。

这些都是人为的错误。使用工具可以避免这些错误。不过,有时直接去编辑
/etc/group
文件是解决问题最快捷的途径。您一定要记住,当您在编辑那些文件时,您管理的是实际的权力。一定要小心。

在 Webmin
中,可以使用前面用到的管理用户的工具来创建、编辑、除去组。

用户和组的关联
虽然在这里我们不能详尽地论述访问控制,不过您应该对用户和组对文件的访问权限有初步的了解。如果您以长格式列出一个目录下的文件,您看到的将如下显示。

-rw-r--r-- 1 userid mygroup 703 Jun 23 22:12 myfile

现在暂时忽略其他的列,只去看第三、四和最后一列。第三列是文件主人的名字,userid。第四列是关联到这个文件的组,mygroup。最后一列是文件名。每个文件只能属于一个主人和一个组。可以为不能归于这两类的其他用户(Other)设置权限。可以认为
Other 相当于 Windows 中的 Everyone 组。

一个文件只能属于一个主人,这在操作系统中很常见,但是,文件只能属于一个组,初次使用这一规则的管理员可能会觉得受到了限制。事实并不如此。由于用户可以同时是多个组的成员,所以只需要创建新的组就可以安全使用资源。在
Linux
中,往往是基于所需要的资源访问权限而不是根据业务单位来定义组。如果系统的资源逻辑上是有组织的,那么可以创建更多的组来更好地控制对资源的访问。

在本文最后的 参考资料
部分,您可以找到关于关联用户和组的更多详细资料。查看
man chmod 可以获得如何改变文件权限的详细信息。

结束语
在 Linux 中管理用户和组的方式与 Windows
中本质上是相同的,但是 Linux
中只能有惟一的组可以关联到一个系统资源。应该这样认识
Linux
中的组管理:不要吝惜对组的使用,在复杂的环境中,不要害怕创建很多组。应该根据资源访问权限而不是基于业务单位去创建组。

用户和组信息分别存储在 /etc/passwd 文件和 /etc/group
文件中。您的系统可能还会有 /etc/shadow 和 /etc/gshadow
文件,它们存储的是为了安全而经过加密的密码。直接编辑这些文件来管理用户和组不是不可以,但您一定要谨慎行事。

所有的用户和组的管理都可以在控制台中完成,可以写成脚本。也可以使用
Webmin 等工具以图形化的方式管理用户和组。


--
Ray
回复

使用道具 举报

 楼主| 发表于 2005-9-4 20:58:32 | 显示全部楼层
Windows 到 Linux 之旅: 第 6 部分. 使用分区和文件系统

在 Linux 中使用磁盘和设备

级别: 初级

Chris Walden
电子商务架构师, IBM Developer Relations
2004 年 1 月

Column iconIBM 电子商务架构师 Chris Walden 将通过他在
developerWorks 上发表的九篇系列文章来指导您如何在
Linux 环境中运用您的 Windows
操作技巧。在本部分,我们研究了 Linux
的分层目录结构,以及装载和设备。

在 Linux 中文件和存储设备的使用与 Windows
中不同。虽然同样有文件和分层目录结构,但是除此以外您还需要建立一种不同的思维方式。
清单 1. 目录结构


/
|-- bin
|-- boot
|-- dev
|-- etc
|-- mnt
|-- opt
|   |-- IBM
|   |   |-- WebSphereStudio
|   |   `-- db2
|   |-- IBMHttpServer
|-- root
|-- sbin
|-- tmp
|-- usr
|   |-- X11R6
|   |   |-- bin
|   |   |-- include
|   |   |-- lib
|   |   |-- man
|   |   `-- share
|   |-- bin
|   |-- dict
|   |-- doc
|   |-- etc
|   |-- include
|   |-- lib
|   |-- libexec
|   |-- local
|   |   |-- OpenOffice
|   |   |   |-- sbin


没有驱动器字母!
在 Linux
中没有驱动器字母,这确实相当有用。如果您曾经在复杂的网络环境中使用过
Windows
系统,并且运行这个系统的机器带有若干个设备,那么您可能会发现字母表中的字母不够用。在
Linux 中,只有一个文件结构。它以 root (/)
开始,所有的本地文件系统,所有本地设备,以及所有的远程文件系统都表示为这个结构中的子目录。

当 Linux 第一次引导时,它根据 /etc/fstab
文件中的信息构建这个文件结构。Windows
为硬盘驱动器分区和其他存储设备分配驱动器字母,而
Linux 在 root
文件结构中为它们分配目录。这个分层的结构是完全可配置的,并且可以动态地修改。

装载!
将一个设备添加到文件系统中,术语上称为
装载。Linux 会自动装载一个 / (root)
文件系统。也可能会有一个单独的 /boot
文件系统,其中存放的是核心的内核引导文件。Linux
还将装载一些特殊的文件系统。交换分区并不表示为文件系统的一部分,但是内核会处理它。不过,其他特殊的文件系统,比如
proc,被看作是文件系统的常规部分,可以像普通文件一样对它进行处理。

什么是 /proc?
/proc 文件系统是 Windows 思想与 Linux
思想不同之处的极好示例。 /proc
存储的是对正在运行的系统各个方面的虚拟描述。在那里有
IRQ
设置、内存使用、加载的设备驱动器、网络状态等很多信息。甚至有一个叫做
/proc/kcore
的文件,是所有用到的系统内存的虚拟描述。这里的每一个文件都可以像普通文件或二进制文件一样解析。可以编写某些文件来改变运行着的内核的行为,而不用重新引导。例如,为打开系统中启用的第一个以太网设备的
IP 转发,您可以使用一个文件命令:


echo 1 > /proc/sys/net/ipv4/conf/eth0/forwarding

这种系统的主要好处在于,您只需要使用简单的脚本技术,就可以对您的正在运行的系统进行深入而有效的操作。

其他文件系统,比如可移动的媒体或者远程文件系统,需要手工装载。装载一个文件系统时,您需要知道在
Linux
中对它进行引用的正确方法,还需要有一个空目录作为
装载点。对于可移动媒体,Linux
可能在安装时就为您创建了装载点。在 Red Hat Linux
中,cdrom 设备被设置装载到 /mnt/cdrom
目录。也就是说,当您将一张 CD 放入 CDROM
设备后,输入命令:

mount /mnt/cdrom

CD 就会被添加到文件系统中,CDROM
设备会被锁定以使它不会被意外弹出。只需要到
/mnt/cdrom 目录就可以访问 CD 中的内容。当不再使用 CD
时,您可以用下面的命令将它从文件系统中移除:

umount /mnt/cdrom

/mnt/cdrom 目录将变空,CDROM
设备的锁定被解除。您现在可以安全地弹出
CD。对其他可移动媒体也是如此,比如软盘驱动器
(/mnt/floppy)。

运行不带参数的 mount
命令会显示出当前已装载的文件系统。

为什么都需要加锁?
不要忘记,Linux
不仅是多用户的,而且是多会话的。也就是说几个用户可以同时登录到系统中、运行程序、使用资源。这与
Windows
中的登录后使用共享文件不同。每一个用户都可以像自己坐在控制台前一样使用系统。为了保持稳定,Linux
不允许任意释放当前正在使用的文件系统,通过锁定
CD,在直到没有人再使用之前 CD 不会被弹出。

/etc/fstab 文件
设备与其装载点之间的关联关系在 /etc/fstab
中配置。这个文件可以直接修改,也可以由管理工具来维护。下面是一个
/etc/fstab 示例:

理解 /etc/fstab
/dev/hda5                ext3        defaults        1 1
/dev/hda2        /boot        ext3        exec,dev,duid,rw        1 2
/dev/hda6        swap        swap        defaults        0 0
/dev/scd0        /mnt/cdrom        auto        ro,noauto,exec        0 0
none        /dev/pts        devpts        id=5,mode=620        0 0
none        /proc        proc        defaults        0 0
none        /dev/shm        tmpfs        defaults        0 0

每一行表示一个要装载的文件系统。第一列指出的是要装载的设备。第二列是装载点,也就是设备在文件系统中的位置。第三列指出了文件系统的类型。第四列是处理文件系统的选项。最后一列是文件系统的标志位。第一个数字是
1 或者 0,指定系统是否应该用
dump(系统备份的一个选项)进行复制。第二个数字是
0、1 或者 2,指定了在引导时检查文件系统的次序。0
表示完全不检查。1 表示要最先检查, root (/)
文件系统需要指定为 1。其他文件系统应该是 2。

在上面列出的 fstab 文件中,root 文件系统位于第一个
IDE
硬盘驱动器的第五个分区中,这个分区是扩展分区的第一个逻辑驱动器。/boot
文件系统位于第一个 IDE
硬盘驱动器的第二个主分区中,其中存放的是内核启动文件。交换分区位于第一个
IDE
硬盘驱动器的第六个分区,也就是扩展分区的第二个逻辑驱动器。列表中的其他文件系统相应的设备是“none”。我们马上就要阐述这一问题。现在我们先来关注物理磁盘。

什么都是文件
在 Linux 中,文件系统由类似于文件的名称来表示。在
/dev 目录下的所有文件都是称为 nodes
的特殊文件,它们通过设备驱动程序链接到物理设备。这就使得您可以做一些有趣的事情。例如,为制作一张
CD 的 ISO 映像,您可以使用 cp (copy) 命令:


cp /dev/cdrecorder MyCD.iso

这样复制的是一个二进制映像而不是 CD 的文件结构。

以文件为中心的方法还允许您可以为设备名称指定有意义的别名。例如,通常有一个叫做
/dev/cdrom 的别名,指向物理 CDROM
设备,而这个设备通常是 /dev/hdc。
一旦创建了别名,您就可以通过 /dev/cdrom
访问那个设备,这样更好记。别名技术还允许您标准化脚本,使这些脚本可以在物理配置不同的系统上使用。

第四列中的选项将随文件系统类型而不同。在上面的例子中,/
和 /boot
的装载选项为“default”。也就是说,它们使用异步 I/O
以可读写方式自动装载。只有 root
可以装载或者7载设备,但是用户可以执行二进制文件和使用“sticky
bit”(稍后介绍)。文件系统将被作为块字符设备来处理。然而,对
/mnt/cdrom
来说,选项就不同了。它不会被自动装载,并且将会作为只读文件系统装载。用户将可以在该文件系统中执行脚本和程序。

添加文件系统
在 /etc/fstab
文件中添加新的一行,您就可以将文件系统添加到
/etc/fstab。作为一个实际的例子,我有一个 RAID
设备,存储的是部门所用到的文件资源。这个设备中只有数据文件,并且保持与操作系统分离,这样在出现硬件故障时可以将它转移到另一个系统。RAID
已经配置好,在 Linux 中识别为 /dev/sdc,即第三个 SCSI
设备。在第一个分区上创建了带日志的 ext3
文件系统,这样我们通过 /dev/sdc1
就可以访问它。我希望在计算机引导时自动将这个 RAID
装载到文件系统中。

我在 /etc/fstab 中添加了如下一行:

/dev/sdc1 /data ext3 defaults 0 0

这样在引导时 RAID 就会像 / 和 /boot
系统一样被装载。现在我只要再创建一个目录作为指定的装载点:

mkdir /data

一旦创建了这个空目录,我们可以将文件系统装载到它:

mount /data

RAID 现在关联到了 /data。如果系统被重新引导,/data
将自动装载。

分区
在 Linux 中分区与 Windows 中本质上相同。控制台命令
fdisk 可以创建和管理分区。当您使用 fdisk
时,您必须指明它要操作哪个设备。可使用命令 fdisk
-l 来查看可用设备。
清单 2. 使用 fdisk


[root@cmw-t30 root]# fdisk -l

Disk /dev/hda: 240 heads, 63 sectors, 7752 cylinders
Units = cylinders of 15120 * 512 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/hda1             1         8     60448+  8e  Linux LVM
/dev/hda2             9        15     52920   83  Linux
/dev/hda3   *        16      1403  10493280    c  Win95 FAT32 (LBA)
/dev/hda4          1404      7751  47990880    f  Win95 Ext'd (LBA)
/dev/hda5          1404      5565  31464688+  83  Linux
/dev/hda6          5566      5635    529168+  82  Linux swap
/dev/hda7          5636      7751  15996928+   b  Win95 FAT32

上面的清单来自于一台膝上型电脑,所以它显示的结构与服务器有些不同。它显示了一个有若干个分区的
IDE
硬盘驱动器。如果有其他设备,同样也将会被列出。例如,第二个
IDE 硬盘驱动器可能会显示为 /dev/hdb。

指定一个设备再次运行 fdisk
,您会得到一个简短的提示。
清单 3. 对一个设备运行 fdisk


[root@cmw-t30 root]# fdisk /dev/hda

The number of cylinders for this disk is set to 7752.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help):

输入“m”可以查看命令菜单。您可以使用
“p”来显示当前的分区表。您可以创建、删除和修改现有分区的类型。“l”将为您列出可用分区类型的完全列表。用“w”将您的修改写入到分区表并退出程序,或者使用“q”不保存修改而退出。一些修改会立即生效。有一些修改需要系统重新引导方能生效。

Linux 下的分区规则与 Windows 中相同。您可以使用 4
个主分区,每个都可以成为扩展分区。

文件系统类型
Linux
可以处理内核所能识别的任何文件系统类型。相当多的类型是默认编译到内核中的,并且可以再添加新的文件系统。下面是一些重要的文件系统类型:

* ext2:标准 Linux 文件系统
* ext3:带日志的标准 Linux 文件系统
* vfat:Microsoft 的 Fat32 文件系统
* jfs:IBM 的日志文件系统
* reiserfs:另一个流行的日志文件系统

日志节约时间,保全数据
日志文件系统有助于在非正常关闭时保护数据。如果一个卷没有7载就被关闭,可能还遗留下未完成的工作,以及处于
in-between
状态的文件。在典型的文件系统中,需要对这个卷进行全面的检查,对较大的卷来说这需要比较长的时间。日志文件系统会对磁盘的每一个写操作的事务记录保持一段时间(比如
5
秒)。当这个卷没有被完全地7载时,文件系统只需要回滚到最后一个已知的正常状态。原来恢复一个卷需要
20 分钟时间,现在只需要几秒!

格式化分区
分区创建完成后,用适当版本的 mkfs
命令对其进行格式化。文件系统将有其自己版本的 mkfs
,比如 mkfs.ext2 或者 mkfs.ext3
。这些助手脚本让您可以只需要指定分区就可以创建一个文件系统。下面是一些例子:
清单 4. 使用 mkfs


# Create an ext2 file system on the third
# parition of the first IDE hard drive
mkfs.ext2 /dev/hda3

# Create an ext3 file system on the first
# partition of the 2nd SCSI hard drivemkfs.ext2
mkfs.ext3 /dev/sdb1

# Create a jfs file system in an extended
# partition on the first IDE hard drive.
mkfs.jfs /dev/hda5

有一些高级的参数会影响分区如何格式化,但是对通常的用途来说,使用默认的参数就可以了。一旦分区经过了格式化,它就可以装载到
/
文件系统中。一个文件系统必须在被7载后才可以重新格式化。

其他文件系统工具
让我们来看一看其他有用的工具。

控制台工具
有几个工具可以查看磁盘和文件系统的状态。

df
df 表示“disk
free”。它会报告装载的文件系统上已用的和可用的磁盘空间的大小。有用的开关:

检查磁盘空间
df -h         人类可读的格式;以易读的 k、M、G
而不是以字节为单位来显示文件的大小
df -l
        仅列出本地文件系统;默认情况下,远程文件系统也会被列出

du
du 表示“disk
usage”。它会报告特定的文件和每个子目录
(参数中指定的目录)
所使用的磁盘空间大小。有用的开关:

检查磁盘使用情况
du -a         列出所有文件所占的空间,而不仅是目录
du -h         人类可读的格式;以易读的 k、M、G
而不是以字节为单位来显示文件的大小
du -c
        在所有的参数处理完成后输出一个总计;可以用来得到给定的一组文件或目录所占的总的磁盘空间
du -s         只显示出每个参数指定的文件大小的总和

fsck
这个程序用来检查和修复文件系统,相当于 Windows
中的 chkdsk 。如同 mkfs
一样,对应不同的文件系统类型它有不同的版本。 fsck
必须运行于已7载的卷上,虽然除非是在文件系统没有7载完全的时候,否则很少会用到它。
man fsck 和 info fsck ,以及本文最后的
参考资料中都提供了详细的资料。

Webmin
Webmin 有一些工具用于管理文件系统和分区。

图 1. Webmin 分区工具
图 1. Webmin 分区工具

硬件、本地磁盘上的分区
每一个磁盘和分区以及它们的使用情况都被显示出来。点击一个文件系统可以查看详细信息。对于已卸载的分区,可以编辑它的类型,以及格式化它的文件系统。

系统、磁盘和网络文件系统
装载的和卸载的文件系统都在 /etc/fstab
中列出。普通文件系统类型有一个用于创建条目的向导。没有识别出的文件系统类型可以在这里装载和7载,但是只能手工编辑
/etc/fstab。大多数服务器文件系统在这里都可以很好地处理。

完整的体系是分区的总和
虽然在 Linux 中对分区和文件系统的管理与 Windows
中有很多类似之处,但是从驱动器字母过渡到完全的分层树可能还需要作一些调整。因此,有一些健壮的控制台工具可以使用这些功能及
/etc 目录下的配置文件。Webmin
等基于浏览器的前端提供了一些有用的工具。


--
Ray
回复

使用道具 举报

 楼主| 发表于 2005-9-4 20:59:10 | 显示全部楼层
Windows 到 Linux 之旅: 第 5 部分. Linux 日志

使用日志

级别: 初级

Chris Walden
电子商务架构师, IBM Developer Relations
2003 年 3 月

Column iconIBM 电子商务架构师 Chris Walden 将通过他在
developerWorks 上发表的九篇系列文章来指导您如何在
Linux 环境中运用您的 Windows
操作技巧。在本部分,我们追踪、处理和轮循日志,以增强系统安全,收集信息。

成功地管理任何系统的关键之一,是要知道系统中正在发生什么事。Linux
中提供了异常日志,并且日志的细节是可配置的。

Linux
日志都以明文形式存储,所以您不需要特殊的工具就可以搜索和阅读它们。您还可以编写脚本,来扫描这些日志,并基于它们的内容去自动执行某些功能。

Linux 日志存储在 /var/log
目录中。这里有几个由系统维护的日志文件,但其他服务和程序也可能会把它们的日志放在这里。大多数日志只有
root
才可以读,不过只需要修改文件的访问权限就可以让其他人可读。

/var/log/messages
messages
日志是核心系统日志文件。它包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO
错误、网络错误和其他系统错误都会记录到这个文件中。其他信息,比如某个人的身份切换为
root,也在这里列出。如果服务正在运行,比如 DHCP
服务器,您可以在 messages
文件中观察它的活动。通常,/var/log/messages
是您在做故障诊断时首先要查看的文件。

/var/log/XFree86.0.log
这个日志记录的是 Xfree86 Xwindows
服务器最后一次执行的结果。如果您在启动到图形模式时遇到了问题,一般情况从这个文件中会找到失败的原因。

其他日志
根据您的 Linux
发行版本以及您所运行的服务和应用程序的不同,/var/log
目录下还会有其他日志文件。例如,可能会有与邮件服务器、资源共享、自动任务等相关的日志。

准备好了就开始轮循
您将看到,/var/log
目录下有一些文件以一个数字结尾,这些是已轮循的归档文件。日志文件会变得特别大,特别笨重。Linux
提供了一个命令来轮循这些日志,以使您的当前日志信息不会淹没在旧的无关信息之中。
logrotate
通常是定时自动运行的,但是也可以手工运行。当执行后,logrotate
将取得当前版本的日志文件,然后在这个文件名最后附加一个“.1”。其他更早轮循的文件为“.2”、“.3”,依次类推。文件名后的数字越大,日志就越老。

您可以通过编辑 /etc/logrotate.conf 文件来配置 logrotate
的自动行为。通过 man logrotate 来学习 logrotate
的全部细节。

日志工具
任何文本工具都可以用来处理日志文件。下面是一些特别有用的工具。

dmesg
使用 dmesg
命令可以快速查看最后一次系统引导的引导日志。通常它的内容会很多,所以您往往会希望将其通过管道传输到一个阅读器。

dmesg | more

上面的命令将以分页的方式显示引导信息。

tail
有时,当某些行为发生时,您会希望密切关注一个日志文件。
Tail 命令设计用于显示文本文件的最后几行。使用 -f
开关,当日志增加新的内容时, tail
将继续显示新的输出。

tail -f /var/log/messages

上面的命令将显示 /var/log/messages 文件的最后 10
行,然后继续监控那个文件,并输出新的行为。要停止
tail -f 命令,使用 Ctrl + C 来中止进程。

more
More 的工作方式与 DOS
版本相同。您可以将它指向一个文件,或者通过它以管道输出信息,以分页的方式来查看信息。例如,以分页方式显示
Xfree86 启动日志文件的内容:

more /var/log/XFree86.0.log

使用“q”或者 [Ctrl]-C 来停止查看文件。

less
Less
是另一个文本阅读器,不过它还允许在文件中滚动浏览以及检索信息。

less /var/log/messages

上面的命令将显示 /var/log/messages
文件的内容。使用“q”来停止查看文件。使用“h”来获得
less 的使用帮助。

logger
您可能会希望将自己的消息也记录到日志文件。您可以只是将日志消息附加到恰当的文本文件,但是您必须得套用日志信息格式。同样,如果日志系统被定制,您还将不得不修改您的代码。l
logger
命令使您可以将自己的消息发送到日志工具。在脚本中使用它来提供关于执行和错误的消息。

定制的日志
有两个服务,或者称之为后台程序,在控制日志,分别是
klogd 和 syslogd 。 klogd 只处理内核消息, syslogd
处理其他系统消息,比如应用程序。您可以通过编辑
/et/syslog.conf 和 /etc/sysconfig/syslog
来配置它们的行为。完全定制日志超出了本文的范围,不过在本文最后的
参考资料 列表中可以找到详细的资料。您也可以查看
/etc/syslogd.conf 的 man 页面来进一步学习。

本质上,软件所产生的每一条消息都提供一些信息用于确定消息是从哪里来的以及这个消息是什么。/etc/syslog.conf
文件允许您来指定如何处理那种类型的消息。您可以将它转储到消息文件,也可以将它转储到一个定制的文件。您可以将它发送到远程的主机,由远程主机来根据其自己的
syslogd
配置来处理它。远程日志是一个非常好的安全功能。通过将您的日志放置到远程系统中,您可以防止有人通过改变日志文件来掩饰其踪迹。

下面是取自 man /etc/syslog.conf
页面中的一个定制日志的例子:


# Kernel messages are first, stored in the kernel
# file, critical messages and higher ones also go
# to another host and to the console
#
kern.*                       /var/adm/kernel
kern.crit                    @finlandia
kern.crit                    /dev/console
kern.info;kern.!err          /var/adm/kernel-info

第一个规则将所有内核消息定向到 /var/adm/kernel 文件。

第二个语句将所有优先级为 crit
或者更高的内核消息定向到一个名为 finlandia
的远程主机。这是有用的,因为如果主机崩溃以及磁盘错误无法恢复,您将无法读取存储的消息。如果那些消息同时在远程主机上也存在,您就依然可以找出崩溃的原因。

第三个规则将这些消息定向到实际的控制台,这样,在这台机器上工作的人也可以看到它们。

第四行告诉 syslogd 将所有优先级为 info 到 warning
的内核消息保存到 /var/adm/kernel-info
文件。所有优先级为 err 以及更高的消息不包括在内。

像这种定制日志的能力为 Linux
环境提供了极大的灵活性与可控制性。

Webmin 中的日志配置
Webmin 有一个用于操作日志文件的模块。

图 1. Webmin 系统日志视图
图 1. Webmin 系统日志视图

显示了所有配置的日志文件。点击一个日志文件来编辑它的配置。

图 2. Webmin 日志编辑屏幕
图 2. Webmin 日志编辑屏幕

或者您可以点击 View 来查看日志文件的内容。

在控制台中查看日志文件
由于 Linux
中的日志文件以明文的形式记录,所以不需要特殊的工具来解释它们。任何文本文件阅读器都可以显示
Linux 日志文件。浏览器,比如
Mozilla,可以显示日志文件,并且提供搜索功能。Linux
还有控制台工具可以查看文本文件。 more ,如同 MS DOS
版本一样以分页方式显示文件。 less
命令将在只读阅读器中显示文件,这个阅读器具有双向滚动和搜索的功能。现在,在命令行中输入
less /var/log/messages ,体会一下这个命令。

Webmin 模块与 /etc/syslog.conf
文件相关联,因此您对其中一个所做的修改会影响另一个。

您生活中的日志
Linux
中的日志文件对于系统的故障诊断和维护来说至关重要。Linux
日志记录到文本文件,所以不需要专门的工具来查看这些文件。文本文件也容易用于定制脚本和程序。

日志被轮循,以避免变得过大,同时可以将当前信息与老的数据相分离。日志轮循是可配置的。

日志是高度可配置的,为了安全和备份,日志甚至可以存储到单独的系统中。您可以让自己的脚本和程序产生系统日志消息,这些消息将被
syslogd 后台进程识别出并进行处理。


--
Ray
回复

使用道具 举报

 楼主| 发表于 2005-9-4 20:59:29 | 显示全部楼层
Windows 到 Linux 之旅: 第 7 部分. 网络

Linux 网络速成指南

级别: 初级

Chris Walden
电子商务架构师, IBM Developer Relations
2003 年 3 月

Column iconIBM 电子商务架构师 Chris Walden 将通过他在
developerWorks 上发表的九篇系列文章来指导您如何在
Linux 环境中运用您的 Windows
操作技巧。本部分将探讨网络,这是 Linux
做得最好的方面之一。

在如今这个时代,运行一台没有连接到网络的计算机几乎是难以想像的。电子邮件、Web
浏览和文件共享像打印和查看屏幕上的信息一样,都是用户所期待的。

幸运的是,Liunx
从一开始就是为网络而开发的。事实上,网络是 Linux
做得最好的事情之一。Linux 支持诸如TCP/IP 和
SMB(NetBIOS)等流行的网络协议。Linux
还具有用于监控和过滤网络流量的成熟工具。诸如
FTP、Windows 文件和打印共享以及 Web
托管等服务也是可用的。Linux
甚至还提供了用于集中目录服务、虚拟专用网(VPN)和远程过程调用的工具。

网络硬件
Linux 能够使用具有驱动程序的任何网络硬件。Linux
驱动程序单独地或以可加载模块的形式编译到内核中。Linux
内核默认支持许多流行的网卡。在选择网络硬件时,最好总是使用“硬件兼容性列表”(参见
参考资料中的链接)中列出的设备。另外还要使用最新的
Linux 发行版本。

一般情况下,如果使用的是兼容的网络硬件,安装系统时网卡会自动得到识别。可以使用
ifconfig 命令来检查系统上的网络硬件。默认情况下,
ifconfig 显示活动的网络设备。给这个命令添加一个 -a
开关就能看到所有设备。
清单 1. 使用 ifconfig

refname: ifconfig-a

[root@cmw-t30 root]#  ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:09:6B:60:8B:1E
inet addr:9.41.209.160  Bcast:9.41.209.255
Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:47255 errors:0 dropped:0 overruns:0 frame:0
TX packets:32949 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:22140365 (21.1 Mb)  TX bytes:13519623 (12.8 Mb)
Interrupt:11 Base address:0xf000

lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
UP LOOPBACK RUNNING  MTU:16436  Metric:1
RX packets:1308081 errors:0 dropped:0 overruns:0 frame:0
TX packets:1308081 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:183376967 (174.8 Mb)  TX bytes:183376967 (174.8 Mb)

在上面的清单中,系统中只有一块网卡,标识为 eth0。
lo 适配器是一个回环(lookback),由 Linux
用来与它自身通信。后面还会进一步讨论 ifconfig
命令。

网络设备名称
Linux
网络设备在配置时被赋予别名,该别名由一个描述性的缩略词和一个编号组成。某种类型的第一个设备的编号为
0,其他设备依次被编号为
1、2、3,等等。在给设备命名时将使用下面的约定。本信息摘自
Linux Network Administrator's Guide(参见本文结尾处 参考资料
中的链接)。

* eth0, eth1 ...

这些是以太网卡接口。它们用于大多数的以太网卡,包括许多并行端口以太网卡。
* tr0, tr1 ...

这些是令牌环网卡接口。它们用于大多数的令牌环网卡,包括非
IBM 生产的网卡。
* s10, s11 ...
这些是 SLIP 接口 。SLIP
接口与串行线关联,关联顺序就是它们被分配给 SLIP
的顺序。
* ppp0, ppp1 ...
这些是 PPP 接口。就像 SLIP 接口一样,PPP
接口一旦被转换到 PPP 模式,它就与串行线关联。
* plip0. plip1 ...
这些是 PLIP 接口。PLIP 接口通过并行线传输 IP
数据报。这些接口在系统启动时由 PLIP
驱动程序分配,并被映射到并行端口。在
2.0.x内核中,设备名称和并行端口的 I/O
端口之间存在直接的关系,但是在更新版本的内核中,设备名称是顺序分配的,就像
SLIP 和 PPP 设备一样。
* ax0, ax1 ...
这些是 AX.25 接口。AX.25
是业余无线电操作人员使用的主要协议。AX.25
接口的分配和映射方式与 SLIP 设备类似。

还有其他许多可用于其他网络驱动程序的接口类型。我们仅列出了一些最常见的。

既然以太网是最常见的配置,下面就重点来讨论它。欲了解关于其他种类的连接的更多信息,请参见本文结尾处的
参考资料。

网络配置
在安装 Linux
发行版本时,就得配置网络。您或许已经有一个来自初始配置的活动
eth0。这个配置对于当前的使用也许足够,但是您可能需要随着时间的推移做出更改。下面将介绍与
IP
网络相关的不同配置项,以及用于使用这些配置项的文件和工具。

Webmin
Webmin 在 Networking 下的 Network Configuration
中提供一组优秀的网络配置工具。您可以配置单独的接口并调整它们的当前设置或已保存的设置。还可以配置路由和网关、DNS
客户端设置以及本地主机地址。在编辑好所有的配置之后,可以单击
Apply Configuration来应用它们,不必重新启动系统。

Localhost
本地主机地址包含在/etc/hosts 中。这个文件和
C:\winnt\system32\drivers\etc\hosts
文件等价。其中的条目显示 IP
地址的别名,用于在不必查询 DNS 的情况下指派名称。


127.0.0.1       localhost.localdomain   localhost


10.10.10.10     cmw-t30



不同发行版本中的工具
每个发行版本都有它自己用于配置网络设置的工具。
应该参考特定发行版本的文档来确定要使用的工具。每种工具提供与
Webmin
工具基本上相同的配置选项。其中有些版本可能提供特定于该发行版本的选项。

图 1. Red Hat 8.x 和 9.x 使用 redhat-config-network 工具
图 1. Red Hat 8.x 和 9.x 使用 redhat-config-network 工具

图 2. SuSE 和 United Linux 使用 YAST 工具
图 2. SuSE 和 United Linux 使用 YAST 工具

手动配置也是可能的,不过这是一个非常深奥的主题。请参考您的发行版本文档和本文结尾处的
参考资料,以了解关于手动网络配置的更多信息。

分析和监控工具
Linux 附带了许多工具来监控网络任务。

ifconfig
我们在上面使用过 ifconfig
命令来查看以太网卡的状态。然而, ifconfig
还可以配置设备并报告关于设备的情况。假设您要建立一个临时的网络配置以供测试。您可以使用发行版本中的工具来编辑配置,但是需要注意在完成测试之后,将所有设置恢复回去。通过使用
ifconfig
,我们无需影响已保存的设置,就能够快速地配置网卡:


ipconfig eth0 192.168.13.13 netmask 255.255.255.0 up

上面这条命令使用一个 C 类 IP 地址将 eth0 设置到地址
192.168.13.13,并确保它正常运行。


ipconfig eth0 down

上面这条命令将关闭 eth0 设备。关于使用 ifconfig
的完整细节,请参见 info ifconfig 页面。

ifup/ifdown
要使用已保存的配置来激活和禁用网络设备,请分别使用
ifup 和 ifdown 。


# Bring up eth0 using the saved configuration


ifup eth0


                                       



# Shut down eth0


ifdown eth0



netstat
使用 netstat
控制台命令来输出网络连接、路由表、接口统计、伪装连接和组播成员。
netstat
具有多个命令行开关来控制其功能。下面是其中一些常用的开关:

输出网络状态
netstat -p         显示每个套接字所属的程序的 PID 或名称
netstat -a         同时显示侦听和非侦听套接字
netstat -t         显示 TCP 连接
netstat -u         显示 UDP 连接
netstat -e
        显示附加信息;使用这个选项两次,可以获得最详细的信息

下面是 netstat -tp 的一个例子:
清单 2. 使用 netstat


[root@cmw-t30 root]# netstat -tp
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address        
State
PID/Program name
tcp        0      0 localhost.localdo:29000 *:*                    
LISTEN
2389/attvpnctl
tcp        0      0 *:10000                 *:*                    
LISTEN
5945/perl
tcp        0      0 *11                   *:*                    
LISTEN
1120/X
tcp        0      0 *:ftp                   *:*                    
LISTEN
724/xinetd
tcp        0      0 *:ssh                   *:*                    
LISTEN
710/sshd
tcp        0      0 *:ipp                   *:*                    
LISTEN
797/cupsd
tcp        0      0 *:505                   *:*                    
LISTEN
1043/rcd
tcp        0      0 localhost.localdoma:ipp localhost.localdo:32772
ESTABLISHED
797/cupsd
tcp        0      0 sig-9-65-39-140.m:44916 sdoprods2.austin.i:1352
TIME_WAIT
-
tcp        0      0 10.100.100.101:33020    64.12.29.100:5190      
ESTABLISHED
1433/gaim
tcp        0      0 localhost.localdo:44954 localhost.localdoma:ipp
TIME_WAIT
-
tcp        0      0 localhost.localdo:44955 localhost.localdoma:ipp
TIME_WAIT
-
tcp        0      0 localhost.localdo:44897 localhost.localdoma:ipp
TIME_WAIT
-
tcp        0      0 localhost.localdo:44902 localhost.localdoma:ipp
TIME_WAIT
-
tcp        0      0 localhost.localdo:44903 localhost.localdoma:ipp
TIME_WAIT
-
tcp        0      0 localhost.localdo:44900 localhost.localdoma:ipp
TIME_WAIT
-
tcp        0      0 localhost.localdo:44901 localhost.localdoma:ipp
TIME_WAIT
-
tcp        0      0 10.100.100.101:44888    cs9336-61.austin.r:pop3
TIME_WAIT
-
tcp        0      0 localhost.localdo:32772 localhost.localdoma:ipp
ESTABLISHED
1246/gnome-cups-man
tcp        1      0 localhost.localdo:32774 localhost.localdoma:ipp
CLOSE_WAIT
1246/gnome-cups-man
tcp        0      0 10.100.100.101:33019    cs46.msg.sc5.yahoo:5050
ESTABLISHED
1433/gaim
tcp        0      0 sig-9-65-39-140.m:35061 d03nm119.boulder.i:1352
CLOSE_WAIT
1720/wineserver
tcp        0      0 10.100.100.101:33021    64.12.30.4:5190        
ESTABLISHED
1433/gaim


我最常使用 netstat 命令来查看处于 LISTEN 或 ESTABLISHED
状态的连接。LISTEN
是系统上的服务,它接受来自其他机器的连接。ESTABLISHED
是您的机器和其他机器之间的活动连接。请确保您知道正在运行的所有
LISTEN
程序。如果看到某些无法识别的内容,它可能就是一个安全顾虑。
netstat 具有许多选项。请在命令行键入 info netstat
来获得该命令的细节。

route
route 控制台命令允许您显示和操作 IP 路由表。
清单 3. 使用 route


[root@cmw-t30 plugins]# route|grep -v ipsec
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use
Iface
204.146.24.42   10.100.100.1    255.255.255.255 UGH   0      0        0
eth1
10.100.100.0    *               255.255.255.0   U     0      0        0
eth1
127.0.0.0       *               255.0.0.0       U     0      0        0
lo
default         10.100.100.1    0.0.0.0         UG    0      0        0
eth1

不带命令行开关运行 route
将显示当前路由表。可以使用 route
对该路由表进行非常精细的修改。


route add default gw 10.10.10.1

上面的命令添加一个默认的路由(它将在没有其他路由匹配的情况下被使用)。使用这个路由的所有分组都将途经网关“10.10.10.1”。实际将用于该路由的设备取决于我们如何到达“10.10.10.1”——到“10.10.10.1”的静态路由必须预先设置好。


route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0

上面的命令添加一个通过“eth0”到网络 192.56.76.x
的路由。这里的 C
类网络掩码修饰符实际上并不是必需的,因为 192.*
就是一个 C 类 IP
地址。这里的单词“dev”也可以省略。

路由选择是一个非常深奥的主题。关于 route
选项的完整信息可通过 info route 命令获得。

结束语
Linux
从一开始就是为网络而设计的。它内置了以前仅在高端企业产品中才可见到的成熟功能。然而,尽管拥有所有这些强大的能力,Linux
网络的配置却远没有 Windows 网络的配置复杂。诸如
Webmin、redhat-config-network 和
YAST这样的工具允许执行图形化的配置。诸如 ifconfig 和
route
这样的工具允许通过控制台或脚本查看和修改网络参数。诸如
netstat
这样的工具允许查看单独的网络连接,并显示它们与运行着的进程的关系。


--
Ray
回复

使用道具 举报

 楼主| 发表于 2005-9-4 20:59:47 | 显示全部楼层
Windows 到 Linux 之旅: 第 8 部分. 备份与恢复

Linux 备份与恢复速成指南

级别: 初级

Chris Walden
电子商务架构师, IBM Developer Relations
2004 年 1 月

Column iconIBM 电子商务架构师 Chris Walden 将通过他在
developerWorks 上发表的九篇系列文章来指导您如何在
Linux 环境中运用您的 Windows 操作技巧。本部分将考察
Linux
系统上的内容,同时在考虑到恢复和安全的情况下,计划并实现常规备份。

Linux
是一个稳定而可靠的环境。但是任何计算系统都有无法预料的事件,比如硬件故障。拥有关键配置信息的可靠备份是任何负责任的管理计划的组成部分。在
Linux
中可以通过各种各样的方法来执行备份。所涉及的技术从非常简单的脚本驱动的方法,到精心设计的商业化软件。备份可以保存到远程网络设备、磁带驱动器和其他可移动媒体上。备份可以是基于文件的或基于驱动器映像的。可用的选项很多,您可以混合搭配这些技术,为您的环境设计理想的备份计划。

确定策略
可以采用许多不同的方法来备份系统。欲了解关于这方面的一些信息,您可以阅读本文结尾处
参考资料 中列出的“Introduction to Backing Up and Restoring
Data”一文。

所备份的内容很大程度上取决于您备份它们的理由。您是否试图从严重的故障(比如硬盘驱动器问题)中恢复?您是否想归档以便能在需要时恢复旧的文件?您计划从一个冷系统和还原着手,还是从一个预加载的备用系统着手?

确定要备份的内容
在备份和还原系统时,Linux
基于文件的性质成了一个极大的优点。在 Windows
系统中,注册表与系统是非常相关的。配置和软件安装不仅仅是将文件放到系统上。因此,还原系统就需要有能够处理
Windows 这种特性的软件。在 Linux
中,情况就不一样了。配置文件是基于文本的,并且除了直接处理硬件时以外,它们在很大程度上是与系统无关的。硬件驱动程序的现代方法是,使它们以动态加载的模块的形式可用,这样内核就变得更加与系统无关。不同于让备份必须处理操作系统如何安装到系统和硬件上的复杂细节,Linux
备份处理的是文件的打包和解包。

一般情况下,以下这些目录是需要备份的:

* /etc

包含所有核心配置文件。这其中包括网络配置、系统名称、防火墙规则、用户、组,以及其他全局系统项。
* /var
包含系统守护进程(服务)所使用的信息,包括
DNS 配置、DHCP 租期、邮件缓冲文件、HTTP
服务器文件、db2 实例配置,等等。
* /home

包含所有用户的默认用户主目录。这包括他们的个人设置、已下载的文件和用户不希望失去的其他信息。
* /root
是根(root)用户的主目录。
* /opt
是安装许多非系统文件的地方。IBM
软件就安装在这里。OpenOffice、JDK
和其他软件在默认情况下也安装在这里。

有些目录是应该考虑 不备份的。

* /proc

应该永远不要备份这个目录。它不是一个真实的文件系统,而是运行内核和环境的虚拟化视图。它包括诸如
/proc/kcore
这样的文件,这个文件是整个运行内存的虚拟视图。备份这些文件只是在浪费资源。
* /dev

包含硬件设备的文件表示。如果计划还原到一个空白的系统,那就可以备份
/dev。然而,如果计划还原到一个已安装的 Linux
系统,那么备份 /dev 是没有必要的。

其他目录包含系统文件和已安装的包。在服务器环境中,这其中的许多信息都不是自定义的。大多数自定义都发生在
/etc 和/home
目录中。不过出于完整性的考虑,您可能希望备份它们。

在生产环境中,我希望确保数据不会丢失,因而我会备份除
/proc
目录之外的整个系统。如果最担心用户和配置,我会仅备份
/etc、/var、/home 和 /root 目录。

备份工具
正如前面提到过的, Linux
备份在很大程度上就是打包和解包文件。这允许使用现有的系统实用工具和脚本来执行备份,而不必购买商业化的软件包。在许多情况下,这类备份将是足够的,并且为管理员提供了极大的控制能力。备份脚本可以使用
cron 命令来自动化,这个命令控制 Linux 中预定的事件。

tar
tar 是一个已移植到 Linux 中的经典 UNIX 命令。 tar 是
tape
archive(磁带归档)的缩写,最初设计用于将文件打包到磁带上。如果您下载过
Linux 源代码,或许已经碰到过 tar
文件。这是一个基于文件的命令,它本质上是连续地、首尾相连地堆放文件。

使用 tar
可以打包整个目录树,这使得它特别适合用于备份。归档文件可以全部还原,或从中展开单独的文件和目录。备份可以保存到基于文件的设备或磁带设备上。文件可以在还原时重定向,以便将它们重新放到一个与最初保存它们的目录(或系统)不同的目录(或系统)。
tar 是与文件系统无关的。它可以使用在 ext2、ext3、
jfs、Reiser 和其他文件系统上。

使用 tar 非常类似于使用诸如 PKZip
这样的文件实用工具。只需将它指向一个目的(可以是文件或设备),然后指定您想要打包的文件。您可以通过标准的压缩类型来动态压缩归档文件,或指定一个自己选择的外部压缩程序。要通过
bzip2 压缩或解压缩文件,可使用 tar -z 命令。

要使用 tar 来把除 /proc
目录之外的整个文件系统备份到 SCSI 磁带设备:


tar -cpf /dev/st0 / --exclude=/proc

在上面的例子中, -c 开关表示归档文件正在被创建。
-p
开关表示我们希望保留文件许可权限,这对良好的备份来说是很关键的。
-f
开关指向该归档文件的文件名。在本例中,我们使用的是原始磁带设备
/dev/st0。/
表示我们想要备份的内容。既然我们想要备份整个系统,因此把这个开关指定为根(root)。当把
tar 指向一个目录(以 /
结尾)时,它会自动递归。最后,我们排除了 /proc
目录,因为它没有包含需要保存的任何内容。如果单盒磁带容纳不下这个备份,我们需要添加
-M 开关(本例中没有显示)以进行多卷备份。

以防万一
不要忘了 Linux 是区分大小写的。例如, tar
命令应该总是以小写的形式执行。命令行开关可以是大写、小写或大小写的混合。例如,
-t 和 -T
执行不同的功能。文件或目录名称可以混合使用大小写,而且就像命令和命令行开关一样,是区分大小写的。

要还原一个或多个文件,可以使用带提取开关( -x
)的 tar 命令:


tar -xpf /dev/st0 -C /

这里的 -f 开关同样指向归档文件, -p
开关表明我们想要还原归档的权限。 -x
开关表明从归档中提取文件。 -C /
表明我们想要让还原从 / 开始。 tar
通常还原到运行这个命令的目录。 -C
开关使我们的当前目录不再相关。

您可能会经常使用的另外两个 tar 命令是 -t 和 -d
开关。 -t 开关列出某个归档文件的内容。 -d
开关将归档文件的内容与系统上的当前文件作比较。

为便于操作和编辑,您可以将想要归档的文件和目录放进一个文本文件中,然后在命令行通过
-T
开关引用这个文本文件。这些文件和目录可以与命令行上列出的其他目录结合起来。下面的命令行备份
MyFiles 中列出的所有文件和目录、/ 根目录和 /tmp
目录中的所有 iso 文件。


tar -cpf /dev/st0 -T MyFiles /root /tmp/*.iso

文件列表只是一个文本文件,其中列出文件或目录。下面是一个例子:


/etc


/var


/home


/usr/local


/opt



请注意 tar -T (或 files-from
)命令不能接受通配符。文件必须明确地列出。上面的例子展示了一种单独地引用文件的方法。您还可以执行脚本来搜索系统,然后建立一个列表。下面就是这样一个脚本的例子:


#!/bin/sh


cat MyFiles > TempList


find /usr/share -iname *.png >> TempList


find /tmp -iname *.iso >> TempList


tar -cpzMf /dev/st0 -T TempList



上面的脚本首先将 MyFiles
中的所有现有文件列表复制到
TempList。然后它执行两个 find
命令来搜索文件系统中匹配某个模式的文件,并将它们附加到
TempList。第一次是搜索 /usr/share 目录树中以 .png
结尾的所有文件。第二次是搜索 /tmp 目录树中以 .iso
结尾的所有文件。在建立好列表之后, tar
然后在文件设备 /dev/st0 (第一个 SCSI
磁带设备)上创建 一个新的归档文件,该文件使用 g
zip
格式来压缩,并保留所有文件权限。该归档文件将跨越多个卷。要归档的文件的名称将从
TempList 文件中提取。

还可以使用脚本来执行更精细的操作,比如增量备份。Gerhard
Mourani 在他的 Securing and Optimizing Linux
一书中给出了一个优秀的脚本,您可在本文结尾处的
参考资料中找到关于这本书的信息。

也可以编写脚本来还原文件,虽然还原通常是手动进行的。正如上面提到过的,用于提取文件的
-x 开关代替了 -c
开关。可以还原整个归档文件,或者还原指定的个别文件或者目录。使用通配符来引用归档文件中的文件是可以的。还可以使用开关来转储和还原。

dump 和 restore
dump 可以执行类似 tar 的功能。然而, dump
倾向于考虑文件系统而不是个别的文件。下面是引自
dump 手册文件中的内容:“dump 检查 ext2
文件系统上的文件,并确定哪些文件需要备份。这些文件将出于安全保护而被复制到给定的磁盘、磁带或其他存储媒体上……大于输出媒体容量的转储将被划分到多个卷。在大多数媒体上,容量是通过一直写入直至返回一个
end-of-media 标记来确定的。”

配合 dump 的程序是 restore
,它用于从转储映像还原文件。

restore
命令执行转储的逆向功能。可以首先还原文件系统的完全备份,而后续的增量备份可以在已还原的完全备份之上覆盖。可以从完全或部分备份中还原单独的文件或者目录树。

dump 和 restore
都能在网络上运行,因此您可以通过远程设备进行备份或还原。
dump 和 restore
使用磁带驱动器和提供广泛选项的文件设备。然而,两者都仅限用于
ext2 和 ext3 文件系统。如果使用的是 JFS、Reiser
或者其他文件系统,您将需要其他的实用工具,比如
tar 。

使用 dump 执行备份
使用 dump
执行备份是相当简单的。下面的命令执行一个完全
Linux 备份,它把所有 ext2 和 ext3 文件系统备份到一个
SCSI 磁带设备。


dump 0f /dev/nst0 /boot


dump 0f /dev/nst0 /



在这个例子中,系统中有两个文件系统。一个用于
/boot,另一个用于 /
,这是常见的配置。它们必须在执行备份时单独地引用。
/dev/nst0 引用第一个 SCSI
磁带驱动器,不过是以非重绕的模式引用。这样确保各个卷在磁带上一个接一个地排列。

dump
的一个有趣特性是其内置的增量备份功能。在上面的例子中,
0 表示 0
级或基本级备份。这是完全系统备份,您要定期执行以保存整个系统。对于后续的备份,您可以使用其他数字(1-9)来代替
0,以改变备份级别。1 级备份会保存自从执行 0
级备份以来更改过的所有文件。2
级备份会保存自从执行 1
级备份以来更改过的所有文件,以此类推。使用 tar
和脚本可以执行相同的功能,但要求脚本创建人员提供一种机制来确定上次备份是何时执行的。
dump
具有它自己的机制,即它在执行备份时会输出一个更新文件(/etc/dumpupdates)。这个更新文件将在每次执行
0
级备份时被重设。后续级别的备份会保留它们的标记,直至执行另一次
0 级备份。如果您在执行基于磁带的备份, dump
会自动跟踪多个卷。

跳过文件
标记将被 dump
跳过的文件和目录是可以做到的。实现此目的的命令是
chattr ,它改变 ext2 和 ext3 文件系统上的扩展属性。


chattr +d <filename>

上面的命令向文件添加一个标记,让 dump
在执行备份时跳过该文件。

使用 restore 来执行还原
要还原使用 dump 保存的信息,可以使用 restore
命令。像 tar 一样, dump 能够列出( -t
)归档文件的内容,并与当前文件作比较( -C
)。使用 dump
fB必须小心的地方是还原数据。有两种非常不同的还原方法,您必须使用正确的方法才能获得可预测的结果。

重建 (-r)
记住,在设计 dump
时考虑得更多的是文件系统,而不是单独的文件。因此,存在两种不同的文件还原风格。要重建一个文件系统,可使用
-r
命令行开关。设计重建的目的是为了能在空文件系统上操作,并将它还原为已保存的状态。在执行重建之前,您应该已经创建、格式化和装载(mount)了该文件系统。不应该对包含文件的文件系统执行重建。

下面是使用上面执行的转储来执行完全重建的例子。


restore -rf /dev/nst0

上面这个命令需要针对要还原的每个文件系统分别执行。

在需要的时候,可以重复这个过程来添加增量备份。

提取 (-x)
如果需要使用单独的文件而不是使用整个文件系统,您必须使用
-x
开关来提取它们。例如,要仅从我们的磁带备份中提取
/etc 目录,可使用以下命令:


restore -xf /dev/nst0 /etc

交互式还原 (-i)
restore 提供的另外一个特性是交互式模式。使用命令:


restore -if /dev/nst0

将把您置于交互式 shell
中,同时还显示了包含在该归档文件中的项。键入“help”将会显示一个命令列表。然后您就可以浏览并选择希望提取的项。务必记住,您提取的任何文件都将进入当前目录。

dump 与 tar
dump 和 tar
都有一批拥护者。两者都各有优点和缺点。如果您运行的是除
ext2 或 ext3 之外的任何文件系统,那么 dump
就对您不可用。然而如果不是这种情况,那么只需最少的脚本就能运行
dump ,并且 dump 还具有可用于帮助还原的交互式模式。

我倾向于使用 tar
,因为我喜欢编写脚本来获得额外的控制级别。此外还有用于操作
tar 文件的多平台工具。

其他工具
在 Linux
中,任何能够复制文件的程序都可以用来执行某种程度的备份。有人就使用
cpio 和 dd 来执行备份 。 cpio 是又一个与 tar
差不多的打包实用工具,但使用得不太普遍。 dd
是一个文件系统复制实用工具,它产生文件系统的二进制副本。
dd 还可用于产生硬盘驱动器的映像,类似于使用诸如
Symantec 的 Ghost 这样的产品。然而, dd
不是基于文件的,因此您只能使用它来将数据还原到完全相同的硬盘驱动器分区。

商业化备份产品
可用于 Linux
的商业化备份产品有很多。商业化产品一般提供了便利的界面和报告系统,而在使用诸如
dump 和 tar
这样的工具时,您必须自食其力。商业化产品很广泛,通常提供大量的特性。使用商业软件包的最大好处是,有一个预先建立的用于处理备份的策略,您可以立即投入工作。商业化的开发人员已经犯了您即将要犯的许多错误,他们的智慧的代价相比于丢失您的宝贵数据来说是廉价的。

Tivoli Storage Manager
Tivoli Storage Manager 或许是现在可用于 Linux
的最好的商业化备份和存储管理实用工具。Tivoli Storage
Manager 服务器可运行在多种平台上,包括
Linux,而客户机则可以运行在更多种类的平台上。

本质上,Storage Manager
服务器是通过适合于备份该环境的设备来配置的。要参与备份的任何系统都要加载一个与服务器通信的客户机。备份可以按计划执行、通过
Tivoli Storage Manager 客户机界面手动执行,或者使用基于
Web 的界面远程执行。

TSM
基于策略的性质意味着无需经常调整文件列表,就能够为备份行为定义中心规则。此外,IBM
Tivoli Storage Resource Manager
还能够识别、评估、控制和预测企业存储资产的利用情况,能够检测潜在的问题并自动应用自修复调整。更多细节请参见
Tivoli Web 站点(参见 参考资料中的链接)。

图 1. Tivoli Storage Manager 菜单
图 1. Tivoli Storage Manager 菜单

然后备份和还原就通过远程设备来处理 。

图 2. Tivoli Storage Manager 界面
图 2. Tivoli Storage Manager 界面

前瞻和回顾
拥有良好备份的第一步是拥有计划。首先知道您需要保存的数据以及需要什么恢复策略,然后使用最适合该策略的工具。

Linux 附带了一些现成的(out of the
box)有用备份工具。其中两个最常用的是 tar 和
dump/restore
。两者都能执行完全系统备份。使用创造性的脚本,您能够设计一个自定义的方案来本地和远程地备份系统。

然而,编写自己的备份脚本可能是一项繁重的任务,对于复杂的企业来说更是如此。诸如
Tivoli Storage Manager
这样的商业化软件降低了学习难度,并允许您立即控制自己的备份,但是您可能必须调整自己的策略来适应这些工具的功能。


--
Ray
回复

使用道具 举报

 楼主| 发表于 2005-9-4 21:00:09 | 显示全部楼层
Windows 到 Linux 之旅: 第 9 部分. 安装软件

使用预编译的 RPM 以及从源代码编译应用程序

级别: 初级

Chris Walden
电子商务架构师, IBM Developer Relations
2004 年 1 月

Column iconIBM 电子商务架构师 Chris Walden 将通过他在
developerWorks 上发表的九篇系列文章来指导您如何在
Linux 环境中运用您的 Windows
操作技巧。在这最后一部分中,我们将下载和编译一个软件包,讨论自动化包管理的优点和缺点,同时了解
RPM 系统。

安装 Linux 时首先注意到的事情之一,就是 Linux
发行版本中有如此多可用的包。大多数发行版本都附带了
Linux 操作系统、安装工具和管理工具。它们还包括
Internet
工具、开发工具、办公工具、游戏,以及一些您不曾听说过的程序。Linux
发行版本附带
数千个可用包的情况并不鲜见。如果您没有选择“完整安装”,则只会安装这些包的一个子集。

现在您可能想知道“如何删除不想要的包?如何安装遗漏了的包?是否能够使用不是该发行版本附带的软件?”

RPM
在安装 Linux 时,您或许会注意到关于正在安装的 RPM
的许多信息。 RPM 代表 Redhat Package Manager(Redhat
包管理器),这是 Redhat 的贡献,现在已成为管理
Redhat 和 UnitedLinux
以及其他许多发行版本上的软件的标准。

RPM
本质上就是一个包,包含可以立即在特定机器体系结构上安装和运行的
Linux 软件。例如,在“ 第 3 部分. Webmin
简介”中,我们通过一个 RPM 安装了 Webmin
包。最初加载到发行版本中的所有软件都是通过一个
RPM 来安装的。

RPM 剖析
RPM 是文件包。它包括的 .spec
文件提供了关于包及其功能和依赖关系(即在该包能够运行之前必须安装其他哪些包)的信息。.spec
还包含包中的文件清单,指定这些文件必须加载到系统中的何处,以及它们的初始权限如何。RPM
还包含安装前脚本,这是由包开发人员编写的。RPM
其次还包含已编译的二进制文件。最后,RPM
包含了安装后脚本。

RPM 结构
spec        安装前脚本        二进制文件        二进制文件        ...        二进制文件        安装后脚本

在安装 RPM
时,系统首先检查该包的依赖关系是否得到满足。如果不满足,
安装过程就会终止,除非您指定了迫使安装无论如何都要继续的选项。

如果一切顺利,安装前脚本就会运行。这个脚本可以做任何事情。它通常创建用户和目录。然而,它可以做许多类型的动态配置,甚至以自定义的方式编译运行系统的源代码。

了解 RPM 来自何处
RPM
在安装时将文件复制到您的系统上,并执行脚本。由于
RPM 是以 root 身份运行的,因此所有这些功能都以 root
身份执行。因而在将某个 RPM
安装到系统之前,知道它的由来是很重要的。就像许多
Windows
软件一样,恶意的代码可以像包含在其他包中一样容易地包含在
RPM 中。来自厂商的 RPM
一般都是安全的,但是要对从未知来源随机下载和安装的内容保持警惕。

如果安装前脚本成功完成,二进制文件将依照清单被复制到系统上。在复制完所有的文件和设置了它们的权限之后,安装后脚本就会运行。同样,这个脚本几乎能够做任何事情。

一旦完成所有这些步骤,关于包的信息就被添加到 RPM
数据库,安装过程就完成了。使用这种简单的机制,您能够执行通过更完善的商业安装程序所能执行的所有功能。

RPM 数据库
RPM 的优雅之处是 RPM 数据库。这个数据库通常位于
/var/lib/rpm 目录,它包含关于系统上已安装的每个 RPM
的信息。这个数据库知道包之间的依赖关系,当删除某个包将导致其他包无法工作时,它将发出警告。这个数据库知道最初随某个包安装的每个文件以及这些文件在系统上的最初状态。它还知道每个包的文档和配置文件的位置。这听起来好像是大量的信息,事实上确实如此。但它并不是过多而庞大的。在一个包含
1,066 个包、由 203,272
个文件组成的系统上,数据库文件仅有 45
MB!在加载和卸载包时,RPM
使用这个数据库来检查依赖关系。用户还可以在这个数据库中查询关于包的信息。

使用 RPM
配合 RPM 包使用的程序被相应地命名为 rpm 。 rpm
以多种不同的模式运行,不过最常见的任务是安装、升级、查询、验证和删除。

rpm -i (装)
在第一次安装某个包时,您要使用 -i
或安装模式。只需将 rpm 指向某个二进制包并执行它,
rpm
就会把该包安装到您的系统上。安装过程一般只需几秒钟。我经常会在安装包时使用
-v
(详细)开关来提供关于该过程的更多信息,以及使用
-h
(哈希线)开关来通过输出在控制台上的哈希(#)符号提供安装进度更新。下面是安装某个包的例子:
清单 1. 安装 MyPackage


$ rpm -ivh MyPackage-1.0.0.i386.rpm
Preparing...                ###########################################
[100%]
1:MyPackage              ###########################################
[100%]

就是这个样子!MyPackage
现在已经安装完成,可供使用了。

rpm 必须以 root 身份运行
必须以 root 身份执行 rpm
安装和删除,因为需要访问文件系统和 rpm 数据库。

rpm -e (删除)
要删除已安装的包,可使用 -e 开关。 rpm
将使用数据库来删除该包的所有文件。如果有已安装的其他包依赖正在删除的包,
rpm 将会异常退出。您必须使用 nodeps
开关来执行强制删除( nodeps
还可以用于强制安装)。在使用这个开关来强制安装或删除时,务必
非常
小心。删除其他包所依赖的包,可能会导致灾难性的结果。下面这个命令删除我们在上面安装的包:


$ rpm -e MyPackage

注意,包的删除并不一定需要它的完整名称(包括版本号)。安装时需要完整名称,因为我们是在引用一个文件名称。已安装的包仅通过它们的名称来引用。包的名称是版本号之前的所有内容。

rpm -V(验证)
验证开关非常有用。它将包文件的当前状态与它们在安装时的原始状态作比较。两种状态之间的区别将用一个代码来显示:

文件验证结果
S         文件大小不一致
M         模式不一致(包括权限和文件类型)
5         MD5 校验和不一致
D         设备主要/次要编号不匹配
L         readLink(2) 路径不匹配
U         用户拥有关系不一致
G         群组拥有关系不一致
T         mTime 不一致

如果您对某个包运行 rpm -V
,并且发现某个可执行文件的大小发生了变化,那可能就是安全漏洞的征兆。

rpm -U(升级)
一旦某个包已经安装,尝试安装具有相同名称的包将产生一条消息,指出该包已经安装。
如果想要将某个包升级到更新的版本,可使用 -U
开关来升级。升级还具有另一个影响。当对多个包名称运行升级时,它将设法按依赖关系的顺序放置包。换句话说,必需的包将首先安装。不管某个包是否已经安装,都可以对它使用升级开关,许多人使用它而不是使用
-i
开关来执行安装和升级。下面是使用升级开关来加载多个
rpm 包的例子:
清单 2. 交互式升级


$ rpm -Uvh My*.rpm
Preparing...                ###########################################
[100%]
1:bMyPackageDep          ###########################################
[ 50%]
1:aMyPackageNew          ###########################################
[100%]

在上面的例子中,bMyPackageDep 是 aMyPackageNew
的前提条件,因此尽管文件名称以相反的顺序排列,
rpm 也会对它们正确排序。

rpm -q(查询)
可以从 rpm 数据库中查询多种有用的信息。对 rpm
数据库拥有读访问权限的任何用户都能够运行查询。默认情况下,全部用户都拥有读访问权限。要运行一个查询,可使用
-q
开关带上要查询的包的名称。这样将返回该包的版本。


$ rpm -q MyPackage


MyPackage-1.0.0



包的名称必须精确匹配,不允许使用通配符。然而,如果记不住包的完整名称,您可以使用
grep 工具来帮助找到它。可以使用 -qa
开关来查询所有已安装的包,并用 grep
来管道输出您能记住的信息。例如:

grep 之乐
grep
是一个具有广泛用途的文本搜索工具。默认情况下,
grep
将搜索文件以显示您指定的行。在这里的例子中,它搜索单词“IBM”。
grep 是脚本编写和控制台工作方面的一个强大工具。


$ rpm -qa | grep IBM


IBMWSAppDev-Product-5.0-0


IBMWSSiteDevExp-Core-5.0-0


IBMWSSiteDev-Core-5.0-0


IBMWSTools-WAS-BASE-V5-5.0-0


IBMJava118-SDK-1.1.8-5.0


IBMWSWB-samples-5.0-0


IBMWSWB-5.0-0


IBMWSAppDev-Core-5.0-0


IBMWSAppDev-5.0-0


IBMWSTools-5.0-0



除了版本号外, rpm -q
还可以提供关于包的其他有用信息。下面就是这样一些例子:

使用 rpm 查询获取信息
rpm -q changelog         显示包的开发变更历史记录
rpm -qc         显示包的配置文件
rpm -qd         显示包的文档文件
rpm -qi         显示包描述
rpm -ql         显示包的文件的列表
rpm -qR         显示包的依赖关系

还有另一个有趣的查询命令,它针对文件而不是针对包运行。


rpm -q whatprovides <filename>

上面这个命令将识别与给定的
filename(文件名)相关联的包。filename
必须包括文件的绝对路径,因为信息就是以这种方式存储在
rpm 数据库中的。

RPM 前端
从控制台操作 rpm
很容易,但有时使用图形用户界面会更方便。在典型的
Linux 风格中,有一些前端程序为 rpm
程序提供界面。每种发行版本都有一个前端,但是它们各不相同。请参考您的发行版本文挡,以了解关于所提供的包管理工具的信息。

Webmin 软件包
Webmin 也为处理 RPM 包提供了一个基于 Web 的简单前端。

图 1. Webmin RPM 界面
图 1. Webmin RPM 界面

软件可以从这个界面容易地安装、删除和查询。还可以直接从
URL 站点安装软件。如果安装了诸如 apt 或 Redhat Network
之类的 rpm 增强工具,Webmin
将识别它们并为它们提供一个界面。

源代码
由于 Linux
是开放源代码的操作系统,它附带了编译软件所需的所有开发工具。虽然您使用的大多数包将以二进制
RPM
的形式提供,但是您并不仅限于使用那些包。如果愿意,您可以为您的系统下载原始源代码,并以自定义的方式进行编译。

应该对在生产系统上编译源代码保持谨慎,因为这样可能导致问题,或者不再支持系统上正在使用的商业软件(比如
IBM
DB2)。然而,熟悉从源代码编译软件的过程将使您能够对软件应用补丁,以及使用从其他环境移植过来的包。一旦成功地编译代码,创建您自己的
RPM 也是可以做到的!

Corewars 源代码演示
为演示从源代码编译软件有多简单,我们将编译一个名为
Corewars 的模拟游戏(请参阅
参考资料)。下面是来自他们 Web 站点的关于 Corewars
的说明:“Corewars
是一款模拟游戏,其中许多武士在虚拟的计算机中奔跑时竭力相互攻击对方。可以采用两种类似汇编程序的语言中的一种来编写武士程序,这两种语言分别叫做
Corewars 和 Redcode。Corewars
是默认语言,更易于学习和理解。Redcode
提供更高级和更强大的指令,但是需要更多的时间来学习。”

编译源代码的第一步是从 Web 站点下载源代码包:

* http://tinyurl.com/cmd83

在代码下载完成之后,需要展开这个包。


tar -xvzf corewars-0.9.13.tar.gz

文件将展开到当前目录。标准的做法是将源代码包含在一个与产品名称匹配的目录中。在此例中,源代码位于一个名为
corewars-0.9.13 的目录。

首先进入该目录,找到源代码和一些文档、配置脚本和
README 文件。大多数源代码包都带有一个名为 INSTALL
和一个名为 README
的文件。您应该在编译软件之前首先阅读这些材料。它们在问题出现之前识别问题,并为您建议正确的编译和安装步骤,这样通常可以让您少走许多弯路。我在编译源代码时遇到的大多数问题都是因为我没有遵循那些指导。

通常执行的下一步是运行 configure 脚本。 configure 是
Autoconf 包的一部分,包括在 Linux
发行版本的开发工具中。这里引用一段 Autoconf
的包描述:“GNU 的 Autoconf 是一个用于配置源代码和
Makefile 的工具。通过使用
Autoconf,程序员能够创建可移植和可配置的包,因为建立包的人可以指定各种配置选项。”

configure
脚本在系统上运行一系列测试,以确定为您的发行版本和系统体系结构编译包的最佳方式。然后它为您的系统创建一个定制的
Makefile。如果在您的系统上编译时遇到问题, configure
将会告诉您。 configure
通常允许您自定义将要在编译中包括的特性,或允许您提供关于库或者其他必需文件的位置参数,以便能够成功地编译包。下面我们将不带参数执行
configure :


/configure

在系统上多执行几次测试,最终就会编译成功。下面使用如下命令来生成程序:


make

如果编译有错误,就需要确定问题并修复它们。这可能是一件繁琐的任务,也许需要关于环境和程序设计的大量一般知识。如果一切顺利,我们一般会使用以下命令来安装软件:


make install

文件将被复制到系统中的正确位置,文件权限会被更新,配置文件将被复制,文档也会被添加到手册页。

现在通过执行该程序来测试我们的劳动成果。它是一个图形化的程序,因此要在启动它前运行
X 系统。上面执行的 make install
命令应该已将程序放到了可执行文件路径中。


corewars

作为对我们的奖赏,一个图形化的屏幕应该会出现。

图 2. 大功告成!
图 2. Corewars 游戏

corewars
规则的主题超出了本文的讨论范围,不过您会在手册页(
man corewars )中找到关于这款有趣的模拟游戏的文档。

corewars
的编译是一个典型的场景。可能会有其他许多种变化形式,包括在
configure
脚本上使用开关来调整要编译到程序中的特性,以及从
Makefile 使用不同的命令来调整编译方式,等等。

由于这个程序不是使用 rpm 来安装的,因此 rpm
数据库中没有相应的条目。如果某个程序在安装后没有按预期运行,大多数
Makefile 都包括了一个卸载参数来删除软件:


make uninstall

务必牢记,使用原始源代码不会在 RPM
数据库中添加任何内容。以这种方式安装的软件是非托管的(unmanaged),因此应该小心进行。

源代码 RPM
当 RPM 被创建时,还有一个称作源代码 RPM
的产物。这是一个与源代码组合在一起的 SPEC
文件,设计它的目的是为了在一个或多个体系结构上生成程序。这对源代码和二进制这两个世界来说是最佳的!对于源代码
RPM,您可以在系统上定制编译软件,但是完成的产品将是一个可安装的
RPM,而不是原始的二进制。以预编译 RPM
的形式可用的大多数包还以 SRPM
的形式可用。这也许是在 Linux
中软件跨平台转移的简单途径。当您在一个不同的平台上成功地重新编译时,可考虑与整个开发社区共享完成的
RPM。

也许源代码更适合您
如果您是 Linux
新手,安装软件的方法与您过去习惯使用的方法不同。然而,RPM
安装方法是优雅的,同时提供了您很快就会欣赏的新能力。

您应该熟悉从控制台使用 rpm
的选项,不过对于日常使用,有一些前端界面选项使得
rpm
更易于管理。您的发行版本提供了这样一个界面,也有其他类似的界面可供使用,比如
Webmin 中的那一个界面。

您并不仅限于使用预编译的 rpm,还可以利用 Linux
的开放源代码性质,直接从源代码编译应用程序。对于成熟的项目,编译通常是很容易的。记住,从源代码安装的代码在
rpm
数据库中没有相应的条目。在使用源代码时,可考虑使用源代码
rpm,它组合了已编译源代码的强大能力和 rpm
的可管理性。


--
Ray
回复

使用道具 举报

发表于 2005-9-4 21:19:07 | 显示全部楼层
3n是好人。

尽管是转来的,但其内容对初级用户还是有很多值得学习的东东。

没有进行很好的版面编辑,看得有点累。
回复

使用道具 举报

发表于 2005-9-5 18:29:44 | 显示全部楼层
太好了,我要好好看看!
收了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-30 12:32 , Processed in 0.124023 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表