Linux下软件包管理

为什么要有软件包管理器?

虽然使用源代码进行编译可以定制一些高级功能,但对于Linux发行商来说,管理软件不容易,而且不是每个使用Linux的用户都有能力进行编译安装,如果能够将软件预先在相同的硬件与操作系统上编译好在发行出发行版的话,就可以让相同的发行版具有完全一致的软件版本,再加上安装/删除/管理机制,从此对软件包的管理也就相对简单得多,所以就将源代码包按照对应的平台格式封装起来,并发行出来,发行出来的软件包,我们在红帽系列的系统上称之为 RPM;



两大主流的软件包管理器版本:

RPM:RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,是红帽研发出来的包管理器,但是其原始设计理念是开放式的,现在包括OpenLinux、S.u.S.E.以及Turbo Linux等众多Linux的分发版本都有采用RPM,进行软件包管理;   扩展名即 .rpm

DPKG:目前采用DPKG管理方式的主流操作系统主要有debian和ubuntu系列,扩展名即.ded。(因为本篇内容主要介绍RHEL系列的软件包管理器,所以不在此做过多说明)



一、RPM软件包管理器:

功能:简化在Redhat Linux 系列系统中发布、安装、升级和删除软件包的过程。
1、RPM软件包命名格式:
         name-version-release.architecture.rpm

bash-4.1.2-29.el6.x86_64.rpm

.noarch  有时在架构段也会出现 noarch

注:noarch代表不依赖于某架构运行,而是依赖自己的虚拟环境,可跨平台运行;

name:软件名;version:软件包的源码包版本;release:制作后的版本;architecture:软件包对应平台;

场景1:一个软件只有几个功能是常用的,有几个功能是开发相关的,几个是不常用的功能,所以没有必须安装一个软件包时,把它所有的功能全部安装上,在制作RPM包的时候就会出现一个软件存在多个软件包:

RPM命令的使用格式:

rpm  {-i|--install}   [install-options]      PACKAGE_FILE ....

  • -q 在系统中查询软件或查询指定 rpm 包的内容信息
    -a 代表所有软件包,通常与 -q 一起使用
    -i 在系统中安装软件
    -U 在系统中升级软件
    -e 在系统中卸载软件
    -h 会以 # 号为进度条显示 rpm 包的安装过程
    -v 详述安装过程(可以同时用多个v,v越多显示的内容越详细)
    -p 表明对 RPM 包进行查询,通常和其它参数同时使用,如:
    -qlp 查询某个 RPM 包中的所有文件列表
    -qip 查询某个 RPM 包的内容信息

[install-options]:

--replacepkgs:重新安装

--nodeps: 忽略依赖关系

--force:强制安装

--test: 测试安装,而不执行真正的安装过程;

--oldpackage:降级安装

RPM命令参数具体使用方法:



1、安装

注:上面列出的具体参数有些需要组合使用,比如说 rpm -v packname.rpm 是没有意义的,必须要配合 rpm -ivh 使用才会有意义,下面一一举例:

# rpm -ivh zsh-4.3.10-9.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:zsh                    ########################################### [100%]

上面的命令即实现了最基本的软件包安装功能;



2、卸载

# rpm -ev   zsh  卸载一个指定的软件包

--nodeps:卸载时忽略依赖关系

--test:卸载测试,只是测试,并不真正卸载

--noscripts:不执行卸载时的脚本

--allmatches:把所有匹配到指定包名的软件包全部卸载

注:如果软件包的配置文件在安装后被改动过,卸载时,此配置文件不会被删除,而是会被重命名为(原文件加.rpmsave后缀)并保留;



3、升级

升级即是用较高版本的软件包,替换较低版本软件包的过程:

 # rpm -Uvh packagename.rpm       指定一个高版本的软件包,替换当前系统上的包
 # rpm -U -ivh zsh-4.3.10-9.el6.x86_64.rpm    如果指定的软件包已经被安装,则升级安装
 # rpm -F -ivh zsh-4.3.10-9.el6.x86_64.rpm     如果指定的软件包没有被安装,则不安装该包


4、查询

# rpm -q bash   查询指定软件包
bash-4.1.2-29.el6.x86_64
# rpm -qa       查询本机所有已安装的软件包

# rpm -qa |grep bash  查询所有已安装的包,在通过管道传给grep过滤出所需的软件包,此时-a就显得特别重要
bash-4.1.2-29.el6.x86_64
# rpm -qf    /path/to/somefile   查询某文件由哪个软件包安装生成

# rpm -qpl  PACKAGE_FILE  查看指定的未安装包安装后会生成哪些文件

# rpm -qpi  PACKAGE_FILE  查询指定未安装包的详细信息、厂商、制作日期、版本等

# rpm -ql  PACKAGE_NAME  查询某包安装后生成的所有文件列表

# rpm -qc PACKAGE_NAME   查询某包安装后生成的所有配置文件列表

# rpm -qd PACKAGE_NAME   查询某包安装后生成的所有帮助文件列表

# rpm -q --changelog PACKAGE_NAME  查询某rpm包制作时随版本变化的changelog列表信息

# rpm -q --scripts PACKAGE_NAME    查询某包的卸载时执行的脚本


安装卸载脚本有四种:

preinstall: 安装前执行的脚本

postinstall: 安装后执行的脚本

preuninstall: 卸载前执行的脚本

postuninstall: 卸载后执行的脚本



5、校验

包校验是比较自软件包中安装的文件信息和软件包中的原始文件的相同信息。 与其它校验相同,包校验将比较文件的长度、MD5校验和、许可、类型、文件属主和群组。
      使用 rpm -V 命令进行包校验。用户可以配合使用各个包选择选项 ,来列出校验包的查询结果。 简单地使用 rpm -V bash 可以校验 bash 包中原始安装时的所有文件。例如:

# rpm -Vf /bin/vi     校验包含特定文件的软件包

# rpm -Va                校验所有已安装的软件包

# rpm -Vp foo-1.0-1.i386.rpm   用 RPM 包文件校验已安装的软件包

如果校验结果一切正常,将不会产生任何输出。如果有不一致的地方,会显示出来。 输出格式是8位长字符串, "c" 用以指配置文件,接着是文件名。8位长字符,每个代表一个文件属性与RPM数据库中记录的属性相比较的结果。"." (点) 表示测试通过。下面的字符代表某测试的失败:

5 -- MD5 校验和
S -- 文件长度
L -- 符号链接
T -- 文件修改日期
D -- 设备
U -- 用户
G -- 用户组
M -- 模式 (包含许可和文件类型)
? -- 不可读文件
     如果有信息输出, 就代表字母对应的内容被修改过;

RPM包有一个问题,当你指定安装一个rpm包时,可能会出现一个RPM包依赖另一个RPM包才能安装,可能一个包会依赖好多包,所以异常麻烦,红帽为了解决这种依赖关系,将各种RPM包的依赖关系统一存放在一个数据库中,在需要安装软件包,先去查询这个数据库,找到对应的依赖关系,并会分清这些包安装的先后顺序,并安装它们,这种软件管理机制或软件管理器,我们就称之为 YUM;




二、Yum (Yellow dog Updater, Modified) 是一个在 RHEL 中的字符前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

1、yum repository: yum仓库  (由软件包和软件包的元数据组成)

存储了众多rpm包,以及包的相关元数据的文件(放在repodata目录中)

Yum可以通过网络服务接口连接到对应的通过文件服务器输出了很多文件的接口上去,使用客户端程序安装数据包时,Yum会自动通过配置文件中定义的yum服务器去检索服务器上是否存在该软件包,并通过网络下载到本地放在一个缓存目录中,并安装 ;

yum在检查包的时候,必须要能发现包和包的依赖关系;  yum 在使用时,要先向仓库将这个元数据下载下来,包含了哪些包,包的版本号等,每一个包提供的文件列表,每个包的依赖关系;而后在安装程序包时,只需要在本地仓库中检查有没有这个包即可; 也会检查本地有哪些程序被它所依赖到;还有本地依赖,但是本地没有的,一并从服务器上下载下来;

注意:仓库是有开销的,开销越小越先使用,如果多个仓库有同一个程序,它会找一个最新版的;

整个过程都会先分析本地所有仓库的元数据,包装完以后下载下来的包就会被清空,但是元数据不会被清空;

yum 所支持的服务器输出格式:

http://        ftp://        nfs://        file://

yum客户端:

配置文件:指向仓库的位置列表以及各种配置信息;每个yum客户可以有多个可用的yum仓库;

由两部分组成:

主配置文件:

/etc/yum.conf

/etc/yum.repos.d/*.rep

仓库文件格式:/etc/yum.repo.d/

[REPO_ID]  repoID 应该是全局唯一的;

name=REPO description     仓库名

baseurl=ftp://172.16.0.1/pub/CentOS6/   仓库位置

enabled={1|0}        此仓库是否启用

gpgcheck={1|0}        是否进行校验

gpgkey=ftp://172.16.0.1/pub/CentOS6/gpg-key    如果进行校验,需要指定公钥的存放位置

repodata   对应的元数据文件所在的目录;

yum命令:

yum [options] [command] [package ...]

command is one of:

* install package1 [package2] [...]

* update [package1] [package2] [...]

* update-to [package1] [package2] [...]

* check-update

* upgrade [package1] [package2] [...]

* upgrade-to [package1] [package2] [...]

* distribution-synchronization [package1] [package2] [...]

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

* list [...]

* info [...]

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

* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

* makecache

* groupinstall group1 [group2] [...]

* groupupdate group1 [group2] [...]

* grouplist [hidden] [groupwildcard] [...]

* groupremove group1 [group2] [...]

* groupinfo group1 [...]

* search string1 [string2] [...]

* shell [filename]

* resolvedep dep1 [dep2] [...]

* localinstall rpmfile1 [rpmfile2] [...]

(maintained for legacy reasons only - use install)

* localupdate rpmfile1 [rpmfile2] [...]

(maintained for legacy reasons only - use update)

* reinstall package1 [package2] [...]

* downgrade package1 [package2] [...]

* deplist package1 [package2] [...]

* repolist [all|enabled|disabled]

* version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]

* history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

* load-transaction [txfile]

* check

yum仓库相关的命令:

列出所有可用仓库:

   # yum repolist

列出所有程序包:

  
# yum list {all|installed|available}

列出所有包组:

    # yum grouplist

缓存管理:

      # yum clean {all|packages}
        # yum makecache

安装:

   yum install PACKAGE_NAME ...

安装指定的版本的程序:

  yum install PACKAGE-VERSION

重装指定的程序包:

 yum reinstall PACKAGE_NAME ...

升级:

        yum update PACKAGE_NAME

如果有多个版本的升级包可用,且仅期望升级到指定版本:

   yum update PACKAGE-VERSION

降级:

   yum downgrade PACKAGE_NAME

检查可用升级:

  yum check-update

卸载:

      yum erase|remove PACKAGE_NAME   依赖于此程序包的其它包,会被一并卸载;

查询:

        yum list

查询指定包信息:

   yum info PACKAGE_NAME

根据关键字模糊查询包名或包的sumary信息包含此KEYWORD的相关列表:

   yum search KEYWORD:

查询指定文件是由哪个包安装的:

 yum provides|whatprovides /path/to/somefile

显示所有包组:

yum grouplist

显示某包组的相关信息:

yum groupinfo "GROUP_NAME"

安装包组:

    
yum groupinstall "GROUP_NAME"    或    yum install @GROUP_NAME

卸载包组:

yum groupremove "GROUP_NAME"
 yum remove @"GROUP_NAME"

升级包组:

        
yum groupupdate "GROUP_NAME"

yum命令还可用安装本地rpm包文件:

yum localinstall /path/to/rpm_package_file ...

选项:

--enablerepo=      临时启用指定repo源

--disablerepo=     临时关闭指定repo源

注意:优先级高于/etc/yum.repos.d/*.repo配置文件中定义的属性;   -y: 自动回答为yes

--nogpgcheck      不进行完整性检测

时间: 2024-10-27 04:27:52

Linux下软件包管理的相关文章

linux下软件包管理-源码包-二进制包

linux软件包管理  1.软件包分类     源码包     二进制包(rpm包)      2.rpm包命名规则      命名规则:         name-major-minjor-release-release.arch.rpm                   name:包名         major:主版本号         minjor:次版本号         release:发行版本,修复了重大的bug         release:rpm的功能更新         

debian下软件包管理方式总结

linux最流行的包管理方式除了rpm之外就是debian的deb格式了.目前采用deb管理方式的主流操作系统主要有debian和ubuntu系列.和rpm包管理方式不同的是,虽然debian也有包含所有软件包的诸多iso光盘.但debian使用者更习惯于直接从网络上通过源get软件包现在rpm也有apt-get的port,但还是不够完善,rpm使用者一般是通过yum或者光盘寻找软件简单总结一下debian下管理软件常用的操作1.首先需要配置source,默认配置文件是/etc/apt/sour

Linux下软件包安装详解

一.概述 现在Linux上软件的安装方式有多种,有源码包编译,软件包管理器,软件包管理器前端工具,通用二进制编译等.源码包,优点是,灵活性和可定制性比较好,缺点是,技术要求高,操作复杂,虽然网上有编译安装软件的文档,也有很多人在使用,也都是默认或者简单配置后编译的.后来出了软件包管理工具RPM,RPM软件包管理软件方便多了但是它的依赖关系让人头疼,所以又推出出了YUM解决了让人头疼的依赖关系.在这里我给大家介绍一下几种常用Linux软件安装方式. 二.软件包的组成 一个软件包安装之后包含多种类型

linux 下用户管理

linux 下用户管理 一.用户的分类 1.超级用户:root UID=0 2.系统用户:不需要登录系统,对应用程序服务,主要维护系统的正常运行:UID = 1 ~ 499(RHEL7 = 1 ~ 999 ) 3.普通用户:一般是可以登录系统的,用管理员来添加:UID = 500 ~ 60000( RHEL7 = 1000 ~ 60000) (UID:用户的标识) 二.与用户相关的配置文件 1./etc/passwd 使用man 5 查看 内容以" :"分割分别是 用户名:密码占位符

linux下磁盘管理机制--LVM

当我们用传统分区方法使用磁盘时,当出现分区大小不够用的时候,通常只能添加添加一个更大的磁盘,重新创建分区来扩展空间.但是,这样只能是将原来的磁盘下线,换上新的磁盘,在将原始数据写入,在实际的生产过程中是不允许的.此时就需要使用逻辑卷LVM这种磁盘分区管理了. 逻辑卷是将硬盘空间重新"分割"成大小相等的块(PE)组成的PV放到一个容器(VG)中,当需要可以随时向这个容器中取出这样的块,来实现动态调整磁盘空间大小.当然新添加的块不会改变原来的文件系统,而且原磁盘也不用下线. 下面说明逻辑卷

linux下虚拟机管理

##linux下虚拟机管理## $rht-vmctl start desktop        ###启动虚拟机Desktop $rht-vmctl view  desktop        ##显示虚拟机界面 $rht-vmctl stop desktop         ##正常关闭虚拟机 $rht-vmctl poweroff desktop     ##强制关机 $rht-vmctl reser desktop        ##重置虚拟机 $rht-vmctl fullreset de

linux下磁盘管理机制--RAID

RAID(Redundant Array Of Independent Disks):独立磁盘冗余阵列.RAID的最初出现的目的是为了解决中小型企业因经费原因使用不起SCSCI硬盘,而不得不使用像IDE较廉价的磁盘情况下,将多块IDE磁盘通过某种机制组合起来,使得IDE磁盘在一定程度上提高读写性能的一种机制.当然,现在也可以将SCSCI类的磁盘也可以做成RAID来提高磁盘的读写性能. 一.RAID的级别 RAID机制通过级别来RAID级别来定义磁盘的组合方式.常见的级别有:RAID0,RAID1

【转】Linux下XenServer管理工具安装

转载文章 - Linux下XenServer管理工具安装 Xen-Server 6.5 虚拟机安装Linux系统 vmware安装ubuntu12.04嵌套安装xen server(实现嵌套虚拟化) Citrix XenServer ® 6.5 虚拟机用户指南 2015 年 03 月 26 日 (星期四)发行 1.0 版

Linux下进程管理工具之(二):htop

实验环境: CentOS release 6.6(Final)  一台 IP地址:172.16.249.230 Htop是一款运行于Linux系统监控与进程管理软件,用于取代Unix下传统的top.与top只提供最消耗资源的进程列表不同,htop提供所有进程的列表,并且使用彩色标识出处理器.swap和内存状态. 用户一般可以在top无法提供详尽系统信息的情况下选择安装并使用htop.比如,在查找应用程序的内存泄漏问题时.与top相比,htop提供更方便.光标控制的界面来杀死进程. htop用C语