【Linux】软件包管理超详细笔记

文章目录

软件包管理简介

软件包分类

  • 源码包

    源码包需要先编译成二进制包,再进行安装,因此安装较慢。

    源码包中还有一种比较特殊的包叫脚本安装包,这种包不需要手动安装,但这种包不多。

  • 二进制包(RPM包、系统默认包)

    二进制包是通过源码包编译后产生的,安装起来较快,但不能看到源代码。

两种软件包的比较

源码包

  • 优点

    • 开源,可以修改源代码。
    • 源码包先进行编译后再安装,更适合自己的系统,也更加稳定,效率更高。
    • 可以*选择所需功能。
    • 卸载方便,不会遗留垃圾文件。
  • 缺点

    • 安装步骤多,如果安装较大的软件集合,容易出现拼写错误 。
    • 安装时间较长。
    • 因为是编译安装,安装过程如果报错,新手很难解决。

RPM包

  • 优点

    • 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载。
    • 安装速度较快。
  • 缺点

    • 无法看到源代码。
    • 功能选择没有源码包灵活。
    • 有依赖性。

RPM包管理-rpm命令管理

RPM包命名规则

httpd-2.2.15-15.el6.centos.l.i686.rpm

httpd 软件包名

2.2.15 软件包版本

15 软件发布次数

el6.centos 适合的Linux平台

i686 适合的硬件平台

rpm rpm包扩展名

RPM包依赖性

  • 树形依赖:a→b→c

    通俗来说就是装软件包a,要先装软件包b,装软件包b又要先装软件包c

  • 环形依赖:a→b→c→a

    解决环形依赖的方法就是a、b、c同时安装。

  • 模块依赖:模块依赖查询网站

包全名与包名

  • 包全名:操作的包是没有安装的软件包时,使用包全名(如安装和更新),还要注意路径。
  • 包名:就是上面命名规则中的httpd,操作已经安装的软件包时,使用包名,是搜索/var/lib/rpm/中的数据库。

RPM安装命令

rpm -ivh 包全名
选项:
	-i(install)		安装
	-v(verbose)		显示详细信息
	-h(hash)		显示进度
	--nodeps		不检测依赖性

下面装一个Apache软件包来演示一下
首先创建挂载点,挂载进去后再进入光盘目录下:

[root@localhost ~]# mkdir /mnt/cdrom
[root@localhost ~]# mount /dev/sr0 /mnt/cdrom
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# cd /mnt/cdrom
[root@localhost cdrom]# ls
CentOS_BuildTag  images    repodata
EFI              isolinux  RPM-GPG-KEY-CentOS-7
EULA             LiveOS    RPM-GPG-KEY-CentOS-Testing-7
GPL              Packages  TRANS.TBL

然后进入到Packages目录下:

[root@localhost ~]# mkdir /mnt/cdrom/Packages

【Linux】软件包管理超详细笔记

由于操作的是未安装包,因此我们使用包全名,还要注意,如果没有进Packages目录,安装时需要写明路径。

我们先输入包名httpd-然后按Tab键就可以列出目录中所有以**httpd-**的安装包。

[root@localhost Packages]# rpm -ivh httpd-
httpd-2.4.6-95.el7.centos.x86_64.rpm
httpd-devel-2.4.6-95.el7.centos.x86_64.rpm
httpd-manual-2.4.6-95.el7.centos.noarch.rpm
httpd-tools-2.4.6-95.el7.centos.x86_64.rpm

这四个都是Apache的必须包,一般情况下先装主包,再装附加包。

【Linux】软件包管理超详细笔记

那么我们先装主包。

[root@localhost Packages]# rpm -ivh httpd-2.4.6-95.el7.centos.x86_64.rpm

这时会报依赖性错误,并提示缺少哪几个包。

【Linux】软件包管理超详细笔记

那么我们就先来安装这提示缺少的几个包先来安装第一个。

【Linux】软件包管理超详细笔记

先把提示性信息写下来再按Tab键自动补全。

[root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-95.el7.centos.x86_64.rpm

然后又报了依赖性错误。

【Linux】软件包管理超详细笔记

并且这里依赖的是模块,不知道要装什么包。

【Linux】软件包管理超详细笔记

那么就需要我们上面提到的模块依赖查询网站进行查询。

【Linux】软件包管理超详细笔记

我的是CentOS7.9,回到终端装上装对应的包。

[root@localhost Packages]# rpm -ivh apr-1.4.8-7.el7.x86_64.rpm

【Linux】软件包管理超详细笔记

同样,第二个模块依赖也用同样的方法解决。

完成后,再安装httpd-tools-2.4.6-95.el7.centos.x86_64.rpm就不会报错了。

[root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-95.el7.centos.x86_64.rpm

好了,依赖的包都安装好了,接下来我们就能成功安装主包了。

[root@localhost Packages]# rpm -ivh httpd-2.4.6-95.el7.centos.x86_64.rpm

很不幸的是,经过这一通操作,我们只是装了主包,还有三个附加包还未安装。

【Linux】软件包管理超详细笔记

经过同样的操作,我们再把三个附加包也安装好。

RPM包升级

rpm -Uvh 包全名

注意:U是大写。

卸载

rpm -e 包名
选项:
	-e	卸载
	--nodeps	不检查依赖性

注意:不一定在Packages目录下执行,而且只用包名即可,不需要包全名。

例如我卸载刚刚的Apache:

[root@localhost cdrom]# rpm -e httpd

但报了依赖性错误,如下图:

【Linux】软件包管理超详细笔记

这时我们把先两个依赖的包卸载,再回头卸载httpd即可。

【Linux】软件包管理超详细笔记

查询是否安装

rpm -q 包名
rpm -qa (查询所有安装的rpm包)

查询软件包详细信息

rpm -qi 包名
选项:
	-i	查询软件信息
	-p	查询未安装包信息

查询包中文件安装位置

rpm -ql 包名
选项:
	-l	列表(list)
	-p	查询未安装包信息

查询系统文件属于那个RPM包

rpm -qf	系统文件名
选项:
	-f	查询系统文件属于哪个软件包

查询软件包的依赖性

rpm -qR	包名
rpm -qRp 包全名(查询未安装包的依赖性)

RPM包校验

rpm -V 包名

验证内容中的8个信息的含义:

S 文件大小是否改变

M 文件的类型或文件的权限(rwx)是否被改变

5 文件MD5校验和是否改变(可以看成文件内容是否改变)

D 设备的中,从代码是否改变

L 文件路径是否改变

U 文件的所有者是否改变

G 文件的所属组是否改变

T 文件的修改时间是否改变

RPM包中文件提取

rpm2cpio 路径+包全名 | cpio -idv .绝对路径

rpm2cpio
#将rpm包转换为cpio格式的命令

cpio
#是一个标准工具、它用于创建软件档案文件和从档案文件中提取文件

RPM 包管理-yum在线管理

IP地址配置

先用命令ifconfig查看网关,我的是ens33,然后执行下列命令,注意最后一个改为你自己的网关:

vi /etc/sysconfig/network-scripts/ifcfg-ens33

然后将文件里的OMBOOT=“no"改成OMBOOT=“yes",保存退出。

再用以下命令重启网络服务:

service network restart

现在就可以ping通百度了。

如果无法ping通的可以参考下面这篇文章:

VMware下centos7配置静态ip并解决ping不通百度的问题

网络yum源

网络yum源本身已经配好了,不需要我们再配置,我们下面来看看它的配置文件的含义就好了。

首先打开配置文件:

vi /etc/yum.repos.d/CentOS-Base.repo

【Linux】软件包管理超详细笔记

下面来解释一下红框中的东西是什么含义:

[base] 容器说明,要放在[]中

name 容器说明,可以随便写

mirrorlist 镜像站点,可以注释掉

baseurl yum源服务器的地址。默认是CentOS官方的yum源服务器, 可以改成其他yum源地址

enable 不写或写成

yum命令

查询

yum list 		#查询所有可用软件包列表
yum search 关键字	#搜索服务器上所有和关键字相关的包

安装

yum -y install 包名

升级

yum -y update 包名

卸载

yum -y remove 包名

yum软件组管理命令

yum grouplist  #列出所有可用的软件组列表
yum groupinstall 软件名    #安装指定软件组,注明可以由grouplist查询出来
yum groupremove 软件组组名	#卸载指定软件组

光盘yum源搭建

首先挂载光盘:

mount /dev/cdrom /mnt/cdrom

进入目录:

cd /etc/yum.repos.d/

然后让网络yum源文件失效,只有网络yum源文件失效光盘yum源文件才起作用。

注意只有下图红框圈出的为光盘yum源,也就是其他7个都是网络yum源文件。

这时我们将网络yum源的名字改一下就可以让其失效。

mv CentOS-Base.repo CentOS-Base.repo.bak
mv CentOS-Vault.repo CentOS-Vault.repo.bak
mv CentOS-fasttrack.repo CentOS-fasttrack.repo.bak
mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
mv CentOS-CR.repo CentOS-CR.repo.bak
mv CentOS-Sources.repo CentOS-Sources.repo.bak
mv CentOS-x86_64-kernel.repo CentOS-x86_64-kernel.repo.bak

下面再来修改光盘yum源文件:

vim CentOS-Media.repo

【Linux】软件包管理超详细笔记

这样就搭建好光盘yum源了,用光盘yum源的好处是可以离线下载,且下载更快。

但版本不会自动更新,即下载的可能不是最新版本。

源码包管理

源码包和RPM包的区别(安装位置)

RPM包安装位置

安装在默认位置

【Linux】软件包管理超详细笔记

源码包安装位置

安装在指定位置,一般是**/usr/local/软件名/**

安装位置不同带来的影响

  • RPM包安装的服务可以使用系统服务管理命令来管理。例如RPM包安装的Apache的启动方法有两种:
#直接通过绝对路径开启服务
/etc/rc.d/init.d/httd start
#利用systemctl服务管理命令开启服务,使用systemctl会自动到绝对路径下去找httpd
systemctl start httpd
  • 源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中,只能通过绝对路径进行服务管理。

源码包安装过程

安装准备

  • 安装C语言编译器
rpm -q gcc
  • 下载源码包

安装注意事项

  • 源代码保存位置:/usr/local/src/
  • 软件安装位置:/usr/local/

源码包安装过程

  • 下载源码包

    我是从官网下载的,然后通过软件WinSCP将安装包转到Linux下。

    【Linux】软件包管理超详细笔记

    然后在Linux的home目录下就有这个安装包了。

    【Linux】软件包管理超详细笔记

  • 解压缩下载的源码包。

tar -zxvf httpd-2.4.52.tar.gz
  • 进入解压缩目录。
cd httpd-2.4.52/

在目录下有一个叫ISTALL的文件,我们打开它,里面有安装步骤,我们照做就行。

【Linux】软件包管理超详细笔记

  • ./configure 软件配置与检查
  1. 定义需要的功能选项。
  2. 检测系统环境是否符合安装要求。
  3. 把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用 于后续编辑。
./configure --prefix=/usr/local/apache2
  • make 编译

    • 若前面有报错,则用命令make clean清空编译产生的临时文件
  • make install 编译安装

  • 安装完毕,启动

/usr/local/apache2/bin/apachectl start

这时会有一个报错,但不影响使用。

【Linux】软件包管理超详细笔记

然后在浏览器中输入我们虚拟机的ip地址,就能显示It works!

源码包的卸载

不需要卸载命令,直接删除安装目录即可,不会遗留任何垃圾文件。

rm -rf /usr/local/apache2/

源码包安装和RPM包的选择

要根据这个软件包的用途进行选择,如果是对外提供访问的,访问量大,则用源码包,源码包经过编译,计算效率更高。

如果不对外提供访问,则可以用RPM包进行安装。

脚本安装包

什么是脚本安装包

  • 脚本安装包不是独立的软件包类型,常见安装的是源码包。
  • 是人为把安装过程写成自动安装的脚本,只要执行脚本,定义简单参数,就可以完成安装。
  • 非常类似于Windows下软件的安装方式。

下面已安装软件包Webmin为例进行演示:

  • 软件下载,网址
  • 解压,进入目录。
tar -zxvf webmin-1.984.tar.gz
cd webmin-1.984
  • 执行安装脚本。

    目录下的setup.sh就是安装脚本

./setup.sh 

全部回车默认即可,我这里的默认端口号是10000,安装完毕后,在浏览器输入ip地址加端口号即可访问。

【Linux】软件包管理超详细笔记

参考资料:

[1]https://blog.csdn.net/qq_33355821/article/details/100667144

[2]https://www.bilibili.com/video/BV1mW411i7Qf

上一篇:1.14 linux/windows基础操作


下一篇:FastAPI(七十一)实战开发《在线课程学习系统》接口开发-- 查看留言