1. 程式人生 > 實用技巧 >-linux-軟體包管理

-linux-軟體包管理

一 軟體包介紹

與Windows類似,在linux系統上也可以安裝各種應用程式,或稱軟體包,Linux下軟體包分為三類

分類 安裝 特點
rpm包 預先編譯打包,安裝簡單 通常軟體的穩定版會被官方做成rpm,所以軟體版本較低
原始碼包 手動編譯打包,安裝繁瑣 軟體版本豐富,可選擇性強
二進位制包 解壓即可使用,安裝簡單 不能修改原始碼

二 rpm包管理

1 什麼是rmp包

在主流的Linux系統上,多數軟體的安裝、升級、移除以及維護工作都是RPM軟體包管理程式來完成的,那什麼是RPM軟體包呢?

RPM 是Red-Hat Package Manager(RPM軟體包管理器)的縮寫,這一檔案格式名稱雖然打上了RedHat 的標誌,但是其原始設計理念是開放式的,通常軟體的穩定版會被官方做成rpm,所以軟體版本偏低。

rpm包格式

rpm包格式舉例

# 例1 mysql-connector-odbc-5.2.5-8.el7.x86_64.rpm 
軟體包名:mysql-connector-odbc 
版本號Version:5.2.5 
釋出版本Release:8.el7 
平臺:el7.x86_64 
字尾:.rpm

# 例2 
abrt-python-doc-2.1.11-57.el7.centos.noarch.rpm 
abrt-python-doc 	#軟體包的名稱 
2.1.11 						#軟體的版本 
57 								#軟體編譯之後的釋出的次數 
el7 							#適合的作業系統的版本 
noarch 						#適用於不同版本的CPU 
.rpm 							#字尾名

RPM閉包使用的平臺

# 檢視自己當前的平臺以及系統版本
[root@arther-linux /]# uname -m
x86_64
[root@arther-linux /]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)

管理RPM包有兩種命令

# 1.rpm命令:
		需要自己找到rpm包,並且手動解決包的依賴性關係
  	ps:	實際情況下,很難分辨缺少什麼依賴包
      
# 2.yum命令:
		相關rpm包事先都被存放於一個倉庫裡,倉庫包含了所有的依賴包,所以yum按照可以幫我們解決依賴性 問題。
  
# 具體聯絡與區別
rpm是由紅帽公司開發的軟體包管理方式,使用rpm我們可以方便的進行軟體的安裝、查詢、解除安裝、升級等工作。但是rpm軟體包之間的依賴性問題往往會很繁瑣,尤其是軟體由多個rpm包組成時。

Yum(全稱為 Yellow dog Updater, Modified)是一個在Fedora和RedHat以及SUSE中的Shell前端軟體包管理器。基於RPM包管理,能夠從指定的伺服器自動下載RPM包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。

RPM包獲取

如果沒有掛載,檔案目錄與外設硬體目錄是兩個概念,無法以軟體作業系統的指令去開啟硬體目錄,如
[root@arther-linux /]# ls /dev/sr1
/dev/sr1
# 所以需要掛載,實現外設硬體的目錄與作業系統軟體目錄的拼接(對映關係),將映象中該目錄下的檔案掛載到opt中。


# 1.本地的ISO映象光碟(軟體包可能存在版本偏低情況) : 掛載映象有以下三種方式
方式1: 
[root@localhost ~]# mount /dev/cdrom /opt/ 

方式2: 
[root@localhost ~]# mount /dev/sr0 /opt/ 
# 如果有兩個光碟機
[root@localhost ~]# mount /dev/sr1 /opt/ 

方式3:
[root@localhost ~]# mount -o loop /xxx.iso /opt 

檢視光盤裡的rpm包 
[root@localhost ~]# ls /opt/Packages/ 

# 2.自己去網上下載rpm包進行安裝 

# 3.聯網從yum倉庫裡獲取rpm包 					# yum的時候

三 rpm命令

選項

#1、安裝:rpm -ivh <RPM包名全稱> 

#2、解除安裝:rpm -e <RPM包名> 

#3、升級:rpm -Uvh <RPM包名>

#4、查詢:
rpm -qa								# 查詢系統中安裝的所有RPM軟體包

rpm -qa | grep php 		#檢索系統中已經安裝有關php的軟體包

rpm -q  RPM包名   		 #查詢指定軟體包是否已安裝
											[root@arther-linux ~]# rpm -q zip
											zip-3.0-11.el7.x86_64
    
rpm -qi  RPM包名 		   #查詢系統中已安裝包的描述資訊

rpm -ql  RPM包名 		   #查詢系統中已安裝包裡所包含的檔案

rpm -qc  RPM包名  		 #查詢指定軟體包的所有配置檔案

rpm -qd <RPM包名> 		 #查詢某個包安裝的幫助文件

rpm -qf 檔案路徑 				#查詢系統中指定檔案所屬的軟體包 
											[root@arther-linux ~]# rpm -qf /usr/sbin/ifconfig 
											net-tools-2.0-0.25.20131004git.el7.x86_64
    
-p										#在上述選項的基礎上加選項-p,就可以檢視尚未安裝的rpm包資訊

額外選項 
--nomd5 # 不檢驗軟體包的簽名 

--nodeps # 忽略依賴性安裝軟體,安裝後軟體有可能無法使用,最好是解決依賴性後再安裝 						[root@localhost ~]# rpm -e dos2unix --nodeps # 忽略依賴關係 

--force # 強制安裝軟體包,只有安裝和升級可以強制執行

安裝

#1、rpm包在本地 
[root@egon ~]# mount /dev/sr0 /opt 
[root@egon ~]# rpm -ivh /opt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm 

#2、rpm來自於網路,如果安裝過程中報錯:curl: (60) Peer's Certificate has expired,請先 將系統時間修改正確,然後再安裝即可 
[root@egon ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0- 2.el7.x86_64.rpm

安裝與依賴性

[root@egon ~]# rpm -ivh /opt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm 錯誤:依賴檢測失敗: 
/etc/mime.types 被 httpd-2.4.6-88.el7.centos.x86_64 需要 
httpd-tools = 2.4.6-88.el7.centos 被 httpd-2.4.6-88.el7.centos.x86_64 
需要 
libapr-1.so.0()(64bit) 被 httpd-2.4.6-88.el7.centos.x86_64 需要 libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-88.el7.centos.x86_64 需要 [root@egon ~]#

# 解決思路:安裝提示的庫,將依賴的庫全部安裝,安裝

升級rpm包

#1、下載一個低版本、一個高版本 
wget https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-agent- 3.0.9-1.el7.x86_64.rpm 
  
wget https://mirrors.aliyun.com/zabbix/zabbix/4.2/rhel/7/x86_64/zabbix-agent- 4.2.0-1.el7.x86_64.rpm
  
#2、先安裝低版本 
[root@egon ~]# rpm -ivh zabbix-agent-3.0.9-1.el7.x86_64.rpm

#3、再安裝高版本,會報錯 
[root@egon ~]# rpm -ivh zabbix-agent-4.2.0-1.el7.x86_64.rpm

#4、如果採用--force選項,那就是強制安裝,會同時存在兩個版本,該方案不可取
[root@egon ~]# rpm -qa |grep zabbix zabbix-agent-3.0.9-1.el7.x86_64 
[root@egon ~]# rpm -ivh zabbix-agent-4.2.0-1.el7.x86_64.rpm --force 。。。安裝成功。。。 
[root@egon ~]# rpm -qa |grep zabbix # 同時兩個版本共存 
zabbix-agent-3.0.9-1.el7.x86_64 
zabbix-agent-4.2.0-1.el7.x86_64

#5、重來,採用升級方式安裝 
[root@egon ~]# rpm -e zabbix-agent-3.0.9-1.el7.x86_64 
[root@egon ~]# rpm -e zabbix-agent-4.2.0-1.el7.x86_64 
[root@egon ~]# rpm -qa |grep zabbix 
[root@egon ~]# rpm -ivh zabbix-agent-3.0.9-1.el7.x86_64.rpm 
[root@egon ~]# rpm -Uvh zabbix-agent-4.2.0-1.el7.x86_64.rpm 
# 清理老版本,安裝新版本。。。 
[root@egon ~]# rpm -qa |grep zabbix-agent 
# 只留下一個新版本 
zabbix-agent-4.2.0-1.el7.x86_64 
[root@egon ~]#

三 yum管理RPM包

1 yum介紹

yum自動解決依賴關係

Yum(全稱為 Yellow dog Updater, Modified)是一個在Fedora和RedHat以及CentOS中的Shell 前端軟體包管理器。基於RPM包管理,能夠從指定的伺服器自動下載RPM包並且安裝,可以自動處理依賴性關 系,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。

檢視yum命令與配置檔案

[root@arther-linux /]# rpm -q yum
yum-3.4.3-168.el7.centos.noarch

[root@arther-linux /]# rpm -qc yum
/etc/logrotate.d/yum
/etc/yum.conf
/etc/yum/version-groups.conf

yum命令常用選項

常用選項說明: 
#倉庫 
				yum repolist 							# 查詢可用倉庫 
  			yum repolist all 					# 檢視包括已啟用或禁用的所有倉庫狀態 
    
    # 關閉與啟用倉庫:本質:都是在修改repo檔案中的enable的值 0 不啟用 1 啟用 
    yum-config-manager --disable epel #關閉倉庫epel 
    yum-config-manager --enable epel #啟用倉庫epel 
    
#檢視 
				yum list 											# 列出可用倉庫中所有的軟體包 
  			yum list | less yum grouplist # 列出可用倉庫中的軟體組 
        yum provides /usr/sbin/ifconfig 
      # 查詢命令所屬的軟體包,可以不加路徑,只寫 命令名字 
      # 與rpm -qf的區別在於yum provides後可 以只跟命名名
      
#安裝 
				yum install httpd httpd-tools  # 加上-y選項可以變成非互動 
  			yum groupinstall "開發工具" -y  
    		# 安裝軟體組,一個軟體組中包含了多個軟體包 
        yum groups install "開發工具" -y #同上
        
#恢復
				yum reinstall httpd # 不小心刪除了配置檔案的時,可以reinstall一下
  
#更新 		
				yum check-update 		# 檢查可以更新的軟體包 
				yum update -y       # 更新所有軟體包,包括核心,通常只在剛裝完系統時執行
    	  yum update NetworkManager.x86_64 -y # 更新某個軟體包
      
      
#快取 
				yum makecache 			# 製作元資料快取 
  			yum clean all 			# 清理元資料快取 
    		vim /etc/yum.conf 	# 預設軟體包下載安裝後會自動刪除 
      											# 設定keepcache=1 即開啟了軟體包快取 
        										# 快取目錄為配置檔案中指定的cachedir
          
# 歷史記錄 
				yum history 						# 檢視執行過的yum命令歷史記錄 
  			yum history info ID號 	 # 檢視具體某一條yum命令的詳細資訊 
    		yum history undo ID號   # 撤銷執行過的歷史命令
      
# 關於安裝需要注意: 
無論yum安裝的軟體來自何方,yum時刻以自己倉庫中的repodata儲存的依賴關係為準,如果有多個倉庫,就 依次檢索 
#1、yum直接安裝公網的rpm包, 會自動查詢當前系統上已有的倉庫解決依賴關係 
yum install https://mirrors.aliyun.com/centos/7.6.1810/os/x86_64/Packages/samba- 4.8.3-4.el7.x86_64.rpm 
  
#2、Yum直接安裝本地的rpm包,會自動查詢當前系統上已有的倉庫解決依賴關係 
yum localinstall -y /mnt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm

要使用yum前,需要準備一個yum源(我們也稱為yum倉庫), 這個可以是一個網際網路上的倉庫,也可以是本地自己搭建的倉庫.倉庫裡面有什麼呢?裡面全部都是.rpm的軟體包.一臺linux,可以新增N多個yum源, 能搜尋的軟體包數量就是N個yum源之和.系統常見yum

1.自定義的本地源 

2.網路上的源頭,如:base基礎源、epel擴充套件源、與服務相關的源(官網)