# Linux軟件管理(yum工具的使用)


Linux軟件管理(yum工具的使用)

@

yum和rpm

1. rpm的弊端

前面我們講了下rpm,那么rpm有什么弊端呢?其弊端是顯而易見的,當用rpm安裝軟件時,若遇到有依賴關系的軟件,必須先安裝依賴的軟件才能繼續安裝我們要安裝的軟件,當依賴關系很復雜的情況下,這種安裝方式就很讓人頭疼,所以我們需要另一種安裝方式來解決這個問題,今天我們要來學習的就是這樣一個工具--yum

2. yum的優劣勢

yum有什么優勢呢?yum最大的優勢就是能夠解決rpm的依賴問題,yum能夠自動解決軟件安裝時的依賴關系。
當然了,有優勢就有劣勢,人無完人嘛,軟件也是一樣的,yum的缺陷就是如果在未完成安裝的情況下強行中止安裝過程,下次再安裝時將無法解決依賴關系,Fedora22+、redhat7和centos7等可以通過手動安裝dnf工具來解決此問題。
dnf是redhat7上用來代替yum的一個工具,其存在的意義就是處理yum的缺陷,但其用法與yum是完全一樣的,甚至連選項都是一樣的,你可以理解為dnf就是yum,只是換了個名字而已。所以說只要學會了yum就自然會dnf,大家不用擔心學了yum又要去學dnf之類的問題

3. 什么是yum及其作用

那么什么是yum呢?yum是yellowdog update manager的簡稱,它能夠實現rpm管理的所有操作,並能夠自動解決各rpm包之間的依賴關系。yum是rpm的前端工具,是基於rpm來實現軟件的管理的一個工具。
你不能用yum去管理windows的exe程序包,也不能用yum去管理ubuntu的deb程序包,只能用yum來管理redhat系列的rpm包

掛載光盤

[root@hostnamectl ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 寫保護,將以只讀方式掛載

yum的配置文件

  • 配置文件有哪些:
    • /etc/yum.conf 作用:為所有倉庫提供公共配置
    • /etc/yum.repos.d/*.repo 作用:為倉庫的指向提供配置
  • yum的repo配置文件中可用的變量:
    • $releaseversion:當前OS的發行版的主版本號
    • $arch:平台類型
    • $basearch:基礎平台

配置本地yum倉庫

  • 創建一個文件夾(也可以直接用mnt文件夾)
[root@hostnamectl ~]# mkdir /opt/myrepo
[root@hostnamectl ~]# ls /opt/
myrepo
  • 將光盤文件cp到目錄下
[root@hostnamectl ~]# cp -r /mnt/* /opt/myrepo/
[root@hostnamectl ~]# ls /opt/myrepo/
addons  EULA              GPL     isolinux  media.repo  repodata                 RPM-GPG-KEY-redhat-release
EFI     extra_files.json  images  LiveOS    Packages    RPM-GPG-KEY-redhat-beta  TRANS.TBL
  • 本地倉庫配置
[Repo_Name]:倉庫名稱  
name:描述信息  
  baseurl:倉庫的具體路徑,接受以下三種類型  
    ftp://  
    http://  
    file:///  
enabled:可選值{1|0},1為啟用此倉庫,0為禁用此倉庫  
gpgcheck:可選值{1|0},1為檢查軟件包來源合法性,0為不檢查來源  
    如果gpgcheck設為1,則必須用gpgkey定義密鑰文件的具體路徑  
    gpgkey=/PATH/TO/KEY  
[root@hostnamectl ~]# touch /etc/yum.repos.d/myrepo.repo
[root@hostnamectl ~]# vi /etc/yum.repos.d/myrepo.repo 
[root@hostnamectl ~]# cat /etc/yum.repos.d/myrepo.repo 
[myrepo]
name:myrepo.repo
baseurl:file:///opt/myrepo
enabled:1
gpgcheck:0
  • 清除本地緩存
[root@hostnamectl ~]# yum clean all
已加載插件:product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
正在清理軟件源: myrepo       //顯示這個表示myrepo倉庫可以使用了
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from dis
  • 檢驗yum本地倉庫
[root@hostnamectl ~]# yum list all 
compat-db-headers.noarch                4.7.25-28.el7              myrepo 
compat-glibc-headers.x86_64             1:2.12-4.el7               myrepo 
glibc-headers.x86_64                    2.17-196.el7               myrepo 
java-1.7.0-openjdk-headless.x86_64      1:1.7.0.141-2.6.10.5.el7   myrepo 
java-1.8.0-openjdk-headless.i686        1:1.8.0.131-11.b12.el7     myrepo 
java-1.8.0-openjdk-headless.x86_64      1:1.8.0.131-11.b12.el7     myrepo 
kernel-headers.x86_64                   3.10.0-693.el7             myrepo 
........

yum網絡倉庫

  • 官方網絡yum倉庫(國外)
  • 阿里雲yum倉庫
  • 163yum倉庫
  • xx大學yum倉庫
  • epel源

阿里雲yum倉庫:
[root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl:linux自帶的下載軟件
阿里雲epel源
[root@localhost ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

  • 源查找方式基本一致,zabbix,mysql,saltstack,openstack等等,上官網找
    [root@localhost ~]# vim /etc/yum.repos.d/nginx.repo
    [nginx]
    name=nginx repo
    baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/
    gpgcheck=0
    enabled=1

  • redhat7使用centos7的yum源

1.卸載紅帽yum源
[root@localhost ~]# rpm -e $(rpm -qa|grep yum) --nodeps

2.刪除所有repo相關文件
[root@localhost ~]# rm -f /etc/yum.conf
[root@localhost ~]# rm -rf /etc/yum.repos.d/
[root@localhost ~]# rm -rf /var/cache/yum

3.下載centos相關yum組件(安裝wget,[root@hostnamectl ~]# rpm -ivh /mnt/Packages/wget-1.14-15.el7.x86_64.rpm    最后一個版本可能不一樣,自己tabel)
[root@localhost ~]# wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-3.4.3-163.el7.centos.noarch.rpm
[root@localhost ~]# wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
[root@localhost ~]# wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-52.el7.noarch.rpm
[root@localhost ~]# wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-updateonboot-1.1.31-52.el7.noarch.rpm
[root@localhost ~]# wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-utils-1.1.31-52.el7.noarch.rpm
//如果鏈接因服務器跟新而失效了就自己看着包名找,2019年9月28日18:11:53

//如果沒有wget命令則使用curl命令(建議使用wget)
[root@localhost ~]# curl -o yum-utils-1.1.31-50.el7.noarch.rpm  http://mirror.centos.org/centos/7/os/x86_64/Packages/yum-utils-1.1.31-50.el7.noarch.rpm
[root@localhost ~]# curl -o yum-3.4.3-161.el7.centos.noarch.rpm  http://mirror.centos.org/centos/7/os/x86_64/Packages/yum-3.4.3-161.el7.centos.noarch.rpm
[root@localhost ~]# curl -o yum-metadata-parser-1.1.4-10.el7.x86_64.rpm  http://mirror.centos.org/centos/7/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
[root@localhost ~]# curl -o yum-plugin-fastestmirror-1.1.31-50.el7.noarch.rpm   http://mirror.centos.org/centos/7/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-50.el7.noarch.rpm
[root@localhost ~]# curl -o yum-updateonboot-1.1.31-50.el7.noarch.rpm http://mirror.centos.org/centos/7/os/x86_64/Packages/yum-updateonboot-1.1.31-50.el7.noarch.rpm

3.安裝CentOS所有相關組件
[root@hostnamectl ~]# rpm -ivh yum-* --nodeps
警告:yum-3.4.3-163.el7.centos.noarch.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
准備中...                          ################################# [100%]
正在升級/安裝...
   1:yum-metadata-parser-1.1.4-10.el7 ################################# [ 20%]
   2:yum-plugin-fastestmirror-1.1.31-5################################# [ 40%]
   3:yum-3.4.3-163.el7.centos         ################################# [ 60%]
   4:yum-updateonboot-1.1.31-52.el7   ################################# [ 80%]
   5:yum-utils-1.1.31-52.el7          ################################# [100%]
//五個包缺一不可


4.下載base和epel倉庫
[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost ~]# sed -i 's#\$releasever#7#g' /etc/yum.repos.d/CentOS-Base.repo

[root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum管理軟件

yum命令語法:

yum [options] [command] [package ...]
  • 常用的options:
ist            //列表
    all         //默認項
    available   //列出倉庫中有的,但尚未安裝的所有可用的包
    installed   //列出已經安裝的包
    updates     //可用的升級
    
clean           //清理緩存
    packages
    headers
    metadata
    dbcache
    all         //一般只會用這個
    
repolist        //顯示repo列表及其簡要信息
    all
    enabled     //默認項
    disabled
    
install         //安裝
    yum install packages [...]
[root@hostnamectl ~]# yum -y install httpd      //-y 安裝的時候就不許要自己輸入y了

    
update          //升級
    yum update packages [...]
[root@hostnamectl ~]# yum -y update vim

update_to       //升級為指定版本

downgrade package1 [package2 ...]   //降級

remove|erase    //卸載,卸載的時候他所依賴的包不會卸載所以一般情況不要隨便卸載

info    //顯示rpm -qi package的結果
    yum info packages
    
provides|whatprovides   //查看指定的文件或特性是由哪個包安裝生成的

search string1 [string2 ...]    //以指定的關鍵字搜索程序包名及summary信息

deplist package [package2 ...]  //顯示指定包的依賴關系

history     //查看yum的歷史事務信息

localinstall    //安裝本地rpm包,自動解決依賴關系

grouplist       //列出可用的組

groupinstall "group name"   //安裝一組軟件
        
createrepo命令    //創建yum倉庫的元數據信息
[root@localhost ~]# yum install createrepo -y
[root@localhost ~]# createrepo [options] <directory

命令實踐

搜索軟件包

列出軟件倉庫中可用的軟件
[root@localhost ~]# yum list all

進行模糊查找
[root@localhost ~]# yum list|grep ftp

列出軟件包詳情
[root@localhost ~]# yum info ftp

安裝軟件包

安裝軟件只需要給出軟件名稱
[root@localhost ~]# yum install traceroute


安裝過程中分析依賴關系后, 直接安裝, 無需交互
[root@localhost ~]# yum -y install php

安裝本地的rpm包, 如果有依賴關系, 會自動從軟件倉庫中下載所需依賴(非來自.repo定義的軟件倉庫)
[root@localhost ~]# yum localinstall /mnt/Packages/bind-9.9.4-50.el7.x86_64.rpm

安裝網絡上rpm包
[root@hostnamectl ~]# yum -y install https://mirrors.aliyun.com/centos/7.7.1908/os/x86_64/Packages/wget-1.14-18.el7_6.1.x86_64.rpm

重裝軟件包

檢查軟件是否存在
[root@hostnamectl ~]# rpm -q httpd
httpd-2.4.6-90.el7.centos.x86_64


[root@hostnamectl ~]# rpm -qc httpd
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d/00-base.conf
/etc/httpd/conf.modules.d/00-dav.conf
/etc/httpd/conf.modules.d/00-lua.conf
/etc/httpd/conf.modules.d/00-mpm.conf
/etc/httpd/conf.modules.d/00-proxy.conf
/etc/httpd/conf.modules.d/00-systemd.conf
/etc/httpd/conf.modules.d/01-cgi.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
/etc/logrotate.d/httpd
/etc/sysconfig/htcacheclean
/etc/sysconfig/httpd

//不小心刪除httpd配置文件
[root@hostnamectl ~]# rm -f /etc/httpd/conf.d/autoindex.conf

[root@hostnamectl ~]# rpm -qc httpd
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d/00-base.conf
/etc/httpd/conf.modules.d/00-dav.conf
/etc/httpd/conf.modules.d/00-lua.conf
/etc/httpd/conf.modules.d/00-mpm.conf
/etc/httpd/conf.modules.d/00-proxy.conf
/etc/httpd/conf.modules.d/00-systemd.conf
/etc/httpd/conf.modules.d/01-cgi.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
/etc/logrotate.d/httpd
/etc/sysconfig/htcacheclean
/etc/sysconfig/httpd

更新軟件包

//對比Linux已安裝的軟件和yum倉庫中的軟件, 有哪些需要升級
[root@localhost ~]# yum check-update

//更新軟件
[root@localhost ~]#  yum update vim -y

刪除軟件包

//刪除該軟件包,不會刪除依賴, 但是我們盡可能不要使用刪除軟件操作
[root@localhost ~]# yum -y erase vim
[root@localhost ~]# yum -y remove vim

與倉庫相關的命令

列出yum源可用的軟件倉庫
[root@hostnamectl ~]# yum repolist
已加載插件:fastestmirror, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
源標識                                                   源名稱                                                                                   狀態
base/x86_64                                              CentOS-7 - Base - mirrors.aliyun.com                                                     10,097
epel/x86_64                                              Extra Packages for Enterprise Linux 7 - x86_64                                           13,415
extras/x86_64                                            CentOS-7 - Extras - mirrors.aliyun.com                                                      304
updates/x86_64                                           CentOS-7 - Updates - mirrors.aliyun.com                                                     319
repolist: 24,135


列出全部yum源可用和禁用的倉庫
[root@localhost ~]# yum repolist all

//查看這個文件或命令屬於哪個包
[root@localhost ~]# yum provides /etc/my.cnf
[root@localhost ~]# yum provides cd
[root@localhost ~]# yum provides *bin/pstree

與緩存相關的命令

緩存yum源軟件倉庫, xml元數據文件
[root@localhost ~]# yum makecache

緩存軟件包, 修改yum全局配置文件
[root@localhost ~]# vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1                     //啟動緩存


查看緩存的xml文件
[root@localhost ~]# ls /var/cache/yum/x86_64/7/base/

查看緩存軟件包路徑
[root@localhost ~]# ls /var/cache/yum/x86_64/7/


另一種緩存rpm包方式

1.安裝插件支持只下載軟件包不安裝
[root@localhost ~]# yum -y install yum-plugin-downloadonly
2.將軟件下載至指定目錄
[root@localhost ~]# yum -y install --downloadonly --downloaddir=/tmp httpd


清除所有yum緩存
[root@localhost ~]# yum clean all

只清除緩存的軟件包
[root@localhost ~]# yum clean packages

與包組相關的命令

列出已經安裝和所有可使用的軟件組
[root@localhost ~]# yum groups list

安裝一整個組的軟件
[root@localhost ~]# yum groups install Development tools \
Compatibility libraries \
Base Debugging Tools

yum刪除包組
[root@localhost ~]# yum groups remove  -y Base

與歷史記錄相關的命令

查看歷史執行yum命令
[root@localhost ~]# yum history

查詢歷史執行yum命令ID詳細信息
[root@localhost ~]# yum history info N

撤銷歷史執行過的yum命令
[root@localhost ~]# yum history undo N

YUM簽名檢查機制

  • rpm軟件提供組織redhat在構建rpm包時, 使用其私鑰private key對 rpm進行簽名

  • 客戶端在使用rpm為了驗證其合法性, 可以使用redhat提供的公鑰publickey進行簽名檢查

  • 方式1:指定公鑰位置

[root@localhost ~]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  • 方式2:提前導入公鑰
[root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[root@localhost ~]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base 
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
  • 方式3:不進行簽名驗證
不檢查軟件包的簽名
[root@localhost ~]# yum install httpd --nogpgcheck

作業

1. 如何配置本地光盤yum倉庫以及網絡yum倉庫

掛載
[root@hostnamectl ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 寫保護,將以只讀方式掛載
本地
[root@localhost ~]# vim /etc/yum.repos.d/myrepo.repo
[root@localhost ~]# cat /etc/yum.repos.d/myrepo.repo
[myrepo]
name=myrepo
baseurl=file:///mnt
gpgcheck=0
enabled=1

網絡
下載網絡yum倉庫
[root@localhost ~]# wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-updateonboot-1.1.31-52.el7.noarch.rpm
指定網絡倉庫地址
[root@localhost ~]# vim /etc/yum.repos.d/myrepo.repo
[root@localhost ~]# cat /etc/yum.repos.d/myrepo.repo
[myrepo]
name=myrepo
baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64
gpgcheck=0
enabled=1


2. 如何使用yum安裝 httpd php nginx

[root@hostnamectl ~]# yum -y install httpd
[root@hostnamectl ~]# yum -y install php
[root@hostnamectl ~]# yum -y install nginx

3. 如配置yum緩存rpm包(至少闡述兩種方式)

[root@localhost ~]# yum makecache

緩存軟件包, 修改yum全局配置文件
[root@localhost ~]# vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1                     //啟動緩存




安裝插件支持只下載軟件包不安裝
[root@localhost ~]# yum -y install yum-plugin-downloadonly
將軟件下載至指定目錄
[root@localhost ~]# yum -y install --downloadonly --downloaddir=/tmp httpd

4. 如何使用yum安裝本地緩存好的rpm包

[root@localhost ~]# vi /etc/yum.conf

keepcache   1

# keepcache=0 
# keepcache=1 


[root@localhost ~]# yum -y install /var/cache/yum/bind-9.9.4-50.el7.x86_64.rpm

5. 如何使用yum刪除httpd軟件包

[root@hostnamectl ~]# yum -y remove httpd


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM