软件管理
- 1、Linux中软件包的类型
- 2、安装包的名称含义
- 3、管理软件包命令rpm
- 4、本地软件仓库的搭建
- 5、软件管理命令dnf
- 6、网络软件仓库的搭建
- 6、epel源
- 7、第三方软件仓库的搭建方法
1、Linux中软件包的类型
一般软件包的类型有三种:
1、DEB格式,支持优班图系统的
2、RPM格式,支持红帽系统的
3、压缩格式(gz/bz2/xz),压缩格式又分为两种,一种是绿色软件,即解压安装好后,可以直接使用;另一种是源码安装需要编译才可以使用。
2、安装包的名称含义
比如这个安装包dhcp-server-4.3.6-40.el8.x86_64.rpm,它表达什么含义呢?
分为五个部分,第一部分表示软件的名称叫dhcp-server,第二部分表示软件的版本为4.3.6-40,第三部分表示软件的授权协议版本为el8,第四部分表示软件的架构为x86_64,即64位的,第五部分表示软件后缀类型为rpm。
3、管理软件包命令rpm
(1)rpm -ivh
安装参数组合 -i (install) -v (verbose) -h (hash)
(2)rpm -a
所有
(3)rpm -f
文件
(4)rpm -p
软件包
(5)rpm -q
查询
(6)rpm -l
软件安装文件列表
(7)rpm -e
卸载
(8)rpm -c
配置文件
(9)rpm -d
说明
(10)rpm --info
软件信息
(11)rpm --force
强制
(12)rpm --nodeps
忽略依赖性
(13)rpm --script
查询软件在安装或卸载过程中的运行脚本
(14)rpm -Kv
检测软件md5校验码
(15)rpm -V
检测已安装软件在系统中的文件被修改信息
实验测试如下面一系列图:安装软件(我这里已经安装过了,所以显示已安装)、查询软件名字、查询所有并抓取dhcp、查询软件安装的文件列表
查询某一个文件属于哪个软件、查询配置文件、查询说明、卸载软件
--info
需要和-q
一起使用,可以查看软件的完整信息
假如不小心把某个软件的配置文件误删了,这时软件无法使用,想重新安装,会提示已经安装过了,无法安装,现在就需要--force
强制安装
如下图,安装kolourpaint时提示依赖性失败,要先安装libs这个软件,但是安装libs这个软件时,提示依赖性失败,要先安装kolourpaint这个软件,这就很难受了,死循环。这时我们只能先--nodeps
忽略依赖性先安装一个,才能安装另外一个。
--scripts
和-q
一起使用,可以查询软件在安装或卸载过程中的运行脚本,来判断是否是流氓软件。
假如6这个安装包是原本的,我们复制他改名字为7,并追加东西进去,这时7这个安装包就被篡改过了,使用-Kv
时,原本6的安装包会显示校验通过,而改过的7安装包会显示BAD校验不通过。
假如安装好软件后,我们更改了某些配置文件,使用-V
就可以查看被更改的地方。
4、本地软件仓库的搭建
上面学习了rpm来安装软件,我们发现软件有很多依赖性,安装A需要B,然而安装B又需要A,如果我们一个一个手动去把依赖性全下载下来,很累。那有没有一个办法下载某一个软件时,自动下载全部的依赖性呢?有的,我们需要安装软件仓库,就类似于手机的应用商店,直接在他里面下载软件,可以把依赖性一起安装。下面介绍搭建软件仓库的办法。
首先我们需要先把安装系统的镜像文件放在电脑里,如图,这里放在了/isos/
,然后在根下创建一个新的目录叫westos
,把镜像文件挂载到/westos
上,现在westos里就有许多的软件包了。但是,系统不知道,那我们需要让系统知道,编写软件仓库的文件/etc/yum.repos.d/westos.repo
来让系统知道软件仓库的指向文件来源。
如图,编写的具体内容如下:由于有两个仓库AppStream和BaseOS,所以写了两个模块。先介绍第一个模块,第一行写的是仓库名称,第二行写的是描述,第三行写的是地址,第四行写的是授权认证(1代表开启,0代表关闭),如果授权认证开启了,那么就要多写认证的密钥,一般都在/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
,如果是没有开启,就不用写第五行的gpgkey了,第六行写的是该模块是否生效(1代表生效,0代表不生效),下一个模块同理。
编写完成后,如下图,使用dnf repolist
查看软件仓库已经搭建成功。使用dnf install gcc -y
下载gcc来测试是否成功,显示成功,可以看到不仅下载了gcc,还把gcc的六个依赖性安装了。
5、软件管理命令dnf
(1)dnf repolist
列出仓库信息
(2)dnf clean all
清除系统中已经加载的仓库缓存信息
(3)dnf list all
列出所有软件
(4)dnf list available
列出未安装的软件
(5)dnf list installed
列出已安装的软件
(6)dnf install
安装
(7)dnf remove
卸载
(8)dnf reinstall
重新安装
(9)dnf search
搜索
(10)dnf whatprovides
搜索包含文件的软件包
(11)dnf history
dnf 执行的历史
(12)dnf history info 9
dnf执行历史中9的详细信息
(13)dnf group list
列出软件组
(14)dnf group list --installed
列出已安装软件组
(15)dnf group list --available
列出未安装软件组
(16)dnf group list --hidden
列出隐藏软件案组
(17)dnf group install
安装软件组
(18)dnf group info
查看软件组信息
实验如下图,软件仓库搭建好后,会缓存在/var/cache/dnf/
里,如果dnf clean all
就会清除系统中已经加载的仓库缓存信息。
安装或卸载软件时加-y
,就会不提示直接执行。
使用dnf history
查看dnf 执行的历史,如果想看具体的某一个,比如查看第九条,使用dnf history info 9
查看详细信息。
dnf使用时会直接把软件下载好,假如我们想下载软件包怎么办呢?首先要dnf install yum-utils
安装这个工具,使用yumdownloader gcc
命令就可以把仓库中gcc的软件安装包下载到当前目录,使用yumdownloader gcc --destdir=/media
命令就可以把仓库中gcc的软件安装包下载到指定的media这个目录,使用yumdownloader gcc --destdir=/media --resolve
命令就可以把仓库中gcc的软件安装包和软件依赖性都下载到指定的media这个目录。
6、网络软件仓库的搭建
在企业中,我们维护的系统数量很庞大,当我们需要在每个系统安装软件管理软件时,可以在每个系统中各自搭建软件仓库,但是这样管理软件会浪费大量的资源。如何节省这部分重复的资源?需要在一个共用的主机里搭建可以共享的软件仓库,然后共享到网络上,这样大家就可以利用网络访问资源,不需要在每一台主机中独立建立软件资源了。
这个共享软件的名字叫Apache,提供的协议叫超文本传输协议http://
,软件包的名称叫httpd,共享时不可能把主机的所有东西都共享,只是共享一部分,那么共享文件的位置在/var/www/html
。
搭建实验,首先在共用的主机里使用命令dnf install httpd -y
安装httpd软件,然后如下图,关闭防火墙,开启httpd服务,我们建立一个目录名字叫rhel8.2
,里面放要共享的镜像文件,把之前挂载到/westos
的卸掉,重新挂载镜像到/var/www/html/rhel8.2/
下,现在httpd服务就搭建好了,但是这个共享的主机每次关机再开机,挂载就掉了,我们需要每次开机都挂载吗?太麻烦了,我们可以在开机文件里/etc/rc.d/rc.local
写入挂载语句,并给这个目录执行权限,那么就可以开机自动挂载了。
httpd是配置好了,现在共用的这个主机能下载软件吗?不可以!因为我们之前配置的软件源指向文件/etc/yum.repos.d/westos.repo
里写的指向是/westos
,而现在应该更改路径为/var/www/html/rhel8.2/
,如下图。
那么共用的主机以外的其他没安装软件仓库的主机呢?现在用虚拟机a代表没安装软件仓库的主机,他们需要修改/etc/yum.repos.d/westos.repo
这个配置文件,把file://
(本地用这个)改为http://
(网络用这个),并输入共用主机的ip下的路径,如下图。现在虚拟机a就可以使用共用主机的软件仓库来安装软件了!
6、epel源
如果想安装一些镜像里没有的软件,可以在网上下载epel包并安装,安装完成后,可以看到/etc/yum.repos.d
目录下多了很多repo结尾的文件,这些文件的本质是指向一些网址,下载的时候去这个网址找资源下载,现在我们就可以安装想要的截图工具flameshot了。
7、第三方软件仓库的搭建方法
假如上面的方法还是不够用,有些软件没有,我们在网上找到了他的rpm包,下载下来,想把他变成软件仓库,以后使用dnf管理方便,该怎么办呢?
实验如下,如下图,建立共享目录/var/www/html/software
,这里第三方软件以linuxqq为例,放到了共享目录里,现在想用dnf管理他还是不可以的,为什么呢?因为建立的目录并不会直接是软件仓库,我们需要下载一个createrepo软件,使用createrepo -v .
扫描当前的第三方软件,生成一个repodata的目录,该目录的作用就是读取数据时,直接找他里面的指引,这样速度快(如果读取一个一个的软件就很慢),现在software这个目录就是软件仓库了。
想要dnf能读取到第三方软件仓库,需要编写配置文件/etc/yum.repos.d/westos.repo
,内容如下图,增加了第三个模块。
补充1:当我们把原始的软件包删除了,dnf list
去查看这个软件时,还是可以查到的,这是因为repodata这个文件还在,即软件的数据还在,可以查到。也就是说list这个查看根本不管软件在不在,只是看数据。但是install安装的时候就会报错了。
补充2:dnf为什么能解决依赖性,就是因为他已经提前把所有的依赖性加载到数据库了,需要的时候直接读取就可以。