程序的组成的部分:
编译之前:源代码
编译之后:
二进制程序
库文件
配置文件
帮助文件(手册、文档)
二进制程序:/bin, /sbin, /usr/bin,/usr/sbin, /usr/local/bin, /usr/local/sbin, /opt/bin, /opt/sbin
库文件:/lib, /lib64, /usr/lib,/usr/lib64, /usr/local/lib, /usr/local/lib64
配置文件:/etc, /etc/DIR,/usr/local/{etc,conf}
帮助文件:/usr/share/man,/usr/share/doc, /usr/local/share/man
注意:有些特殊的应用程序可能会将可执行文件放置于libexec目录;
常见的包管理器:
发行商 | 软件管理机制 | 使用命令 | 在线升级机制(命令) |
Red Hat/Fedora/CentOS/SuSE | RPM | rpm | YUM(yum) |
Debian/Ubuntu | DRKG | dpkg | APT(apt-get) |
RPM是什么?
RPM就是将你要安装的软件先编译过,并且打包成为RPM机制的安装包,通过安装好的软件里头默认的数据库(/var/lib/rpm)记录这个软件要安装时必须具有的依赖属性软件,当安装时,RPM会先去查询数据库(/var/lib/rpm)中的依赖关系是否满足,若满足则安装,若不满足,怎不予安装。
RPM包的命名格式:
appname-VERSION-RELEASE.ARCH.rpm
VERSION:
major: 主版本号
minor: 次版本号
release: 发行号
RELEASE: 包自身的修订号;有时候还会包含适用于的OS信息;比如bash-4.3.2-2.centos6.x86_64.rpm中的2.centos6
ARCH: 适用的平台
x86:i386, i486, i586, i686
x86_64:x86_64, amd64
powerpc:ppc
noarch: 跟平台无关;
分包机制:
核心包,主包:命名与源项目名称一致;
bash-4.3.2-2.centos6.x86_64.rpm
子包(支包):命令为源项目名称后附加支包中的文件提供的功能组成
bash-devel-4.3.2-2.centos6.x86_64.rpm
python-2.6.6-52.el6.x86_64.rpm
软件名-主版本号.次版本号.发行号-发布次数.适用平台.rpm
获取程序包的途径:
官方站点,镜像:
mirrors.sohu.com
mirrors.163.com
mirrors.aliyun.com
rpm命令用法:
安装:
rpm -ivh 包名
-i 安装
-v 查看详细安装信息
-h 以安装信息栏显示安装信息
例:rpm -ivh zsh
[root@localhost Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm Preparing... ########################################### [100%] 1:zsh ########################################### [100%]
例:一次安装多个
[root@localhost Packages]# rpm -ivh php-common-5.3.3-38.el6.x86_64.rpm php-cli-5.3.3-38.el6.x86_64.rpm php-5.3.3-38.el6.x86_64.rpm Preparing... ########################################### [100%] 1:php-common ########################################### [ 33%] 2:php-cli ########################################### [ 67%] 3:php ########################################### [100%]
例:从网络上直接安装 rpm -ivh ftp://192.168.1.104/pub/zsh/zsh-4.3.10-9.e16.x86_64.rpm
--nodeps : 忽略依赖关系安装,可能会导致该软件无法正常使用
--replacefiles: 覆盖安装,覆盖安装的文件无法复原的
--repiacepkgs:重新安装某个已经安装的软件
--force:--replacefiles和--repalcepkgs 的综合
--test:测试一下该软件是否能安装在当前环境下,可以找出依赖关系
例:
[root@localhost ~]# rpm -ivh ftp://192.168.1.104/pub/zsh/zsh-4.3.10-9.el6.x86_64.rpm --test Retrieving ftp://192.168.1.104/pub/zsh/zsh-4.3.10-9.el6.x86_64.rpm Preparing... ########################################### [100%]
升级与降级:
-Uvh | 后面接的软件即使没有安装过,直接安装;安装过旧版,直接更新至新版 |
-Fvh | 后面接的软件没有安装过,就不安装;安装过旧版,才会升级至新版 |
--oldpackage | 降级到旧版本 |
注意:一定不要对内核执行升级;Linux允许多内核共存,所以,可以直接安装多个不同版本内核;
注意:如果程序包的配置文件安装后曾被修改,升级时,新版本的文件不会覆盖老版本的配置文件,而把新版本的配置文件重命名(加后缀.rpmnew)后保存;
查询:
RPM在查询时,其实就是在查询/var/lib/rpm/这个目录下的数据库文件
rpm -q 软件名 | 查询指定包是否已经安装 | 例 rpm -q zsh |
rpm -qa | 查询已经安装的所有包 | 例 rpm -qa |grep "^z" |
rpm -qi 包名 | 查询指定包的说明信息 | |
rpm -ql 包名 | 查询指定包安装后生成的文件列表 | |
rpm -qf 文件路径 | 查询指定文件是有哪个rpm包安装生成的 | |
rpm -qc 包名 | 查询指定包的配置文件 | |
rpm -qd 包名 | 查询指定包安装的帮助文件 | |
rpm -q --scirpts 包名 | 查询指定包中包含的脚本 | |
rpm -qpi 包名 | 未安装时查询安装后会生成的文件 | |
rpm -qR 软件名 | 查询指定包还要什么文件的帮忙 | 例 rpm -qR php |
脚本有四类:
preinstall: 安装过程开始之前执行的脚本;
postinstall: 安装过程完成之后执行的脚本;
preuninstall: 卸载开始之前执行的脚本;
postuninstall: 卸载过程完成之后执行的脚本;
校验:
rpm -V 已安装的软件名 | 查看该软件所含的文件是否改动过 |
rpm -Va | 列出当前系统上所有可能被改变的文件 |
rpm -Vf 在系统上的某个文件 | 列出文件是否被改动过 |
例 rpm -Vf /etc/crontab
[root@localhost ~]# rpm -Vf /etc/crontab S.5....T. c /etc/crontab
常见用法:rpm -V PACKAGE_NAME
S (file Size differs) | 文件的容量大小是否被改变 |
M (Mode differs) | 文件的类型或文件的属性(rwx)是否被改变了 |
5 (MD5 sum differs) | MD5这一种指纹码的内容是否已经不同 |
D (Device major/minor number mis-match) | 设备的主/次代码已经改变 |
L (readLink(2) path mis-match) | Link路径已经被改变 |
U (User ownership differs) | 文件的属主已经改变 |
G (Group ownership differs) | 文件的属组已经改变 |
T (mTime differs) | 文件的创建时间已经改变 |
c | 配置文件(config file) |
d | 文档文件(documentation) |
l | 授权文件(license file) |
r | 自述文件(read me) |
程序包的合法性验正:
来源合法:
由我们信任的制作者提供
依赖于:制作者的数字签名;签名是作者使用自己的私钥加密程序包的特性码进行的;
内容合法:
包未被二次修改;完整性校验成功
依赖于:制作者提供的程序特征码;
验正方式:安装者用同样的特征码提取算法提取程序包的特征码,并与原作者提供的相比较;
验正其光盘中程序包的来源及完整性:
rpm--import /path/to/RPM-GPG-KEY-FILE
例如:# rpm --import RPM-GPG-KEY-CentOS-6
CentOS的数字证书位于:/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
验正:rpm {-K|--checksig} PACKAGE_FILE
--nosignature: 不检查来源合法性
--nodigest: 不检查完整性
卸载:
rpm -e 软件名
例 rpm -e zsh
注意:卸载要从最上层向下卸载
重建数据库:
数据库在/var/lib/rpm/目录下
rpm --rebuildbd 无论当前数据存在与否,都会直接重建此库
rpm --initdb: 初始化数据库,即数据库完全不存在时,可新建之