概述
众所周知,在Linux系统下安装软件,大体上有2种方式:一种是通过源码自定义安装,也就是configure然后makefile,相信大家在一些软件的安装教程中已经领教过了;另一种就是通过软件包管理工具来进行安装。
源码安装有一些显而易见的缺点:比如说,每次安装都需要检测系统环境、设置编译参数、实际进行编译、还需要指定软件的安装路径。
第二种方式有点类似python中的pip安装,或者说类似于window系统下的软件安装。也就是说,大家都喜欢这种打开软件安装包,然后就无脑下一步就可以完成安装的模式。
linux中常用的软件包管理工具是RPM和YUM,这次对这两个工具来进行一些介绍。
什么是RPM和SRPM
RPM全称是【Redhat Package Manager】,最初是由红帽子公司开放的一种软件管理机制,后面扩展到了linux各个发行版,比如centos等。
RPM最大的特点是,将你要安装的软件事先进行编译,打包成RPM机制的文件。该文件记录了安装所必要的依赖软件,在实际安装时,首先检测依赖库是否满足,是则进行安装;否则会提示哪些依赖需要事先安装。在安装时,将软件信息写入RPM的数据库中,便于将来的查询、验证和卸载。
所以它的优点也显而易见:
- 软件安装包已经编译且打包,所以传输和安装很方便;
- 软件信息已记录,所以很方便查询、升级和卸载。
但是这样一来也产生了一个问题:
RPM的软件包中都是已编译好的数据,这就导致该软件包只能安装在完全一样的硬件和操作系统中。
举例来说就是,Red Hat发布的RPM文件,不能直接在centos上安装。
为了应对这个问题,就轮到SRPM登场了。
SRPM的全称是【Source RPM】,也就是带源码的RPM,其中的代码并未进行编译,通常是***.src.rpm格式的文件。其中也包含了configure和makefile文件,所以安装SRPM文件,你需要:
- 将软件按照RPM的方式编译,也就是将SRPM文件编译成RPM文件
- 然后安装RPM文件
因为SRPM文件中有configure文件,所以我们只要修改改文件,就能将软件安装到不同的linux系统中了。
一些扩展名的意思
我们下载rpm的安装文件时,通常见到这样的文件名,比如:
mysql-8.0.24-1.el7.x86_64.rpm
其中的各个命名含义是什么呢,其实是如下这样:
mysql-8.0.24-1.el7.x86_64.rpm
软件名称-软件版本-发布次数.适合的平台.扩展名
RPM的优点
前面已经提过一些了,总结来说,RPM有以下优点:
- 包含已经编译过的程序和配置文件,用户不需要重新编译
- 安装时会检测硬盘容量、系统版本等,判断是否满足安装条件
- RPM文件包含软件版本信息、用途说明、软件包含的文件等信息
- RPM使用数据库记录相关参数,便于升级、卸载和验证
已经重复过很多次了,RPM在安装时会进行依赖性检测,如果一些依赖软件不存在的话,就无法继续进行安装。那么如何解决依赖软件的问题呢,这就轮到YUM出场了。
解决RPM的依赖问题-YUM在线升级
有点类似项目中的requirements文件,列出RPM所需的软件列表,在安装RPM文件时,按照这个列表去检查系统中已有的软件。如果遇到没有安装软件,就自动安装。这就是YUM机制。
centos先将发布的软件保存在YUM服务器内,将这些软件的信息记录下来;然后分析这些软件的依赖关系,将这些依赖关系记录下来,制作成相关的列表。这些列表的数据,可能保存在本地或者网络上的位置,就称为软件源或软件仓库(repository)。
当客户端安装软件时,客户端会向网上的YUM服务器进行请求,下载软件列表;将该列表与本机上已有的软件进行比较,然后批量安装所有具有依赖的软件。
RPM命令
原理介绍的差不多了,接下来介绍一下如何使用rpm命令
RPM安装
rpm -ivh package_name
各参数含义:
-i:install 也就是安装
-v:查看详细安装信息
-h:显示安装进度
RPM升级
rpm -Uvh package_name-version-release.architecture.rpm
-Uvh 如果没有安装过该软件,会进行安装
-Fvh 只会更新已安装的软件
RPM查询
rpm -qa 查看本机安装的所有软件
rpm -q python 查看具体某个软件的安装情况
rpm -qi python 列出该软件的详细信息
rpm -ql python 列出该软件所有相关路径
qc qd : 查看配置文件和说明文件,其实就是查询etc下的配置文件和man有关文件
rpm -qR python 列出该软件所有依赖
-qf 列出属于哪个已安装的软件rpm -qp[icdlR] :qp表示查看rpm package的信息
RPM验证和数字签名(该功能主要用来判断系统是否被入侵
rpm -Va 列出当前系统上所有可能被修改过的文件
rpm -V softname 列出某软件被修改的内容
rpm -Vp rpmfilename 该文件被修改的内容
rpm -Vf filename 某文件是否被修改过
RPM软件卸载
rpm -e softname
注意只能从顶到底卸载,不能先卸载某些软件的依赖软件
YUM命令
查询软件
yum search softname 查找软件
yum info softname 查看软件详细信息
yum list 列出yum服务器上列出的所有软件
yum list pam* 列出已pam开头的软件
安装和卸载
yum install/uninstall softname
YUM的配置文件
yum命令真的是太简单使用了,安装软件变得很简单。不过系统的默认yum源可能不太OK,就好像pip源要默认设置国内的源一样,yum也推荐如下的清华大学的源
vim /etc/yum.repos.d/CentOS-Base.repo
修改为如下:
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#[base]
name=CentOS-$releasever - Base
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/updates/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/centosplus/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
可以使用如下命令来验证修改是否成功
yum repolist all
其他一些常用命令
yum makecache 更新软件包缓存
yum clean all 清理已下载的软件源相关数据