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
