标签:linux软件包管理
二进制应用程序的组成部分: 二进制文件、库文件、配置文件、帮助文件bin sbin \ lib64 \ etc \ share
rpm不能解决依赖性
yum 解决包之间的依赖性 yum是rpm的一个封装 、基于rpm 、前端软件包管理器。
/dev/sr0 光驱 cd /misc/cd
库文件lib
查看二进制程序所依赖的库文件 ldd /PATH/TO/BINARY_FILE
管理及查看本机装载的库文件
ldconfig 加载库文件
/sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件 名及文件路径映射关系
ldconfig 尝试加载库文件 不知道所加载库文件的路径 在配置文件里定义加载库文件路径
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
如tree命令
[root@centos6 Packages]#cd /etc/ld.so.conf.d 在其下面建立以.conf结尾文件
[root@centos6 ld.so.conf.d]#ls
kernel-2.6.32-696.el6.x86_64.conf mysql-x86_64.conf qt-x86_64.conf xulrunner-64.conf
[root@centos6 ld.so.conf.d]#cat qt-x86_64.conf
/usr/lib64/qt-3.3/lib 路径格式
[root@centos6 ld.so.conf.d]#vim tree.conf
/app/../../ 写入路径
[root@centos6 Packages]#ldconfig
rpm包管理器
程序包管理器功能:将编译好的应用程序的各组成文件打包一个或几个 程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、 升级和校验等管理操作
rpm包文件相当于tar打包文件
包文件组成 (每个包独有) RPM包内的文件
RPM的元数据,如名称,版本,依赖性,描述等 安装或卸载时运行的脚本
rpm安装后,会在自动在/var/lib/rpm下生成数据库,记录了rpm包数据信息:
程序包名称及版本
依赖关系
功能说明
包安装后生成的各文件路径及校验码信息、
/var/lib/rpm对rpm包很重要,不能误删除。
程序包的来源
系统发版的光盘或官方的服务器 CentOS镜像
第三方包建议要检查其合法性 来源合法性,程序包的完整性
rpm包管理
rpm {-i|--install} [install-options] PACKAGE_FILE…
rpm -ivh 安装显示过程
[root@centos7 Packages]#rpm -ivh tree-1.6.0-10.el7.x86_64.rpm 文件名
warning: tree-1.6.0-10.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY 检查包来源合法性
Preparing... ################################# [100%]
Updating / installing...
1:tree-1.6.0-10.el7 ################################# [100%]
[root@centos7 Packages]#rpm -q tree 查询tree包是否已在 不用文件名 用包名
tree-1.6.0-10.el7.x86_64
[root@centos7 Packages]#rpm -e tree 卸载tree包
安装tree后 ,/var/lib/rpm下记录了tree包的数据信息,卸载是就可以用包名,而不需要完整的文件名
[install-options]
--test: 测试安装,但不真正执行安装,即dry run模式
[root@centos7 Packages]#rpm -ivh --test tree-1.6.0-10.el7.x86_64.rpm
warning: tree-1.6.0-10.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing... ################################# [100%]
[root@centos7 Packages]#echo $?
0 tree包可以安装
--nodeps:忽略依赖关系 有依赖关系的包 忽略关系 安装后依然无法使用
--replacepkgs | replacefiles 替代安装 解决已安装包 缺失文件如(删除移动)无法使用问题
--nosignature: 不检查来源合法性
--nodigest:不检查包完整性
--noscripts:不执行程序包脚本
[root@centos7 Packages]#rpm -q --scripts bash 查看bash包的脚本 在软件包安装时查看程序包脚本 防止恶意脚本
--force: 强制安装
包查询
rpm {-q|--query} [select-options] [query-options]
v[select-options]
-a: 所有包 支持使用glob *, ?, [], [^] 查询有该包名的包
-f: 查看指定的程序文件由哪个程序包安装生成 文件的路径 非包名
[root@centos6 ~]#which tree
/usr/bin/tree
[root@centos6 ~]#rpm -qf /usr/bin/tree
tree-1.5.3-3.el6.x86_64
-p rpmfile:针对尚未安装的程序包文件做查询操作 后跟rpm文件名
[root@centos6 Packages]#rpm -qpl tree-1.5.3-3.el6.x86_64.rpm
warning: tree-1.5.3-3.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
/usr/bin/tree
/usr/share/doc/tree-1.5.3
/usr/share/doc/tree-1.5.3/LICENSE
/usr/share/doc/tree-1.5.3/README
/usr/share/man/man1/tree.1.gz
-l 能详细显示rpm包内的文件列表
--whatprovides CAPABILITY:查询指定的CAPABILITY 功能由哪个包所提供
[root@centos6 Packages]#rpm -q --whatprovides bash
bash-4.1.2-48.el6.x86_64
--whatrequires CAPABILITY:查询指定的CAPABILITY被 哪个包所依赖
[root@centos6 Packages]#rpm -q --whatrequires bash
initscripts-9.03.58-1.el6.centos.x86_64
dracut-004-409.el6_8.2.noarch
rsyslog-5.8.10-10.el6_6.x86_64
cronie-1.4.4-16.el6_8.2.x86_64
autofs-5.0.5-132.el6.x86_64
lvm2-2.02.143-12.el6.x86_64
以上包的rpm安装需要依赖bash包的安装 先bash安装,如果bash包未安装,则不能安装
vrpm2cpio 包文件|cpio –itv 预览包内文件
vrpm2cpio 包文件|cpio –id “*.conf” 释放包内文件
常用查询用法: -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ... -qa
包卸载: rpm {-e|--erase} [--allmatches] [--nodeps] [-noscripts] [--notriggers] [--test] PACKAGE_NAME ...
--changelog:查询rpm包的changelog 修改日志
-c: 查询程序的配置文件
-d: 查询程序的文档
-i: information
-l: 查看指定的程序包安装后生成的所有文件
--scripts:程序包自带的脚本
--provides: 列出指定程序包所提供的CAPABILITY
-R: 查询指定的程序包所依赖的CAPABILITY
包校验
rpm -V 包名 包下文件是否发生修改
rpm -K 包的文件名 检查包的完整性
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 导入公钥检查 签名
如下:
在光盘下,导入所需要的公钥
[root@centos7 ~]#cd /run/media/root/CentOS\ 7\ x86_64/
[root@centos7 CentOS 7 x86_64]#ll
total 1490
-r--r--r--. 1 root root 14 Dec 10 2015 CentOS_BuildTag
dr-xr-xr-x. 3 root root 2048 Dec 10 2015 EFI
-r--r--r--. 1 root root 215 Dec 10 2015 EULA
-r--r--r--. 1 root root 18009 Dec 10 2015 GPL
-r--r--r--. 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-7
-r--r--r--. 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r--. 1 root root 2883 Dec 10 2015 TRANS.TBL
[root@centos7 CentOS 7 x86_64]#rpm --import RPM-GPG-KEY-CentOS-7 导入秘钥 检查签名
[root@centos7 Packages]#rpm -ivh tree-1.6.0-10.el7.x86_64.rpm 安装
Preparing... ################################# [100%]
Updating / installing… 不出现warning
1:tree-1.6.0-10.el7 ################################# [100%]
[root@centos7 Packages]#rpm -K tree-1.6.0-10.el7.x86_64.rpm 包的完整性
tree-1.6.0-10.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
[root@centos7 Packages]#rpm -V tree 文件是否发生修改
yum
解决rpm包之间的依赖关系
基于c/s安装 ,有客户端 有服务器 需要事先搭载服务端 将自己机器配置成客户端
yum server: 众多*.rpm后缀的文件 yum记录rpm文件的元数据repodata
[root@centos6 CentOS_6.9_Final]#ls
CentOS_BuildTag GPL Packages RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Testing-6
EFI images RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-Debug-6 TRANS.TBL
EULA isolinux repodata yum元数据
yum仓库路径: http:// https:// 网络路径
ftp://
file:// 本地路径 光盘
baseurl 路径为repodata的当前所在目录的路径
yum的repo仓库路径配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号
$arch: 平台,i386,i486,i586,x86_64等
$basearch:基础平台;i386, x86_64
$YUM0-$YUM9:自定义变量
yum客户端配置文件:
/etc/yum.conf:为所有仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置 在该配置文件下建立.repo文件
仓库指向的定义:
格式如下
[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1|0} yum默认安装会检查签名
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority}
[root@centos6 CentOS_6.9_Final]#cd /etc/yum.repos.d
[root@centos6 yum.repos.d]#vim bash.repo
[root@centos6 yum.repos.d]#cat bash.repo
[centos7]
name=zhang
baseurl=file:///media/CentOS_6.9_Final/ 本地光盘的源 repodata的当前所在路径
gpgcheck=1
gpgkey=file:///media/CentOS_6.9_Final/RPM-GPG-KEY-CentOS-Security-$releasever 导入公钥文件
[eqel] 网络的eqel源
name=network
baseurl=http://mirrors.sohu.com/fedora-epel/$releasever/$basearch/ repodata的当前所在目录的路径
gpgcheck=0 不检查公钥
enabled=1 1使用 网络eqel源 断网时,关闭网络源使用本地光盘源 enabled=0
yum命令的用法: yum [options] [command] [package …1] [package …2] ….
显示仓库列表: yum repolist
显示程序包: yum list 支持使用glob *, ?, [], [^]
[root@centos6 yum.repos.d]#yum list my*
显示包信息
yum info tree
安装程序包:
yum install package1 [package2] [...] 多个包安装
yum reinstall package1 [package2] [...] (重新安装)
搜索安装包:
yum search tree
卸载程序包:
yum remove | erase package1 [package2] [...]
yum安装中,假如安装A包 (A包依赖B包) 安装会先安装B包 再安装A包
卸载时,先卸载A包 不卸载B包 (B包可能存在别的依赖)
清理本地缓存: yum clean all
当repo配置文件里仓库路径发生更改时,yum访问还是以前的源地址 需要清理本地缓存
查看yum事务历史
yum history
yum history info 6
yum history undo 6 撤销历史中第六条yum安装 相当于卸载第六条安装rpm包
日志 :/var/log/yum.log
包组管理的相关命令
yum grouplist
yum groupinstall group1 [group2] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]
包组须加""引号
[root@centos7 ~]#yum groupinfo "Compute Node"
yum-config-manager --disable “仓库名" 禁用仓库
yum-config-manager --enable “仓库名” 启用仓库
yum的命令行选项:
--nogpgcheck:禁止进行gpg check
-y: 自动回答为“yes”
-q:静默模式
yum安装记录日志 /var/log/yum.log
标签:linux软件包管理
原文地址:http://blog.51cto.com/13157015/2044475