软件包的分类:
程序包:二进制文件等文件组成的包
源码包:压缩包
程序包内的组成文件:
二进制文件、库文件、配置文件、帮助文件
二进制文件(必需):
库文件(必需):二进制程序在执行的时候需要调用一些库文件,如果库文件丢失,程序无法运行
有些库文件只是被单独一个程序或局部几个程序拥有,而有些库文件则是被大多数程序拥有,一旦丢失,会造成很大的影响
库文件一般是以软链接的方式存在,链接到库文件的原始文件(?)
查看一个二进制程序需要调用的所有库文件:lddPATH
PATH:是一个二进制文件的绝对路径
加载库文件:ldconfig
查看本机已经缓存的所有可用库文件名及文件路径映射关系:/sbin/ldconfig -p
/etc/ld.so.conf和/etc/ld.so.conf.d/*.conf:加载库文件的配置文件,记录着要加载的库文件存放在哪个目录下
缓存文件:/etc/ld.so.cache
配置文件:决定一个程序的运行方式,程序在功能上如何运行
例:建立一个网站时,网站的域名是什么,监听的端口是多少,网站的主目录在什么位置,网站是静态的还是动态的等
帮助文件:
分类和拆包
主包、开发子包、工具包、库文件包、其它子包1、其它子包2。。。
程序包管理器
功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作
debian的程序包:deb文件,dpkg包管理器(ubantu也使用这个包)
Redhat的程序包:RPM文件,RPM包管理器
程序包的来源:
系统发版的光盘或官方的服务器;
CentOS镜像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
项目官方站点:
第三方组织:
Fedora-EPEL:
ExtraPackagesforEnterpriseLinux
Rpmforge:RHEL推荐,包很全
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
自己制作
注意:第三方包建议要检查其合法性,来源合法性,程序包的完整性
rpm包的命名
软件名称-软件的版本信息-发布的次数-适合的硬件平台.rpm
常见的硬件平台:
x86:1386,i486,i586,i686
x86_64:x64x86_64amd64
powerpc:ppc
与平台无关(即适合用于任何平台):noarch
可以选择性地只安装主包或者主包和其中的其他某些包
rpm包之间的关系
不同的rpm包之间可能存在某些依懒性关系,甚至是循环依赖,可能造成rpm包的安装失败
例:依赖性关系,要安装A包,则必须安装B包
循环依赖关系,要安装A包,则首先必须安装B包,要想安装B包,则首先必须安装C包,要想安装C包,则必须安装A包
qlp:显示未安装的包中提供了哪些文件
解决依赖包管理工具:
yum:rpm包管理器的前端工具(pyhton脚本)
自动查找出所需要的文件是属于哪个包,解决依赖性关系,并自动安装
底层也是调用rpm安装
dnf:Fedora18+rpm包管理器前端管理工具
apt-get:deb包管理器前端工具
zypper:suse上的rpm前端管理工具
rpm包的信息
包内文件
元数据:如名称,版本,依赖性,描述等
安装或卸载时运行的脚本(?)
数据库(/var/lib/rpm);记录着安装rpm包的时候生成的一些与rpm包相关的数据文件,为了卸载时候使用,包括:
程序包名称及版本
依赖关系
功能说明
包安装后生成的各文件路径
校验码信息
rpm包的管理:
安装
语法:rpm -i| --install [install-options] PACKAGE1 PACKAGE2…
install-options
-v:显示安装的过程,要安装rpm包必须与i共同使用
-vv:显示安装的详细过程,必须与i共同使用
-h:以多个"#"显示程序包安装的执行进度,要安装rpm包必须与i共同使用
通常的用法为:rpm -ivh PACKAGE1 PACKAGE2...
--test:测试安装,但不真正执行安装,即dryrun模式
-vv也可以达到这个效果
--nodeps:忽略依赖性关系检测强制安装
--replacepkgs重复安装已安装过的包,包名必须相同,覆盖原rpm包中的所有文件
--replacefiles:即将安装的rpm包中的部分文件与其他已经安装的rpm包中的文件冲突,可以继续安装,不覆盖原有的文件内容
一般同一个软件不同的版本会出现这种情况
安装之后新旧版本会同时存在
--nosignature:不检查来源合法性(公钥和私钥)
--nodigest:不检查包完整性
--noscripts:不执行程序包脚本
--nopre:%pre:安装前脚本
--nopost:%post:安装后脚本
--nopreun:%preun:卸载前脚本
--nopostun:%postun:卸载后脚本
升级
语法:rpm {-U|--upgrade} [install-options]PACKAGE_FILE1 PACKAGE_FILE12...
upgrade:如果已经安装有旧版的rpm包,则安装更新的rpm包,如果不存在旧版rpm包,则安装该rpm包
要安装的rpm包一定要比原有的rpm包的版本要新,如果比原有的rpm包的版本旧或者相同,则不会执行任何操作
会覆盖旧的版本,但是不会覆盖原有的配置文件
通常用法:rpm-Uvh PACKAGE_FILE1 PACKAGE_FILE2 ...
语法:rpm {-F|--freshen} [install-options]PACKAGE1 PACKAGE2...
freshen:如果已经安装有旧版的rpm包,则安装更新的rpm包,如果不存在旧版rpm包,则不执行任何操作
要安装的rpm包一定要比原有的rpm包的版本要新,如果比原有的rpm包的版本旧或者相同,则不会执行任何操作
会覆盖旧的版本,但是不会覆盖原有的配置文件
通常用法:rpm-Fvh PACKAGE1PACKAGE2...
--oldpackage:降级(不常用)
语法:rpm {-i | --install} [install-options]PACKAGE1 PACKAGE2... --force
--force:强制安装,无论任何情况均可以安装
不会覆盖原有的版本,不覆盖原有的配置文件
注意:
不要对内核做升级操作;Linux支持多内核版本并存,因此对直接安装新版本内核
如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留
包查询
语法:rpm {-q|--query} [select-options][query-options] PACKAGE_NAME1 PACKAGE_NAME2...
(查询某个包是否安装的时候,查询时要只指定包的名称,而不能加上版本号后面等其他内容(-p除外),因为查询是根据/var/lib/rpm数据文件进行查询)
[select-options](查询命令中只能有一个该选项的参数)
-a:查看所有安装过的rpm包,支持模糊查找(通配符或者管道加grep)
-f:查看指定的文件由哪个已安装的rpm包安装生成
如果文件丢失,也会查询得到,因为并没有将整个包删除,在数据文件中仍然有记录
-p RPMPACKAGE: 针对尚未安装的rpm包文件做查询操作
是对所有的rpm包进行询问,而不是对数据文件进行询问,所以要加上rpm包的全名
数据文件中存放的都是已经安装rpm包的信息
--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供
--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖
rpm2cpio包文件 | cpio–itv:当使用-f查询到一个文件来自于哪个rpm包之后,将rpm包转换成cpio归档包,并预览归档包内的文件
rpm2cpio包文件 | cpio–id:当使用-f查询到一个文件来自于哪个rpm包之后,将rpm包转换成cpio归档包,释放包内文件
[query-options]
-l:查看指定的程序包安装后生成的所有文件
--changelog:查询rpm包的更新日志
-c:查询rpm包的配置文件
-d:查询rpm包的文档文件
-i:查看已经安装的rpm包的信息
--scripts:程序包自带的脚本
--provides:列出指定rpm包所提供的CAPABILITY
-R:查询指定的rpm包所依赖的CAPABILITY查看指定的程序包安装后生成的所有文件
--whatrequires
常用的查询用法:
常用查询用法:
ql,qi,-qf,qc,-qd,-qpi,-qpl,-qa
包卸载
语法:rpm {-e|--erase}[--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME...
卸载某个包是否安装查询时要只指定包的名称,而不能加上版本号后面等其他内容
--allmatches:同时删除同一软件不同版本的rpm包,rpm-e `rpm -q PACKAGE`也可以实现
--nodeps:卸载某个rpm包时候不检查依赖性关系,强制删除
--noscripts:
--notriggers
--test
包校验
*包的数据校验
语法:rpm {-V|--verify} [select-options][verify-options] PACKAGE[_NAME1] PACKAGE[_NAME2]...
将已经安装的rpm包中的文件与原版的rpm包中的文件进行比较,用来判断文件是否丢失或者被更改过
若不显示任何内容,说明没有问题
rpm-V PACKAGE_NAME:PACKAGE_NAME为软件的名字,因为是与数据文件中的信息进行比较
rpm-pV PACKAGE:PACKAGE为rpm包的名字,因为是与rpm包进行比较
内容:
missing:未找到,即尚未安装该文件
S文件大小不同
M模式不同(包括文件的权限和文件的类型)
5MD5值不同;查看文件的MD5值:md5sum/etc/PACKAGE_FILE/file
D主要或者次要的设备号不匹配
LreadLink(2)pathmismatch
U所有人不同
G所属组不同
TmTime不同
Pcapabilities不同
包来源合法性验正(数字签名)及完整性验正
完整性验正:SHA256;来源合法性验正(数字签名):RSA
私钥加密:用于数字签名
数字证书
公钥加密:用于数据的传输过程中保护数据的安全性
对称加密:加密、解密使用同一密钥,安全性低,加密效率高
非对称加密:密钥是成对儿的一把公钥,一把私钥,安全性高,加密效率低
publickey:公钥,公开所有人
secretkey:私钥,不能公开
常用的加密方法:
客户端-------------------服务器端
服务器端使用非对称加密算法生成公钥A,私钥B,并将公钥A分发给客户端,客户端使用对称式加密算法生成仅用于此次会话的密钥对C,客户端使用公钥A对密钥C进行加密,并发送给服务器端,服务器端使用私钥B进行解密,得到密钥C,再使用这把密钥C对数据进行解密
检查包的完整性和签名:rpm -K| checksig PACKAGE
查询公钥:
CentOS7发行版光盘提供公钥:RPM-GPG-KEY-CentOS-7
rpm -qa “gpg-pubkey*”
删除公钥:rpm -e “gpg-pubkey*”
导入所需要公钥
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
yum
yum概述:
yum是通过分析rpm的标头数据后,根据各个软件的依赖性关系制作出的有依赖关系时的解决方案,然后可以自动的处理软件的依赖性问题,以解决软件安装、移除与升级方面的问题,底层仍然是使用rpm安装
yum仓库:
定义:
由于发行版必须要先释出软件然后将软件放置于yum服务器上面,以提供用户端来安装与升级之用,因此要想使用yum功能时,必须要先找到合适的yum服务器。而每个yum服务器可都会提供许多不同功能的软件,yum服务器会根据功能进行分类,这里的分类就是所谓的yum仓库,即yum源。yum仓库会告诉yum,软件包应该从哪里下载
在yum仓库中存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下),即repodata目录的父目录就是yum仓库
要想使用yum安装或者升级软件包,首先必须要先前往yum服务器查询到相关的yum仓库网址之后,再继续处理后续的配置项
配置yum的软件仓库
yum的主配置文件:/etc/yum.conf:为指向的各个yum仓库提供公共的配置文件
各个yum仓库的定义:/etc/yum.repods.d/*.repo
文件以.repo结尾,每个配置文件中可以配置一至多个仓库
显示仓库列表:
yum repolist [all | enabled | disabled]
all或者不加:所有
yum命令
yum命令的用法:
显示程序包:
yum [options] [command] [PACKAGE_NAME1…]
列出:
yum list或者yum list all:列出所有可以使用yum安装的软件
yum list [PACKAGE_NAME1PACKAGE_NAME2...]
支持通配符模糊查找
显示的内容:
第一列:软件名
第二列:软件的版本
第三列:软件的来源
@开头代表已经安装以及来自于哪个软件安装源,即*.repo文件中的[ID]
available:可用且还没有安装的包
例:@anaconda...:图形化界面,系统自动安装
yum list available [PACKAGE_NAME1PACKAGE_NAME2...]:显示所有可用还没有安装的包,支持通配符模糊查找
yum listinstalled [PACKAGE_NAME1PACKAGE_NAME2...]:显示所有已经安装的包,支持通配符模糊查找
yum list updates [PACKAGE_NAME1PACKAGE_NAME2...] :显示所有可以更新的软件包,支持通配符模糊查找:
安装程序包:-y不再询问
yum install PACKAGE_NAME1PACKAGE_NAME2...
yum reinstall PACKAGE_NAME1PACKAGE_NAME2... (重新安装)
等同于rpm -ivh PACKAGE_NAME1 PACKAGE_NAME2...--force
升级程序包:
yum update [PACKAGE_NAME1 PACKAGE_NAME2...]:自动检查出那些包可以升级并安装,类似于rpm中的“-U”
yum downgrade PACKAGE_NAME1PACKAGE_NAME2...(降级)
检查可用升级:
yum list updates或者yum check-update
卸载程序包:
yum remove [PACKAGE_NAME1PACKAGE_NAME2...]
卸载的时候不会带着依赖包一起卸载,有可能其他包也依赖于这个包,卸载时候,无法使用
查询:
yum info [PACKAGE_NAME1PACKAGE_NAME2...]显示包的详细信息
yum provides | whatprovides PATH:查询一个文件来自哪一个rpm包,无论是否已安装
PATH:文件的路径(支持通配符模糊查找)
清理本地缓存:
yum clean all:清除/var/cache/yum/$basearch/$releasever缓存:
一般在yum仓库的路径发生变化,但是仍然使用缓存中的yum仓库的路径
构建缓存:
yum makecache
在首次使用yum的任何命令的时候会自动构建缓存,不需要特意的创建缓存
搜索:
yum search string1 [string2] [...]:以指定的关键字搜索程序包名及描述信息,默认模糊搜索
yum deplist [PACKAGE_NAME1PACKAGE_NAME2...]:查看指定包所依赖的capabilities,即查看指定包的依赖包,依赖的库文件等等
查看yum事务历史:
yum history [ info | list | packages-list| packages-info ]
summary | addon-info | redo | undo | rollback |new | sync|stats ]
yum history:列出使用yum所做过的所有操作
yum history info ID:查看指定ID的操的详细信息
yum history undo ID:执行第ID条信息中相反的操作,一般用来卸载只是自己的包所依赖的包
yum history redo ID:再次执行第ID条信息中的操作
查看日志:/var/log/yum.log
一个程序包,在yum仓库中不存在,于是从第三方下载,但是这个包所依赖的包在第三方中并没有,
在yum仓库中存在,于是就利用yum仓库解决依赖性关系
yum localinstall | installPACKAGE
yum localupdate | updatePACKAGE
包组:-y自动回答,避免交互式
yum groupinstall GROUPACKAGE
yum grouplist:列出所有的包组
yum group info GROUPACKAGE:显示该包组包含的rpm包
yum groupremove GROUPACKAGE::卸载包组
yum install –nogpgcheck:临时不进行gpgcheck
-q静默。但不彻底,建议使用yum -y installvsftpd &>/dev/null
createrepo PATH:PATH为存放rpm包的目录的路径
编译安装