如何在Linux中安装应用程序

如果您喜欢这些文章,欢迎点击此处订阅本Blog

Blog 订阅


1 安装应用程序

下面我们来解释如何在Linux系统中安装软件,例如如何安装现成的应用程序,或者编
译公开源代码的应用程序。事实上,由于Linux应用程序可以以源代码或者目标程序的方
式提供,所以有多种提供软件包的方法,最常用的两种方法是rpm和tgz。

1.1 rpm程序

rpm是一种将软件打包发行并且实现自动安装的程序,目前,大部分Linux发行版本都
使用rpm程序来管理软件的安装和拆除,例如RedHat,Turbo Linux,Corel Linux等等。
对于个别没有提供rpm程序的发行版本,你可以自己下载rpm程序并且进行编译。

需要用rpm安装的软件包通常是一些打包文件,后缀名是.rpm。rpm程序可以对这种程
序包进行安装,卸载,升级和维护。

Rpm程序的第一个功能是安装应用软件,例如,在当前目录下有一个apache-1.3.6-4.
rpm软件包,那么安装它的命令是

rpm –i apache-1.3.6-4.rpm

-i开关用来安装应用软件,如果你想看到更完整的安装信息,可以同时使用-v和-h选
项:

rpm –ivh apache-1.3.6-4.rpm

这两个选项将在安装的同时显示软件的名称和安装进度。

rpm程序能够在安装程序的同时检查软件包的相互依赖关系,并且检验软件之间的文件
冲突,如果发现冲突或者需要的软件包没有安装,或者已经安装了其他版本的软件包,
就会报错并退出。

对于需要升级旧版本软件的情况,使用-U选项,例如,已经安装了Apache 1.2.1的系
统上再安装1.3.6,那么需要执行

rpm –U apache-1.3.6-4.rpm

同样可以使用-v和-h选项。

偶尔你可能会碰到想要不顾文件冲突或者版本冲突而想强行安装应用程序的情况,这
种情况下可以使--force选项,如:

rpm –i --force apache-1.3.6-4.rpm

类似的还有两个选项--nodeps 和--replacefiles。-nodeps是不检查相互依赖关系,
--replacefiles是自动强制替换文件。

另外一个有趣的用法是可以用rpm从ftp server上安装应用程序,例如

rpm –i ftp://myserver.com/apache/apache-1.3.6-4.rpm

rpm程序的第二个标准用法是卸载软件包,这可以用-e选项,例如,删除apache-1.3.
6的命令是

rpm –e apache

注意删除软件包的时候使用的软件包的名字不包含版本号。

同样,删除软件包也会引起rpm的软件包依赖性验证,如果你想删除的软件包被别的软
件包使用就会出错。--nodeps选项仍然用于禁止依赖性检查。

下一个常用的功能是对软件包进行查询,这是通过-q选项来完成的,例如,要查阅当
前是否安装了apache软件包,版本是什么,可以使用命令(注意没有版本后缀)

rpm –q apache

会显示当前安装的apache rpm的文件名。如果要查询当前安装的所有软件包,使用-a
选项:

rpm –a

有时你想知道某个文件是什么软件包安装上去的,这时可以使用-f选项,例如,要查
出/etc/httpd/httpd.conf属于那个软件包,执行

rpm –qf /etc/httpd/httpd.conf

另外的工作是查询某个软件包所包含的文件,这可以使用-qpl选项,如

rpm –qpl apache-1.3.6-4.rpm

其中,l选项的含义是建立类似于ls –l的文件列表输出,类似的还有-i,-d和-c,例


rpm –qpi apache-1.3.6-4.rpm

显示这个软件包的版本和开发人员信息。

rpm –qpc apache-1.3.6-4.rpm

显示软件包中的配置文件清单

rpm –qpd apache-1.3.6-4.rpm

显示软件包中的文档列表。

最后一个常用的功能是校验软件包的完整性,命令是-V。例如,检验某个软件包的文
件是否正确,使用

rpm –V apache

想检查某个安装好的文件和包中的文件是否一致,使用-Vf,例如

rpm –Vf /usr/sbin/httpd

想检查某个包安装到系统上的文件是否完全正确(和包比较),使用-Vp,如

rpm –Vp apache-1.3.6-4.rpm

1.2 编译应用程序

尽管rpm程序带来了很多好处,但是由于各种原因,仍然难免发生在某个系统上编译出
的应用程序在其他系统上不能运行的情况。最常见的情况是运行库的不同,例如,现在
大部分Linux上的应用程序基于GLIBC(GNU GCC编译器使用的运行库),结果是没有包含
正确的GLIBC版本的Linux就无法使用这些目标代码,这种互相不兼容是UNIX传统的一大
体现。幸运的是,所有Linux都基于共同的操作系统内核(内核版本不同引起的冲突除外
)和相同的编译器(GNU GCC)。而且Linux下的应用程序是基于GNU协议的,因此你通常
总是可以重新编译源程序,得到一个可以使用的版本。

要编译应用程序,首先必须拿到应用程序的源代码。一般来说,各个Linux厂商都会提
供它的发行版本中各种应用程序的源代码,实在不行的话你也可到网上去下载。

下载下来的源代码有各种形式,最常见的是rpm,其后缀名是.src.rpm,可以象普通的
rpm文件一样安装,安装时,rpm程序一般会把源代码拷贝到/usr/src/redhat/SOURCE下
(也可能有其他的目录名,你自己到/usr/src下看一下),通常这些源代码安装时并没
有解压,是一些在/usr/src/redhat/SOURCE下后缀名为.tgz或.tar的文件。另外,也可
能你下载的源代码本身就是.tgz或者.tar.gz形式,那么就可以直接进行下一步,不需要
安装了。

.tgz或者.tar.gz就是.tar的压缩格式,可以用gzip程序进行展开:

gzip –d apache-1.3.6.tgz

或者

gzip –d apache-1.3.6.tar.gz

将会将其还原为apache-1.3.6.tar文件,然后

tar xvf apache-1.3.6.tar

将这个程序完全展开成为源代码。关于tar和gzip程序的详细说明见后面“日常维护”
部分。

进入到展开的目录apache-1.3.6,然后执行

./configure

几乎所有的源程序都会包含这个程序,通常,在发行源代码时,开发者会写这个名为
configure的脚本,以便自动确定诸如操作系统类型,编译器的版本等等重要的信息。这
个脚本将生成关键性的Makefile文件。(然而,也有个别开发者会把这个工作留给你自
己,这样的话,他一般会给你一个范例性的Makefile文件,并且给出足够的说明,你可
以在这个文件上修改使之适合你的系统)另外,大部分程序的configure程序包含一些参
数,可以设置程序安装运行的路径,程序的运行库等等信息。一般你可以使用-help参数
来察看这些参数的用法。

然后执行

make

GNU的make程序将自动编译所有源代码。

最后,在编译完毕之后,通常开发者会设计自动安装程序,这可以执行

make install

完成。

为了兼容性的原因,大部分源代码在编译后,目标程序的缺省安装路径是/usr/local
,相应地,配置文件的位置也变到了/usr/local/etc,/usr/local/etc或者/usr/local
/xxxx/etc等(xxxx是被编译的应用程序的名字),通常你可以用configue的选项设定这
些目录,或者干脆按照新的路径进行配置。

个别比较简单的软件只有一个运行文件,例如joe程序,那么就不提供安装命令,你只
要自己把编译出的可执行程序拷贝到/usr/bin就万事大吉了。

上面的操作是编译90%Linux程序的基本步骤,不过,必须记住,这只是一种习惯而已
,如果这样的动作不起作用,那也没有什么奇怪的,那你就的研究软件的文档了。还有
个别的程序只有一个.c文件,那就直接用gcc编译程序编译他就可以了。

gcc编译程序的用法是

gcc –o [目标文件名] [源文件名]

例如,有一个somesoft.c,你想编译这个程序,编译出的执行程序的名字叫soft,那
么执行

gcc –o soft somesoft.c

就可以了。

由于Linux的特性,软件开发者会不断地推出新的patch,通常,这些patch会用在源代
码上修改的方式推出,表现就是一些.patch文件,可以用patch程序来使用这些patch,
例如,我得到了一个关于apache的patch程序,名字叫tok.patch,进入apache的源代码
展开的目录,执行

patch –p0 < tok.patch

就可以了。关于patch命令的情况,参考日常管理的部分。

1.3 其他

还有一些其他的软件包安装程序,例如pkgtool和deb安装程序,说实话这些程序都很
蠢,而且现在大部分Linux厂商都在走向rpm,甚至许多其他的UNIX厂商也在考虑使用rp
m,当然,像sun那样的坚持使用愚蠢的pkgtool的公司也是有的。但是我们不打算介绍这
种东西了。唯一必须指出的是.tgz或是.tar.gz这种直接压缩的软件包还是经常有人使用
的,如同我们刚才说的,这样的压缩包可以先用gzip解压再用tar展开,另外,也可以使
用tar的z选项直接展开:

tar zxvf apache-1.3.6.tgz

 

转自【http://hi.baidu.com/liminghui1986/blog/item/23248081a9e6a8debd3e1eeb.html】




你可能感兴趣的:(软件工程,杂七杂八,教学工作)