linux中,软件安装包的管理和windows是很不一样的.

软件包分类

linux下,软件包分为 源码包和二进制包(如 .rpm, 类似windows 上的 .exe 文件).

源码安装包特点

1
2
优点:开源,如果有足够的能力,可以修改源码
缺点:步骤多, 安装时间长, 而且一旦报错新手很难解决

二进制包特点

1
2
3
4
5
6
二进制包分类: 
DPKG包: 主要用于Debian 和 unbantu中.
RPM包: 由Red Hat 公司开发的,很多linux都在用,包括Centos, SuSE等.
优点: 包管理系统简单,只通过几个命令就可以实现包的安装,升级,查询和卸载; 安装速度比源码包安装快得多.
缺点: 经过编译,不再可以看到源代码;功能选择不如源码包灵活; 依赖性的处理很繁琐.

软件包选择建议:

源码包:如果服务是给大量客户端提供访问的,建议使用源码包,源码包效率高;
RPM包: 如果程序是给少量用户访问,或者本地使用的,建议RPM 包,因为RPM管理方便。

RPM包依赖性

1
2
3
4
5
6
7
树形依赖: a -- > b -- > c
环形依赖: a -- > b -- > c -- > a
解决环形依赖的方法:直接同时安装这几个包.
模块依赖: 安装的时候,提示函数库缺失.
解决模块依赖:去www.rpmfind.net 中, 输入这个函数库的名字,去找到它在哪个文件里, 然后下载并安装这个文件即可.
但是即使 有这个网站可以找到模块依赖, 人手动来解决模块依赖也是一件很麻烦的事情.
为此, centos 推出了 yum 来直接在线安装, 我们通过yum 来连接 官方的仓库, 直接安装依赖和软件. (缺点是需要联网)

RPM包 安装

RPM 包命名规则

1
2
3
4
5
6
7
httpd-2.2.15-15.e16.centos.1.i686.rpm
httpd 软件包名
2.2.15-15 软件版本
15 软件发布的次数
e16 软件发行商
i686 适合的硬件平台, noarch是没有硬件限制
rpm rpm包的拓展名

包全名和包名的区别

1
2
包全名: 操作未安装的软件包,要使用包全名, 而且需要注意绝对路径,要么用绝对路径安装,  要么去到包所在的目录下进行安装.
包名: 操作已安装的软件包, 则使用包名即可.系统会生产RPM 包的数据库(/var/lib/rpm/), 而且在任意路径下操作已经安装的软件包.

RPM 包安装

1
2
3
4
5
6
7
8
9
10
11
12
13
rpm - ivh 包全名
注意,一定要是包全名
选项:
-i install 安装
-v 显示更详细的信息(verbose)
-h 打印#显示安装进度(hash)
--nodeps 不检测依赖性安装(没意义,了解即可)
--replacefiles 替换文件安装. 如果安装软件包,可是包中部分文件已经存在,那么正常安装就会报错"某文件已经存在",通过这个选项,可以覆盖安装.
--replacepkgs 替换软件包安装. 也就是如果安装了,就重复安装一次.
--force 强制安装.不管是否已经安装,都重新安装,是 --replacefiles 和--replacepkgs 的综合.
--test 测试安装.不会实际安装, 只是检测一下依赖性.
--perfix 指定安装路径(不建议,一般都是用默认路径安装)

服务启动

centos 下的服务启动
1
2
3
centos6 中,用service 服务器名 start|stop|restart|status
centos7 中, 则是用systemctl 替换了service , systemctl start|stop|restart|status 服务名

非centos 的,如何启动服务?

用rpm 安装的阿帕奇 举例

1
2
3
/etc/rc.d/init.d/httpd start|stop|restart|status #这是centos6 的
如果是centos7 以上的用 systemctl , 目录不一样, 而且相对麻烦一些.

RPM包安装的时候不要指定安装路径

1
2
3
4
5
使用rpm 包 安装, 不建议指定安装路径,会导致 service  的命令无法找到 安装后的软件的位置, 而且也会导致它的配置文件等文件位置都不是系统默认的,找起来很麻烦.

但是用源码包安装的时候, 就需要指定安装路径, 它是没有卸载的,不用了,就直接删除安装位置即可.

因此 使用 rpm 安装包是不能指定安装路径的.

软件包管理升级和卸载

RPM 包升级

1
2
3
4
5
6
rpm -Uvh 包全名
选项:
-U(大写) 升级安装, 如果没有安装过,系统直接安装。 如果安装过旧的版本,则升级到新版本
-F(大写) 升级安装, 如果没有安装过, 则不会安装. 必须安装有较旧的版本,才能升级
这个rpm 升级,用的很少, 这升级有局限性, 必须有旧的安装包和新的安装包(自行下载)
卸载命令反而是常用一些.

RPM 包卸载

1
2
3
4
5
rpm -e 包名
选项:
--nodeps 不检查依赖性
-e 卸载
一般还是不要使用 --nodeps , 如果造成麻烦. 当卸载的时候,提示必须先卸载什么就去卸载它.

使用yum 卸载和 rpm卸载的区别

1
2
3
4
5
使用 yum 卸载的弊端, 卸载是从上到下的. 
安装是从低到高的依赖. 用yum 卸载可能会误删了被其他包公共引用的文件,然后因为不知道缺失了啥依赖文件, 最后安装的时候, 也不知道补啥依赖文件, 只能重头安装软件.
因此,卸载,最好是使用rpm 进行卸载!
生产环境,禁止这样不检测依赖就卸载. 要根据依赖提示决定卸载的先后顺序.
总结: 安装的依赖是从下到上, 卸载的依赖是从上到下, 卸载处于中间的依赖, 对于yum卸载要慎用,免得造成 生产事故.

软件包管理之查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
rpm  -q  包名  查询软件包是否安装过
rpm -qa 查询系统中所有的软件包
rpm -qi 包名 查询已经安装的某个软件包信息
rpm -ql 包名 查询已经安装的某个软件包中的文件列表和安装的完整路径
rpm -qlp 包全名 查询还没有安装的软件包中的文件列表和安装的完整路径
rpm -qf 系统文件名 查询系统文件属于哪个RPM 包
rpm -qR 包名 查询系统中和已经按住给你的软件包有依赖关系的软件包
选项: -q 查询
-a 所有
-i 查询软件信息
-l 列出软件包中所有的文件列表和软件所安装的目录
-p 查询还没有安装的软件包信息
-f 查询系统文件属于哪个文件包
-R 查询软件包的依赖性

软件包管理之验证和数字证书

验证

1
2
3
4
5
6
7
8
9
基本命令
rpm -Va 校验本机已经安装的所有软件包
rpm -V 包名 校验指定的已经安装的软件包中的文件
rpm -Vf 系统文件名 校验某个系统文件是否被修改
选项:
-Va 校验本机已经安装的所有软件包
-V 校验指定的已经安装的软件包中的文件
-Vf 校验某个系统文件是否被修改
缺点:但是如果rpm包, 本身就被动过手脚,那么校验就不能解决问题了.还是需要使用数字证书.

数字证书

1
2
3
4
5
6
7
8
数字证书有如下特点:
首先必须找到原厂的公钥文件,然后进行安装;
再安装rpm包时, 会去提取RPM包中的证书信息,然后和本机安装的原厂证书进行验证;
如果验证通过,则允许安装;如果验证不通过, 则不允许安装并警告.
数字证书的位置: 默认安装在系统中.位置是 /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOs6

Centos7里, 数字证书不需要导入, 安装后就有(可能最小化安装需要)