程序的组成的部分:

编译之前:源代码

编译之后:

二进制程序

库文件

配置文件

帮助文件(手册、文档)

 

二进制程序:/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: 初始化数据库,即数据库完全不存在时,可新建之