本文由LinuxProbe.Com团队成员魏丽猿整理发布,原文来自:。
源码包安装
在Linux下的好多软件都是通过源码包形式发布的,尽管相对于二补码软件包,配置和编译上去冗长点,而且它的可移植性却好得多,针对不同的体系结构,软件开发者常常仅需发达衣岩一份源码包,不同的最终用户经过编译就可以正确运行。
安装的具体步骤:
$ tar zxvf XXXX.tar.gz (or tar jxvf XXXX.tar.bz2) $ cd XXXX $ ./configure $ make # make install ##安装 $ make clean ##安装完成后用来清理临时文件 $ake uninstall ##用来卸载软件
1、解压:
最常见源码包的就两种(XXXX.tar.gzorXXXX.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
2、./configure:
解压完成就即将开始安装了(补充一点,开始configure之前,如有必要,请使用patch工具为源码打上相应的补丁),首先跳转到源码的解压目录,众所周知,开始configure前还是应当仔细阅读源码目录下的README或则INSTALL文件,很多安装中的注意事项在这儿都有所列举,configure实际上是一个脚本文件,在当前目录中键入"./configure",shell都会运行当前目录下的configure脚本,有一点必须说明,在整个configure过程,虽然编译仍未进行,configure仅仅是做编译相关的打算工作,它主要对您当前的工作平台做一些依赖性检测,例如编译器是否安装,联接器是否存在,假如在检查的过程没有任何错误,你很辛运,configure脚本会在当前目录下生成下一步编译链接所要用到的另一个文件Makefilelinux下gtk安装,其实configure支持及其丰富的命令行参数,可以键入"./configre--help"获取具体的信息,最常用的估计就是:
$ ./configure --prefix=/opt/XXX 它用来设置软件的安装目录.
3、make:
假如configure过程正确完成,这么在源码目录,会生成相应的Makefile文件,Makefile文件简单来说包括的是一组文件依赖关系以及编译链接的相关步骤,事实上真正的编译链接工作也不是make所做的,make只是一个通用的工具,通常情况下,make会依照Makefile中的规则调用合适的编译器编译所有与当前软件相依赖的源码,生成所有相关的目标文件,最后再使用链接器生成最终的可执行程序:
$ make
4、makeinstall:
当前面两个步骤正确完成,代表着编译链接过程早已完全结束,最后要做的就是将可执行程序安装到正确的位置,在这个步骤,普通用户可能没有相关目录的操作权限,临时切换到root是一个不错的选择,"install"只是Makefile文件中的一个标号,"makeinstall"代表着make工具执行Makefile文件中"install"标号下的所有相关操作,假如在configure阶段没有使用"--prefix=/opt/XXX"指定应用程序的安装目录linux下gtk安装,这么应用程序通常会被默认安装到/usr/local/bin红旗linux操作系统红帽子linux,假如/usr/local/bin早已存在于您的PATH中,这么安装早已基本结束:
$make install
执行完上述操作就可以等待安装完成了。
$make clean $make uninstall
这两个步骤只是安装的后续操作,有一点必须注意,"clean"和"uninstall"也是Makefile文件中相应的两个标号,执行这两个步骤的时侯Makefile文件必要保留,"makeclean"拿来消除编译联接过程中的一些临时文件,"makeuninstall"是卸载相关应用程序,与makeinstall类似,makeuninstall也须要切换到root执行,不过"uninstall"标号在很多Makefile中都被省略掉了。
RPM包安装
1、如何安装rpm软件包
rmp软件包的安装可以使用程序rpm来完成。执行下边的命令
rpm -i your-package.rpm
其中your-package.rpm是你要安装的rpm包的文件名,通常放在当前目录下。
安装过程中可能出现下边的警告或则提示:
... conflict with ... 可能是要安装的包里有一些文件可能会覆盖现有 的文件,缺省时这样的情况下是无法正确安装的可以用 rpm --force -i 强制安装即可 ... is needed by ... ... is not installed ... 此包需要的一些软件你没有安装可以用 rpm --nodeps -i 来忽略此信息 也就是说,rpm -i --force --nodeps 可以忽略所有依赖关系和文件问题,什么包 都能安装上,但这种强制安装的软件包不能保证完全发挥功能
2、如何安装.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-inew-package.rpm即可安装完成。
3、如何卸载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
不可以是下述格式:
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
有时会出现一些错误或则警告:
... is needed by ... 这说明这个软件被其他软件需要,不能随便卸载
可以用rpm-e--nodeps强制卸载
4、如何不安装并且获取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表示保持文件的更新时间。
5、如何查看与rpm包相关的文件和其他信息
下边所有的反例都假定使用软件包mysql-3.23.54a-11
1.我的系统中安装了这些rpm软件包
rpm -qa 列出所有安装过的包
假如要查找所有安装过的包含某个字符串sql的软件包
rpm -qa |grep sql
2.怎样获得某个软件包的文件全名
rpm -q mysql 可以获得系统中安装的mysql软件包全名,从中可以获得当前软件包的版本等信息。
这个事例中可以得到信息mysql-3.23.54a-11
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产生,或者从"` `"中的命令行产生
yum安装
手动搜索最快镜像插件:yuminstallyum-fastestmirror
安装yum图形窗口插件:yuminstallyumex
1、安装
yum install 全部安装 yum install package1 安装指定的安装包package1 yum groupinsall group1 安装程序组group1
2、更新和升级
yum update 全部更新 yum update package1 更新指定程序包package1 yum check-update 检查可更新的程序 yum upgrade package1 升级指定程序包package1 yum groupupdate group1 升级程序组group1
3、查找和显示
yum info package1 显示安装包信息package1 yum list 显示所有已经安装和可以安装的程序包 yum list package1 显示指定程序包安装情况package1 yum groupinfo group1 显示程序组group1信息yum search string 根据关键字string查找安装包
4、删除程序
yum remove | erase package1 删除程序包package1 yum groupremove group1 删除程序组group1 yum deplist package1 查看程序package1依赖情况
5、清除缓存
yum clean packages 清除缓存目录下的软件包 yum clean headers 清除缓存目录下的 headers yum clean oldheaders 清除缓存目录下旧的 headers yum clean, yum clean all (= yum clean packages; yum clean oldheaders) 清除缓存目录下的软件包及旧的headers
6、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包了。