Linux運維*一.Linux基礎---19、rpm程序包管理器

一、程序包管理基礎

1、API接口:

在不同的開發環境中,編寫程序時會調用內核kernel或者庫文件,不同系統的庫文件不同(Linux、Windows等),爲了增強開發程序的兼容性,不同庫使用統一標準的API接口,使得不同開發環境開發的程序能夠兼容

 

2、源碼到程序執行的流程:

源碼(文本) ---> 預處理 ---> 編譯(編譯器) ---> 彙編(彙編代碼)---> 機器指令

 

3、編譯方式:

靜態編輯:

把編譯器封裝到程序中,程序執行時不需要依賴外部編譯器

兼容性強,但程序體積大

共享編譯:

程序內無編譯器,而是通過連接到運行環境中的lib共享庫裏的編譯器進行編譯

兼容性弱,但程序體積小

 

4、二進制應用程序的組成部分

二進制文件

庫文件

配置文件

幫助文件

 

5、程序包管理

將編譯好的應用程序的各個組件,如二進制文件、庫文件、配置文件、幫助文件等程序文件統一打包成爲程序包,實現程序的簡化安裝、安裝追蹤、查詢、升級、拆卸等管理功能

 

6、程序包管理器的作用

將編譯好的應用程序的各個組件,如二進制文件、庫文件、配置文件、幫助文件等程序文件統一打包成爲程序包,實現程序的簡化安裝、安裝追蹤、查詢、升級、拆卸等管理功能

程序包的構成:

(1、程序的組成清單

文件清單

安裝或者拆卸時運行的腳本

(2、數據庫(公共)

程序包名稱及版本

依賴關係

功能說明

安裝生成的各文件的文件路徑及校驗碼信息

(3、程序數據

 

程序包管理器:

管理器:rpm

管理器前端工具:yum

 

7、常見的程序包管理器

debin公司:

管理器:deb

程序包格式:.dpt

redhat公司:

管理器:rpm------redhat packet manager

程序包格式:.rpm

 

8、源代碼文件及rpm包命名格式

源代碼文件命名格式:

name-version.tar.gz

name-version.tar.bz2

name-version.tar.xz

version:major.minor.release(主版本.次版本.發行版)

rpm包命名格式:

name-version-release.os.arch.rpm

- version # 版本號(主版本.次版本.發行版)

- release # 包發行號

- os # 操作系統

- arch # 運行平臺(x86:i386、i486 、i586 、i686、x86_64、amd64)

- rpm # 文件後綴名

示例:

[root@localhost ~]# rpm -qa | grep python-2.7

python-2.7.5-68.el7.x86_64

python # 包名

2.7.5 # 發行版本號(major:2、minor:7、release:5)

68 # 包的release號

el7 # 操作系統:企業級redhat

x86_64 # 運行平臺

 

9、主包、子包、包依賴關係

主包:用於實現程序主要功能的包

app01-version-release.os.arch.rpm

子包:用於實現程序額外附加功能的包

app01-devel-version-release.os.arch.rpm

包依賴關係:程序運行可能需要依賴於另外一個程序,被依賴的程序包叫依賴包

 

10、程序包的獲取方式:

(1、系統發行版的光盤或者官方的服務器鏡像;

(2、第三方服務器鏡像

教育服務器鏡像(清華、北大)

阿里雲鏡像:http://mirrors.aliyun.com

搜狐鏡像:http://mirrors.sohu.com

163鏡像:http://mirrors.163.com

(3、項目官方站點

(4、第三方組織社區站點

Fedora-EPEL

GitHub

(5、搜索引擎

 

 

 

 

 

二、ldd命令及ldcongif命令

ldd /path/to/file #查看二進制程序文件所依賴的庫文件

示例:

[root@localhost ~]# ldd /bin/cat

linux-vdso.so.1 => (0x00007fff12890000)

libc.so.6 => /lib64/libc.so.6 (0x00007f20eb858000)

/lib64/ld-linux-x86-64.so.2 (0x00007f20ebc25000)

 

ldconfig -p 或 /sbin/ldconfig -p #顯示已經裝載到緩存的所有可用庫文件及文件路徑映射關係

示例:

[root@localhost ~]# ldconfig -p | grep libGL

libGL.so.1 (libc6,x86-64) => /lib64/libGL.so.1

 

ldconfig 或 /sbin/ldconfig # 根據庫文件的緩存配置文件重讀緩存

庫文件的緩存配置文件:

/etc/ld.so.conf

/etc/ld.so.conf.d/*.conf

庫文件的緩存文件:

/etc/ld.so.cache

示例:

[root@localhost ~]# cat /etc/ld.so.conf.d/dyninst-x86_64.conf

/usr/lib64/dyninst

[root@localhost ~]#

[root@localhost ~]# ldconfig

 

 

 

 

三、rpm包管理器的使用

1、程序包來源合法性及完整性校驗

校驗文件:

程序包的製作者會使用MD5或者SHA算法對做好的程序包進行計算,得到程序包的特徵碼,並用私鑰加密,安裝前用戶使用公鑰解密並計算比較特徵碼,若不同則說明包被篡改過,不完整,或被植入病毒(所以進行校驗前首先需要信任程序包的製作者)

公鑰的導入:

rpm --import  /path/to/poblickeyfile公鑰

 

程序包的校驗:

使用rpm安裝程序包,此時會使用剛剛導入的密鑰進行校驗

 

2、程序包的安裝及拆卸

格式:rpm 選項 /path/to/file.rpm

常用選項:

-i 或 --install # 安裝指定程序包(若有依賴包,需要先逐一安裝依賴包)

-v # 顯示安裝過程

-h # 顯示安裝進度

-e # 拆卸程序包

--face # 強制安裝

--test # 測試程序包是否能被安裝,不真正執行安裝

--nodeps # 忽略依賴關係強行安裝(容易造成安裝後程序無法正常運行)

--replacepkgs # 程序安裝

--nosignature # 不檢查來源合法性

--nodigest # 不檢查包的完整性

--noscipts # 安裝時不執行程序包腳本

--nopre #不執行安裝前腳本%pre

--nopost #不執行安裝後腳本%post)

--nopreun # 不執行卸載前腳本%preun)

--nopostun # 執行卸載後腳本%postun)

 

常用選項搭配:

rpm -i --test /path/to/file.rpm # 測試程序包是否能安裝

rpm -ivh /path/to/file.rpm # 安裝程序包,並顯示進度

rpm -ivh --replacepkgs /path/to/file.rpm # 重新安裝程序包,並顯示進度

rpm -evh /path/to/file.rpm # 拆卸程序包,並顯示進度

 

示例:

[root@localhost ~]# ll

total 48

-rw-r--r--. 1 root root 47508 Jul 4 2014 tree-1.6.0-10.el7.x86_64.rpm

 

[root@localhost ~]# rpm -i --test tree-1.6.0-10.el7.x86_64.rpm

[root@localhost ~]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm

Preparing... ################################# [100%]

Updating / installing...

1:tree-1.6.0-10.el7 ################################# [100%]

 

[root@localhost ~]# rpm -ivh --replacepkgs tree-1.6.0-10.el7.x86_64.rpm

Preparing... ################################# [100%]

Updating / installing...

1:tree-1.6.0-10.el7 ################################# [100%]

 

[root@localhost ~]# rpm -evh tree

Preparing... ################################# [100%]

Cleaning up / removing...

1:tree-1.6.0-10.el7 ################################# [100%]

 

 

3、程序包的升級及降級

格式:rpm 選項 /path/to/file.rpm

常用選項:

-U # 升級程序包(若不存在舊的程序包,則重新安裝程序包)

-F # 升級程序包(若不存在舊的程序包,則不執行)

--oldpacage # 降級程序包(用舊版的程序包替換新的程序包)

 

4、程序包安裝情況校驗

格式:rpm 選項 /path/to/file.rpm

常用選項:

-V # 執行校驗操作

        --nodeps           #不檢查依賴關係

        --nodigest         #不檢查完整性

        --nofiles            #不檢查生成文件

        --noscripts        #不檢查腳本模塊

        --nosignature   #不檢查來源合法性

        --nolinkto          #不檢查連接

        --nofiledigest   #不檢查MD

        --nosize             #不檢查大小

        --nouser            #不檢查屬主

        --nogroup        #不檢查屬組

校驗結果:

SM5DLUGTP

S:大小改變

M:權限改變(屬主、屬組)

5:MD5碼不同

D:設備文件主次設備號不同

L:路徑不同

U:屬主不同

G:屬組不同

T:最後一次修改時間不同

P:功能不匹配

示例:

[root@localhost ~]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm

Preparing... ################################# [100%]

Updating / installing...

1:tree-1.6.0-10.el7 ################################# [100%]

 

[root@localhost ~]# rpm -V tree

 

5、程序包的安裝情況查詢

格式:rpm 選項 /path/to/file.rpm

常用選項:

-q # 進行程序包安裝情況查詢操作

-a # 查詢所有已安裝程序包

-f # 查詢指定文件由那個程序包生成

-g # 查詢指定包組的程序包

-P # 查詢未安裝的程序包信息(結合查詢選項可查看未安裝程序包的詳細信息)

--whatprovides # 查詢指定功能或文件是由那個程序包提供的

--whatrequires # 查詢指定功能或文件有那些依賴程序包

--changelog # 查詢rpm包的修改日誌

-c # 查詢指定程序包有哪些配置文件

--conflicts # 查詢指定程序包可能會和那些程序發生衝突

-d # 查詢程序包安裝生成的文檔

-i # 查詢查詢包的概要信息

-L # 查詢包的許可證文件

-l # 查詢包安裝生成的所有文件

--scripts # 查詢程序包的腳本

--triggers # 查詢包的觸發器腳本

-R # 查詢包所依賴的庫文件

--provides # 查看程序包所提供的功能

示例:

[root@localhost ~]# rpm -q tree

tree-1.6.0-10.el7.x86_64

 

[root@localhost ~]# rpm -qa | grep tree

tree-1.6.0-10.el7.x86_64

 

[root@localhost ~]# rpm -qd tree

/usr/share/doc/tree-1.6.0/LICENSE

/usr/share/doc/tree-1.6.0/README

/usr/share/man/man1/tree.1.gz

 

[root@localhost ~]# rpm -qi tree

Name : tree

Version : 1.6.0

Release : 10.el7

Architecture: x86_64

Install Date: Tue 03 Mar 2020 02:13:52 PM CST

Group : Applications/File

Size : 89505

License : GPLv2+

Signature : RSA/SHA256, Fri 04 Jul 2014 01:36:46 PM CST, Key ID 24c6a8a7f4a80eb5

Source RPM : tree-1.6.0-10.el7.src.rpm

Build Date : Tue 10 Jun 2014 03:28:53 AM CST

Build Host : worker1.bsys.centos.org

Relocations : (not relocatable)

Packager : CentOS BuildSystem <http://bugs.centos.org>

Vendor : CentOS

URL : http://mama.indstate.edu/users/ice/tree/

Summary : File system tree viewer

Description :

The tree utility recursively displays the contents of directories in a

tree-like format. Tree is basically a UNIX port of the DOS tree

utility.

 

[root@localhost ~]# rpm -q -l tree

/usr/bin/tree

/usr/share/doc/tree-1.6.0

/usr/share/doc/tree-1.6.0/LICENSE

/usr/share/doc/tree-1.6.0/README

/usr/share/man/man1/tree.1.gz

 

 

6、rpm包管理器的數據庫

rpm管理程序包時候,會將相關數據存儲到數據庫文件:/var/lib/rpm

[root@localhost ~]# cd /var/lib/rpm

[root@localhost rpm]# ls

Basenames     __db.001  __db.003  Group       Name          Packages     Requirename  Sigmd5

Conflictname  __db.002  Dirnames  Installtid  Obsoletename  Providename  Sha1header   Triggername

 

如果以上文件損壞,有的查詢操作將無法進行,需要讀取原程序信息重建數據庫

rpm --initdb # 初始化數據庫(存在數據庫則不進行操作、不存在則進行重建初始化)

rpm --rebuilddb # 重建數據庫(無論數據庫存在與否,都進行重建)

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章