安装及管理应用程序
文章主要转自:http://www.cnblogs.com/zhoujie/archive/2013/03/23/linux6.html
: http://yttitan.blog.51cto.com/70821/1127520
安装及管理应用程序
同windows操作系统一样,使用一个操作系统,肯定要安装一些软件,这篇随笔主要介绍Linux上软件的安装。首先我们应该了解Linux应用程序的组成、熟悉RPM软件包的
管理机制,接着就是会使用RPM包管理工具,并且从源码包编译安装应用程序。
一、Linux应用程序简介
1、Linux命令与应用程序的关系
(1)、文件位置
2、Linux应用程序的组成
这部分与Linux的目录层次有紧密关系,下面列出的是典型应用程序的目录结构:
文件类型 | 保存目录 |
普通执行程序文件 | /usr/bin |
服务器执行程序文件和管理程序文件 | /usr/sbin |
应用程序配置文件 | /etc |
日志文件 | /var/log |
应用程序文档文件 | /usr/share/doc |
应用程序手册页文件 | /usr/share/man |
如果应用程序的配置文件较多,通常会以软件名建立专门的子文件夹来保存,如“/etc/httpd”
例如查看sendmail软件包时,执行rpm -ql sendmail查看。
3、软件包的封装类型
封装类型有多种,常见的是RPM软件包,扩展名为“.rpm”,源代码软件包,一般为“.tar.gz”、“.tar.bz2”等格式的压缩包包含程序的原始代码;这两种较常用。
其它的有deb软件包,扩展名为“.deb”,提供安装程序的软件包,一般是install.sh、setup、.bin格式的文件,类似windows中的exe安装文件,还有绿色免安装的
软件包,在压缩包内提供已编译好的执行程序文件,解开压缩包后的文件即可直接使用。(备注:使用tar命令制作而成的源代码包文件,经常被称为“TarBall” ,
即“Tar包”)
二、使用RPM包管理工具
1、RPM简介
PRM:RedHat Package Manager,因为这个RPM格式的关键包格式是由Red Hat公司首先提出并使用的,后得到广泛使用。它建立统一的数据库文件,详细记录
软件包安装、卸载等变化信息,能够自动分析软件包依赖关系。
RPM包的一般格式为:bash-3.1-16.1.i386.rpm(软件名称,版本号,发布次数,硬件平台,扩展名)
当然这个格式不固定,因为有时候可能还会加上所适用的操作系统信息,如:wget-1.10.2-7.el5.i386.rpm
2、使用RPM包管理命令
RPM命令的主要功能是:
(1). 查询RPM软件、包文件的相关信息
查询已安装的RPM软件信息:rpm -q[子选项] [软件名]
查询文件/目录属于哪个RPM软件 :rpm -qf 文件/目录名
(备注:使用“-q”选项时实际上调用了“/usr/bin/rpmquery”程序完成查询工作,对于“-qa”查询选项,命令参数(即软件包名)是非必须的;
一般查询时,软件名不需要指定版本号)
[root@localhost ~]# rpm -q bash ==>查询是否已安装有bash软件包
bash-3.1-16.1
[root@localhost ~]# rpm -qa | grep bash
bash-3.1-16.1
[root@localhost ~]# rpm -qf /usr/bin/vim ==>查询vim是由哪个软件包安装的
vim-enhanced-7.0.109-3
[root@localhost ~]# rpm -ql dhcp ==>查询dhcp软件包安装的文件列表
/etc/dhcpd.conf
/etc/rc.d/init.d/dhcpd
……
查询未安装的RPM软件包文件:rpm -qp[子选项] [RPM包文件]
用法:结合不同的子选项 完成不同查询
-qpi:通过.rpm包文件查看该软件的详细信息
-qpl:查看.rpm安装包内所包含的目录、文件列表
-qpc:查看.rpm安装包内包含的配置文件列表
-qpd:查看.rpm安装包内包含的文档文件列表
[root@localhost Server]# rpm -qpl lynx-2.8.5-28.1.i386.rpm
/etc/lynx-site.cfg
/etc/lynx.cfg
……
==>查询lynx安装包中的文件列表
(2). 安装、升级、卸载RPM软件包
安装或升级RPM软件:rpm [选项] [RPM包文件]...
卸载指定的RPM软件:rpm -e 软件名 (备注:卸载软件时只需要指定软件名即可,无需指定版本号)
辅助选项简单介绍:
(备注:--force 辅助选项主要应用于以下两种情况:
1)缺失某个软件包的文件时,需要进行覆盖安装以找回丢失文件
2)安装一个比现有软件版本陈旧的软件包(多为测试用途)
当安装、卸载软件包时,提示缺少依赖包无法进行时,如果仍要继续执行,应结合 --nodeps 选项而不 是 --force 选项)
[root@localhost ~]# rpm -ivh lynx-2.8.5-28.1.i386.rpm ==>安装一个新的RPM包
warning: lynx-2.8.5-28.1.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:lynx ########################################### [100%]
==>安装lynx软件包同事显示安装进度
[root@localhost ~]# rpm -q lynx
lynx-2.8.5-28.1
[root@localhost ~]# rpm -e lynx ==>卸载lynx软件包
[root@localhost ~]# rpm -q lynx
package lynx is not installed
(备注:“warning:……NOKEY……”的警告信息是由于没有导入RedHat提供的公钥所致,但并不影响安装效果,可以忽略,如果需要导入公钥文件,可以参考如下
步骤(以后从RHEL5光盘中安装软件时,就不会再出现警告提示了):
[root@localhost ~]# cd /media/cdrom
[root@localhost cdrom]# rpm --import RPM-GPG-KEY-redhat-release)
[root@localhost ~]# rpm -i wget-1.10.2-3.2.1.i386.rpm
[root@localhost ~]# rpm -q wget
wget-1.10.2-3.2.1
[root@mail ~]# rpm -Uvh /media/cdrom/wget-1.10.2-7.el5.i386.rpm ==>升级wget软件包
warning: /media/cdrom/wget-1.10.2-7.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:wget ########################################### [100%]
[root@localhost ~]# rpm -q wget
wget-1.10.2-7.el5
(备注:在系统中不存在被升级的软件包时,升级命令的功能等同于安装命令)
解决软件包依赖关系:
1)、安装有依赖关系的多个软件时被依赖的软件包需要先安装同时指定多个.rpm包文件进行安装
(备注:如果需要同时安装相互依赖的数十个.rpm软件包,可以结合Shell通配符“*”同时指定这些文件作为参数)
2)、卸载有依赖关系的多个软件时依赖其他程序的软件包需要先卸载同时指定多个软件名进行卸载
3)、忽略依赖关系
(3). 维护RPM数据库信息
当RPM数据库损坏时,需要进行数据库重建:rpm --rebuilddb 或者rpm --initdb
三、从源码包编译安装程序
1、源码编译简介
既然有了RPM安装,那么为什么需要源码安装呢?首先它能获得最新的软件版本,及时修复bug;然后它那能根据用户需要,灵活定制软件功能。它的应用场合也非常广泛,
比如安装较新版本的应用程序时、当前安装的程序无法满足需要时或者需要为应用程序添加新的功能时等。
Tarball封包:多为.tar.gz或者tar.bz2格式。
确认源代码编译环境:需要安装支持C/C++程序语言的编译器。
[root@localhost ~]# gcc --version ==>或g++ -v [--version]
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-44)
Copyright (C) 2006 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。
[root@localhost ~]# g++ --version
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-44)
……
(备注:在实际编译安装软件的操作中,大多数情况是通过 make 来自动调用gcc或g++进行工作,无需用户手动执行gcc等命令)
2、从源码编译安装程序的基本过程
解包 —— tar : 解包、释放出源代码文件
配置 —— ./configure (configure 一般是位于软件包目录中的可执行脚本文件): 针对当前系统、软件环境,配置好安装参数
编译 —— make : 将源代码文件变为二进制的可执行程序
安装 —— make install : 将编译好的程序文件复制到系统中
3、源码编译安装程序示例
1)、解包(习惯上将软件包释放到 /usr/src/ 目录;解包后的源代码文件位置:/usr/src/软件名-版本号/)
[root@localhost ~]# tar zxvf axel-1.0a.tar.gz -C /usr/src/ [root@localhost ~]# ls /usr/src/axel-1.0a/ API axelrc.example configure CREDITS gui nl.po tcp.c axel.1 CHANGES conn.c de.po http.c README tcp.h axel.c conf.c conn.h ftp.c http.h search.c text.c axel.h conf.h COPYING ftp.h Makefile search.h
==>configure执行脚本用于下一步的配置,README或INSTALL文件可提供安装方法
2)、配置需将工作目录切换到软件源码所在目录;使用源码目录中的 configure 脚本;执行“./configure --help” 可以查看帮助;
典型的配置选项: --prefix=软件安装目录)
[root@localhost ~]# cd /usr/src/axel-1.0a [root@localhost axel-1.0a]# ./configure --prefix=/usr/local/axel ==>若不指定任何配置选项,将采用默认值
(备注:不同的应用程序其配置参数会存在区别,因此学会使用“./configure --help”非常重要(“./”表示当前目录);
用户应用程序习惯上安装到“/usr/local/软件名”文件夹中;编译过程中如果出现错误,通常是由于缺少依赖软件包所致;根据软件大小不同,
配置过程可能会需要不同的时间)
3)、编译 :执行make命令
4)、安装 :执行make install命令
[root@localhost axel-1.0a]# make
[root@localhost axel-1.0a]# make install
验证已编译安装完成的程序:
[root@localhost axel-1.0a]# ls /usr/local/axel/ /usr/local/axel/bin/
/usr/local/axel/:
bin etc share
/usr/local/axel/bin/:
axel
[root@localhost axel-1.0a]# /usr/local/axel/bin/axel –help
Usage: axel [options] url1 [url2] [url...]
--max-speed=x -s x Specify maximum speed (bytes per second)
……
四、yum安装(推荐)
YUM(Yellow dog Updater,Modified)是一个基于RPM却胜于RPM的软件管理工具,它的最大优点是可以自动解决RPM软件包间的依赖性问题,从而可以更
轻松的管理Linux系统中的软件。从RHEL5开始,Red Hat就推荐用yum作为软件安装的首选方式。
1. 要使用YUM安装方式,首先必须要配置好YUM源(也称为“yum仓库”),即指定所有RPM软件包的存放位置。如果是合法的RHEL用户,并且已经成功地在红帽官方的
Red Hat Network(RHN)上注册,那么RHEL系统会自动使用RHN作为默认yum源,也就是说我们安装的所有软件都可以直接来自红帽官网。但估计有这样实力的人并
不多,何况是对于我们初学者,所以更多的情况下我们需要自己来配置yum源。
由于在RHEL6的系统光盘中已经集成了绝大多数应用软件的RPM包,因此一般可以指定系统光盘作为yum源,或者是指定网络中的某台FTP或Web服务器作为yum源。
设置yum源需要配置定义文件,定义文件必须存放在指定的“/etc/yum.repos.d/”目录中,而且必须以“.repo”作为扩展名。下面我们就配置一个名为“dvd.repo”、
以系统光盘作为yum源的定义文件。
首先挂载光盘:
# mount /dev/cdrom /mnt/cdrom
然后生成并配置yum源定义文件:
# vim /etc/yum.repos.d/dvd.repo
文件中各行的含义:
(1)[dvd]:yum源的识别名称,可自由定义。
(2)name=rhel6 dvd:对yum源的描述,可自由定义。
(3)baseurl=file:///mnt/cdrom:指定yum源的URL地址,这是整个定义文件中最重要的一行。URL地址可以有三种不同的表示方法:
指向网络中的Web服务器:baserul=http://……
指向网络中的FTP服务器:baserul=ftp://……
指向本机中的某个目录:baserul= file://……
所以“baseurl=file:///mnt/cdrom”就表示URL指向的是本机中的“/mnt/cdrom”目录。
2、安装/卸载软件
yum会自动检查软件包之间的依赖关系,可以发现要安装telnet-server,还必须要安装一个依赖包xinetd。系统询问是否确认安装这两款软件,输入“y”,按下
回车键,就可以开始安装了。软件如果正确安装,在最后将出现“Complete!”的提示。
卸载软件可以使用“yum remove”命令,如将刚才安装的telnet-server软件卸载掉:
按“y”确认之后,就可以将软件卸载掉了。
3、yum命令的其它用法
(1)yum info:查看软件包的信息。
例,查看system-config-lvm软件包的信息。
从中可以查看到软件包的版本、适用平台、软件描述等信息。尤其是对一些不熟悉的软件可以通过该命令了解其基本功能。
(2)yum clean all:清除缓存
在yum系统中会建立一个名为yum缓存的空间,用来存储一些yum的数据,以提高yum的执行效率。在大部分情况下无需费心管理yum缓存中的数据,
但有时如果发现yum运行不太正常,这也许是由yum缓存错误造成的,此时就可以用“yum clean all”命令清除缓存以解决问题。
4、yum故障排错
在讲课的过程中发现不少同学在使用yum时出现问题,下面说一下排错的思路:
(1)确认光盘是否已经挂载。
(2)检查yum源定义文件是否存在错误。这个文件要求非常严格,其中任何一个单词或字母出现错误,都会导致yum出现问题。
(3)检查是否还有别的yum源定义文件。系统中可能会存在一些默认设置的yum源,最好将这些yum源设为禁用,或者是将其定义文件删除。
(4)用“yum clean all”命令清除缓存。
(5)执行“yum list”命令检测能否正确列出yum源中的软件包。