摘要
在Linux发行版中,几乎每一个发行版都有自己的软件包管理系统。
常见的有适用于debian
、Ubuntu
等系统的dpkg
、apt-get
以及它们的前端aptitude
,以及适用于RedHat
、Fedora
系统的rpm
以及它的前端yum
。
CentOS
系统从属于RedHat
系列,其软件包管理系统有RPM和YUM,本文基于CentOS8(x86_64)
介绍它们的使用方法。
从CentOS 8开始,系统默认的软件包管理器是dnf
,系统提供的yum
命令仅为dnf
命令的软链接。dnf
是dandified yum
的简称,是基于rpm软件包的Linux发行版本的软件包管理器。
RPM
rpm参数说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 rpm [options] /path/to/rpmfile option: -i|--install: 安装指定软件 -v|--verbose: 显示安装过程 -e|--erase: 卸载指定的软件 -h|--hash : 以#的方式显示安装进度条,一个#为2% -q|--query: 查询rpm相关信息 --nodeps: 不检测依赖性安装。软件安装时会检测依赖性,确定所需的底层软件是否安装,如果没有安装则会报错。如果不管依赖性,想强制安装,则可以使用这个选项。注意,这样不检测依赖性安装的软件基本上是不能使用的,所以不建议这样做。 --test : 测试安装。不会实际安装,只是检测一下依赖性。 -U: 升级+安装(如果之前有安装则升级,如果之前没有安装则安装) -F: 升级(如果之前有安装则升级,如果之前没安装则不做任何操作) --replacepkgs: 替换软件包安装。如果软件包已经安装,那么此选项可以把软件包重复安装一遍。 --replacefiles: 替换文件安装。如果要安装软件包,但是包中的部分文件已经存在,那么在正常安装时会报"某个文件已经存在" 的错误,从而导致软件无法安装。使用这个选项可以忽略这个报错而覆盖安装。 --force: 在软件包的安装或升级过程中,如果出现某个文件已经安装或者某一个软件已经安装时 可以使用 --force 选项强制安装,等同于 --replacepkgs --replacefiles --oldpackage 同时使用
安装rpm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 curl -o ./jdk-17_linux-x64_bin.rpm https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm rpm -ivh jdk-17_linux-x64_bin.rpm rpm -ivh --test jdk-17_linux-x64_bin.rpm rpm -ivh --nodeps jdk-17_linux-x64_bin.rpm rpm -ivh --force jdk-17_linux-x64_bin.rpm rpm -ivh --prefix /usr/local/soft/jdk17 jdk-17_linux-x64_bin.rpm rpm -Uvh jdk-17_linux-x64_bin.rpm
RPM 包默认安装路径
安装路径
含 义
/etc/
配置文件安装目录
/usr/bin/
可执行的命令安装目录
/usr/lib/
程序所使用的函数库保存位置
/usr/share/doc/
基本的软件使用手册保存位置
/usr/share/man/
帮助文件保存位置
rpm -q:查询软件包是否安装
1 2 3 4 5 6 7 8 9 rpm -qa rpm -qa | grep jdk rpm -q jdk-17 rpm -q zip
rpm -qp:查询rpm包安装后的软件包名称
1 2 rpm -qp jdk-17_linux-x64_bin.rpm
rpm -qi:查询软件包的详细信息
1 2 3 4 5 6 7 8 rpm -qip jdk-17_linux-x64_bin.rpm rpm -qi jdk-17-17.0.6-9.x86_64 rpm -qi jdk-17 rpm -qi zip
rpm -ql:命令查询软件包的文件列表
1 2 3 4 5 6 7 8 rpm -qlp jdk-17_linux-x64_bin.rpm rpm -ql jdk-17-17.0.6-9.x86_64 rpm -ql jdk-17 rpm -ql zip
rpm -qd:查询被标注为文档的文件列表
1 2 3 4 5 6 7 rpm -qdp jdk-17_linux-x64_bin.rpm rpm -qd jdk-17-17.0.6-9.x86_64 rpm -qd jdk-17 rpm -qd zip
rpm -qc:查询被标注为配置文件的文件列表
1 2 3 4 5 6 7 rpm -qcp jdk-17_linux-x64_bin.rpm rpm -qc jdk-17-17.0.6-9.x86_64 rpm -qc jdk-17 rpm -qc zip
rpm -qf:命令查询系统文件属于哪个RPM包
1 2 rpm -qf /usr/lib/jvm/jdk-17-oracle-x64/bin/java
rpm -qR:查询软件包的依赖关系
1 2 3 4 5 6 7 rpm -qRp jdk-17_linux-x64_bin.rpm rpm -qR jdk-17-17.0.6-9.x86_64 rpm -qR jdk-17 rpm -qR zip
卸载rpm
1 2 3 4 5 6 rpm -e jdk-17-17.0.6-9.x86_64 rpm -e jdk-17 rpm -e --nodeps jdk-17-17.0.6-9.x86_64
解压rpm
1 2 3 4 rpm2cpio jdk-17_linux-x64_bin.rpm | cpio -idv rpm2cpio jdk-17_linux-x64_bin.rpm | cpio -idv ./usr/lib/jvm/jdk-17-oracle-x64/bin/java
说明
rpm2cpio
: 将rpm包转换为cpio
命令能处理的归档包格式。归档包,也可称为文件库,其实就是 cpio
或 tar
格式的文件。
cpio
命令可以看做是备份或还原命令,因为它可以将数据(文件)备份到 cpio 归档包,也可以利用 cpio 文档库对数据进行恢复。
1 2 3 4 各选项的含义为: -i:copy-in 模式,还原; -v:显示还原过程; -d:还原时自动新建目录;
rpm查看已安装的文件是否被修改过
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 $ rpm -Va .M....G.. g /var/log/lastlog S.5....T. c /etc/ssh/sshd_config S.5....T. c /etc/NetworkManager/NetworkManager.conf S.5....T. c /etc/sudoers $ rpm -V openssh-server S.5....T. c /etc/ssh/sshd_config $ rpm -Vf /etc/ssh/sshd_config S.5....T. c /etc/ssh/sshd_config 可以看到,结果显示了文件被修改的信息。该信息可分为以下 3 部分: 1.最前面的 8 个字符(S.5....T)都属于验证信息,各字符的具体含义如下: S:文件大小是否改变。 M:文件的类型或文件的权限(rwx)是否改变。 5:文件MD5校验和是否改变(可以看成文件内容是否改变)。 D:设备的主从代码是否改变。 L:文件路径是否改变。 U:文件的属主(所有者)是否改变。 G:文件的属组是否改变。 T:文件的修改时间是否改变。 .:若相关项没发生改变,用 . 表示。 2.被修改文件类型,大致可分为以下几类: c:配置文件(configuration file)。 d:普通文档(documentation)。 g:"鬼" 文件(ghost file),很少见,就是该文件不应该被这个 RPM 包包含。 l:授权文件(license file)。 r:描述文件(read me)。 3.被修改文件所在绝对路径(包含文件名)。
rpm导入(安装)数字证书(公钥)
1 2 3 4 rpm --import /efc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
1 2 3 $ rpm -qa|grep gpg-pubkey gpg-pubkey-8483c65d-5ccc5b19 gpg-pubkey-45f2c3d5-5e81efb9
1 2 3 4 rpm -qi gpg-pubkey-8483c65d-5ccc5b19 rpm -e gpg-pubkey-8483c65d-5ccc5b19
YUM
yum
,全称Yellow dog Updater, Modified
,是一个专门为了解决包的依赖关系而存在的软件包管理器。
yum
是Linux中的 应用市场 ,不仅可以通过yum
完成软件包的下载、安装、卸载等,还解决了软件之间的依赖,当安装的软件包需要依赖其它软件包时,会一并进行安装。
yum
命令一般为默认安装,yum
底层就是基于rpm
实现的软件包管理
使用 yum 安装软件包之前,需指定好 yum 下载 RPM 包的位置,此位置称为 yum 源。换句话说,yum 源指的就是软件安装包的来源
yum 源既可以使用网络 yum 源,也可以将本地光盘作为 yum 源。
yum 源默认都是配置好的网络 yum 源,配置文件位于 /etc/yum.repos.d/
目录下,文件扩展名为 *.repo
但是CentOS Linux 8 已经于 2021年12月31日 到期,Linux社区已不再维护该操作系统版本和软件源,所以我们可以将yum源切换到阿里云。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 rename '.repo' '.repo.bak' /etc/yum.repos.d/*.repo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo curl -o /etc/yum.repos.d/epel-archive-8.repo https://mirrors.aliyun.com/repo/epel-archive-8.repo yum clean all && yum makecache yum repolist 仓库 id 仓库名称 AppStream CentOS-8 - AppStream - mirrors.aliyun.com base CentOS-8 - Base - mirrors.aliyun.com epel-archive Extra Packages for Enterprise Linux 8 - x86_64 extras CentOS-8 - Extras - mirrors.aliyun.com
yum配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 cat /etc/yum.conf[main] cachedir=/var/cache/yum keepcache=0 reposdir=/etc/yum.repos.d/ debuglevel=2 logfile=/var/log/yum.log exactarch=1 obsoletes=1 gpgcheck=1 plugins=1 installonly_limit=3 exclude=selinux* distroverpkg=system-release timeout =5 retries=7 proxy=http://0.0.0.0:8080
yum搜索软件
1 2 3 4 5 6 7 8 9 10 yum list yum list zip yum list available python3* yum search zip
yum安装
1 2 3 4 5 6 yum install zip yum install zip -y yum reinstall zip
yum卸载
1 2 3 4 yum remove zip yum remove zip -y
1 2 3 4 rpm -qa | grep ^zip zip-3.0-23.el8.x86_64 rpm -e --nodeps zip-3.0-23.el8.x86_64
yum升级与降级
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 yum check-update yum check-update zip yum upgrade zip -y yum upgrade -y yum update zip -y yum update -y yum downgrade zip -y yum install --allowerasing curl
yum upgrade
与yum update
的区别
yum
配置文件/etc/yum.conf
中,如果obsoletes=1
,此时两者没有区别,都表示更新旧的rpm包的同时会删除旧包
如果obsoletes=0
,yum upgrade
会删除旧版本的包,而yum update
则会保留旧版本的包
生产环境中建议使用yum update
,防止因为替换,导致旧的软件包依赖出现问题
yum查看软件依赖关系
yum查看软件包描述信息
yum下载rpm包
1 2 3 4 5 6 7 8 yum -y install yum-utils yumdownloader --resolve docker yumdownloader --resolve docker --destdir dockerDir
yum组:一次安装一组软件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 yum grouplist yum group list yum groupinfo "Development Tools" yum group info "Development Tools" yum groupinstall "Development Tools" yum group install "Development Tools" yum groupremove "Development Tools" yum group remove "Development Tools" yum groupupdate "Development Tools" yum group update "Development Tools"
重建yum元数据缓存
1 2 3 4 5 6 7 yum clean all yum makecache yum --refresh -v repolist
yum查看仓库配置
1 2 3 4 5 6 7 8 9 10 11 yum repolist yum repolist all yum -v repolist yum --refresh -v repolist
yum源配置
1 2 3 4 5 6 7 [xxx]:xxx为源仓库名称,一定要放在[]中。 name:源仓库说明,可以自己随便写。 mirrorlist:镜像站点列表,配置了这个就不需要配置baseurl baseurl:yum 源仓库服务的地址。 enabled:此源仓库是否生效,如果不写或写成 enabled=1 则表示生效,写成 enabled=0 则表示不生效。 gpgcheck:如果为 1 则表示 RPM 的数字证书生效;如果为 0 则表示 RPM 的数字证书不生效。 gpgkey:数字证书的公钥文件保存位置。gpgcheck=1时需要指定地址,gpgcheck=0时,可以不配置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 mkdir /mnt/cdrommount /dev/cdrom /mnt/cdrom/ cd /etc/yum.repos.drename '.repo' '.repo.bak' /etc/yum.repos.d/*.repo vi local-yum.repo [local-yum] name=local-yum,source from cdrom baseurl=file:///mnt/cdrom enabled=1 gpgcheck=0 yum clean all && yum makecache yum repolist
小贴士
如果没有光驱,可将系统iso文件上传到服务器,比如在/mnt下:
1 2 mkdir /mnt/osmount -t iso9660 -o loop /mnt/CentOS-6.5-x86_64-bin-DVD1.iso /mnt/os
然后将 baseurl 配置为 file:///mnt/os 即可。
DNF