linux 从入门到跑路 - rpm ,yum , dnf (软件包管理三兄弟)

Posted francisdrakek

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 从入门到跑路 - rpm ,yum , dnf (软件包管理三兄弟)相关的知识,希望对你有一定的参考价值。

linux 从入门到跑路 - rpm ,yum , dnf

(软件包管理三兄弟)

认识软件包管理

软件包管理是指系统中一种安装和维护软件的方法。今天,通过从 Linux 发行版中安装的软件包, 已能满足许多人所有需要的软件。这不同于早期的 Linux,人们需要下载和编辑源码来安装软件。 编辑源码没有任何问题,事实上,拥有对源码的访问权限是 Linux 的伟大奇迹。本篇,我们将查看一些用于包管理的命令行工具(rpm ,yum , dnf )。虽然所有主流 Linux 发行版都 提供了强大且精致的图形管理程序来维护系统,但是学习命令行程序也非常重要。因为它们 可以完成许多让图形化管理程序处理起来困难(或者不可能)的任务。

rpm

rpm命令是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。

rpm(选项)(参数)

rpm    -i  安装
          -iv 显示过程
          -ivv 显示详细过程
          *** -ivh 显示过程及安装进度百分比
              --test 仅测试,并不真正安装
              *--nodeps 在安装或卸载时忽略依赖性
              --replacepkgs重复安装已安装过的包,文件覆盖
              --replacefiles将要安装包的部分文件与其他已安装的包文件冲突,可继续安装,文件不覆盖
              --oldpackage 已安装过新版本,现在装旧版本
              *--force  等同于 --replacepkgs, --replacefiles, and --oldpackage.
              --noscripts 安装时不执行包中自带的脚本

        * -Uvh 新版本rpm   升级rpm包,若有旧版本,则先删除旧版本再安装新版本
                                        若没有旧版本,则直接安装指定的rpm包
           -Fvh 新版本rpm   升级rpm包,若有旧版本,则先删除旧版本再安装新版本
                                        若没有旧版本,则不安装rpm包
                    当升级内核时,应使用-ivh 安装新内核,以保证旧内核依然存在.

          -q 包名 查询已安装过的包的信息
               -qa  列出已安装过的所有rpm包
                   -qa "*关键字*" 或 rpm -qa |grep 关键字

        ***  -qf 文件路径  查询指定文件来自于哪一个已安装的rpm包
           -qi 包名 显示包的详细信息
           -qp [ilcd……] rpm路径 查询信息的数据来自于rpm包
           -q --provides 查询某个包提供了哪些能力
           -qa --provides  查询当前系统提供的所有能力
           -q --whatprovides webserver 查询某个能力由哪一个rpm包提供
           -q --whatrequires webserver 查询某个能力被哪个rpm包所依赖
           -q --changelog httpd 查询更新日志
         ***  -ql httpd 列出软件包提供的所有文件
               -qc httpd 列出软件包提供的配置文件
               -qd httpd 列出软件包提供的文档文件

      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 mTimediffers
               P capabilities differ

[[email protected] ~]# rpm --import /media/RPM-GPG-KEY-CentOS-7

[[email protected] ~]# rpm -K /media/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm
/media/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 确定

[[email protected] ~]# rpm -qa "gpg-pubkey*"
gpg-pubkey-f4a80eb5-53a7ff4b


      rpm --import /media/RPM-GPG-KEY-CentOS-7  导入公钥
       rpm -K vsftpd-3.0.2-22.el7.x86_64.rpm
       rpm -qa "gpg-pubkey*"

[[email protected] ~]# rpm  -ivh --nodeps  /media/Packages/tigervnc-1.8.0-5.el7.x86_64.rpm
准备中...                          ################################# [100%]
正在升级/安装...
    1:tigervnc-1.8.0-5.el7             ################################# [100%]
[[email protected] ~]# rpm -ivh --force /media/Packages/ftp-0.17-67.el7.x86_64.rpm
准备中...                          ################################# [100%]
正在升级/安装...
    1:ftp-0.17-67.el7                  ################################# [100%]
[[email protected] ~]# rpm -ivh  /media/Packages/ftp-0.17-67.el7.x86_64.rpm
准备中...                          ################################# [100%]
     软件包 ftp-0.17-67.el7.x86_64 已经安装


rpm2cpio initscripts-9.03.58-1.el6.centos.x86_64.rpm |cpio -id



***实验:删除某文件后利用rpm2cpio解开rpm来恢复文件
1.删除文件
[[email protected](nanyibo) ~]# rm -rf /etc/rc.d/init.d/functions
2.查询文件来自于哪一个已安装rpm包
[[email protected](nanyibo) ~]# rpm -qf /etc/rc.d/init.d/functions
initscripts-9.03.58-1.el6.centos.x86_64
3.挂载光盘
[[email protected](nanyibo) ~]# mount /dev/cdrom /media/ 
mount: block device /dev/sr1 is write-protected, mounting read-only
4.复制rpm到一个临时目录
[[email protected](nanyibo) ~]# cp /media/Packages/initscripts-9.03.58-1.el6.centos.x86_64.rpm /app   
5.进入临时目录并解开rpm包
[[email protected](nanyibo) ~]# cd /app
[[email protected](nanyibo) app]# rpm2cpio initscripts-9.03.58-1.el6.centos.x86_64.rpm |cpio -id
6.从解出的目录里找到需要的文件并复制到相关的原目录下
[[email protected](nanyibo) app]# cp etc/rc.d/init.d/functions /etc/rc.d/init.d/

[[email protected] ~]# rm -rf /etc/rc.d/init.d/functions
[[email protected] ~]# rpm -qf /etc/rc.d/init.d/functions
initscripts-9.49.41-1.el7.x86_64
[[email protected] ~]# mount /dev/cdrom /media/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /media 忙
        /dev/sr0 已经挂载到 /run/media/root/CentOS 7 x86_64 上
        /dev/sr0 已经挂载到 /media 上
[[email protected] ~]# cp /media/Packages/initscripts-9.03.58-1.el6.centos.x86_64.rpm /app
cp: 无法获取"/media/Packages/initscripts-9.03.58-1.el6.centos.x86_64.rpm" 的文件状态(stat): 没有那个文件或目录
[[email protected] ~]# cp /media/Packages/initscripts-9.03.58-1.el6.centos.x86_64.rpm /app
cp: 无法获取"/media/Packages/initscripts-9.03.58-1.el6.centos.x86_64.rpm" 的文件状态(stat): 没有那个文件或目录
[[email protected] ~]# cp /media/Packages/initscripts-9.49.41-1.el7.x86_64.rpm  /app
[[email protected] ~]# cd /app
[[email protected] app]# rpm2cpio initscripts-9.49.41-1.el7.x86_64.rpm |cpio -id
3039 块
[[email protected] app]# cp etc/rc
rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ rc.d/ 
[[email protected] app]# cp etc/rc
rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ rc.d/ 
[[email protected] app]# cp etc/rc.d/init.d/functions /etc/rc.d/init.d/


yum

yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

和rpm的区别rpm 只能安装已经下载到本地机器上的rpm 包. yum能在线下载并安装rpm包,能更新系统,且还能自动处理包与包之间的依赖问题

yum
      ***  /etc/yum.repos.d/*.repo  仓库路径
             [repoid]  仓库的名称,不能重复
             name= 仓库的描述,可以不写,将会用repoid当作name
             enabled=1|0  激活或禁用仓库,若不写该行,则默认启用
             gpgcheck=1|0 是否在安装包是检测gpg签名,默认检测,即为1
             gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7  指定gpg key的路径


     *** yum install 包名
         repolist [enabled] 默认,只显示已激活的仓库
                  disabled 仅显示已禁用的仓库
                  all 显示所有仓库


[base]
name=Red Hat Enterprise Linux $releasever Repo
baseurl=http://172.18.0.1/centos/$releasever
enabled=1
gpgcheck=0
[epel]
name=mage epel $releasever
baseurl=http://172.18.0.1/fedora-epel/$releasever/$basearch
enabled=1
gpgcheck=0


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


yum-config-manager --add https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/

*** yum clean all  清空yum缓存
yum makecache 重建缓存,(没有缓存时,首次使用yum的任何命令都会自动重建)


  *** yum list
           base 未安装的包,来自于base
           epel 未安装的包,来自于epel
           @base 该包已经安装,且是从base安装的
           @anaconda 该包已经安装,且是从操作系统的安装程序anaconda安装的
 
           all 默认 表示列出所有包
           updates 列出可更新的包
           installed 列出已安装的包
               @repoid 表示该包安装自指定的仓库
               installed 表示该包由rpm命令手工安装

*** install 包名1 [*包名*] [包名2……]
          -y 自动应答
       reinstall 包名  重新安装指定的包

     update  更新包
      remove 卸载包 卸载时不会连同依赖包一同卸载

yum info 包名 查看指定包的详细信息


*** yum provides "*/rz"   搜索一个文件来自于哪个rpm包,可以是未安装的包

yum search 关键字 模糊搜索 软件包和描述

yum deplist php  列出指定包所依赖的所有包

*** yum history 列出所有的yum历史
             info # 查看某条历史的详细信息
             redo # 重做某条历史
             undo # 撤消某条历史
                     如果该历史为install,则undo 是remove
                     如果该历史为remove,则undo 是install

安装本地的包
yum [local]install /path/*.rpm

*** yum grouplist 列出所有的包组名
     yum groupinfo ‘包组名‘ 查看指定包组中包含哪个包
     yum groupinstall ‘包组名‘
     yum groupupdate ‘包组名‘
     yum groupremove ‘包组名‘

    -q 静默,尽量还是用 &> /dev/null

yum reinstall bind --downloadonly --downloaddir=/app   仅下载包,不安装


createrepo  rpm包的目录路径   创建repodata

yum

***
实验:使用源码包安装httpd2.4(centos7)
1.下载源码 官网,教室的服务器
     lftp 172.18.0.1
         user thirty-three pass:thirty-three
         get files/httpd-2.4.27.tar.bz2
         exit
         tar xvf httpd-2.4.27.tar.bz2
2.安装Development Tools
3.查看README INSTALL
4../configure --help
./configure --prefix=/app/apache24 --sysconfdir=/etc/apache24
     dnf|yum install -y apr-devel apr-util-devel pcre-devel
5.make -j 4
6.make install
7.export PATH=$PATH:/app/apache24/bin 可把这行写入/etc/profile.d/*.sh 之后,再source该文件
8.apachectl start 启动服务
9.vim /app/apache24/htdocs/index.html
10.iptables -F
11.浏览器访问


实验2:使用源码包安装httpd2.2(centos6)

dnf

DNF是新一代的rpm软件包管理器。他首先出现在 Fedora 18 这个发行版中。而最近,它取代了yum,正式成为 Fedora 22 的包管理器。

DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等多方面的内容。DNF使用 RPM, libsolv 和 hawkey 库进行包管理操作。尽管它没有预装在 CentOS 和 RHEL 7 中,但你可以在使用 YUM 的同时使用 DNF 。你可以在这里获得关于 DNF 的更多知识:《 DNF 代替 YUM ,你所不知道的缘由》

DNF 的最新稳定发行版版本号是 1.0,发行日期是2015年5月11日。 这一版本的额 DNF 包管理器(包括在他之前的所有版本) 都大部分采用 Python 编写,发行许可为GPL v2.








































































































































































以上是关于linux 从入门到跑路 - rpm ,yum , dnf (软件包管理三兄弟)的主要内容,如果未能解决你的问题,请参考以下文章

linux 从入门到跑路

linux 从入门到跑路

linux 从入门到跑路-文件管理

linux 从入门到跑路–重定向 管道

ubuntu从入门到跑路

活动总结OpenResty从入门到跑路