Linux下软件包的多种安装方式

1.源码包安装

        在Linux下的不少软件都是经过源码包方式发布的,虽然相对于二进制软件包,配置和编译起来繁琐点,可是它的可移植性却好得多,针对不一样的体系结构,软件开发者每每仅需发布同一份源码包,不一样的最终用户通过编译就能够正确运行。
安装的具体步骤:
$ tar zxvf XXXX.tar.gz (or tar jxvf XXXX.tar.bz2)
$ cd XXXX
$ ./configure
$ make
# make install            ##安装
$ make clean              ##安装完成后用来清理临时文件
$ake uninstall            ##用来卸载软件

一、解压:

        最多见源码包的就两种(XXXX.tar.gz or XXXX.tar.bz2),其实这些源码包都是由2个工具压缩而成的,tar.gz结尾的文件用到的工具是tar和gunzip,而tar.bz2结尾的文件所使用的工具是tar和bzip2,之因此这样作是由于,tar仅仅可以打包多个文件可是没有压缩的功能,而gz和bz2却恰好相反,仅可以压缩单个文件,这样咱们常见的源码包其实是经过tar先将不一样的源文件打包,而后再经过gunzip或者bzip2压缩后发布的,固然这两个步骤能够经过一条命令实现:
$ tar zcvf XXXX.tar.gz XXXX(or tar jcvf XXXX.tar.bz2 XXXX)
解压的相关命令以下:
$ tar zxvf XXXX.tar.gz
$ tar jxvf XXXX.tar.bz2

二、./configure:

        解压完成就正式开始安装了(补充一点,开始configure以前,若有必要,请使用patch工具为源码打上相应的补丁),首先跳转到源码的解压目录,众所周知,开始configure前仍是应该仔细阅读源码目录下的README或者INSTALL文件,好多安装中的注意事项在这里都有所罗列,configure其实是一个脚本文件,在当前目录中键入"./configure",shell就会运行当前目录下的configure脚本,有一点必须说明,在整个configure过程,其实编译还没有进行,configure仅仅是作编译相关的准备工做,它主要对您当前的工做平台作一些依赖性检查,好比编译器是否安装,链接器是否存在,若是在检测的过程没有任何错误,你很幸运,configure脚本会在当前目录下生成下一步编译连接所要用到的另外一个文件Makefile,固然configure支持及其丰富的命令行参数,能够键入"./configre --help"获取具体的信息,最经常使用的恐怕就是:
$ ./configure --prefix=/opt/XXX    它用来设置软件的安装目录.

三、make:

        若是configure过程正确完成,那么在源码目录,会生成相应的Makefile文件,Makefile文件简单来讲包括的是一组文件依赖关系以及编译连接的相关步骤,事实上真正的编译连接工做也不是make所作的,make只是一个通用的工具,通常状况下,make会根据Makefile中的规则调用合适的编译器编译全部与当前软件相依赖的源码,生成全部相关的目标文件,最后再使用连接器生成最终的可执行程序:
$ make

四、make install:

        当上面两个步骤正确完成,表明着编译连接过程已经彻底结束,最后要作的就是将可执行程序安装到正确的位置,在这个步骤,普通用户可能没有相关目录的操做权限,临时切换到root是一个不错的选择,"install"只是Makefile文件中的一个标号,"make install"表明着make工具执行Makefile文件中"install"标号下的全部相关操做,若是在configure阶段没有使用"--prefix=/opt/XXX"指定应用程序的安装目录,那么应用程序通常会被默认安装到/usr/local/bin,若是/usr/local/bin已经存在于您的PATH中,那么安装已经基本结束:
$make install

执行完上述操做就能够等待安装完成了。 java

$make clean
$make uninstall

        这两个步骤只是安装的后续操做,有一点必须注意,"clean"和"uninstall"也是Makefile文件中相应的两个标号,执行这两个步骤的时候Makefile文件必要保留,"make clean"用来清除编译链接过程当中的一些临时文件,"make uninstall"是卸载相关应用程序,与make install相似,make uninstall也须要切换到root执行,不过"uninstall"标号在好多Makefile中都被省略掉了。 node

2.RPM包安装

一、如何安装rpm软件包

rmp软件包的安装可使用程序rpm来完成。执行下面的命令
rpm -i your-package.rpm

其中your-package.rpm是你要安装的rpm包的文件名,通常置于当前目录下。 mysql

安装过程当中可能出现下面的警告或者提示:
... conflict with ... 多是要安装的包里有一些文件可能会覆盖现有
的文件,缺省时这样的状况下是没法正确安装的能够用
rpm --force -i 强制安装便可
... is needed by ...
... is not installed ... 此包须要的一些软件你没有安装能够用
rpm --nodeps -i 来忽略此信息
也就是说,rpm -i --force --nodeps 能够忽略全部依赖关系和文件问题,什么包
都能安装上,但这种强制安装的软件包不能保证彻底发挥功能

二、如何安装.src.rpm软件包

有些软件包是以.src.rpm结尾的,这类软件包是包含了源代码的rpm包,在安装时
须要进行编译。这类软件包有两种安装方法,

方法一:

1.执行rpm -i your-package.src.rpm
2. cd /usr/src/redhat/SPECS
3. rpmbuild -bp your-package.specs 一个和你的软件包同名的specs文件
4. cd /usr/src/redhat/BUILD/your-package/ 一个和你的软件包同名的目录
5. ./configure 这一步和编译普通的源码软件同样,能够加上参数
6. make
7. make install

方法二:

1.执行rpm -i you-package.src.rpm
2. cd /usr/src/redhat/SPECS                 前两步和方法一相同
3. rpmbuild -bb your-package.specs          一个和你的软件包同名的specs文件

        这时,在/usr/src/redhat/RPM/i386/ (根据具体包的不一样,也多是i686,noarch等等)目录下,有一个新的rpm包,这个是编译好的二进制文件,执行rpm -i new-package.rpm便可安装完成。 sql

三、如何卸载rpm软件包

使用命令 rpm -e 包名,包名能够包含版本号等信息,可是不能够有后缀.rpm
好比卸载软件包proftpd-1.2.8-1,可使用下列格式:
rpm -e proftpd-1.2.8-1
rpm -e proftpd-1.2.8
rpm -e proftpd-
rpm -e proftpd

不能够是下列格式: shell

rpm -e proftpd-1.2.8-1.i386.rpm
rpm -e proftpd-1.2.8-1.i386
rpm -e proftpd-1.2
rpm -e proftpd-1

有时会出现一些错误或者警告: vim

... is needed by ... 这说明这个软件被其余软件须要,不能随便卸载

能够用rpm -e --nodeps强制卸载 缓存

四、如何不安装可是获取rpm包中的文件

使用工具rpm2cpio和cpio
rpm2cpio xxx.rpm | cpio -vi
rpm2cpio xxx.rpm | cpio -idmv
rpm2cpio xxx.rpm | cpio --extract --make-directories

参数i和extract相同,表示提取文件。v表示指示执行进程 工具

d和make-directory相同,表示根据包中文件原来的路径创建目录
m表示保持文件的更新时间。

五、如何查看与rpm包相关的文件和其余信息

下面全部的例子都假设使用软件包mysql-3.23.54a-11

1.个人系统中安装了那些rpm软件包

rpm -qa  列出全部安装过的包

若是要查找全部安装过的包含某个字符串sql的软件包 ui

rpm -qa |grep sql

2.如何得到某个软件包的文件全名

rpm -q mysql 能够得到系统中安装的mysql软件包全名,从中能够得到当前软件包的版本等信息。

这个例子中能够获得信息mysql-3.23.54a-11 spa

3.一个rpm包中的文件安装到那里去了?

rpm -ql 包名            注意这里的是不包括.rpm后缀的软件包的名称

        也就是说只能用mysql或者mysql-3.23.54a-11而不是mysql-3.23.54a-11.rpm,若是只是想知道可执行程序放到那里去了,也能够用which,好比

which mysql

4.一个rpm包中包含那些文件

一个没有安装过的软件包,使用:rpm -qlp ****.rpm
一个已经安装过的软件包,还可使用:rpm -ql ****.rpm

5.如何获取关于一个软件包的版本,用途等相关信息?

一个没有安装过的软件包,使用rpm -qip ****.rpm
一个已经安装过的软件包,还可使用rpm -qi ****.rpm

6.某个程序是哪一个软件包安装的,或者哪一个软件包包含这个程序

rpm -qf `which 程序名` 返回软件包的全名
rpm -qif `which 程序名` 返回软件包的有关信息
rpm -qlf `which 程序名` 返回软件包的文件列表

注意,这里不是引号,而是`,就是键盘左上角的那个键,也可使用rpm -qilf,同时输出软件包信息和文件列表

7.某个文件是哪一个软件包安装的,或者哪一个软件包包含这个文件

        注意,前一个问题中的方法,只适用与可执行的程序,而下面的方法,不只能够用于可执行程序,也能够用于普通的任何文件,前提是知道这个文件名,首先得到这个程序的完整路径,能够用whereis或者which,而后使用rpm -qf例如:
# whereis ftptop
ftptop: /usr/bin/ftptop /usr/share/man/man1/ftptop.1.gz
# rpm -qf /usr/bin/ftptop
proftpd-1.2.8-1
# rpm -qf /usr/share/doc/proftpd-1.2.8/rfc/rfc0959.txt
proftpd-1.2.8-1

得到软件包相关的信息用rpm -q,q表示查询query,后面能够跟其余选项,好比

i 表示info,得到软件包的信息;
l 表示list,得到文件列表;
a 表示all,在全部包中执行查询;
f 表示file,根据文件进行相关的查询;
p 表示package,根据软件包进行查询
须要的查询条件可使用grep产生,或者从"` `"中的命令行产生

3.yum安装

自动搜索最快镜像插件:yum install yum-fastestmirror
安装yum图形窗口插件:yum install yumex

一、安装

yum install 所有安装
yum install package1 安装指定的安装包package1
yum groupinsall group1 安装程序组group1

二、更新和升级

yum update 所有更新
yum update package1 更新指定程序包package1
yum check-update 检查可更新的程序
yum upgrade package1 升级指定程序包package1
yum groupupdate group1 升级程序组group1

三、查找和显示

yum info package1 显示安装包信息package1
yum list 显示全部已经安装和能够安装的程序包
yum list package1 显示指定程序包安装状况package1
yum groupinfo group1 显示程序组group1信息yum search string 根据关键字string查找安装包

四、删除程序

yum remove | erase package1 删除程序包package1
yum groupremove group1 删除程序组group1
yum deplist package1 查看程序package1依赖状况

五、清除缓存

yum clean packages 清除缓存目录下的软件包
yum clean headers 清除缓存目录下的 headers
yum clean oldheaders 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) 清除缓存目录下的软件包及旧的headers

六、TIPS

1.让yum命令下载软件包,可是不安装

yum有一个plugin叫作yum-downloadonly,它就能够为用户实现只下载软件包的功能。
咱们可使用如下命令安装这个插件:
yum install yum-downloadonly
完成安装后,yum就多了两个命令参数,分别是:
--downloadonly
--downloaddir=/path/to/dir

这两个命令参数的含义很是明确,不用多做解释了,这样,用户就能够作到使用yum只下载软件包,不自动安装了

2.不用yum-downloadonly插件,安装或者升级软件时保留下安装包

yum 默认状况下,升级或者安装后,会删除下载的rpm包。
不过,咱们也能够以下设置升级后不删除下载的rpm包
vim /etc/yum.conf
[main]
cachedir=/var/cache/yum
keepcache=0

将 keepcache=0 修改成 keepcache=1, 安装或者升级后,在目录 /var/cache/yum 下就会有下载的 rpm 包了。

相关文章
相关标签/搜索