query n. 疑问,质问;疑问号 ;[计] 查询 vi. 询问;表示怀疑 vt. 询问;对……表示疑问

软件包管理 预知识 静态和动态连接 连接主要作用是各个模块之间相互引用的部分处理好,使得各个模块之间能够正确衔接,分为静态和动态 静态: 把程序对应的依赖库复制到一份包里 libXXX.a 嵌入式程序包 升级难,需要重新编译 占用较多空间,迁移容易 动态: 只要把依赖加做一个动态连接 libxxx.so 连接指向 占用较小空间,升级方便

包管理器 二进制应用程序的组成部分 二进制文件 库文件 配置文件 帮助文件 程序包管理器 debian deb文件 dpkg包管理器 redhat rpm文件 rpm包管理器 rpm ====Redhat Package Manager ====RPM Package Manager

包命名和工具
包命名:
	源代码包:
			name-	VERSION.tar.gz|bz2|xz
	rpm包命名方式
		name-VERSION-releas.arch.rpm 
	    其中: VERSION:major minor release
				release:release.OS
		常见的arch
				x86:i386   i486 i586 i686
				x86_64:x86 x86_64 amd64
				powerpc:ppc
			   跟平台无关:noarch
包:分类和拆包
	Application-VERSION-ARCH.rpm 主包
	Application-devel-VERSION-ARCH.rpm 开发子包
	Application-utils-VERSION-ARCH.rpm 其他子包
	Application-libs-VERSION-ARCH.rpm 其他子包
	
包之间:可能存在依赖关系
解决依赖包的管理工具:
	yum  
	apt-get
	zypper
	dnf

库文件
	查看二进制程序所依赖的库文件
		ldd /path/to/binary_file  单个程序需要的库
		eg: ldd /usr/bin/ls
	管理及查看本机装载的库文件
		ldconfig 加载库文件
		/sbin/ldconfig  -p  显示本机已经缓存的所有可用库文件名及文件路径映射关系
	配置文件: /etc/ld.so.conf     /etc/ld.so.conf.d/*.conf
	缓存文件: /etc/ld.so.cacha

包管理器 :
	程序包管理器:
		功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便实现
				安装 卸载 查询 升级 校验
	包文件组成(每个包独有)
		RPM 包内的文件
		RPM 的元数据,名称版本依赖性描述
		安装或卸载时运行的脚本
	数据库(公用)、/var/lib/rpm  系统统计的软件安装版本号什么的便于跟新和卸载
		程序包名称及版本
		依赖关系
		功能说明
		包安装后生成的各文件路径及校验信息
程序包的来源
	管理程序包的方式:
		使用包管理器RPM
		使用前端工具 yum dnf 
	获取程序包的途径:
		系统发版的光盘或官方服务器:
			CentOS镜像
		项目官方站点
		第三方组织:
			EPEL   Extra Packages  for ENterprise Linux 
			搜索引擎:
				http://pkgs.org
				http://rpmfind.net
				http://rpm.pbone.net 
				http://sourceforge.net 
		自己制作
			rpmbuild

rpm CentOS 系统使用rpm命令管理程序包 安装 卸载 升级 查询 校验 数据库维护 安装: rpm {-i|--install} [install-option] package_file -v:verbose -h 显示安装进度条 -p 查询安装包 -l, --list list files in package rpm -ivh package_file rpm -ql package_file 查询软件的所有文件 [install-option] --test 测试安装,不真实安装,测试是否兼容 --nodeps 忽略依赖 关系 --replacepkgs|-replacefiles 安装时替换包或者文件 --nosignature不检测来源合法性 --import 公钥的路径,一般在光盘的根目录 用于检测有无合法的工具

		升级:
			rpm {-U|--upgrade}[install-option] Pack_file
			rpm {-F|-freshen} [install-option] pack _file 
				upgrade :安装有旧版程序包 则升级
								没有则安装
				freshen 安装如果有就版程序,则升级
								没有则不执行
				rpm -Uvh package-file  全名
				rpm -Fvh package-file 
				--oldpackage 降级
				--force  强制安装
				注意:安装内核的时候最好使用安装的方法rpm -ivh 避免直接覆盖,安装两个内核版本
					  linux支持多内核版本并存
					  
					  如果源程序包的配置恩建安装后曾被修改,升级时,新版本的提供同一个配置文
					  文件不会直接覆盖老版本的配置文件,而是把新版本的文件重命名后保留 filename.rpmnew
		包查询	
		     常用的查询方法:
				--changelog 查询rpm包的changelog
				-c 查询程序的配置文件
				-d 查询程序的文档
				-i information
				-l 查看指定的程序包安装后生成的所有文件
				--scripts 程序包自带的脚本
				--provides	列出指定程序包所提供的capability
				-R 查询指定程序包所依赖的capability
				-qi package 
				-qf file    file 来自哪个包安装的
				-qc package 
				-ql package 		rpm -ql tree
				-qd package 
				-qpi package_file 
				-qpl package_file 
				-qa 
			rpm -qa |grep vs
		rpm -qf  /etc/passwd 查询文件由那个包生成,即是删了也可以查询的到
	rpm2cpio /misc/cd/Packages/tree.rpm| cpio -idv ./user/bin/tree 有可能解出来的权限不一致
rpm -qi bash  查询安装包信息,官网什么的
		包卸载:
			rpm -e [--allmatches][--nodeps][--noscripts][--notriggers][--test] package_name
					

		包检验
			rpm -V [select-options][verify-options]  rpm -V tree
			S file Size differs 
			M Mode differs 
			D Device major/minor number mismatch 
			L reaslink path mismatch
			U User ownership differs 
			G Group ownership differs
			T mTime differes
			P capbilities differ
			
			导入所需要公钥
			rpm -K rpmfile 检查包的完整性和签名
			rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
			rpm -qa "gpg-pubkey*"
安装前检查一下是否是原版,前提是导入公钥rpm -qa "gpg-publickey


修复重要包,可以在重启中进入救援模式,系统会进行新的系统挂载,不过根目录是在指定的文件夹下


yum 
	CentOS :yum dnf yum是rpm的二次封装,不能删除rpm
	YUM  Yellowdog Update Modifier ,rpm的前端程序,可以解决软件包相关依赖性,可定位多个库
原理:进行yum install 后 向yum服务器提出请求要安装什么,服务器寻找到包的元数据meta data返回给yumclient
		进行缓存以后也不删除,yum在吧新的需求发给yum服务器,服务器在吧所有需要的东西给client
		进行安装之后,删除包,但是元数据不删
		
		文件服务器:
					http://
					httpd://
					ftp://
					file:// 本地路径
	yum客户端配置文件
	/etc/yum.conf 为所有仓库提供公共配置
	   文件底部# PUT YOUR REPOS HERE OR IN separate files named file.repo
			     # in /etc/yum.repos.d
	/etc/yum.repo.d/*.repo 为仓库的指向提供配置
			其中指向的定义
				[repositoryID]
				name=Some name for this repository  
				baseurl=url://path   	baseurl=file:///misc/cd
				enable=1/0			默认为1 为零为失效
				gpgcheck=1/0		是否检测公钥,完成性,生产时要为1,可以
				gpgkey=url			可以不用gpgcheck 将路径加到gpgkey
				enablegroups=1/0
				failovemethod=roundrobin/priority/roundrobin(随机挑选,默认)
				cost = 默认为1000
				对于公钥的检测,可以用gpgkey=一个公钥的文件路径
					gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-CentOS-7
				中的keepcache改为1可以保留软件包,在装多台机器时建议
		
			在此目录创建yum源,名字一定为*.repo 有格式要求,可以自己查看一下,多个源可以放在
			同一个文件 但格式要复制一次
	
		yum出故障:配置文件格式错误
					缓存问题,可删除缓存在重新装
					yum clean all 
					
	yum 源 
		阿里云repo文件:
			http://mirrors.aliyun.com/repo/ 可以直接下载
		CentOS系统yum源
			阿里云:http://mirrors.aliyun.com/centos/$releasever/os/x86_64/
		EPELyum源
			阿里云:http://mirrors.aliyun.com/epel/$releasever/x86_64 
	
     yum 命令
		yum [option] [command] [package]
		显示仓库列表:
			yum repolist all/enable/disabled
		显示程序包
			yum list 
			yum list [all |glob_exp1]
			yum list installed/updates/available   [glob_exp1]  installed时,安装过的都是有@标记
		安装程序包
			yum install package1 package2...
			yum reinstall package package2...重新安装
	升级程序包:
			yum update package1 package2
			yum downgrade package1  降级
	检查可用升级:
			yum check-update 
	卸载程序包
			yum  remove package1 ..
	查看程序包:
			yum info package  yum info bash 
	查看指定的特性(有谁得来)
			yum provides  feature1 (部分)...  yum provides /usr/bin/ls
	清除本地缓存
		清除/var/cache/yum/$basearch/$releasever缓存路径
		缓存的数据是元数据
		yum clean [package  metadata  expire-cache  rpmdb plugins all ]
	构建缓存
		yum makecache一般不需要手动
	搜索:
		yum search string1....如果包的名字记得不是很清楚可以使用查询
	//查看指定包所依赖的capability
		yum deplist package 
	查看yum事务历史
		yum history   list/ info num  列出yum的使用信息,列出单条具体信息yum history info 8
					  redo num  重做    yum history redo 6
					  undo  num 撤销

	日志:、var/log/yum.log 

	注意 yum install 也可以直接加rpm包
			
	
	包租管理相关命令,功能相似的rpm包归到统一个组(套件)
		yum groupinstall group 
		yum grouplist 查看包租列表
		yum groupremove group
		yum groupinfo group
		
 yum命令行选项
	-nogpgcheck 禁止进行gpg check 
	-y 不会询问y/n 
	-q 静默 但是与-y 是不难合并
	--disablerepo=repoidglob 临时禁用此处指定的repo
	--enablerepo=repoidglob 临时启用此处指定的repo
	--noplugins 禁用所有插件
	
	
 系统光盘yum仓库
	系统安装光盘作为本地yum仓库:
		挂载光盘至某目录 eg /mnt/cdrom 
		创建配置文件/etc/yum.repo/ 下
		创建yum仓库repodata   createrepo directory  可以将单个安装包创建yum源数据repodata
		




echo '- - -'  > /sys/class/scsi_host//host2/scan 加载硬件设备后在线重新加载
CentOS7上添加便捷目录 systemctl start autofs
						systemctl enable autofs