程序包
linux的程序包主要分為兩類;二進制可執行安裝包和源代碼程序文件包
二進制應用程序的組成部分: 二進制文件、庫文件、配置文件、幫助文件 查看二進制程序所依賴的庫文件: ldd /PATH/TO/BINARY_FILE 管理及查看本機裝載的庫文件: ldconfig /sbin/ldconfig -p: 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系; 配置文件為:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf 緩存文件:/etc/ld.so.cache 程序包管理: 功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作; 1、程序的組成組成清單 (每個包獨有) 文件清單 安裝或卸載時運行的腳本 2、數據庫(公共) 程序包名稱及版本 依賴關系; 功能說明; 安裝生成的各文件的文件路徑及校驗碼信息; 管理程序包的方式: 使用包管理器:rpm 使用前端工具:yum, dnf 獲取程序包的途徑: (1) 系統發版的光盤或官方的服務器; CentOS鏡像: http://mirrors.aliyun.com http://mirrors.sohu.com http://mirrors.163.com (2) 項目官方站點 (3) 第三方組織: Fedora-EPEL 搜索引擎: http://pkgs.org http://rpmfind.net http://rpm.pbone.net (4) 自己制作 建議:檢查其合法性 來源合法性; 程序包的完整性;
程序包管理器
linux中在二進制可執行安裝程序包安裝上會涉及多個文件的操作, 操作過程就會比較復雜, 為簡化該過程就使用程序安裝包管理器來管理程序包的安裝過程, 大大簡化了程序包安裝過程. Linux根據發行版本不同, 使用不同的程序包管理器實現對程序包的管理, 以下是一些發行版本的包管理器的前端工具
yum:rpm包管理器的前端工具; apt-get:deb包管理器前端工具; zypper: suse上的rpm前端管理工具; dnf: Fedora 22+ rpm包管理器前端管理工具;
RPM
RPM是Red Hat Package Manager的縮寫,原意是Red Hat軟件包管理: 這一文件格式名稱雖然打上了RedHat的標志,但是其原始設計理念是開放式的,現在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分發版本都有采用,可以算是公認的行業標準了。
RPM軟件包
RPM軟件包分為二進制包(Binary)、源代碼包(Source)和Delta包三種。二進制包可以直接安裝在計算機中,而源代碼包將會由RPM自動編譯、安裝。源代碼包經常以src.rpm作為后綴名。 rpm 包種類、格式
rpm格式二進制可執行安裝包
gd-2.0.35-11.el6.x86_64.rpm
src.rpm格式 源碼包格式
gd-2.0.35-11.el6.src.rpm
rpm命名方式:name-version-release.arch.rpm
name:表示包的名稱,包括主包名和分包名 version:表示包的版本信息 release“用于標識rmp包本身的發型號,可還包含適應的操作系統 arch:表示主機平臺
gd-devel-2.0.35-11.el6.x8664.rpm源碼包 gd是這個主包名,devel是這個包的分包名 2.0.35是表示版本信息,2為主版本,0為次版本,35為修訂號, 11.el6中的11是表示發行號,el6表示是RHEL6 x8664是表示包適合的平臺,如果是noarch這表示與平臺無關
rpm工具命令的使用
rpm {-i|–install} [install-options] PACKAGE_FILE … -i:install安裝 -v|vv|vvv: verbose顯示詳細信 -h: 以#顯示程序包管理執行進度;每個#表示2%的進度
rpm -ivh PACKAGE_FILE ... [install-options] --test: 測試安裝,但不真正執行安裝過程;dry run模式; --nodeps:忽略依賴關系; --replacepkgs: 重新安裝; --nosignature: 不檢查來源合法性; --nodigest:不檢查包完整性; --noscipts:不執行程序包腳本片斷; %pre: 安裝前腳本; --nopre %post: 安裝后腳本; --nopost %preun: 卸載前腳本; --nopreun %postun: 卸載后腳本; --nopostun 1. 碰到多個依賴關系可以多個安裝 2. 重新安裝時,如果重新安裝有可能導致之前的配置文件失效
升級: rpm {-U|–upgrade} [install-options] PACKAGEFILE … rpm {-F|–freshen} [install-options] PACKAGEFILE …
upgrage:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則“安裝”; freeshen:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則不執行升級操作; rpm -Uvh PACKAGE_FILE ... rpm -Fvh PACKAGE_FILE ... --oldpackage:降級; --force: 強行升級; 注意:(1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,對直接安裝新版本內核; (2) 如果原程序包的配置文件安裝后曾被修改,長級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;
查詢: rpm {-q|–query} [select-options] [query-options]
[select-options]挑選選項 -a: 所有包 -f: 查看指定的文件由哪個程序包安裝生成 -p /PATH/TO/PACKAGE_FILE:針對尚未安裝的程序包文件做查詢操作; --whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供; --whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴; CAPABILITY:可以查詢路徑,文件 [query-options]查詢選項 --changelog:查詢rpm包的changlog修改日志 -c: 查詢程序的配置文件 -d: 查詢程序的文檔 -i: information 相關信息 Name:姓名 Version:版本 Release:發行號 Architecture:支持的平臺 Install Date:安裝日期 Group:支持的包組 Size:大小 License:許可證 Signature:簽名日期 source RPM:額外提供了源碼包 Build Date:制造日期 Build Host:在那個服務器上安裝 Relovations:有沒有重新公共 Packager:作者 vendor:提供組織 URL:官方站點 Summary:簡要功能描述 Description:描述信息 -l: 查看指定的程序包安裝后生成的所有文件; --scripts:程序包自帶的腳本片斷 -R: 查詢指定的程序包所依賴的CAPABILITY; --provides: 列出指定程序包所提供的CAPABILITY; -qa 查看所有已經安裝的包 rpm -qa 查看所有包名 rpm -qa | grep 包名查看某個包名 -qi 查看包的摘要信息 -qf 查看文件是有那個包安裝的 rpm -qf /path/to/file -ql 查看包安裝生成的文件清單 -qc 查看包安裝生成的配置文件 -qd 查看包安裝生成的幫助文檔 -q --scripts 查看相關的腳本 rpm -q --scripts 包名 -qp[i|l|d|c] 查看尚未安裝包的詳細信息 rpm -qpi /path/to/rpm_file
卸載: rpm {-e|–erase} [–allmatches] [–nodeps]忽略依賴關系 [–noscripts] [–notriggers] [–test] PACKAGE_NAME …
校驗: 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 mTime differs修改時間不匹配 P caPabilities differ 包來源合法性驗正及完整性驗正: 完整性驗正:SHA256 來源合法性驗正:RSA 公鑰加密: 對稱加密:加密、解密使用同一密鑰; 非對稱加密:密鑰是成對兒的, public key: 公鑰,公開所有人 secret key: 私鑰, 不能公開 導入所需要公鑰: rpm --import /PATH/FROM/GPG-PUBKEY-FILE CentOS 7發行版光盤提供的密鑰文件:RPM-GPG-KEY-CentOS-7
數據庫重建: 數據庫 var/lib/rpm rpm {–initdb|–rebuilddb} initdb: 初始化 如果事先不存在數據庫,則新建之;否則,不執行任何操作;
rebuilddb:重建 無論當前存在與否,直接重新創建數據庫;
RPM示例
實驗環境:centos7 1.初始化數據庫 通過rpm命令查詢一個rpm包是否安裝了,也要通過rpm命令來安裝;不是所有的軟件包都能通過rpm命令來安裝的,文件已.rpm后綴結尾的才行; 數據庫重建: rpm 數據庫 var/lib/rpm rpm {–initdb|–rebuilddb} initdb: 初始化 如果事先不存在數據庫,則新建之;否則,不執行任何操作;
rebuilddb:重建 #會花很長時間 無論當前存在與否,直接重新創建數據庫;
2.軟件包的安裝 rpm {-i|–install} [install-options] PACKAGE_FILE … -v: verbose -vv: 顯示更多的verbose -h: 以#顯示程序包管理執行進度;每個#表示2%的進度
rpm -ivh PACKAGE_FILE ... [install-options] --test: 測試安裝,但不真正執行安裝過程;dry run模式; --nodeps:忽略依賴關系; --replacepkgs: 重新安裝; --nosignature: 不檢查來源合法性; --nodigest:不檢查包完整性; --noscipts:不執行程序包腳本片斷; %pre: 安裝前腳本; --nopre %post: 安裝后腳本; --nopost %preun: 卸載前腳本; --nopreun %postun: 卸載后腳本; --nopostun 1. 碰到多個依賴關系可以多個安裝 2. 重新安裝時,如果重新安裝有可能導致之前的配置文件失效 [root@localhost Packages]# rpm -ivh --test zziplib-0.13.62-5.el7.x86_64.rpm 準備中... ################################# [100%] #只用來檢查依賴關系可以用--test,如果要重新安裝可以用--replacepkgs。 [root@localhost Packages]# rpm -ivh zziplib-0.13.62-5.el7.x86_64.rpm 準備中... ################################# [100%] 正在升級/安裝... 1:zziplib-0.13.62-5.el7 ################################# [100%]
3.軟件包的升級: rpm {-U|–upgrade} [install-options] PACKAGEFILE … rpm {-F|–freshen} [install-options] PACKAGEFILE …
upgrage:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則“安裝”; freeshen:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則不執行升級操作; rpm -Uvh PACKAGE_FILE ... rpm -Fvh PACKAGE_FILE ... --oldpackage:降級; --force: 強行升級; 注意:(1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,對直接安裝新版本內核; (2) 如果原程序包的配置文件安裝后曾被修改,長級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留; [root@localhost Packages]# rpm -Uvh zziplib-0.13.62-5.el7.x86_64.rpm 準備中... ################################# [100%] 軟件包 zziplib-0.13.62-5.el7.x86_64 已經安裝 #如果想對程序包進行降級可以使用--oldpackage進行降級;
4.軟件包的查詢
rpm {-q|–query} [select-options] [query-options]
[select-options]挑選選項 -a: 所有包 -f: 查看指定的文件由哪個程序包安裝生成 -p /PATH/TO/PACKAGE_FILE:針對尚未安裝的程序包文件做查詢操作; --whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供; --whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴; CAPABILITY:可以查詢路徑,文件 [query-options]查詢選項 --changelog:查詢rpm包的changlog修改日志 -c: 查詢程序的配置文件 -d: 查詢程序的文檔 -i: information 相關信息 Name:姓名 Version:版本 Release:發行號 Architecture:支持的平臺 Install Date:安裝日期 Group:支持的包組 Size:大小 License:許可證 Signature:簽名日期 source RPM:額外提供了源碼包 Build Date:制造日期 Build Host:在那個服務器上安裝 Relovations:有沒有重新公共 Packager:作者 vendor:提供組織 URL:官方站點 Summary:簡要功能描述 Description:描述信息 -l: 查看指定的程序包安裝后生成的所有文件; --scripts:程序包自帶的腳本片斷 -R: 查詢指定的程序包所依賴的CAPABILITY; --provides: 列出指定程序包所提供的CAPABILITY; 用法: -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ... -qa
yum
Yum(全稱為 Yellow dog Updater, Modified)是一個在Fedora和RedHat以及CentOS中的Shell前端軟件包管理器?;赗PM包管理,能夠從指定的服務器自動下載RPM包并且安裝,可以自動處理依賴性關系,并且一次安裝所有依賴的軟件包,無須繁瑣地一次次下載、安裝
YUM的特點: 可以同時配置多個資源庫(Repository) 簡潔的配置文件(/etc/yum.conf) 自動解決增加或刪除rpm包時遇到的依賴性問題 使用方便 保持與RPM數據庫的一致性
yum源
yum源安裝: yum源大致上分為兩類: 本地 網絡 本地光盤yum源的搭建:
通過ISO鏡像掛載或者復制文件 mount /dev/cdrom /media/cdrom 編輯本地YUM源文件 cd /etc/yum.repos.d/ 清除老配置,rm -rf * vim localcdrom.repo 配置文件: [c7-media] name=CentOS-$releasever - Media baseurl=file:///media/CentOS/ file:///media/cdrom/ file:///media/cdrecorder/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 清除yum緩存并更新 yum clean all yum makecache 已加載插件:fastestmirror c7-media | 3.6 kB 00:00:00 (1/4): c7-media/group_gz | 155 kB 00:00:00 (2/4): c7-media/filelists_db | 6.2 MB 00:00:00 (3/4): c7-media/primary_db | 5.3 MB 00:00:00 (4/4): c7-media/other_db | 2.3 MB 00:00:00 Determining fastest mirrors 元數據緩存已建立
網絡源安裝 編輯網絡YUM源文件
cd /etc/yum.repos.d/ 清除老配置,rm -rf * vim networkcdrom.repo 配置文件: [c7-network] name=network baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64 gpgcheck=0 enabled=1 清除yum緩存并更新 yum clean all yum makecache
注:以上配置是很簡單的配置
yum客戶端: 配置文件: /etc/yum.conf:為所有倉庫提供公共配置或者不屬于倉庫的配置 /etc/yum.repos.d/*.repo:為倉庫的指向提供配置 倉庫指向的定義: [repositoryID] name=Some name for this repository 倉庫名字 baseurl=url://path/to/repository/ 指向倉庫的路徑 enabled={1|0} 是否啟用此倉庫 gpgcheck={1|0} 校驗其完整性及其來源 gpgkey=URL指向密鑰文件 enablegroups={1|0}是否允許在此倉庫中使用組,來管理此倉庫 failovermethod={roundrobin|priority} 默認為:roundrobin,意為隨機挑選; priority:表示優先級 cost= 默認為1000 注:=左右不可出現空格 教室里的yum源:http://172.16.0.1/cobbler/ks_mirror/CentOS-6.6-x86_64/ CentOS 6.6 X84_64 epel: http://172.16.0.1/fedora-epel/6/x86_64/ yum repolist :顯示可以使用的yum的倉庫 yum命令的用法: yum [options] [command] [package ...] command is one of: * install package1 [package2] [...] 安裝 * update [package1] [package2] [...] * update-to [package1] [package2] [...] * check-update * upgrade [package1] [package2] [...] * upgrade-to [package1] [package2] [...] * distribution-synchronization [package1] [package2] [...] * remove | erase package1 [package2] [...] * list [...] * info [...] * provides | whatprovides feature1 [feature2] [...] * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] * makecache * groupinstall group1 [group2] [...] * groupupdate group1 [group2] [...] * grouplist [hidden] [groupwildcard] [...] * groupremove group1 [group2] [...] * groupinfo group1 [...] * search string1 [string2] [...] * shell [filename] * resolvedep dep1 [dep2] [...] * localinstall rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use install) * localupdate rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use update) * reinstall package1 [package2] [...] * downgrade package1 [package2] [...] * deplist package1 [package2] [...] * repolist [all|enabled|disabled] * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ] * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats] * check * help [command] 幫助 顯示倉庫列表: repolist [all|enabled|disabled] all:所有 enabled:啟用的 disabled:禁用的 顯示程序包: list 顯示anaconda的是操作系統安裝的 # yum list [all | glob_exp1] [glob_exp2] [...] glob_exp1:使用glob的通配符 # yum list {available|installed|updates} [glob_exp1] [...] available:可用的 installed:所有安裝的 updates:所有可升級 安裝程序包: install package1 [package2] [...] 可以一次安裝多個包 默認是安裝最新的 reinstall package1 [package2] [...] (重新安裝) 升級程序包: update [package1] [package2] [...] downgrade package1 [package2] [...] (降級) 檢查可用升級包: check-update 卸載程序包: remove | erase package1 [package2] [...] 卸載時會把依賴的包也會卸載的, 查看程序包information: info [...] 查看指定的特性(可以是某文件)是由哪個程序包所提供: provides | whatprovides feature1 [feature2] [...] 清理本地緩存: clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] packages metadata expire-cache rpmdb plugins all 構建緩存: makecache 搜索: search string1 [string2] [...] 以指定的關鍵字搜索程序包名及summary信息; rpm -k 查看指定包所依賴的capabilities: deplist package1 [package2] [...] 查看yum事務歷史: history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats] 安裝及升級本地程序包: * localinstall rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use install) * localupdate rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use update) 包組管理的相關命令: * groupinstall group1 [group2] [...] * groupupdate group1 [group2] [...] * grouplist [hidden] [groupwildcard] [...] * groupremove group1 [group2] [...] * groupinfo group1 [...] 如何使用光盤當作本地yum倉庫: (1) 掛載光盤至某目錄,例如/media/cdrom # mount -r -t iso9660 /dev/cdrom /media/cdrom (2) 創建配置文件 [CentOS7] name= baseurl= gpgcheck= enabled= yum的命令行選項: --nogpgcheck:禁止進行gpg check; -y: 自動回答為“yes”; -q:靜默模式; --disablerepo=repoidglob:臨時禁用此處指定的repo; --enablerepo=repoidglob:臨時啟用此處指定的repo; --noplugins:禁用所有插件; yum的repo配置文件中可用的變量: $releasever: 當前OS的發行版的主版本號; $arch: 平臺; $basearch:基礎平臺; $YUM0-$YUM9 http://mirrors.magedu.com/centos/$releasever/$basearch/os
列表
yum list <package_name> 列出指定安裝軟件的清單 yum list installed 列出所有已安裝的軟件包 yum list extras 列出所有已安裝但不在 yum 倉庫內的軟件包 yum grouplist 列出所有的組 yum grouplist "Group1" 列出指定組的軟件包列表
安裝
yum -y install <package_name> 安裝指定的軟件 yum -y groupinstall "Group1" "Group2" 安裝指定的組 yum -y localinstall <package_name> 安裝下載到本地的rpm包 yum reinstall <package_name> 重新安裝一遍
更新
yum check-update 列出所有可更新的軟件清單 yum update 更新所有安裝的軟件 yum update <package_name> 更新指定的軟件
信息
yum info 安裝指定的軟件 yum info <package_name> 顯示指定包的信息 yum groupinfo "Group1" "Group2" 顯示指定組的信息 yum repolist [all|enable|disable] 查看yum倉庫的個數,默認顯示啟用的 yum makecache 手動生成緩存 yum search <package_name> yum list | grep “*package*” 查找rpm yum reinstall <package_name> 重新安裝一遍 yum whatprovides “*/COMMAND” 查看命令是用那個軟件包提供的
原創文章,作者:N19_king,如若轉載,請注明出處:http://www.www58058.com/16981