Linux中包管理工具

linux的使用过程中我们难免需要下载文件,但下载的文件多数是以包的形式,所以我们就需要知道如何去管理这些包

Centos系统上系统自带有rpm命令来管理程序包,可以对这些包进行安装、卸载、升级、查询、校验、数据库维护等操作,除了rpm,我们常用的还有yum,dnf等包管理工具

首先要知道几个概念

程序包管理器:其作用是将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现

程序包的安装、卸载、查询、升级和校验等管理操作

包文件的组成:RPM包内的文件;RPM的元数据,如名称,版本,依赖性,描述等;安装或卸载时运行的脚本

 

一.rpm

1. rpm的安装功能

rpm是linux中一款强大的包管理工具,几乎可以满足我们对包操作的所有需求,但是有许多的包是互相依赖的,安装一个包的时候常常会需要系统中已经安装过另一个包,而用rpm安装时会自动检测,如果存在有依赖且没有安装的包则无法安装当前要安装的包,所以这就需要我们根据提示一点点将其依赖的包先手动安装好才能安装我们真正想要安装的包,这也是rpm的缺点之一

格式:rpm {-i|--install} [install-options] PACKAGE_FILE

rpm     -i  安装  在使用rpm的安装功能时,-i选项是前置选项

          -iv 显示安装过程

          -ivv 显示安装详细过程

          -ivh 显示过程及安装进度百分比

          --test 仅测试,并不真正安装

          --nodeps 在安装或卸载时忽略依赖性,虽然忽略了依赖的包,但是安装后可能不可用

          --replacepkgs重复安装已安装过的包,文件覆盖

          --replacefiles如果要安装包的部分文件与其他已安装的包文件冲突,可继续安装,文件不覆盖

          --oldpackage 已安装过新版本,现在装旧版本

          --force  强制安装,等同于 --replacepkgs, --replacefiles and --oldpackage.

          --noscripts 安装时不执行包中自带的脚本

安装示例:

在我安装下面的这个包时提示我其依赖于以下的包,所以无法安装

 

[root@centos7 media]# rpm -ivh /media/Packages/samba-4.7.1-6.el7.x86_64.rpm 
error: Failed dependencies:
    libxattr-tdb-samba4.so()(64bit) is needed by samba-0:4.7.1-6.el7.x86_64
    libxattr-tdb-samba4.so(SAMBA_4.7.1)(64bit) is needed by samba-0:4.7.1-6.el7.x86_64
    samba-common-tools = 4.7.1-6.el7 is needed by samba-0:4.7.1-6.el7.x86_64
    samba-libs = 4.7.1-6.el7 is needed by samba-0:4.7.1-6.el7.x86_64

 

下面我用--nodeps来忽略依赖强制安装

[root@centos7 media]# rpm -ivh --nodeps /media/Packages/samba-4.7.1-6.el7.x86_64.rpm  
Preparing...                          ################################# [100%]
Updating / installing...
   1:samba-0:4.7.1-6.el7              ################################# [100%]

 

上图的第2-3行是v和h功能,显示安装详情和安装进度及百分比

2. rpm的升降级功能

rpm的升级功能可完全被rpm的卸载和安装功能代替

格式:rpm {-U|--upgrade} [install-options] PACKAGE_FILE...

          rpm {-F|--freshen} [install-options] PACKAGE_FILE...

rpm   -Uupgradevh:有旧版程序包,则“升级”,如果不存在旧版程序包,则“安装”

         -Ffreshenvh:有旧版程序包,则“升级”,如果不存在旧版程序包,则不执行升级操作

rpm的升级操作实质上是安装新的包,并把原来安装的文件进行删除操作,而Linux支持多内核共存,所以在对内核进行升级时建议使用ivh选项,在安装新的内核的同时保留原来的内核,以防止出现升级后原来内核被删除,且升级的内核无法使用的情况

3. rpm的包查询功能

  格式:rpm {-q|--query} [select-options] [query-options]

     rpm   -q  查询指定包是否安装

-qa: 查询所有包

-qi:查询指定包的详细信息

-ql:  打印包安装的文件列表

-qf: 查看指定的文件由哪个程序包安装生成

-qp:针对尚未安装的程序包文件做查询操作

-q  --provides: 查看指定包提供了哪些CAPABILITY  -a --provides 查看所有CAPABILITY

-q  --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供也可以与-f 相同查看文件由哪个程序包安装生成

-q  --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖

-q  --changelog:查看rpm包的changelog

-q  --scripts:查看程序包自带的脚本

4. rpm的包卸载功能

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...

一般情况下使用rpm -e 包名就可以卸载一个包了

--nodeps 忽略依赖关系

--test 测试卸载

--allmatches 表示如果一个程序包同时安装多个版本,则次选项一次全部卸载之

 

另外如果程序包的配置文件安装后曾被修改,卸载时,此文件通常不会被删除,而是被重命名为 .rpmsave 后缀后留存

卸载示例:

卸载上面安装的samba包

 

[root@centos7 media]# rpm -e samba

 

在卸载时我们只写包名即可不需要写后面的版本号,而且卸载成功不会有任何提示

5. rpm的包校验功能

rpm {-V|--verify} [select-options] [verify-options]

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文件的 mtime

P capabilities differ

rpm  -K|checksig rpmfile 检查包的完整性和签名

                    --nosignature: 不检查来源合法性

                    --nodigest:不检查包完整性

二.yum

 

yum: Yellowdog Update Modifierrpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具。yum将大量rpm包及其相关的元数据文件存放到一个仓库中,在我们安装一个包时,自动搜索仓库数据,并将这个包所依赖的包一同安装。

1.yum常用命令:

格式:yum [options] [command] [package ...]

yum的查询功能:

显示仓库列表:

yum  repolist  [all|enabled|disabled]  all全部;enabled激活的仓库(默认);disabled未激活的仓库

 

显示程序包:

yum list 等同yum list all列出全部程序包

yum list [all | glob_exp1] [glob_exp2] [...]

yum list {available|installed|updates} [glob_exp1] [...]available可用的;installed已安装的;updates可更新的

显示的结果最后一列代表的意义: base 未安装的包,来自于base

                                    epel 未安装的包,来自于epel

                                     @base 该包已经安装,且是从base安装的

                                     @anaconda 该包已经安装,且是从操作系统的安装程序anaconda安装的

 

 

查看程序包information:

 

yum info [package]

 

查看指定的特性(可以是某文件)是由哪个程序包所提供,可以是未安装的包:

yum provides | whatprovides feature1 [feature2] [...]

 

搜索以指定的关键字搜索程序包名及summary信息可以模糊搜索:

yum search string1 [string2] [...]

 

查看指定包所依赖的capabilities:

yum deplist package1 [package2] [...]

 

查看yum事务历史:

yum history 显示所有的yum历史

yum history [info|list|packages-list|packages-info|

info # 查看某条历史的详细信息,#代表数字用来指定某条历史

redo # 重做某条历史

undo # 撤消某条历史

 

日志文件 :/var/log/yum.l

 

yum的安装功能: 

安装程序包:

yum install package1 [package2] [...] -y 自动应答为yes

yum reinstall package1 [package2] [...] (重新安装)

 yum的升降级功能: 

升级程序包:

yum update [package1] [package2] [...]

yum downgrade [package1] [package2] [...] (降级)

 

检查可用升级:

yum check-update

 yum的卸载功能: 

卸载程序包

yum remove | erase [package1] [package2] [...]

 yum的缓存功能: 

清理本地缓存:

清除/var/cache/yum/$basearch/$releasever缓存

yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]默认all

 

构建缓存:

yum makecac()

 yum的包组功能:  

在安装包中我们常常把具有相同特点的包组成一个包组

包组管理的相关命令:

yum groupinstall group1 [group2] [...] 安装包组

yum groupupdate group1 [group2] [...] 升级包组

yum grouplist [hidden] [groupwildcard] [...] 列出包所有组

yum groupremove group1 [group2] [...] 删除包组

yum groupinfo group1 [...] 查看指定包组中含有那些包

2. yum仓库的配置

   yum仓库的配置只要将仓库指向文件配置好即可

yum客户端配置文件:

/etc/yum.conf:为所有仓库提供公共配置

/etc/yum.repos.d/*.repo:为仓库的指向提供配置(yum读取这个文件来获取仓库的路径)

 

仓库指向的定义:

[repositoryID]  仓库的真实名字不可重复

name=Some name for this repository  仓库的描述,可以不写,将会用repoid当作name

baseurl=url://path/to/repository/  仓库路径,可以是本地路径,也可以是网络上现成的yum仓库

enabled={1|0}  激活或禁用仓库,若不写该行,则默认启用

gpgcheck={1|0}  是否在安装包是检测gpg签名,默认检测,即为1

gpgkey=URL  指定gpg key的路径

enablegroups={1|0}

failovermethod={roundrobin|priority}

roundrobin:意为随机挑选,默认值

priority:按顺序访问

cost= 默认为1000

yumrepo配置文件中可用的变量:

$releasever: 当前OS的发行版的主版本号

$arch: 平台,i386,i486,i586,x86_64

$basearch:基础平台;i386, x86_64

$YUM0-$YUM9:自定义变量

在配置时可以只配置[repositoryID],baseurl,其余属性不配置系统会按默认处理

在此我配置一个最简单的仓库指向文件,第一个是本地服务器的一个yum仓库,而第二个是网络上清华的yum仓库

[root@centos7 yum.repos.d]# vim clc.repo


[base]
baseurl=http://172.18.0.1/centos/$releasever

[tsinghua]
name=tsinghua epel
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/
enabled=1
gpgcheck=0

 

在配置后可能会有一些报错,因为我们有很多参数没有定义,不过这并不影响我们使用,系统会自动帮我们配置

 

三. dnf

dnf是新一代的RPM软件包管理器。他首先出现在 Fedora 18 这个发行版中。而最近,他取代了YUM,正式成为 Fedora 22 的包管理器。DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等多方面的内容。

DNF 发行日期是2015511日。 DNF 包管理器(包括在他之前的所有版本) 都大部分采用 Pathon 编写,发行许可为GPL v2

 

dnf的安装可直接使用yum install dnf来安装

 

关于dnf的使用,dnf继承了yum的命令,使用方法同yum相同

posted @ 2018-07-31 18:07  白蓝的橙  阅读(359)  评论(0编辑  收藏  举报