Linux程序包管理

Linux程序包管理:

API: Application Programming Interface
	应用程序接口
	POSIX:Protable OS
	程序在不同操作系统中,可能会不兼容,所以API就是每个系统必须遵循的接口,
	使程序可以在不同操作系统上执行

ABI:Application Binary Interface 
	应用程序二进制接口
	只能在固定操作系统上执行
	
	Linux与Windows不兼容
	Linux:用WINE
	Windows:cywin


程序源代码   ——> 预处理 ——> 编译   ——>汇编  ——> 链接
	静态编译:
	共享编译:调用lib或lib64下的.os模块

系统级开发
	C
	C++
应用及开发
	java
	Python
	php
	per1
	ruby
二进制应用程序组成部分: 
	二进制文件、库文件、配置文件、帮助文件
	
	程序包管理器:
		debian:deb,dpt
		redhat:rpm,rpm
			rpm:Redhat Pacage Manager
		
		Getoo:
		Archlinux:
rpm包命名方式:
	name-VERSION-re.rpm
		VERSION:major.minor.release
		release.arch
			release:release.OS
		
		常见的arch:
		x86:i386,i486,i586,i686
		x86_64:x64,x86_64,amd64
		powerpc:ppc硬件平台
		跟平台无关:noarch :没平台
			
			
			
			
	testapp:拆包
		testapp-VERSION-ARCH.rpm:主包
		testapp-devel-VERSION-ARCH.rpm:支包
		testapp-testing-VERSION-ARCH.rpm
		
包之间:存在依赖关系
	yum:RPM包管理的前端工具
	apt-get:deb包管理器前端工具;
	zypper:

ldd命令:查看二进制程序所依赖的库文件:
	ldd 文件name
	
管理及查看本机装载的库文件:
	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)自己制作
		
	建议:检查其合法性
	来源合法性
	程序包的完整性;
		


centos系统上rpm命令管理程序包:
	安装、卸载、升级、查询、校验、数据库维护
	
	安装:
		rpm {-i | --install} [install-options] PACKAGE_FILE ...
			-v:verbose
			-vv:
			-h:以#显示程序包管理执行进度:每个#代表百分之2
			
		rpm -ivh Pacage_FILE ...
			[install-options]
				--test:测试安装,但不真正执行安装过程:dry run模式;
				--nodeps:忽略依赖关系:
				--replacepackages
				
				--nodigest:不检查包完整性
				--nosignature:不检查来源合法性
				
				--noscripts:安装但不执行脚本片段
				 %pre:安装前脚本;   --nopre
				 %post:安装后脚本;  --nopost
				 %preun:卸载前脚本   --nopreun
				 %postun:卸载后脚本  --nopostun
				 

	升级:
		rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
			
		rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

			upgrade:安装有旧版程序包,则  "升级";如果不存在旧版程序包则 "安装"
			freshen:安装有旧版程序包则"升级",如果不存在旧版程序包,则不执行升级操作;
			
			rpm -Uvh 	PACKAGE_FILE ...
			rpm -Fvh 	PACKAGE_FILE ...
		
			--oldpackage:降级;
			--force:强制升级;
		
		注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此对直接安装新版本内核;
					(如果能启动则用,不能启动则用旧版)
			  (2) 如果源程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖
				  老版本的配置文件,而把新版本的文件重命名(finename.rpmnew)后保留
	
	查询:
		rpm {-q|--query} [select-options] [query-options]

			[select-options]
				-a:所有包
			    -f fileName:查询指定的文件由那个程序包安装生成
			  
			    --whatprovides CAPABILITY:查询指定的CAPBILITY由那个包所提供
			    --whatrequires CAPABILITY:查询指定的CAPBILITY被哪个包所依赖;
			
			[query-options]
				--changelog:查询rpm包的changelog
				-c :查询程序包的配置文件
				-d:查询程序的文档
				-i:information  信息
				-l:查看指定的程序包安装后生成的所有文件
				--scripts:程序包自带的脚本片段
				-R:查询指定的程序包所依赖的CAPABILITY;
				--provide:列出指定程序包所提供的CAPABILITY
				
			用法:
				-qi 包名,-qf 文件名,-qc 包名,-ql 包名,-qd包名
				-qpi 包名,-qpl 包名,。。。
				-qa
	卸载:
		rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
			[--notriggers] [--test] PACKAGE_FILE
			
	校验: 
		 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 dirffer
	
	包来源合法性验证及完整性验证:
		完整性验证:
		公钥加密:
			对称加密:加密、解密使用同一秘钥;
			非对称加密:秘钥是成对的,
				public key:公钥
				secret key:私钥
				

		导入所需要公钥:
			rpm --import /PATH/FROM/GPG-PUBKEY-FILE
			
			Centos7 发行版光盘提供的秘钥文件:RPM-GPG-KEY-Centos-7
	
	数据库重建:
		rpm {--initdb|--rebuilddb}
			--initdb : 初始化
				如果事先不存在数据库,则新建之,否则,不执行任何操作;
				
			rebuilddb 重建
				无论当前存在与否,直接重新创建数据库

你可能感兴趣的:(Linux——程序包管理)