Linux中的软件格式
一般的linux软件格式包括:
- 源码包
- 二进制包(RPM包,系统默认包)
源码包:
linux刚开始的时候,软件都是这种形式。现在有很多的开源软件依然采用这种格式,比如Apache安装包httpd-2.2.9.tar.gz
就是一个源码包。
源码包具有提供修改源码,自由选择所需功能,编译安装更加适合自己系统,更稳定高效的特点。当然在linux,如果想卸载源码包安装的软件,只需要删除它所在的目录就行。
但是在安装一些大型软件集合时,容易出现编译错误。并且由于需要编译的过程,所以安装时间较长。
二进制包:
经过编译后的代码包。
它具有安装、查询、更新、卸载等操作简单快速等特点。
也因此丧失了查看源代码的能力,并且在定制功能方面不如源码包。
rpm命令管理
rpm包往往不是独立的,一个rpm包可能与另外一个或者多个rpm包依赖。也就是说,在没有安装另外的rpm包之前,这个rpm包是无法安装或者无法正常运行,这称为依赖。
依赖分为:
- 树形依赖,a -> b -> c
- 环形依赖,a -> b -> c -> a
- 模块依赖(函数依赖),rpm包依赖与另一个rpm包中的某个函数
对于树形依赖,是比较好解决的,我们只需要按照依赖顺序,先安装c,再安装b,再安装a就行。但是对于环形依赖,从逻辑上看我们是没有办法解决,但只要我们将a,b,c这三个rpm包写在一条安装命令中便可以解决。
模块依赖一般是在安装某个rpm时,系统提示如libodbcinst.so.2 is needed by ...
,这时候我们只有知道libodbcinst.so.2
库函数所在的rpm包,并安装该rpm包后,才能继续安装。RedHat给我们提供了一个网站,www.rpmfind.net,通过这个网站输入库函数的名称,便能查询出所在的rpm包。
对于rpm包的获取,我们可以在linux的安装光盘的packages文件夹中找到rpm包,也可能是在网络上下载到一个rpm包。
安装命令
安装前需要申明的是,对于包含版本号等信息的包名,我们称之为包全名,如httpd-2.2.9.tar.gz
.对于没有版本号,只有软件名称的,我们称之为包名,如httpd
。
安装命令:
rpm -ivh 包全名
选项:
- -i(install) 安装
- -v(verbose) 显示详细信息
- -h(hash) 显示进度
升级与卸载
安装命令:
rpm -Uvh 全包名
选项:
- -U(upgrade) 升级
- -v(verbose) 显示详细信息
- -h(hash) 显示进度
卸载软件:
rpm -e 包名
选项:
- -e(earse) 卸载
- --nodeps 不检查依赖,直接卸载
RPM包查询(常用)
如果你实操过用rpm -ivh httpd-2.2.9.tar.gz
安装apache,你会觉得安装软件是一件特别头疼的事,因为各种依赖需要我们去解决。因此RatHat为我们提供了yum在线安装的方法(后续会讲到,并且我们平时可能更愿意去使用yum在线安装),但是yum安装软件一般只用来安装、升级和卸载,对于RPM包的查询主要还是依赖于rpm命令,因此这部分内容还是比较关键的。
查询包是否安装:
rpm -q 包名
查询所有安装的包(非常常用):
rpm -qa 包名
,rpm -qa | grep 包名
等同于rpm -q 包名
查询软件包的安装位置(常用):
rpm -ql 包名
查询已安装包的位置 或者 rpm -qlp 包全名
查询未安装包安装后的位置
一般的RPM包默认安装路径
路径 | 存放信息 |
---|---|
/etc/ | 配置文件安装目录 |
/urs/bin | 可执行的命令安装目录 |
/usr/lib | 程序所使用的函数库保存位置 |
/usr/share/doc/ | 基本的软件使用手册保存位置 |
/usr/share/man | 帮助文件保存位置 |
查询系统文件属于哪个RPM包:
rpm -qf 系统文件名
查询软件包的依赖性:
rpm -qR 包名
查看已安装的包的依赖关系 或者 rpm -qRp 包全名
查询未安装的包的依赖关系,因为它的命令中会出现好多基础或者已经安装过的rpm包很难分辨,因此不太常用。
查询软件包的详细信息:
rpm -qi 包名
查看已安装的包信息 或者 rpm -qip 包全名
查询未安装的包信息
RPM包校验
rpm -V 已安装的包名
选项:
- -V 校验指定rpm包中的文件(verify)
用于文件完整性的检验。检测已安装文件和包安装后的初始文件是否有变动,或者未安装的包是否为指定md5码的包文件。
验证内容中的8个信息的具体内容如下:
- S 文件大小是否改变
- M 文件的类型或者文件的权限(rwx)是否被改变
- 5 文件的MD5校验和是否改变(可以看作文件内容是否被改变)
- D 设备的主从代码是否改变
- L 文件路径是否改变
- U 文件的所有者是否改变
- G 文件的用户组是否改变
- T 文件的修改时间是否改变
如:5....T.
5表示MD5改变,T表示修改时间改变
文件类型
- c 配置文件(config file)
- d 普通文件(documentation)
- g "鬼"文件(ghost file),很少见,就是该文件不应该被这个RPM包包含
- L 授权文件(license file)
- r 描述文件(read me)
如:5....T. c
c表示修改的这个文件是一个配置文件
RPM包中文件提取
如果不小心删除了系统中某个软件的信息,通常我们会从别的地方拷贝一份到我们的电脑上。当然它可选的有很多个途径,其中之一就是我们通过它的安装rpm包中获取该文件,并拷贝。
- 将rpm包转换为cpio格式的命令:
rpm2cpio
- 创建软件档案文件和从档案中提取文件命令:
cpio -idv
如:rpm2cpio /media/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv /usr/bin/ls
yum在线安装
为了解决rpm的超强依赖性带来的安装麻烦,RedHat为我们提供了yum在线安装,当然其他Linux系统也提供了其他命令。RadHat用自己的服务器搭建了包资源库,并通过yum命令让我们不用关心依赖,自动解决依赖性安装一些软件。
yum源
通俗的讲,通过yum安装时,yum源在什么地方?
通常在/etc/yum.repos.d/CentOS-Base.repo
中
- [base] 仓库名称,一定要放在[]中
- name 仓库说明,可以自己随便写
- mirrorlist 镜像站点,默认是CentOS官方yum服务器,可以更换为别的
- baseurl yum源服务器的地址
- enabled 此仓库是否生效,如果不写或者写成enabled = 1都是生效,enabled = 0不生效
- gpgcheck 如果是1是指RPM的数字文件生效,如果是0则不生效。默认开启,有益于安全性
- gpgkey 数字证书的公钥文件保存位置。不用修改
光盘搭建yum源
第一步:将原有的yum复制一份,比如cp CentOS-Base.repo CentOS-Base.repo.bak
第二步:修改CentOS-Base.repo文件中的baseurl为file:///media/...
,表示你光盘的挂载点
yum命令
查询指定包名的包列表:
yum search 包名
查询yum源中所有可以安装的包列表:
yum list
,yum list | grep 包名
相当于yum search
安装,自动回答yes:
yum -y install 包名
在安装过程中,会不断询问是否要安装某个rpm包,-y
表示
所有都选yes
升级,自动回答yes:
yum -y update 包名
,请勿在不使用包名的情况下使用该命令
卸载(就当这里没有讲这个命令,工作中千万别使用这个命令):
yum -y remove 包名
,服务器使用最小化安装,尽量不要卸载。因为卸载的依赖包可能会被系统依赖。
yum软件组管理命令
列出所有可用的软件组:
yum grouplist
安装指定软件组:
yum groupinstall 软件组名
卸载软件组名:
yum groupremove 软件组名
源码包安装
源码包和RPM包的区别
我们在第一部分就已经讲过二进制包和RPM包的区别,对于这些区别就不再赘述。下面再说一个区别:源码包和RPM包安装后的安装位置不同。
通常我们安装rpm包的时候,不会去指定它的安装位置,安装结束后的位置一般在一般的RPM包默认安装路径表格中给出的位置(该位置由软件开发者设定,不全是如此)。
而对于源码包的安装,一定要手工指定,一般可以放在/urs/local/软件名/
下。
这就导致了:
- 源码包和RPM包的启动方式不同。
- 卸载时,RPM包可以借助
rpm -e
命令卸载,而源码包只要删除安装目录即可。
在平时的使用过程中,我们应该注意区分。
源码包的安装过程
安装前的准备
所有的源码包都使用c语言编写,因此在安装源码包之前我们需要检测系统中是否有c语言环境,输入rpm -qa | grep gcc
便可查看。
如果没有安装gcc,使用yum在线安装一个gcc(不要去gcc官网下载源码包安装,因为gcc的源码包也是需要c语言环境)。
下载源码包
一般的源码包以.tar.gz
结尾,这里就不介绍下载源码包了。
解压缩源码包
一般建议,源码包保存在:/usr/local/src/
,软件安装在:/usr/local/
在适当的目录(你觉得合适就行),使用命令tar -zxvf 源码包全名
解压缩源码包。
进入解压缩目录
使用cd命令进入到源码包解压缩之后的目录中,这步是必须做。
进入目录后,我们甚至可以使用vim INSTALL
来查看软件需要的安装步骤
执行./configure
完成软件配置与检查
该命令可以设置安装参数,检测安装环境是否具备等,并且他能把一些信息写入到Makefile文件中。你可以使用./configure --help
来查看有哪些配置项
我们使用./configure --prefix=/usr/local/软件名
指定安装路径,其他选项可以通过帮助查看。如果没有出现error、warning、no提示,则表示成功。
执行make
命令编译软件
使用make
编译软件,在过程中如果出现错误,可以使用make clean
清理之前的make文件,重新make
.
执行make install
安装软件
输入make install
后,等待一段时间,没有报错并顺利停止则表示安装成功。
软件的启动
启动文件一般在安装目录的bin/
目录下,切换到bin/
目录下后使用./启动程序 start
便可以启动。
至此,源码包就安装完成了。
值得注意的是,.tar.gz
是一种打包压缩格式,并非以该后缀名下载的软件包都是源码包,有的是已经安装好的二进制包,解压后便可以使用。其最根本的区别是源码包包含src/
目录和configure
文件,二进制包一般包含bin/
目录