1.软件包分类
1.1软件包的分类
- 源码包
- 二进制包
- 脚本安装包
1.2源码包
1.2.1源码包的样子
源码包可以认为是利用不同的计算机语言而写的包, 我们打开相应的文件也能看到相应的源码
1.2.2源码包的特点
源码包的优点:
- 开源, 如果有足够的能力, 可以修改源代码
- 可以自由选择所需的功能
- 软件是编译安装的, 所以更加适合自己的系统, 更加稳定和高效
- 卸载方便
缺点:
- 安装过程步骤比较多, 尤其是安装较大软件集合时, 容易出现错误
- 编译过程较长, 安装比二进制安装时间长
- 因为是编译安装, 安装过程中出现报错新手很难解决
1.3二进制包
1.3.1二进制包的分类
- DPKG包: 由Debian Linux所开发出来的包管理机制, 通过DPKG包, Debian Linux就可以进行软件包管理. 主要应用在Debian和unbuntu中
- RPM包: 由Red Hat公司所开发的包管理系统. 功能强大, 安装, 升级, 查询和卸载都很方便. 目前很多Linux都在使用这种包管理方式, 包括Fedora, CentOS等.
1.3.2特点
RPM包的优点:
- 包管理系统简单, 只通过几个命令就可以实现包的安装, 升级, 查询和卸载
- 安装速度比源码包安装的快
RPM包的缺点:
- 经过编译, 不能看到源码
- 功能选择不如源码包灵活
- 依赖性. 又是我们发现需要安装软件包a是需要先安装软件包b和c, 而安装b时需要安装d和e. 这就需要我们先安装d和e, 在安装b和c, 最后才能安装a. 是有一定顺序的
1.3.3RPM包依赖
1)树形依赖 a-->b-->c
2)环形依赖 a-->b-->c-->a
3)函数库依赖
什么是模块依赖?我们可以安装一下文件进行尝试:
rpm -ivh mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm
错误: 依赖检测失败
libodbc.so.2()(64bit) 被 mysql-connector-odbc-5.2.5-7.el7.x86_64 需要libodbcinst.so.2()(64bit) 被 mysql-connector-odbc-5.2.5-7.el7.x86_64 需要
发现报错, 需要安装libodbc.so.2函数库文件, 这时会发现在光盘中根本找不到这个文件. 那是因为函数库没有单独成包, 是包含在某一个软件包中的. 如果要知道在那个软件包中, 需要查询网站www.rpmfind.net
2.rpm安装
2.1rmp包命名规则
httpd-2.2.15-15.e16.centos.1.i686.rpm
- httpd软件包名
- 2.2.15软件版本号
- 15软件的发布次数
- e16软件发行商
- i686适合的硬件平台. RPM包可以在不同的硬件平台安装, 选择适合不同CPU的软件版本, 可以最大化的发挥CPU的性能
- rpm扩展名
包全名: 如果操作的是未安装的软件包, 则使用包全名, 而且需要注意绝对路径
包名: 如果操作的是已经安装的软件包, 则使用包名, 系统会产生RPM包的数据库(/var/lib/rpm/), 而且可以在任意路径下操作
2.3rpm包手工命令安装
2.3.1默认安装位置
路径 | 介绍 |
---|---|
/etc/ | 配置文件安装目录 |
/usr/bin/ | 可执行命令的安装目录 |
/usr/lib/ | 程序所使用的函数库保存位置 |
/usr/share/doc/ | 基本的软件使用手册保存位置 |
/usr/share/man/ | 帮助文件保存位置 |
2.3.2RPM包安装
1)安装命令
rpm -ivh 包全名
# 注意一定似乎包全名, 如果包全名要注意路径, 应为软件包在光盘当中
选项:
-i: install安装
-v: 显示更详细的信息
-h: 打印和显示安装进度
- --relpacefiles: 替换文件安装. 如果安装软件包, 可是包中文件已经存在, 那么正常安装时, 会报错"某个文件已经存在"从而导致软件无法安装, 使用这个选项可以忽视这个报错, 而覆盖安装
- --replacepkgs: 替换软件包安装. 如果软件包已经存在, 此选项可以包软件包重复安装一遍
- --force: 强制安装. 不管是否已经安装, 都重新安装. 就是以上两种的综合
- --test: 测试安装. 不会实际安装, 只是检测一下依赖性
- --prefix: 指定安装路径. 一般不会使用
2)服务启动
service 服务名 start|stop|restart|status(查看服务状态)
2.3.3RPM包升级
rmp -Uvh 包全名
选项:
-U(大写): 升级安装. 如果没有安装过, 系统直接安装. 如果安装过旧的版本, 就会升级到最新版
-F(大写): 升级安装, 如果没有安装过, 则不会安装, 必须有旧的版本才能升级
2.3.4卸载
rpm -e 包名
2.3.5查询
1)查询软件包是否安装
rmp -q 包名
选项:
-q: 查询
2)查询系统中的所有安装软件包名
rmp -qa
当然我们能用管道符查找我们所需要的内容
rmp -qa | grep httpd
3)查询软件包的详细信息
可以查看已经安装的某个软件包的详细信息
rpm -qi 包名
选项:
-i: 查询软件信息
也可以查看没有安装的软件包的详细信息
rpm -qip 包全名
选项:
-p: 没有安装的软件包(package)
4)查询软件包中的文件列表
可以查看已经安装的软件包中的文件列表和完整目录
rpm -ql 包名
选项:
-l: 列出软件包中所有的文件列表和软件所安装的目录
那么, 可以查询还没有安装的软件包中的文件列表和打算安装的位置吗?答案是可以的
rpm -qlp 包全名
选项:
-p: 查询没有安装软件包的信息
5)查询系统文件属于哪个RPM包
rpm -qf 系统文件名(必须是RPM包建立的文件)
选项:
-f: 查询系统文件属于哪一个软件包
6)查询软件所依赖的软件包
rpm -qR 包名
选项:
-R: 查询软件的依赖性(requires)
可以查询没有暗转的软件包的依赖性吗? 加上"-p"选项即可. 例如, 查看一下还没有安装的bind软件包的依赖性, 可以执行如下命令:
rpm -qRp 包全名
2.3.6验证
1)基本命令
rpm -Va
选项:
-Va: 校验本机已经安装的所有软件包
rpm -V 已经安装的包名
选项:
-V: 校验指定RPM包中的文件(verify)
rpm -Vf 系统文件名
选项:
-Vf: 校验某个系统文件是否被修改
2)验证举例
出现了提示信息, 我们解释最前面8个信息的内容, 表示检验内容的. 文件名前面的c是表示这个配置文件(configuration). 最后是文件名.验证的内容中的8个信息的具体内容如下:
- S: 文件大小是否改变
- M: 文件的类型或文件的权限是否被改变
- 5: 文件MD5校验和是否改变(可以看成文件的内容是否改变)
- D: 设备的主从代码是否改变
- L: 文件的路径是否改变
- U: 文件的属主(所有者)是否改变
- G: 文件的属组是否改变
- T: 文件的修改时间是否改变
2.3.7数字证书
刚刚的校验方法只能对已经安装的RPM包中的文件进行校验, 但是如果RPM包本身被动过手脚, 那么校验就能解决问题. 我们需要数字证书校验了
数字证书有如下特点:
- 首先必须找到原厂的公钥文件, 然后进行安装
- 再安装RPM包, 会提取RPM包中证书的信息, 然后和本机安装的原厂证书进行验证
- 如果验证通过, 则允许安装; 如果验证不通过, 则不允许安装并警告
1)数字证书位置
数字证书在哪里呢?其实在CentOS的第一张光盘中, 当然它默认也会放在系统中:
ll /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
# 系统中数字证书位置
2)数字证书导入
rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
选项:
-import: 导入数字证书
2.4rpm包在线安装(yum安装)
2.4.1yum源文件解析
yum源配置文件保存在/etc/yum.repos.d目录中, 文件的扩展名一定是"*.repo". 也就是说, yum源配置文件只要扩展名是"*.repo"就会生效
这个目录中有5个yum源配置文件, 默认情况下CentOS-Base.repo文件生效. 我们打开这个文件看看:
在CentOS-Base.repo文件中有5个yum源容器, 这里只列出了base容器, 其他容器和base容器类似. 我们来解释一下base这个容器
- [base]: 容器名称, 一定要放到[]中
- name: 容器说明, 可以自己随便写
- mirrorlist: 镜像站点, 这个可以注释掉
- baseurl: 我们的yum源服务器的地址. 默认是CentOS官方的yum源服务器, 是可以使用的. 如果你觉得慢, 可以改成你喜欢的yum源地址
- enabled: 此容器是否生效, 如果不行或者写成enable=1则表示此容器生效, 写成enabled=0则便是此容器不生效
- gpgcheck: 如果为1则表示RPM的数字证书生效; 如果为0, 则表示RPM的数字证书不生效
- gpgkey: 数字证书的公钥保存位置, 不能修改
2.4.2搭建本地光盘yum源
第一步: 放入CentOS安装光盘, 并挂载光盘到指定位置. 命令如下:
mkdir /mnt/cdrom # 创建cdrom目录, 作为光盘的挂载点
mount /dev/cdrom /mnt/cdrom/
mount: block device dev/sr0 is write-protected, mounting read-only
# 挂在光盘到/mnt/cdrom目录下
第二步: 修改其他几个yum源配置文件的扩展名, 让它们失效, 因为只有扩展名是*.repo的文件才能作为yum源配置文件. 当然也可以删除其他几个yum源配置文件, 但是如果删除了, 当你又想用网络作为yum源文件时, 就没有参考文件了, 所以最好还是修改扩展名. 命令如下
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.bak
mv CentOS-Debuginfo.repo CentOS-DeBuginfo.repo.bak
mv CentOS-Vault.repo CentOS-Vault.repo.bak
第三步: 修改光盘yum源配置文件CentOS-Media.repo
2.4.3yum命令
1)查询
- 查询yum源服务器上所有可安装的软件包列表
yum list # 查询所有可用的软件包列表
Installed Packages # 已经安装的软件包
- 查询yum源服务其中是否包含某个软件包
yun list 包名 # 查询单个软件包
- 搜索yum源服务器上所有的关键字相关的软件包
yum search 关键字
yum search搜索可以用于确定某个软件在哪个软件包当中. 此例子可以确定"ifconfig"命令需要安装"net-tools"包
- 查询指定软件包的信息
yum info samba #查询samba软件包的信息
2)安装
yum -y install 包名
选项:
install: 安装
-y: 自动回答yes
举例: yum -y install gcc # 使用yum自动安装gcc
3)升级
yum -y -update 包名
选项:
update: 升级
-y: 自动回答yes
注意:进行升级操作的时候, yum源服务器中软件包的版本要比本机安装的软件包的版本高
yum -y update #升级本机所有软件包
4)卸载
除非你确定卸载的软件的依赖包不会对系统产生影响, 否则不要执行yum卸载, 因为很有可能在卸载软件包的同时卸载的依赖包也是重要的系统文件, 这可能导致系统崩溃. 卸载命令如下:
yum remove 包名 # 卸载指定的软件包
2.4.4yum组管理命令
- 查询可以安装的软件组
yum grouplist # 列出所有可用的软件组列表
- 查询软件组内包含的软件
yum groupinfo 软件组名 # 列出软件组中包含的软件
- 安装软件组
yum groupinstall 软件组名 # 安装指定软件组, 组名可以由grouplist查询出来
例如:
yum groupinstall "Web Server"
- 卸载软件组
yum groupremove 软件组名 #卸载指定软件组
3.源码包安装
3.1注意事项
3.1.1应当选择哪种软件包
- 如果软件包是给大量客户提供访问, 建议使用源码包
- 如果软件包是给Linux底层访问, 或只给少量客户访问, 建议使用rpm包安装, 因为rpm包简单
3.1.2源码包哪里来的?
rpm包是光盘中直接包含的, 所以不需要用户单独下载. 而源码包是通过官方网站下载的, 如果需要使用, 是需要单独下载的
3.2安装过程
我们来解释一下源码包安装的具体步骤
- 下载软件包
- 解压缩
- 进入解压缩目录
- ./configure 编译前准备
这一步主要有三个作用:
①在安装之前检测系统环境是否符合安装要求
②定义需要的功能选项. "./configure"支持的功能较多, 可以执行"./configure --help"命令查询其支持的功能. 一般都会通过"./configure --prefix=安装路径"来指定安装路径.
③把系统环境检测结果和定义好的功能选项写入Makefile文件, 后续的编译和安装需要依赖这个文件的内容 - make 编译
make会调用gcc编译器, 并读取Makefile文件中的信息进行系统软件编译. 编译的目的就是把源码程序转变成能被Linux识别的可执行文件, 这些可执行文件保存在当前目录下, 编译过程较为耗时, 需要有足够的耐心 - make clean: 清空编译的内容(非必要步骤)
如果在"./configure"或"make"编译中报错, 那么我们在重新执行命令之前一定要记得执行make clean 命令, 它会清空Makefile文件或这编译产生的".o"头文件 - make install 编译安装
这才是真正的安装过程, 一般会写清楚程序的安装位置. 如果忘记指定安装目录, 则可以把这个命令的执行结果记录下来, 以备将来删除使用
3.3删除
源码包没有删除命令, 如果需要删除, 可以直接删除安装目录
3.4打入补丁
3.4.1补丁的生成
diff 选项 old new
#比较old和new文件的不同
选项:
-a: 将任何文档当作文本文档处理
-b: 忽略空格造成的不同
-B: 忽略空白行造成的不同
-I: 忽略大小写造成的不同
-N: 当比较两个目录的时候, 如果某个文件只在一个目录中, 则在另一个目录中视作空文件
-r: 当比较目录时, 递归比较子目录
-u: 使用同一的输出格式
举例:
比较下两个文件的不同, 并生成补丁文件"txt.patch".
diff -Naur old.txt new.txt > txt.patch # 比较两个文件的不同, 同时生成补丁文件
#后一个文件比前一个文件多两行(+表示)
3.4.2打入补丁
patch -pn < 补丁文件 # 按照补丁文件进行更新
选项:
-pn: n为数字, 代表按照补丁文件中的路径, 指定更新文件的位置
接下来, 我们更新下"old.txt"文件,命令如下: