源码包可以认为是利用不同的计算机语言而写的包, 我们打开相应的文件也能看到相应的源码
源码包的优点:?
缺点:
RPM包的优点:?
RPM包的缺点:?
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
httpd-2.2.15-15.e16.centos.1.i686.rpm
包全名: 如果操作的是未安装的软件包, 则使用包全名, 而且需要注意绝对路径
包名: 如果操作的是已经安装的软件包, 则使用包名, 系统会产生RPM包的数据库(/var/lib/rpm/), 而且可以在任意路径下操作
路径 | 介绍 |
---|---|
/etc/ | 配置文件安装目录 |
/usr/bin/ | 可执行命令的安装目录 |
/usr/lib/ | 程序所使用的函数库保存位置 |
/usr/share/doc/ | 基本的软件使用手册保存位置 |
/usr/share/man/ | 帮助文件保存位置 |
1)安装命令
rpm -ivh 包全名
# 注意一定似乎包全名, 如果包全名要注意路径, 应为软件包在光盘当中
选项:?
? ? ? ? -i: install安装
? ? ? ? -v: 显示更详细的信息
? ? ? ? -h: 打印和显示安装进度
2)服务启动
service 服务名 start|stop|restart|status(查看服务状态)
rmp -Uvh 包全名
选项:?
? ? ? ? -U(大写): 升级安装. 如果没有安装过, 系统直接安装. 如果安装过旧的版本, 就会升级到最新版
? ? ? ? -F(大写): 升级安装, 如果没有安装过, 则不会安装, 必须有旧的版本才能升级
rpm -e 包名
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 包全名
1)基本命令
rpm -Va
选项:
? ? ? ? -Va: 校验本机已经安装的所有软件包
rpm -V 已经安装的包名
选项:
? ? ? ? -V: 校验指定RPM包中的文件(verify)
rpm -Vf 系统文件名
选项:?
? ? ? ? -Vf: 校验某个系统文件是否被修改
2)验证举例
出现了提示信息, 我们解释最前面8个信息的内容, 表示检验内容的. 文件名前面的c是表示这个配置文件(configuration). 最后是文件名.验证的内容中的8个信息的具体内容如下:
刚刚的校验方法只能对已经安装的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: 导入数字证书
yum源配置文件保存在/etc/yum.repos.d目录中, 文件的扩展名一定是"*.repo". 也就是说, yum源配置文件只要扩展名是"*.repo"就会生效
这个目录中有5个yum源配置文件, 默认情况下CentOS-Base.repo文件生效. 我们打开这个文件看看:
在CentOS-Base.repo文件中有5个yum源容器, 这里只列出了base容器, 其他容器和base容器类似. 我们来解释一下base这个容器
第一步: 放入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
1)查询
yum list? ? # 查询所有可用的软件包列表
Installed Packages? ? ?# 已经安装的软件包
yun list 包名? ? ? ? ?# 查询单个软件包
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 包名? ? ?# 卸载指定的软件包
yum grouplist? ? ? # 列出所有可用的软件组列表
yum groupinfo 软件组名? ? ? # 列出软件组中包含的软件
yum groupinstall 软件组名? ? ?# 安装指定软件组, 组名可以由grouplist查询出来
例如:
yum groupinstall "Web Server"
yum groupremove? ?软件组名? ? ? ? #卸载指定软件组
rpm包是光盘中直接包含的, 所以不需要用户单独下载. 而源码包是通过官方网站下载的, 如果需要使用, 是需要单独下载的
我们来解释一下源码包安装的具体步骤
源码包没有删除命令, 如果需要删除, 可以直接删除安装目录
diff 选项 old new
#比较old和new文件的不同
选项:
? ? ? ? -a: 将任何文档当作文本文档处理
? ? ? ? -b: 忽略空格造成的不同
? ? ? ? -B: 忽略空白行造成的不同
? ? ? ? -I: 忽略大小写造成的不同
? ? ? ? -N: 当比较两个目录的时候, 如果某个文件只在一个目录中, 则在另一个目录中视作空文件
? ? ? ? -r: 当比较目录时, 递归比较子目录
? ? ? ? -u: 使用同一的输出格式
举例:
比较下两个文件的不同, 并生成补丁文件"txt.patch".
diff -Naur old.txt new.txt > txt.patch? ? ? ? # 比较两个文件的不同, 同时生成补丁文件
#后一个文件比前一个文件多两行(+表示)
patch -pn < 补丁文件? ? # 按照补丁文件进行更新
选项:
? ? ? ? -pn: n为数字, 代表按照补丁文件中的路径, 指定更新文件的位置
接下来, 我们更新下"old.txt"文件,命令如下: