linux下安装应用程序
linux下安装应用程序
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厂商也在考虑使用rpm,当然,像sun那样的坚持使用愚蠢的pkgtool的公司也是有的。但是我们不打算介绍这种东西了。唯一必须指出的是.tgz或是.tar.gz这种直接压缩的软件包还是经常有人使用的,如同我们刚才说的,这样的压缩包可以先用gzip解压再用tar展开,另外,也可以使用tar的z选项直接展开:
tar zxvf apache-1.3.6.tgz
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厂商也在考虑使用rpm,当然,像sun那样的坚持使用愚蠢的pkgtool的公司也是有的。但是我们不打算介绍这种东西了。唯一必须指出的是.tgz或是.tar.gz这种直接压缩的软件包还是经常有人使用的,如同我们刚才说的,这样的压缩包可以先用gzip解压再用tar展开,另外,也可以使用tar的z选项直接展开:
tar zxvf apache-1.3.6.tgz
wu-ftp很多人说不好
www.wu-ftp.org
可以去下载一个 vsftp
都很容易安装,如果下载是source.
安装wu-ftp就这样。
# tar zxvf someftp.tar.gz
# ./configure
# make
# make install
可以去下载一个 vsftp
都很容易安装,如果下载是source.
安装wu-ftp就这样。
# tar zxvf someftp.tar.gz
# ./configure
# make
# make install