ABI:应用程序的二进制接口,与操作系统相关,如果一个二进制程序创建完成要在操作系统上面运行,就要符合操作系统的二进制标准,标注就为API
Windows与Linux不兼容
LSB为Linux的二进制标准
PE32为Windows二进制标准
虚拟化支持:
Linux:WINE(可以在上面跑Windows程序)
Windows:Cywin(可以在上面跑Linux程序)
API:应用程序开发接口,调用编译好的二进制文件要通过API接口调用
静态库:.a
动态库:.so
ldd "二进制文件" :用来查看这个二进制文件调用了哪些库
有很多库会被多个文件同时调用
包管理器
二进制应用程序的组成部分
二进制文件、库文件、配置文件(小工具不具备配置文件)、帮助文件
软件包管理器:
debian:deb文件,dpkg包管理器
redhat:rpm文件,rpm包管理器
包命名和工具
包:分类和拆包
Application-VERSION-ARCH.rpm 主包
Application-devel-VERSION-ARCH.rpm 开发子包
Application-utils-VERSION-ARHC.rpm 其他子包
Application-libs-VERSION-ARHC.rpm 其他子包
包之间:可能存在依赖关系,甚至循环依赖
解决依赖包的管理工具:
yum:rpm包管理器的前段工具
apt-get:deb包管理器前段工具
zypper:suse上的rpm前段管理工具
ndf:Fedora 18+ rpm包管理器前端管理工具
管理和查看本机装载的库文件
ldconfig 加载库文件
-v:查看目前所有正在加载的库文件
配置文件:/etc/ld.so.conf.d/
软件包管理器:
功能:可用来安装、卸载、管理rpm后缀的文件
/var/lib/rpm数据库中存储了系统上安装好的一系列rpm包信息,很重要,此目录下的文件不能丢失
管理程序包的方式
使用包管理器:rpm
使用前段工具:yum
获取程序包途径:
(1)系统发版的光盘或官方服务器;
Centos镜像:
http://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
第三方组织
Fedora-EPEL:光盘中没有的软件包会放在epel源中;
rpm包管理
安装、卸载、升级、查询、校验、数据库维护
安装:
rpm {-i|--install}[install-options]包文件
-v:显示安装的详细过程
-vv:更详细的安装过程
-h:安装的时候显示进度条
rpm -ivh 包名
[install-options]
--test:测试安装,不真实安装
--nodeps:忽略依赖关系
--replacepkgs 替换包(如果有一个包已经安装,使用这个选项则是重新安装,但同时也会覆盖修改过的配置文件,如果不想覆盖,则使用rpm2cpio "包名" | cpio -id 不想被覆盖的文件路径位置;则可以实现单独恢复某一个文件,但是复制过去属性不一定一致,所以使用这种方法要注意)
--replacefiles 两个rpm包中有个别文件冲突的时候,要覆盖的话则使用此选项
rpm包升级
rpm [-U|--upgrade] [install-options] 包名(如果有就版本升级,不存在旧版本则安装,可以当升级也可以当安装)
rpm [-F|--freshen] [install-options] 包名(只能当升级,如果没有旧版本就不安装了)
--oldpackage:降级使用,就是如果安装的一个包比已经安装的包的版本低,还需要它们同时存在的话,就需要使用这个选项,即使这样安装了,原先老的那个包还是存在
--force:强制安装
如果安装了软件并且修改了软件内的一些文件,再卸载之后,配置文件会自动保存备份下来
rpm包查询
rpm {-q|--query} [select-options] [query-options]
rpm2cpio 包名 | cpio -tv (查看包里面包括哪些文件)
rpm -qlp rpm文件(表示一个包还没装)
[select-options]:
-q:查询某个包是否安装(一般要执行的操作全都要附上这个选项)
-a:查询所有安装的包
-f:用来查询文件是来自于哪一个包
-p:针对未安装的程序包文件做查询操作
--whatprovides 包提供的功能:查询哪一个包拥有某一个功能
--whatrequires 哪个包依赖的功能:查询哪一个包依赖这个功能
-e:卸载某个包
[query-options]:
--changelog:查询rpm包的更改日志
-c:查询程序的配置文件
-d:查询程序的文档
-i:查询包的信息
-l:查询某个包安装完成后生成的配置文件列表
--scripts:查询某个包中是否带有特定脚本
-R:查询指定包依赖于什么功能
--provides:与--whatprovides一样的功能
包卸载:
rpm -e [--allmatches][--nodeps][--noscripts][--notriggers][--test] 包名
包校验:
检查包来源的合法性以及完整性
完整性严重:SHA256
来源合法性认证:RSA
公钥加密:
对称加密:加密、解密使用同一密钥
非对称加密:密钥是成对儿的
public key: 公钥,公开所有人
secret key: 私钥, 不能公开
导入所需要公钥
rpm -K rpmfile 检查包的完整性和(签名:包的一系列信息)
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7发行版光盘提供的公钥:RPM-GPG-KEY-CentOS-7
rpm -qa "gpg-pubkey*"(查询公钥的位置)
Yum工具
注意:baseurl写的yum仓库的位置一定是repodata的上级目录
本机配置yum,baseurl就要写file://开头的后面跟文件位置
yum第一次执行会将yum仓库中的包元数据以及包组信息缓存到本地
当要使用新的yum仓库的时候要清除缓存
yum:用于解决包之间的依赖性关系
yum的配置文件位置在/etc/yum.conf里
$basearch:基础平台;i386, x86_64
$releasever:当前OS的发行版的主版本号
rpm包的元数据存放在repodata中
yum仓库的设置
要在/etc/yum.repos.d下面创建一个后缀为.repo文件,当中写入配置文件信息
小技巧:当开机添加物理硬件系统不识别的时候,则可以使用"echo '- - -' > /sys/class/scsi_host/host2/scan"命令
本地源的配置格式如下:
[base](名字)
name="随机的名字"
baseurl=file:///misc/cd(写yum仓库的存放位置)
gpgcheck=0(不检查包的完整性以及可用性,不写的话默认是开启的)
enabled={0|1}(1是启用这个yum仓库,0则是暂时不启用)
如果要开启检查包完整性可用性,则要在.repo文件中写gpgkey=file:///"RPM-GPG-KEY-CentOS-7存在的位置"
一个文件中也可以配置多个yum仓库位置,当光盘中存在的包不够充足的时候则需要配置epel源,yum也会自动去epel源的位置寻找
网络yum源:
阿里云:
https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
EPEL的yum源:
阿里云:
https://mirrors.aliyun.com/epel/$releasever/x86_64
当只有rpm包时将其制作成yum源的步骤
createrepo "位置" 就可以制作出一个yum源
yum命令的用法:
yum [options] [command] [package ...]
显示仓库列表:
yum repolist [all|enabled|disabled]
显示程序包:
yum list
yum list [all | glob_exp1(通配符)] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1]
安装程序包:
yum install package1 [package2] [...]
yum reinstall package1 [package2] [...] (重新安装)
[options]
-q:静默安装
-y:不做交互式处理自动安装
yum-config-manager --add-repo="yum仓库位置"(直接创建一个.repo的文件,但是gpgcheck=0需要手动添加)
yum-config-manager --disable "仓库名" 禁用仓库
yum-config-manager --enable "仓库名" 启用仓库
yum命令:
检查可用升级:
yum check-update
升级程序包:
yum update 包名
yum downgrade 包名 (降级)
卸载程序包:
yum remove 包名
查看程序包信息:
yum info 包名
清理本地缓存:
清除/var/cache/yum/$basearch/$releasever缓存
yum clean [ packages | metadata | expire-cache |
rpmdb | plugins | all ]
构建缓存:
yum makecache
搜索:
yum search "关键字"
查看指定包所依赖的能力:
yum deplist 包名
查看yum操作历史:
yum history [info|list|packages-list|packages-info|
summary|addon-info|redo(重新做一遍某一步)|undo(取消某一步的操作)|rollback|new|sync|stats]
yum history
例子:yum history info 6:查看第6部的历史操作
例子:yum history undo 6:取消第6部的历史操作
安装及升级本地程序包:
yum install 包名(使用yum安装rpm包,可以自动解决依赖性问题)
yum update 包名
包组管理的相关命令:
yum groupinstall 包组名(安装某个包组)
yum groupupdate 包组名(升级某个包组)
yum grouplist 包组名(查看包组信息)
yum groupremove 包组名(卸载某个包组)
yum groupinfo 包组(查看包租中包括的包)
yum常见选项:
yum install remove list -y repolist (clean all清除缓存) history
原文地址:http://blog.51cto.com/kaikai0720/2047426