龙空技术网

软件包管理tar rpm yum dnf

我是老菜鸟 173

前言:

目前各位老铁们对“ubuntu制作rpm包”可能比较注重,同学们都想要剖析一些“ubuntu制作rpm包”的相关资讯。那么小编同时在网络上搜集了一些关于“ubuntu制作rpm包””的相关内容,希望你们能喜欢,各位老铁们快快来了解一下吧!

课程目标:能够说出tar包的常用管理手段能够说出rpm的安装卸载等常用参数能够说出yum如何使用==知识点==tarrpmyum介绍

在linux系统中我们经常涉及到软件包的删除和添加,那一起来看下在linux系统中软件包的管理方式都有哪些

一、tar压缩工具的介绍

说到软件管理,就不得不说到tar,因为制作rpm包需要tar,yum需要rpm。而说到tar又不得不说到压缩和解压缩,所以要先了解一下压缩和解压缩。

由于以前的计算机磁盘容量比较小,业内人士绞尽脑汁,终于开发出了一个能帮助用户节省磁盘的工具,就是压缩工具,我们知道计算机在存储数据的时候都是使用bytes来计算的,但是实际上1byte=8bits,在日常使用中并不是所有的数据都能把这个1byte用完,有的可能用了三个bits,有的可能用了四个bits,而他们的实际占用空间是2bytes=16bits,剩余的空间就浪费了,压缩工具就是通过算法,将占用三个bits的数据和占用四个bits的数据放在一个byte里,这样我们就能节省出来1byte,这种空间的节省,当你在压缩一个包含了很多文本文件的目录时是非常明显的。其实就像没有人知道早高峰的公交车里有多少人一样,一个人理论上占用的公交车内的空间,跟实际占用的空间,往往有很大差别,因为挤挤总能上去的。

压缩工具诞生的初衷和原理我们说完了,那现在它就没用了么?依然有用,只不过现在我们使用压缩工具的目的,更多的是便于存储和传输,在linux系统中压缩工具有很多,不同的工具压缩后的后缀名和大小都有差异,从远古时代说起,linux都出现了以下这些格式的压缩文件

*.Z 使用compress压缩的文件

*.zip 使用zip压缩的文件

*.gz 使用gzip压缩

*.bz2 使用bzip2压缩

*.xz 使用xz压缩

*.tar 使用tar工具打包,没有压缩

*.tar.gz 使用tar工具打包,经过gzip压缩

*.tar.bz2 使用tar工具打包,经过bzip2压缩

*.tar.xz 使用tar工具打包,经过xz压缩

其中,compress已经过时了,因为太老,个别版本的linux已经不支持了,linux下的压缩工具还是以gzip和bzip2以及后加入的xz作为主力,但是由于这些工具,最早不能压缩目录,只能针对单一文件进行压缩,所以在日常使用中,他们都是配合着tar这个打包工具,由tar把目录中的很多文件打包成一个文件,再经由对应的工具进行压缩,所以我们会看上面的那些tar.*的压缩包。好了我们先来学习下这些压缩工具如何使用

压缩工具的使用

先看下第一个gzip

[root@localhost ~]# gzip -hUsage: gzip [OPTION]... [FILE]...-c 保留源文件 -d 解压缩-h 显示帮助-t 检查压缩文件的数据一致性,用来确定压缩文件是否有错误-v 显示压缩包的相关信息,包括压缩比等-V 显示版本号-1 压缩最快,压缩比低-9 压缩最慢,压缩比高例子:[root@localhost test]# pwd/root/test[root@localhost test]# cp /etc/services ./[root@localhost test]# gzip -v services services: 79.4% -- replaced with services.gz[root@localhost test]# ll /etc/services services.gz -rw-r--r--. 1 root root 692241 Sep 10 2018 /etc/services-rw-r--r-- 1 root root 142549 Oct 20 23:32 services.gz[root@localhost test]# zcat services.gz 由于service文件本来就是一个文本文档,所以还可以使用zmore,zless去查看内容[root@localhost test]# lsservices.gz[root@localhost test]# gzip -d services.gz [root@localhost test]# lsservices我们可以看到,gzip这个工具压缩文件和源文件默认只保留一个,所以还可以[root@localhost test]# gzip -1 -c services > test.gz[root@localhost test]# lsservices test.gz[root@localhost test]# zgrep -n ssh test.gz 44:ssh 22/tcp # The Secure Shell (SSH) Protocol45:ssh 22/udp # The Secure Shell (SSH) Protocol你也可以使用zgrep找出指定的关键字在压缩文件的那几行

gzip我们就看完了,接下来我们接着看bzip2

[root@localhost test]# bzip2 -h-h 帮助-d 解压-z 压缩 默认值-k 保留源文件-v 查看版本信息-1 ..-9 同gzip相同bzip2的使用与gzip相同,两种工具的区别就是压缩算法不同,bzip2的压缩比更好一些,bzip的包查看的时候使用的是bzcat,bzmore,bzless,bzgrep同gzip用法相同[root@localhost test]# gzip -c services > services.gz[root@localhost test]# bzip2 -k services[root@localhost test]# ll总用量 948-rw-r--r-- 1 root root 692241 10月 21 01:31 services-rw-r--r-- 1 root root 129788 10月 21 01:31 services.bz2-rw-r--r-- 1 root root 142549 10月 21 01:32 services.gz

我们来看一下xz,虽然bzip2的压缩效果相对比gzip已经提升很多,但是技术是永无止境的,于是出现了xz,它的用法跟gzip和bzip2一样

[root@localhost test]# xz -h-d 解压缩-t 检查压缩文件的完整性-l 查看压缩文件的相关信息-k 保留源文件-c 将信息输出到显示器上-0 ... -9 指定压缩级别-h 显示帮助[root@localhost test]# xz -k services[root@localhost test]# ll总用量 1052-rw-r--r-- 1 root root 692241 10月 21 01:31 services-rw-r--r-- 1 root root 129788 10月 21 01:31 services.bz2-rw-r--r-- 1 root root 142549 10月 21 01:32 services.gz-rw-r--r-- 1 root root 105872 10月 21 01:31 services.xz可以看到,在使用默认压缩比压缩的情况下,xz压缩完的文件体积更小[root@localhost test]# xz -l services.xz 查看相关信息Strms Blocks Compressed Uncompressed Ratio Check Filename1 1 103.4 KiB 676.0 KiB 0.153 CRC64 services.xz[root@localhost test]# xzcat services.xz 查看文件内容[root@localhost test]# xz -d services.xz 解压缩虽然xz的压缩算法更好,但是相对来说时间也比较长[root@localhost test]# time gzip -c services > services.gzreal 0m0.023suser 0m0.020ssys 0m0.003s[root@localhost test]# time bzip2 -k servicesreal 0m0.047suser 0m0.043ssys 0m0.003s[root@localhost test]# time xz -k servicesreal 0m0.264suser 0m0.258ssys 0m0.003s我们可以使用time这个命令去对比一下时间gzip,bzip2,xz的时间分别是0.023,0.047,0.264,可以看到xz所使用的时间是比较长的,而这个时间会跟文件体积成正比,所以这三种压缩方式大家在使用的时候也要把时间成本考虑在内,除非你很富有。

这三种常见的压缩方式介绍完了,我们来看下tar这个工具,前面我们提到了,大多数压缩工具只能针对单一文件进行操作,如果你要压缩目录的话就会很麻烦,这时候我们可以使用tar这个打包工具,将目录内的多个文件打包成一个文件,再进行压缩。

[root@localhost test]# tar --help用法: tar [选项...] [FILE]...-C 解压到指定目录-c 建立tar包-t 查看tar包内的文件-x 解压tar包-p 不修改文件属性-f 指定文件名称-j 使用bzip2算法-J 使用xz算法-z 使用gzip算法-P 允许压缩路径中包含有"/"-v 显示详细信息-?, --help 查看帮助--exclude 压缩过程中排除指定的文件例:压缩[root@localhost test]# tar -czf etc.tar.gz etc[root@localhost test]# lsetc etc.tar.gz解压缩[root@localhost test]# lsetc.tar.gz[root@localhost test]# tar -xf etc.tar.gz [root@localhost test]# lsetc etc.tar.gz查看压缩包内容[root@localhost test]# tar -tf etc.tar.gzetc/etc/libreport/etc/libreport/workflows.d/etc/libreport/workflows.d/report_uploader.confetc/libreport/workflows.d/anaconda_event.conf...查询压缩包里面的文件信息[root@localhost test]# tar -tvf etc.tar.gz |moredrwxr-xr-x root/root 0 2019-10-21 04:35 etc/drwxr-xr-x root/root 0 2019-10-21 04:35 etc/libreport/drwxr-xr-x root/root 0 2019-10-21 04:35 etc/libreport/workflows.d/...解压压缩包指定的文件[root@localhost test]# tar -tvf etc.tar.gz | grep shadow---------- root/root 792 2019-10-21 04:35 etc/gshadow---------- root/root 1506 2019-10-21 04:35 etc/shadow---------- root/root 781 2019-10-21 04:35 etc/gshadow----------- root/root 1374 2019-10-21 04:35 etc/shadow--rw-r--r-- root/root 214 2019-10-21 04:35 etc/pam.d/sssd-shadowutils[root@localhost test]# tar -xf etc.tar.gz etc/shadow[root@localhost test]# lsetc etc.tar.gz[root@localhost test]# ls etcshadow

tar工具的基本使用我们就介绍到这里,那么如果你获得了一个tar包形式的软件该如何安装呢?

源码包的安装

在linux系统中,很多新版本的软件包的更新都会优先提供tar包版本的,然后各linux厂商拿到这个tar包之后再给自己的操作系统提供官方的rpm或者dpkg类型的软件包,而这种tar工具打包的软件包我们一般称之为源码包,在这些源码包中一般包含有,程序源代码文件,配置文件(configure),安装使用说明(INSTALL,HOWTO,README)

那这种tar包源码包如何安装呢?简单的流程就是

获取软件包

解压文件

检查当前系统是否满足软件包安装需求

使用gcc进行编译,生成主要的二进制文件

将二进制文件安装到主机

这些步骤看起来很简单,但是在使用过程中有很多问题需要解决,比如说需要解决系统环境,权限问题等等,不同类型的软件在安装方法上会有差异,但是整体步骤就是我们上面所提到的。

二、rpmrpm的介绍

前面的课程我们提到过源码包安装需要解决系统环境、权限等等,这些对于初学者而言都是噩梦一般的存在,所以linux厂商推出了一种类似windows系统中的安装方式,有开发者直接在已知的系统中编译好,使用者可以直接下载并进行安装,升级,卸载等操作。在linux中能够提供这些功能的软件有两种,rpm和dpkg,而在CentOS中使用的是RPM

rpm最早是由redhat开发出来,由于很好用,所以很多发行版也利用rpm来进行软件包的管理。RPM全名RedHat Package Manager,最大的特点就是把需要安装的软件提前编译,打包,然后在rpm包里面存放了用以记录软件依赖关系的相关数据,当用户安装时,优先查看这些数据,如果系统满足数据要求就安装软件包,否则不能安装,安装完成后,将软件包相关信息记录到rpm自己的数据库中,便于查询和卸载等。所以说rpm的优点是方便安装,卸载,查询,缺点就是只能在指定的操作系统上使用,所以不同厂商的rpm包,甚至同一厂商不同版本操作系统的rpm包都不通用。

rpm包的命名

dhcp-server- 4.3.6 -30 .el8 .x86_64 .rpm软件名称 版本 编译次数 适用的系统 适用的平台 后缀名软件名 就是软件包的名称版本 每次更新版本号都会改变,用来帮助用户判断软件包新旧的编译次数 也是帮助用户判断软件包新旧的适用的系统 在哪个系统上可以安装,CentOS和rhel的多数软件包都是通用的适用的平台 指的是硬件平台,比如如果你是32位的CPU就无法安装这个软件包
rpm的使用

rpm包的相关文件一般都会放在对应的目录中,比如rpm包安装后,配置文件会放在/etc下,执行文件会放在/usr/bin下,链接库文件会放在/usr/lib下,帮助与说明文档会放在/usr/share/man和/usr/share/doc目录下

安装

[root@localhost Packages]# rpm -ivh dhcp-server-4.3.6-30.el8.x86_64.rpm -i 安装-v 显示详细信息-h 显示安装进度-e 卸载-U 升级,如果系统中有低版本的就会升级,如果系统没有安装相应的包,则安装-F 有条件的升级,会检测用户指定的软件包是否已安装到linux中--nodeps 忽略软件包之间的依赖关系--replacefiles 覆盖文件--replacepkgs 修复--force 强制--test 测试-q 查询指定的软件包是否安装-qi 查看指定的软件包的信息,包括开发商,版本,说明-ql 查看指定软件包中所包含的文件列表-qc 查看指定软件包的配置文件-qa 查看本机安装的所有包-qf 查看一个文件归属于哪个已安装的软件包

rpm的内容我们就介绍到这里,接下来我们看下一个yum

三、yumyum的介绍

YUM(Yellow dog Updater, Modified)是一个基于rpm却更胜于rpm的管理工具,让你可以更轻松的管理Red Hat Enterprise Linux系统中的软件。你可以使用YUM来安装或卸载软件、也可以利用YUM来更新你的系统,更可以利用YUM来搜索一个尚未安装的软件。不管是安装、更新或者删除,YUM都会自动地帮你解决软件间的依赖性问题。通过YUM会比单纯使用rpm来得更加方便。

YUM包含下列几项组件:

YUM下载源:如果把所有RPM文件放在某一个目录中,这个目录就可称为“YUM下载源(YUM Repository)”。你也可以把YUM下载源,通过HTTP、FTP等方式分享给其他计算机使用;当然,你也可以直接使用别人建好的YUM下载源来取得需安装的软件。

YUM工具:YUM提供了一个名为yum的命令,你可以使用yum来使用YUM提供的众多功能。

YUM插件:YUM还允许第三方厂商(3rd Party)开发YUM的插件(Plug-in),让用户可以任意地扩充YUM的功能,比如说有的插件可以帮助选择最快的yum源

YUM缓存:YUM运行时,会从YUM下载源获得软件信息与文件,并且暂存于本机的硬盘上。这个暂存的目录,称为“YUM缓存(YUM cache)”。缓存目录为/var/cache/yum

yum的使用

yum源的配置

由于yum有下载源这个东西,所以我们在使用yum之前需要告诉它去什么地方获取这些软件包,也就是说需要先配置一个yum源

[root@localhost ~]# cd /etc/yum.repos.d/[root@localhost yum.repos.d]# lsCentOS-AppStream.repo CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repoCentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repoCentOS-centosplus.repo CentOS-Extras.repo CentOS-PowerTools.repo在CentOS8中yum的下载源配置文件统一都放到/etc/yum.repos.d/目录下,在这个目录中有些默认的下载源我不使用这些自带的下载源,我想配置一个自己的下载源,让yum使用光盘镜像里的软件包,为了避免干扰,我们把这些自带的下载源都放到一个目录里[root@localhost yum.repos.d]# mkdir repos[root@localhost yum.repos.d]# lsCentOS-AppStream.repo CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repoCentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repoCentOS-centosplus.repo CentOS-Extras.repo CentOS-PowerTools.repo repos[root@localhost yum.repos.d]# mv *.repo repos[root@localhost yum.repos.d]# clear[root@localhost yum.repos.d]# lsrepos然后使用vim命令建立自己的下载源配置文件[root@localhost repos]# vim server.repo[server-BaseOS] yum源的名称name=server-BaseOS 完整名称enabled=1 是否启用gpgcheck=0 是否检查rpm包的数字签名baseurl= 下载源地址[server-AppStream]name=server-AppStreamenabled=1gpgcheck=0baseurl=[root@localhost ~]# mount /dev/cdrom /mnt/ 将光盘挂载到指定位置由于CentOS8的软件包存放在光盘根目录的BaseOS和AppStream目录中,所以这里面为了保证需要的软件包能正确安装我们配置了两个yum源,这两部分内容你可以放到一个文件里,也可以分别放在两个文件中

以上就是yum源配置文件,我们接下来看下如何建立下载源目录

将下载好的rpm软件包存放到一个指定的目录中[root@localhost ~]# cp /mnt/AppStream/Packages/* myrepo/从光盘镜像中安装createrepo工具[root@localhost ~]# yum install createrepo利用createrepo工具生成软件包之间的依赖关系数据文件[root@localhost ~]# createrepo myself/建立针对此目录的下载源配置文件[root@localhost ~]# vim /etc/yum.repos.d/myrepo.repo[myself]name=packagesenabled=1gpgcheck=0baseurl=从新的下载源安装软件包[root@localhost ~]# yum install httpd

yum插件安装

[root@localhost ~]# yum install 插件名称插件配置文件存放位置/etc/yum/pluginconf.d/xxx.conf插件的启用和停用修改/etc/yum/pluginconf.d/xxx.conf文件中的enabled字段 1=启用 0=停用
[root@localhost ~]# yum [OPTIONS...] COMMAND [ARGVS...]-y 如果遇到问题,代替回答yes--installroot=/path 指定软件包安装的根目录

清除yum缓存

[root@localhost ~]# yum clean all如果有些时候你发现yum运行不太正常,这可能是yum缓存数据错误导致的,所以你需要将yum的缓存清除
查看软件包[root@localhost ~]# yum list查看有哪些可用组[root@localhost ~]# yum grouplist查看dhcp-server这个包的信息 [root@localhost ~]# yum info dhcp-server 搜索dhcp-server这个软件包[root@localhost ~]# yum search dhcp-server

yum安装

安装dhcp-server软件包[root@localhost ~]# yum install dhcp-server -y 安装一组软件包[root@localhost ~]# yum groupinstall '系统工具' -y

卸载软件包

删除一个软件包[root@localhost ~]# yum remove dhcp-server -y 删除一组软件包[root@localhost ~]# yum groupremove '系统工具' -y使用epel源

EPEL是一个自由开源的附加软件包仓库,可用于 CentOS 和 RHEL 服务器。顾名思义,EPEL 仓库提供了额外的软件包,这些软件在 CentOS 8 和 RHEL 8 的默认软件包仓库中不可用。

安装epel源

epel地址:dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

[root@localhost ~]# yum install 
dnf介绍

DNF是新一代的rpm软件包管理器。最早出现在 Fedora 18 这个发行版中,在Fedora 22中正式取代了yum

DNF器克服了YUM的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等多方面的内容。

安装

在CentOS7中需要单独安装

yum install epel-release -yyum install dnf

在CentOS8中系统默认使用的是DNF,我们所看到的yum只是dnf的一个软连接

[root@localhost ~]# which yum/usr/bin/yum[root@localhost ~]# ll /usr/bin/yum lrwxrwxrwx. 1 root root 5 5月 14 2019 /usr/bin/yum -> dnf-3
相关目录和使用

目录

/etc/dnf/dnf.conf 配置文件

/etc/dnf/aliases.d/ 为相关命令定义别名的如dnf alias add rm=remove

/etc/dnf/modules.d&/etc/dnf/modules.defaults.d 模块的设置

/etc/dnf/plugins/ 插件的设置

/etc/dnf/protected.d/ 受保护的软件包的设置

/etc/dnf/vars/ 变量设置

查看DNF的版本[root@localhost ~]# dnf --version 查看dnf的可用软件仓库[root@localhost ~]# dnf repolist 查看所有软件仓库[root@localhost ~]# dnf repolist all 查看已安装的软件包[root@localhost ~]# dnf list installed 查看可安装的软件包[root@localhost ~]# dnf list available 搜索dhcp-server[root@localhost ~]# dnf search dhcp-server 查询一个文件是由哪个软件包提供的[root@localhost ~]# dnf provides /usr/sbin/dhclient查询软件包详细信息[root@localhost ~]# dnf info dhcp-server 安装软件包[root@localhost ~]# dnf install dhcp-server 升级软件包[root@localhost ~]# dnf update systemd 检查软件包的更新[root@localhost ~]# dnf check-update 升级所有可升级的软件包[root@localhost ~]# dnf update 升级所有可升级的软件包[root@localhost ~]# dnf upgrade 卸载软件包[root@localhost ~]# dnf remove dhcp-server [root@localhost ~]# dnf erase dhcp-server 删除无用孤立的软件包[root@localhost ~]# dnf autoremove 清除缓存中的无用数据[root@localhost ~]# dnf clean all 获取某一个命令的帮助[root@localhost ~]# dnf help clean 获取dnf命令的帮助[root@localhost ~]# dnf help 查看历史命令[root@localhost ~]# dnf history 重新执行历史命令中的第19条[root@localhost ~]# dnf history redo 19 查看软件包组[root@localhost ~]# dnf grouplist 安装一组软件包[root@localhost ~]# dnf groupinstall '系统工具' 升级一组软件包[root@localhost ~]# dnf groupupdate '系统工具' 删除一组软件包[root@localhost ~]# dnf groupremove '系统工具' 从特定的软件仓库安装软件包[root@localhost ~]# dnf --enablerepo=epel install zabbix将软件包更新到最新的稳定版[root@localhost ~]# dnf distro-sync重新安装指定的软件包[root@localhost ~]# dnf reinstall dhcp-server降级软件包[root@localhost ~]# dnf downgrade dhcp-server

总结

本节课我们介绍了几种linux下软件包的管理方式,还介绍了压缩和解压缩的相关知识,我们知道在linux中软件包的安装使用从易到难依次是yum,rpm,tar。其中tar包源码包的安装难度最大。我们还提到了另外一个叫dpkg的管理机制,各位有兴趣可以自己安装一个ubuntu去尝试着使用一下dpkg。好了,本节课的内容就到这里,再见!

标签: #ubuntu制作rpm包