Linux之软件包管理

一、软件包管理简介

在Linux系统中,软件包管理是一项重要的任务,可以帮助用户方便地安装、升级和卸载软件包。

1、软件包分类

  • 源代码包:源代码包包含软件的源代码,用户需要将源代码编译成可执行文件,才能在系统中运行软件。
  • 二进制包(RPM包、系统默认包):二进制包包含已经编译好的可执行文件,用户可以直接在系统中安装并运行软件。

2、源代码包优缺点

优点:

  • 开源:用户可以自由地查看、修改、复制和分发软件源代码。此外,开源软件通常具有丰富的插件和扩展,用户可以根据自己的需要增加或删除某些功能。
  • 灵活性:用户可以根据自己的需要对软件进行自定义配置和编译。例如,用户可以通过修改编译选项来优化软件的性能和功能。
  • 可靠性:源代码包通常具有开放的源代码,用户可以查看和审查源代码,确保软件的安全性和稳定性。
  • 社区支持:大多数开源软件都有一个庞大的社区支持,用户可以通过社区获取支持和帮助,以及参与到软件开发中来。
  • 教育性:通过编译源代码,用户可以更好地了解软件的内部工作原理和结构,从而增加编程经验和技能。

缺点:

  • 学习门槛高:使用源代码包需要一定的编程知识和经验,对于不熟悉编程的用户来说比较困难,安装过程一旦报错新手很难解决。
  • 编译时间长:编译源代码需要一定的时间和计算资源,尤其是对于大型软件项目来说,可能需要数小时或数天的时间。
  • 依赖关系复杂:源代码包通常有多个依赖关系,如果缺少某些依赖库或工具,就无法编译软件。
  • 安装过程繁琐:由于源代码包需要进行编译和安装,安装过程比较繁琐,需要用户手动执行多个命令。尤其安装较大的软件集合时(如LAMP环境搭建),容易出现错误。

3、二进制包优缺点

优点:

  • 简单快速:用户可以直接下载和安装二进制包,无需编译和配置,安装过程简单快速。
  • 易于管理:二进制包通常具有预定义的目录结构和依赖关系,用户可以方便地管理和卸载软件,而不会影响系统的其他部分。
  • 兼容性强:二进制包通常具有跨平台的特性,可以在不同版本和发行版的Linux系统中使用。

缺点:

  • 可定制性低:由于二进制包已经经过编译,用户无法修改其源代码,因此二进制包的可定制性较低,用户无法根据自己的需要进行个性化的修改和定制。
  • 依赖关系复杂:二进制包通常需要依赖于其他的库和软件,如果这些依赖关系不满足,可能会导致软件无法正常运行,用户需要自行解决依赖关系问题。
  • 兼容性问题:由于不同的Linux发行版和版本之间存在差异,二进制包可能不兼容或存在问题,用户需要选择合适的二进制包或者进行额外的配置和调试。

二、RPM包管理-rpm命令

1、RPM包命名规则

RPM(Red Hat Package Manager)包是一种常见的Linux软件包格式,常用于Red Hat、Fedora和CentOS等Linux发行版中。RPM包的命名规则通常遵循以下格式:
--..rpm
其中:

  • 表示软件包的名称,通常为小写字母,可以包含数字和连字符“-”。
  • 表示软件包的版本号,通常由数字和小数点组成,例如“1.0”、“2.3.4”等。
  • 表示软件包的发布号,还可能包含适应的操作系统,通常由数字和字母组成,例如“1”、“beta2”等。
  • 表示软件包的架构,通常为小写字母或数字,例如“x86_64”、“i386”等。
RPM包 nginx-1.18.0-1.el7.x86_64.rpm
nginx 软件包的名称
1.18.0 软件包的版本号
1 软件包的发布号
el7 适用于 CentOS 7 操作系统
x86_64 适用于 64 位的 x86 架构

上面这个例子完整含义是:名称为“nginx”,版本号为“1.18.0”,发布号为“1”,适用于 CentOS 7 操作系统的特定补丁和版本修订,并且适用于 64 位的 x86 架构的计算机。

2、RPM包依赖性

运行时依赖与构建时依赖

在 Linux 中,RPM 包依赖性指的是一个 RPM 包所依赖的其他 RPM 包。这些依赖性可以分为两类:运行时依赖构建时依赖

  • 运行时依赖:指的是一个 RPM 包在运行时需要依赖的其他 RPM 包。
  • 构建时依赖:指的是一个 RPM 包在构建时需要依赖的其他 RPM 包。

在 RPM 包中,依赖性通常以RequiresBuildRequires标签的形式进行定义。其中,Requires标签用于定义运行时依赖性,而BuildRequires标签用于定义构建时依赖性。这些标签中通常会包含其他 RPM 包的名称、版本号、发布号以及其他特定的版本信息,以确保软件包的正确安装和运行。

树形依赖与环形依赖

在 RPM 包管理中,依赖关系也可以被归为树形依赖和环形依赖:

  • 树形依赖:指的是 RPM 包之间的一种层次化的依赖关系,也称为递归依赖关系。例如:a->b->c,一个软件包可能依赖于某个库文件,而该库文件又依赖于另一个库文件,依此类推,形成一个依赖树。在安装软件包时,系统会按照依赖树的层次结构递归地安装所有依赖软件包。
  • 环形依赖:指的是 RPM 包之间的一种相互依赖的关系,也称为循环依赖关系。例如:a->b->a,软件包 a 依赖于软件包 b,而软件包 b 又依赖于软件包 a,形成一个环形依赖关系。在这种情况下,如果安装其中任何一个软件包,都可能导致依赖关系无法满足,从而导致安装失败。

在 RPM 包管理中,可以通过检查 RPM 包的RequiresProvides标签来确定其依赖关系。通常,在安装 RPM 包之前,需要先检查其依赖关系,并确保所有依赖软件包已经安装或可以被安装。否则,可能会导致安装失败或软件包无法正常运行。

注:当我们安装软件报缺少其他依赖包时,可以通过Rpmfind mirror网站查询。Rpmfind mirror 是一个提供 RPM 软件包搜索和下载服务的网站。它提供了各种不同 Linux 发行版(如 Red Hat、Fedora、CentOS、SUSE 等)的 RPM 软件包下载,用户可以通过关键字搜索或者选择对应的 Linux 发行版和版本来查找所需的 RPM 软件包。

3、RPM安装、升级、卸载

命令 rpm [选项] .rpm
-i(install) 表示安装软件包
-v(verbose) 显示详细信息
-h(hash) 显示进度
-U(upgrade) 升级已安装的 RPM 软件包
-e(erase) 卸载已安装的 RPM 软件包

注:
安装:rpm -ivh .rpm
升级:rpm -Uvh .rpm
卸载:rpm -e

4、RPM查询命令

命令 rpm [选项] [软件包名称]
-q(query ) 查询已安装的软件包信息
-i(info) 显示软件包的详细信息
-l(list) 列出软件包的文件列表
-R(requires) 显示软件包的依赖关系
-p(package) 查询未安装的软件包信息
-f(file) 查询未安装的软件包信息

例子:
1、查询已安装软件包的名称和版本:rpm -qa
2、查询指定软件包的详细信息:rpm -qi package_name
3、列出指定软件包中的文件:rpm -ql package_name
4、列出软件包所安装的配置文件:rpm -qc package_name
5、询软件包的依赖性:rpm -qR package_name

5、RPM包的校验

验证RPM包的完整性命令:rpm -K package.rpm

该命令将检查RPM包是否被篡改,在RPM包安装完之后,系统会将最初的特征记录保存,将现在的文件与最初的文件进行比较,从而判断是否被做了修改。

输出结果中的前面的8个信息主要描述修改信息

  • S(文件大小):如果修改了文件,它的大小可能会发生变化,这取决于文件的修改方式和内容修改。
  • M(文件类型或文件权限(rwx)):修改文件权限可能会影响文件的类型和访问权限。例如,添加可执行权限会使普通文件变为可执行文件。
  • 5(文件MD5校验和):如果文件内容发生更改,文件的MD5校验和也将发生更改。在MD5散列算法中,即使只更改文件的单个比特,也会导致校验和的更改。
  • D(从代码中读取的设备):这通常适用于Linux内核中的设备驱动程序。对设备驱动程序进行更改可能会影响代码。
  • L(文件路径):如果更改了文件的路径,例如将文件从一个目录移动到另一个目录,则文件的路径将发生更改。
  • U(文件属主操作):修改文件的所有者可能会影响对该文件的访问,并且需要具有适当的访问权限才能进行修改。
  • G(文件属组):文件的属组也可以修改,修改文件的属组可能会影响对该文件的访问,并且需要具有适当的访问权限才能进行修改。
  • T(文件修改时间):文件的修改时间可以通过修改文件内容或文件权限进行更改。文件的修改时间不应与创建时间和访问时间混淆。

在输出信息中还有描述文件类型的字符:

  • c(configfile):配置文件,用于配置软件的参数、选项和设置,通常以文本格式保存,例如Apache服务器的httpd.conf或my.cnf数据库配置文件。
  • d(documentation):文档,包括各种文档、手册和帮助文件,通常以文本或HTML格式保存,与软件本身无关,但对于用户和开发人员很重要。
  • g(ghostfile):空文件又称为鬼文件,通常与某些进程和系统相关,提示文件存在但无内容。例如,/dev/null是一个特殊的设备文件,用于处理输出流,被视为是空文件。
  • l(licensefile):许可证文件,包含用于许可软件的法律条款和条件,可以是文本文件、HTML文件或PDF文件。许可证是软件使用的基本规则之一,以确保作者、贡献者和用户之间的权利和责任明确。
  • r(readme file):说明文件,是通常简要介绍软件、解释如何使用软件、如何安装软件、如何升级,以及可能遇到的其他有用信息。它是非正式的,通常以纯文本格式保存,以简化其使用。

6、RPM包的文件提取

从RPM包中提取文件:rpm2cpio package.rpm | cpio -idmv

这是一个提取RPM包中所有文件的命令,它使用两个命令组合在一起:

  • rpm2cpio:将RPM包转换为cpio格式,以便接下来的cpio命令可以处理它。
  • cpio:用于提取cpio格式的文件。在这种情况下,它提取rpm2cpio生成的cpio文件中的所有文件。

cpio命令采用以下选项:

  • i:表示提取文件。
  • d:同时创建目录。
  • m:保留文件的原始权限和属性。
  • v:输出详细信息。

将这两个命令组合在一起,它们会首先使用rpm2cpio将RPM包转换为cpio格式,然后使用cpio命令提取cpio文件中的所有文件,并在当前目录中提取它们。

当命令文件被误删,我们就可以使用提取命令从软件包中提取出缺失的命令文件来进行修复。

注:RPM是一种常用的 Linux 软件包格式,主要用于 Red Hat Enterprise Linux 和 Fedora 系统。而 Ubuntu 系统使用的是 DEB (Debian Package) 格式。因此在Ubuntu中想使用rpm,需要通过alien工具将RPM 软件包转换为 DEB 格式。

三、RPM包管理-yum在线管理

1、IP地址配置

我使用的是ubuntu,IP地址配置如下:

(1) 打开网络配置文件:vim /etc/network/interfaces
(2) 在该文件中编辑网络接口,如下示例:

auto enp0s3
iface enp0s3 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1

(3) 保存并退出文件;
(4) 重启网络服务(不同版本中命令可能不同);

注:在Ubuntu20.04版本之后,不再使用/etc/network/interfaces文件配置网络,而是使用/etc/netplan/01-network-manager-all.yaml文件。

2、网络yum源配置

(1) 打开 YUM 配置文件:vim /etc/yum.repos.d/local.repo
(2) 在该文件中添加以下内容:

[localrepo] //定义了一个软件仓库
name=Local Repository
baseurl=http://<server_ip_address>/<directory_name> //软件仓库地址
enabled=1 //已启用
gpgcheck=0  //不进行 GPG 检查

(3) 保存并退出文件;
(4) 更新 YUM 缓存:yum makecache
(5) 查看所有已配置的 YUM 源:yum repolist

注:/etc/yum.repos.d/local.repo 是一个 YUM 软件仓库配置文件,它包含有关特定软件仓库的信息,包括其名称、地址、状态等。

3、yum命令

语法:yum [选项] [操作] [包名]
常用选项:

  • -y:自动回答所有问题为"yes"
  • -q:静默模式,不输出详细信息
  • -d:开启调试模式,输出调试信息
  • -e:忽略GPG密钥检查
  • -h:显示帮助信息

常用操作:

  • install:安装指定软件包及其依赖项
  • update:更新指定软件包及其依赖项
  • remove:卸载指定软件包及其依赖项
  • search:搜索软件包
  • list:列出已安装的软件包
  • info:显示软件包信息

四、源码包管理

1、源码包与RPM包安装位置的区别

RPM包默认安装位置如下:

/bin 二进制可执行程序(通常是系统级应用程序)
/sbin 系统级管理员程序
/usr/bin 用户级别可执行程序(通常是第三方应用程序)
/usr/sbin 用户级别的管理员程序
/usr/local/bin 本地用户安装(非包管理器安装)的系统级可执行程序
/usr/local/sbin 本地用户安装(非包管理器安装)的系统级管理员程序
/usr/share/doc 应用程序文档和手册
/usr/lib 系统级别共享库文件
/lib 共享库文件
/etc 通常包含配置文件和其他系统级别的数据文件
/var 包含可以被变化的文件,如日志文件和缓存文件

源码包安装位置由安装者指定,一般推荐安装在/usr/local中。

安装位置不同带来的影响:
RPM包安装的服务可以使用系统服务管理命令(service) 来管理,例如apache的启动:service httpd start,原因是service命令会扫描默认路径。而源码包安装的服务则不能被服务管理命令管理,只能使用绝对路径进行服务的管理。

2、源码包安装过程

(1) 下载源码包
一般情况下,源码包可以从开发者的官网或开源软件库中下载,通常是一个压缩文件(tar.gz或tar.bz2等格式)或者是一个git或svn代码库。下载后,将压缩包解压至你想要安装的目录下。

(2) 配置安装参数
在解压缩后的源码包文件夹中,会有一个configure文件,这个文件会根据你的操作系统和硬件环境自动配置软件的安装参数,你也可以根据需要手动修改这些参数,例如安装路径、编译选项等。

(3) 编译源码
通过运行make命令来编译源码,这会将源代码编译为可执行二进制文件。如果你的电脑有多个处理器核心,可以通过添加-j参数来加速编译,例如make -j4。编译完成后,通过执行make install命令来安装程序,这会将可执行文件、配置文件、库文件等安装到系统指定目录中。

(4) 运行测试
安装完成后,你可以运行程序进行测试,看看是否能正常运行。如果程序需要配置文件,你需要手动创建配置文件,并将其放置在指定目录下。

注:如果源码包有依赖项,比如库文件或其他软件包,你需要先安装这些依赖项才能编译和安装程序。

你可能感兴趣的:(Linux基础,linux,运维,服务器)