在早期我们在Linux上安装程序时,都采用的源代码来安装应用程序,这就意味着我们每次都要经过预处理,编译,汇编,链接最后生成可执行的二进制文件;这样的操作太过繁琐,为简化安装步骤,便于广大用户的安装部署程序,程序提供商就在特定的系统上面编译好相关程序的安装文件并进行打包,提供给大家下载,而对这些程序包进行管理的就是程序包管理器;
不同Linux发行版本,就有不同的程序包管理器;在这里列举一些常用的程序包管理器;
在Debian中dpkg工具来管理所有.deb后缀名的包文件;Redhat中就使用最为经典的rpm程序包管理器,rpm是Linux的程序包管理器的行业标准,使用perl语言编写,在此基础上有人用C语言对其进行重新编写,提高了其运行效率;dpkg最早是由 Debian Linux 社群所开发出来的, 只要是衍生亍 Debian 的其他 Linux distributions 大多使用 dpkg 这个机制来管理软件的, 包括B2D, Ubuntu 等等,其前端工具有apt-get;
在这里给大家主要介绍关于rpm程序包管理器的相关功能;
首先必须要清楚关于rpm的源代码包以及二进制包的命名规则,能够熟悉其中所给予的信息;
源代码包:software_name-VERSION.src.rpm
二进制包:software_name-VERSION-[release].[os].arch.rpm
software_name:软件名;
VERSION:版本号,分为主版本号major,次版本号minor以及发行版本号release
[os]:所支持的操作系统版本信息,el6,el7,suse11,fedora22...
arch:硬件平台类型,i386,i686,x64,ppc,sparc,noarch
rpm在制作时,制作者通常会制作主包和次包两种,二者存在依赖关系,即先安装某部分程序才能按照他所依赖的部分进行接下去的安装,否则,安装无法进行;
主程序包:
software_name-VERSION-[release].[os].arch.rpm
附属功能包:
software_name-function-VERSION-[release].[os].arch.rpm
rpm命令行工具:
①可以将编译好的程序进行打包,封装在一起;
②可以进行安装,卸载,查看,升级,校验及数据库管理功能;
在使用rpm程序包进行安装时,rpm程序管理器会自动生成程序的文件,文件清单(保存文件名和依赖 关系)以及在安装程序所需要的一些固定的脚本内容如安装前脚本preinstall,安装后脚本
postinstall,卸载前脚本preunistall,卸载后脚本postunistall等;还需要安装rpm数据库,对所 安装的程序进行比对,看是否版本为最新;该数据库路径为/var/lib/rpm;在进行安装,卸载等操作 时,要在光盘挂载点下的Packets下进行;
rpm命令:
-v:显示安装例程的详细信息;
-vv:显示非常详细的安装信息;
安装:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
install-option:
-h,--hash:用50个#来表示安装进度;
--test:并不是真正的安装软件包,仅仅测试在安装时能否正常完成,如果失败,则说出原 因;
--nodeps:忽略因为依赖关系导致的安装错误;(不建议使用)
--replacefiles:在安装软件包时,软件包中的文件会直接将原来安装的文件替换;
--replacekgs:不卸载软件包而重新安装;
--noscripts:不运行任何脚本;
--nopre:不运行安装前脚本;
--nopost:不运行安装后脚本;
--nosignature:不去考虑软件包的来源是否合法;
--nodigest:不考虑软件包是否完整;
常见组合选项:-ivh
例 安装tree命令 ######即为-h选项安装进度,tree-1.6.0-10.el7.x86_64.rpm即为-v选项的安装例 程信息;
使用--test进行测试操作,对安装进行测试,看是否能行,并不进行实质性安装;
升级:
升级安装有两种方式:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
如果事先未安装程序,则直接安装最新版本的程序,若已经安装程序,就在该程序基础上进行升级安 装;
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
仅仅只能对已经安装的低版本的程序包进行升级安装;
注意:为了保证系统的正常运行最好不要对内核进行升级;
常用选项与安装相同:
-h,--hash:用50个#来表示安装进度;
--test:并不是真正的安装软件包,仅仅测试在安装时能否正常完成,如果失败,则说出原 因;
--nodeps:忽略因为依赖关系导致的安装错误;(不建议使用)
--replacefiles:在安装软件包时,软件包中的文件会直接将原来安装的文件替换;
--replacekgs:不卸载软件包而重新安装;
--noscripts:不运行任何脚本;
--nopre:不运行安装前脚本;
--nopost:不运行安装后脚本;
--nosignature:不去考虑软件包的来源是否合法;
--nodigest:不考虑软件包是否完整;
--oldpackage:降级安装,用老版本的程序包替换新版本的程序包;
卸载:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME(软件名) ...
常用选项:
--allmatches:卸载时所有匹配指定名称的程序包的各个版本;
--test:测试卸载;
--nodeps:卸载时忽略一栏关系,不建议使用;
例
卸载操作较为简单,直接命令+选项+卸载的软件名;
查询:
安装之前需要查询,卸载之前需要查询,做任何操作哦之前都要进行查询操作;
rpm {-q|--query} [select-options] [query-options](直接给出程序包名)
select options:
-a,--all:查询所有已经安装的程序包信息;
例 查找相关的软件包
-f,--file FILE:查找指定文件由那个程序包提供的;
--whatprovides CAPABILITY:查询指定的CAPABILITY是有哪个程序包提供
例 查找文件/bin/chown由哪个程序包提供
-p,--package PACKAGE_FILE(程序包文件名称):
对还没有安装的程序包文件执行查询操作;跟p配合的必须是程序包文件
[root@localhost wjq]# rpm -qpl /media/guangpan/Packages/tree-1.6.0-10.el7.x86_64.rpm
query options:
--changelog:查询rpm程序包的changelog
-c,--configfiles:查询指定程序包中有哪些配置信息;
-d,--docfiles:查询指定程序包中有哪些文档文件;
例 查看tree程序包中有哪些文档文件
-i,--info:查询程序包相关信息,包括版本号,发行号,大小;
例 查看tree程序相关信息
-l,--list:列表显示程序生成哪些文件;
例
--provides:列出制定程序包提供的所有的CAPABILITY;
-R,--requires:查询程序包的依赖关系
--scripts:查看程序包所携带的脚本的内容
校验:用于检查包安装生成的文件属性是否发生变化
rpm {-V|--verify} [select-options] [verify-options]
select options与查询的select options一样;
常用选项:
-V :后面加的是程序名称,若该程序属有的文件发生改变就会显示;
例
-Va :显示目前系统上面所有可能被修改过的文件;
例
-Vp :后面加的是文件名,显示该程序内可能被更改过的文件;
-Vf :后面加的是文件名,显示某个文件是否被修改过。
对应属性位说明:只有在对应的属性为发生改变后,属性才会显示;
S file Size differs 表示文件大小发生改变
M Mode differs (includes permissions and file type) 文件的权限或类型被修改
5 digest (formerly MD5 sum) differs 文件内容发生改变
D Device major/minor number mismatch 主设备号、次设备号发生改变
L readLink(2) path mismatch 路径改变
U User ownership differs 属主发生改变
G Group ownership differs 属组发生改变
T mTime differs 文件的修改时间发生改变
P caPabilities differ 包的能力发生改变
数据库管理:数据库路径为/var/lib/rpm若该路径下的数据遭到破坏则系统无法知道有哪些软件在 系统中,那些软件的详细信息都无法显示;
rpm数据库管理主要分为初始化与重建两个部分,初始化,若已安装数据库则初始化结果不变,若 未安装数据库,则对数据库进行安装,重建就是在原有数据库的基础上进行覆盖安装操作;
rpm {--initdb|--rebuilddb} --dbpath /PATH/TO/FILE
--initdb:初始化数据库;
--rebuilddb:重建数据库;
yum程序包管理器:
yum(全称Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。yum是客户机服务器模式,服务器也称为软件仓库,存储着许多的软件包以供安装;客户端是用来指定服务器以及程序包的路径喝一些必要的控制操作;
yum的主配置文件/etc/yum.conf
该文件一般情况下是不修改的,只提供yum软件包的公共配置信息;
yum的次配置文件/etc/yum.repos.d/*.repo
在yum.repos.d目录下创建以repo为后缀的文本文件,每个文件可以配置指向多个软件仓库;yum命令在安装或更新时,通过查找这些配置文件所指向的路径,得到多个软件仓库,从这些软件仓库中得到最新版本进行安装或更新;
在/etc/yum.repos.d下创建的文本文件中的格式:
[repoid]
name=
baseurl=schema://hostname/PATH/TO/REPODATA (hostname可省略不写)
schema:
http,ftp,nfs:网络服务器指向
file:本地服务器指向
enabled={0|1},0表示禁用此仓库指向,1表示启用,如果没有enable语句,默认为启动状态;
gpgcheck={0|1}:0表示不进行程序包认证,1表示认证,如果为1,需要指定认证所需要的公钥文 件,需要使用gpgkey语句;
gpgkey=schema://hostname//PATH/TO/PUBLIC_KEY_FILE 软件包公钥,当为本地服务器指向时可省略公钥路径;
例
注意:同一个文本文件下的不同配置信息之间使用[repoid]进行隔离,所有配置信息生效的范围是从一个[]开始到下一个[]结束;
主配置文件解析:
cachedir:yum缓存的目录,yum在此存储下载的rpm包和数据库,一般是/var/cache/yum。
debuglevel:除错级别,0──10,默认是2
logfile:yum的日志文件,默认是/var/log/yum.log。
exactarch,有两个选项1和0,代表是否只升级和你安装软件包cpu体系一致的包,如果设为1,则如你 安装了一个i386的rpm,则yum不会用686的包来升级。
gpgchkeck= 有1和0两个选择,分别代表是否是否进行gpg校验,如果没有这一项,默认好像也是检查 的。
自定义配置软件仓库
1.创建一个目录将需要的程序包放入目录中;
2.使用createrepo命令创建仓库;产生repodata;
3.在/etc/yum.repos.d下创建一个关于该软件仓库的配置文件,以repo为后缀;
yum命令(该命令的使用要在联网的情况下):
yum [options] [command] [package ...]
option:
-q:安静模式,使yum没有输出任何的信息,不显示安装过程;
-y:yum命令下的所有交互操作yes or no全部以yes表示;
yum安装:
yum install:全部安装
install package1 [package2] [...]:指定程序包安装
yum卸载:
yum remove|erase package1 [package2] [...]
yum更新:
update [package1] [package2] [...]:对所更新的程序包进行最新更新
update-to [package1] [package2] [...]:指定目的版本号的更新;
yum list [...]查询操作,可查看当前系统下的安装的,未安装但可用的程序包;
查看所有程序包:
yum list all
查看所有已安装的程序包:
yum list installed
显示所有尚未安装但可以安装的程序包:
yum list available
显示最近安装的程序包:
yum list recent
显示所有可以升级更新的程序包:
yum list updates
yum清除缓存:
清理本地缓存信息;
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
清除缓存目录下的软件包
yum clean packages
程序包组的管理命令:
groups [...]
组安装:
groupinstall group1 [group2] [...]等于groups install
组更新:
groupupdate group1 [group2] [...]等于groups update
显示当前组列表:
grouplist [hidden] [groupwildcard] [...]
卸载安装的组:
groupremove group1 [group2] [...]
显示组信息:
groupinfo group1 [...]
根据关键字进行匹配,默认情况下,搜索程序包名称及汇总信息,模糊搜索;
search string1 [string2] [...]
yum重新安装
reinstall package1 [package2] [...]
显示每个程序包所有的依赖关系
deplist package1 [package2] [...]
原文地址:http://12480612.blog.51cto.com/12470612/1929567