1.7 软件管理

1. 获取程序包的途径

2.软件包的组成

  • 二进制程序
  • 库文件
  • 头文件
  • 配置文件
  • 帮助文件
  • 脚本文件
  • 日志文件

2. 软件包管理器的核心功能

  • 制作软件包
  • 安装软件
  • 卸载软件
  • 升级软件
  • 查询软件
  • 校验软件

3. 软件包管理工具

  • 分类:
    • 前端工具,常用的前端工具有以下这些:
      • yum
      • apt-get
      • zypper (suse上的rpm前端管理工具)
      • dnf(Fedora 22+ rpm前端管理工具)
    • 后端工具,常用的后端工具有以下这些:
      • rpm
      • dpt
  • 注意:
    • 前端工具是依赖于后端工具的
    • 前端工具是为了自动解决后端工具的依赖关系而存在的

4.rpm包管理

4.1 rpm介绍

  • rpm是Redhat Package Manager的简称,用于管理软件包。
  • rpm有一个强大的数据库/var/lib/rpm
  • rpm的管理工作包括软件的安装、卸载、升级、查询、校验、重建数据库、验证软件包来源合法性等等。

4.2 rpm包安装

语法: rpm -ivh /PATH/TO/PACKAGE_FILE …安装光盘驱动中的安装包需选挂载驱动

  • 常用选项:

-i: 安装
-v: 显示详细信息
-h: 显示安装进度条
–test: 测试安装,但不真正执行安装过程
–nodeps: 忽略依赖关系
–replacepkgs: 重新安装,替换原有安装
–oldpackage: 降级
–force: 强行安装,可以实现重装或降级
–nodigest: 不检查包的完整性
–nosignature: 不检查包的来源合法性
–noscripts: 不执行程序包脚本片断
%pre:安装前脚本 --nopre
%post:安装后脚本 --nopost
%preun:卸载前脚本 --nopreun
%postun:卸载后脚本 --nopostun

  • 命令:rpm -ivh [安装包路径]

    • 作用:安装软件包,需要指定软件包绝对路径(在软件包所在目录下可以不指定绝对路径)
    [root@localhost ~]# mount /dev/cdrom /mnt
    mount: /dev/sr0 写保护,将以只读方式挂载
    [root@localhost ~]# rpm -ivh /mnt/Packages/wget-1.14-15.el7.x86_64.rpm 
    警告:/mnt/Packages/wget-1.14-15.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:wget-1.14-15.el7                 ################################# [100%]
    [root@localhost Packages]# rpm -ivh wget-1.14-15.el7.x86_64.rpm	//与安装包在同一目录
    
  • 命令:rpm -ivh -test [安装包路径]

    • 作用:测试一个软件包是否能在该系统上安装
    [root@localhost ~]# rpm -ivh --test /mnt/Packages/wget-1.14-15.el7.x86_64.rpm 
    警告:/mnt/Packages/wget-1.14-15.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
    准备中...                          ################################# [100%]
    	软件包 wget-1.14-15.el7.x86_64 已经安装
    
  • 命令:rpm -ivh --force [安装包路径]

    • 作用:如果软件包存在, 强制再次安装(有依赖关系未安装的不能强制安装,需忽略依赖才可强制安装)
    [root@localhost ~]# rpm -ivh --force /mnt/Packages/wget-1.14-15.el7.x86_64.rpm 
    警告:/mnt/Packages/wget-1.14-15.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:wget-1.14-15.el7                 ################################# [100%]
    
  • 命令:rpm -ivh --nodeps [安装包路径]

    • 作用:使用–nodeps忽略安装包包依赖关系,强制安装
    [root@localhost ~]# rpm -ivh  /mnt/Packages/httpd-2.4.6-67.el7.x86_64.rpm 
    警告:/mnt/Packages/httpd-2.4.6-67.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
    错误:依赖检测失败:
    	/etc/mime.types 被 httpd-2.4.6-67.el7.x86_64 需要
    	httpd-tools = 2.4.6-67.el7 被 httpd-2.4.6-67.el7.x86_64 需要
    	libapr-1.so.0()(64bit) 被 httpd-2.4.6-67.el7.x86_64 需要
    	libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-67.el7.x86_64 需要
    [root@localhost ~]# rpm -ivh --nodeps /mnt/Packages/httpd-2.4.6-67.el7.x86_64.rpm 
    警告:/mnt/Packages/httpd-2.4.6-67.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:httpd-2.4.6-67.el7               ################################# [100%]
    

4.3 rpm包卸载

语法:rpm -e PACKAGE_NAME

  • 先查询, 然后卸载
    [root@localhost ~]# rpm -qa|grep wget
    wget-1.14-15.el7.x86_64
    [root@localhost ~]# rpm -e wget
    [root@localhost ~]# rpm -qa|grep wget
    [root@localhost ~]#
    

4.3 rpm包查询

常用命令:

  • rpm -q PACKAGE_NAME //查询指定的包是否已安装
  • rpm -qa //查询已经安装的所有包
  • rpm -qi PACKAGE_NAME //查询指定包的说明信息
  • rpm -ql PACKAGE_NAME //查询指定软件包安装后生成的文件列表
  • rpm -qf /path/to/somefile //查询指定的文件是由哪个rpm包安装生成的
  • rpm -qc PACKAGE_NAME //查询指定包安装的配置文件
  • rpm -qd PACKAGE_NAME //查询指定包安装的帮助文件
  • rpm -q --scripts PACKAGE_NAME //查询指定包中包含的脚本
  • rpm -q --whatprovides CAPABILITY //查询指定的CAPABILITY(能力)由哪个包所提供
    • 如:rpm -q --whatprovides /bin/cat
  • rpm -q --whatrequires CAPABILITY //查询指定的CAPABILITY被哪个包所依赖
  • rpm -q --changelog COMMAND //查询COMMAND的制作日志
  • rpm -q --scripts PACKAGE_NAME //查询指定软件包包含的所有脚本文件
  • rpm -qR PACKAGE_NAME //查询指定的软件包所依赖的CAPABILITY
  • rpm -q --provides PACKAGE_NAME //列出指定软件包所提供的CAPABILITY
  • rpm -qpi /PATH/TO/PACKAGE_FILE //查询指定未安装包的说明信息
  • rpm -qpl /PATH/TO/PACKAGE_FILE //查询未安装的软件包会产生哪些文件
  • 命令:rpm -q xxx
    • 作用:查看xxx包是否安装
    [root@localhost ~]# rpm -q wget
    wget-1.14-15.el7.x86_64
    
  • 命令:rpm -qa | grep xxx
    • 作用:查询系统已安装的xxx包
    [root@localhost ~]# rpm -qa | grep wget
    wget-1.14-15.el7.x86_64
    
  • 命令:rpm -qi xxx
    • 作用:查看xxx包的相关信息
    [root@localhost ~]# rpm -qi wget
    Name        : wget
    Version     : 1.14
    Release     : 15.el7
    Architecture: x86_64
    Install Date: 2019年09月26日 星期四 15时34分54秒
    Group       : Applications/Internet
    Size        : 2055533
    License     : GPLv3+
    Signature   : RSA/SHA256, 2017年05月05日 星期五 21时44分34秒, Key ID 199e2f91fd431d51
    Source RPM  : wget-1.14-15.el7.src.rpm
    Build Date  : 2017年05月05日 星期五 20时39分40秒
    
  • 命令:rpm -ql xxx
    • 作用:查询xxx包所安装的文件
    [root@localhost ~]# rpm -ql wget
    /etc/wgetrc
    /usr/bin/wget
    /usr/share/doc/wget-1.14
    /usr/share/doc/wget-1.14/AUTHORS
    /usr/share/doc/wget-1.14/COPYING
    /usr/share/doc/wget-1.14/MAILING-LIST
    /usr/share/doc/wget-1.14/NEWS
    /usr/share/doc/wget-1.14/README
    /usr/share/doc/wget-1.14/sample.wgetrc
    /usr/share/info/wget.info.gz
    /usr/share/locale/be/LC_MESSAGES/wget.mo
    
  • 命令:rpm -qc xxx
    • 作用:查询xxx包相关的配置文件
    [root@localhost ~]# rpm -qc wget
    /etc/wgetrc
    
  • 命令:rpm -qd xxx
  • 作用:查看xxx包的帮助文件
    [root@localhost ~]# rpm -qd wget
    /usr/share/doc/wget-1.14/AUTHORS
    /usr/share/doc/wget-1.14/COPYING
    /usr/share/doc/wget-1.14/MAILING-LIST
    /usr/share/doc/wget-1.14/NEWS
    /usr/share/doc/wget-1.14/README
    /usr/share/doc/wget-1.14/sample.wgetrc
    /usr/share/info/wget.info.gz
    /usr/share/man/man1/wget.1.gz
    
  • 命令:rpm -qf [配置文件或命令绝对路径]
    • 作用:查询配置文件或命令来自于哪个rpm包
    [root@localhost ~]# rpm -qf /usr/bin/wget 
    wget-1.14-15.el7.x86_64
    
  • 命令:rpm -q --scripts xxx
    • 作用:查询指定包中包含的脚本
    [root@localhost ~]# rpm -q --scripts wget
    postinstall scriptlet (using /bin/sh):
    /sbin/install-info /usr/share/info/wget.info.gz /usr/share/info/dir || :
    preuninstall scriptlet (using /bin/sh):
    if [ "$1" = 0 ]; then
        /sbin/install-info --delete /usr/share/info/wget.info.gz /usr/share/info/dir || :
    fi
    
  • 命令:rpm -qpi [未安装包的路径]
    • 作用:查询指定未安装包的说明信息
    [root@localhost ~]# rpm -qpi /mnt/Packages/acpid-2.0.19-8.el7.x86_64.rpm 
    警告:/mnt/Packages/acpid-2.0.19-8.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
    Name        : acpid
    Version     : 2.0.19
    Release     : 8.el7
    Architecture: x86_64
    Install Date: (not installed)
    Group       : System Environment/Daemons
    Size        : 148583
    License     : GPLv2+
    Signature   : RSA/SHA256, 2017年05月09日 星期二 21时02分15秒, Key ID 199e2f91fd431d51
    Source RPM  : acpid-2.0.19-8.el7.src.rpm
    Build Date  : 2017年05月09日 星期二 20时56分03秒
    Build Host  : x86-019.build.eng.bos.redhat.com
    Relocations : (not relocatable)
    Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
    Vendor      : Red Hat, Inc.
    URL         : http://sourceforge.net/projects/acpid2/
    Summary     : ACPI Event Daemon
    Description :
    acpid is a daemon that dispatches ACPI events to user-space programs.
    
  • 命令:rpm -qpl [未安装包的路径]
    • 作用: 查询未安装的软件包会产生哪些文件
    [root@localhost ~]# rpm -qpl /mnt/Packages/acpid-2.0.19-8.el7.x86_64.rpm 
    警告:/mnt/Packages/acpid-2.0.19-8.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
    /etc/acpi
    /etc/acpi/actions
    /etc/acpi/actions/power.sh
    /etc/acpi/events
    /etc/acpi/events/powerconf
    /etc/acpi/events/videoconf
    /etc/sysconfig/acpid
    /usr/bin/acpi_listen
    /usr/lib/systemd/system/acpid.service
    /usr/sbin/acpid
    /usr/sbin/kacpimon
    /usr/share/doc/acpid-2.0.19
    /usr/share/doc/acpid-2.0.19/COPYING
    /usr/share/doc/acpid-2.0.19/Changelog
    /usr/share/doc/acpid-2.0.19/README
    /usr/share/doc/acpid-2.0.19/TESTPLAN
    /usr/share/doc/acpid-2.0.19/TODO
    /usr/share/man/man8/acpi_listen.8.gz
    /usr/share/man/man8/acpid.8.gz
    /usr/share/man/man8/kacpimon.8.gz
    

4.4 wget下载安装包程序

语法:wget [link]

  • 命令:wget [包下载链接]
    • 作用:下载安装包程序
    [root@localhost ~]# wget http://mirror.centos.org/centos/7/os/x86_64/Packages/wget-1.14-18.el7_6.1.x86_64.rpm
    --2019-09-26 16:22:49--  http://mirror.centos.org/centos/7/os/x86_64/Packages/wget-1.14-18.el7_6.1.x86_64.rpm
    正在解析主机 mirror.centos.org (mirror.centos.org)... 202.76.233.2, 2401:78c0::e00e
    正在连接 mirror.centos.org (mirror.centos.org)|202.76.233.2|:80... 已连接。
    已发出 HTTP 请求,正在等待回应... 302 Found
    位置:http://64.123.28.149/files/70200000011BF713/ap.stykers.moe/centos/7.6.1810/updates/x86_64/Packages/wget-1.14-18.el7_6.1.x86_64.rpm [跟随至新的 URL]
    --2019-09-26 16:22:49--  http://64.123.28.149/files/70200000011BF713/ap.stykers.moe/centos/7.6.1810/updates/x86_64/Packages/wget-1.14-18.el7_6.1.x86_64.rpm
    正在连接 64.123.28.149:80... 已连接。
    已发出 HTTP 请求,正在等待回应... 200 OK
    长度:560272 (547K) [application/octet-stream]
    正在保存至: “wget-1.14-18.el7_6.1.x86_64.rpm”
    
    100%[=========================================================>] 560,272     1.13MB/s 用时 0.5s   
    
    2019-09-26 16:22:50 (1.13 MB/s) - 已保存 “wget-1.14-18.el7_6.1.x86_64.rpm” [560272/560272])
    

4.4 rpm包升级

  • 命令:rpm -Uvh [软件升级包路径]

    • 作用:如果装有老版本的,则升级;否则,则安装
    [root@localhost ~]# rpm -qa | grep wget
    wget-1.14-15.el7.x86_64
    [root@localhost ~]# ls
    123  a  outfile  wget-1.14-18.el7_6.1.x86_64.rpm
    [root@localhost ~]# rpm -Uvh wget-1.14-18.el7_6.1.x86_64.rpm 
    警告:wget-1.14-18.el7_6.1.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:wget-1.14-18.el7_6.1             ################################# [ 50%]
    正在清理/删除...
       2:wget-1.14-15.el7                 ################################# [100%]
    
  • 命令:rpm -Fvh [软件升级包路径]

    • 作用:如果装有老版本的,则升级;否则,退出
    [root@localhost ~]# rpm -e wget
    [root@localhost ~]# rpm -q wget
    未安装软件包 wget 
    [root@localhost ~]# rpm -Fvh wget-1.14-18.el7_6.1.x86_64.rpm 
    警告:wget-1.14-18.el7_6.1.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    [root@localhost ~]# rpm -q wget
    未安装软件包 wget 
    [root@localhost ~]# rpm -ivh /mnt/Packages/wget-1.14-15.el7.x86_64.rpm 
    警告:/mnt/Packages/wget-1.14-15.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:wget-1.14-15.el7                 ################################# [100%]
    [root@localhost ~]# rpm -Fvh wget-1.14-18.el7_6.1.x86_64.rpm 
    警告:wget-1.14-18.el7_6.1.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:wget-1.14-18.el7_6.1             ################################# [ 50%]
    正在清理/删除...
       2:wget-1.14-15.el7                 ################################# [100%]
    

4.5 rpm包校验

如果执行以下命令无内容输出说明此包未被修改过
[root@localhost ~]# rpm -V vsftpd
S.5…T. c /etc/pam.d/vsftpd
…T. c /etc/vsftpd/ftpusers
S.5…T. c /etc/vsftpd/vsftpd.conf
.M… /var/ftp/pub

改变属性注释:

S //文件的容量大小是否被改变
M //文件的类型或者文件的属性是否被修改
5 //MD5这一种指纹加密的内容已经不同
D //装置的主/次代码已经改变
L //路径已经被改变
U //文件的所属主已被修改
G //文件的所属组已被修改
T //文件的创建时间已被改变

4.6 rpm重建数据库

数据库信息在/var/lib/rpm目录中

  • 命令:rpm --rebuilddb

    • 作用:重建数据库,一定会重新建立
    [root@localhost ~]# ls /var/lib/rpm
    Basenames     __db.001  __db.003  Group       Name          Packages     Requirename  Sigmd5
    Conflictname  __db.002  Dirnames  Installtid  Obsoletename  Providename  Sha1header   Triggername
    [root@localhost ~]# rpm --rebuilddb
    [root@localhost ~]# ls /var/lib/rpm
    Basenames     Dirnames  Installtid  Obsoletename  Providename  Sha1header  Triggername
    Conflictname  Group     Name        Packages      Requirename  Sigmd5
    
  • 命令:rpm --initdb

    • 作用:初始化数据库,没有才建立,有就不用建立
    [root@localhost ~]# ls /var/lib/rpm
    Basenames     __db.001  __db.003  Group       Name          Packages     Requirename  Sigmd5
    Conflictname  __db.002  Dirnames  Installtid  Obsoletename  Providename  Sha1header   Triggername
    

5.常见rpm应用

  1. 如何查询 util-linux 软件包安装了哪些文件?

    rpm -ql util-linux

  2. 如何查询 mkdir 命令是由哪个 RPM 软件包安装的?

    rpm -qf /usr/bin/mkdir

  3. 升级软件包时,-F、-U选项有何区别?

    区别:
    1. -F 升级时安装有老版本,则升级;没有安装老版本,则退出安装,不升级
    2. -U 升级时安装有老版本,则升级;没有安装老版本,依然继续安装新版本

  4. 如何检查vsftpd软件包是否安装?

    1.rpm -ivh --test vsftpd
    2.rpm -q vsftpd
    3.rpm -qa | grep vsftpd

  5. 如何检查vsftpd软件包所有的文件存放目录?

    rpm -ql vsftpd

  6. 如何检查vsftpd软件包的配置文件?

    rpm -qc vsftpd

  7. 如何使用rpm安装vsftpd服务?

    rpm -ivh vsftpd

  8. 如何使用rpm强制安装依赖包?

    rpm -ivh --nodeps xxx

  9. 如何使用rpm卸载vsftpd软件包?

    rpm -e vsftpd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值