当前位置 : 首页 » 文章分类 :  开发  »  Linux-YUM

Linux-YUM

RPM 和 YUM 相关笔记

RPM 软件包搜索下载网站,会列出每个包的依赖和被谁引用,离线安装软件很方便。
https://centos.pkgs.org/7/centos-x86_64/


rpm

http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/08/2203153.html

-v, --verbose 输出详细信息


rpm -i 安装rpm包

-i, --install 安装rpm包
例如
rpm -i lrzsz-0.12.20-36.el7.x86_64.rpm

rpm -U glibc-2.17-317.el7.x86_64.rpm glibc-common-2.17-317.el7.x86_64.rpm glic 和 glic-common 互相依赖,必须同时安装

rpm -i 时冲突报错

# rpm -i pcre-8.32-17.el7.x86_64.rpm
warning: pcre-8.32-17.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
    file /usr/lib64/libpcre.so.1.2.0 from install of pcre-8.32-17.el7.x86_64 conflicts with file from package pcre-8.32-15.el7_2.1.x86_64
    file /usr/lib64/libpcre16.so.0.2.0 from install of pcre-8.32-17.el7.x86_64 conflicts with file from package pcre-8.32-15.el7_2.1.x86_64
    file /usr/lib64/libpcre32.so.0.0.0 from install of pcre-8.32-17.el7.x86_64 conflicts with file from package pcre-8.32-15.el7_2.1.x86_64
    file /usr/lib64/libpcrecpp.so.0.0.0 from install of pcre-8.32-17.el7.x86_64 conflicts with file from package pcre-8.32-15.el7_2.1.x86_64
    file /usr/lib64/libpcreposix.so.0.0.1 from install of pcre-8.32-17.el7.x86_64 conflicts with file from package pcre-8.32-15.el7_2.1.x86_64

说明是已安装了低版本的 pcre-8.32-15.el7_2.1.x86_64, 直接改为 -U 升级即可:rpm -U pcre-8.32-17.el7.x86_64.rpm


rpm -qa 查询已安装的包

-a, --all 查询/验证所有已经安装的包

rpm -qa iptables 查看已安装的 iptables 版本

rpm -qa |grep iptables 查看 iptables 是否被安装

例如:查看 example.rpm 安装包的信息:
rpm -qip example.rpm

例如:查询一个已经安装的文件属于哪个软件包;
rpm -qf /usr/lib/libacl.la


rpm -Uvh 更新/安装rpm包

-U, --upgrade=<packagefile> 更新包,如果没有会直接安装
-v, --verbose 显示指令执行过程
-h, --hash 安装时打印hash标记

比如已安装 iptables-1.4.21-16.el7.x86_64
升级到 iptables-1.4.21-35.el7.x86_64.rpm

# rpm -qa iptables
iptables-1.4.21-16.el7.x86_64
# rpm -U iptables-1.4.21-35.el7.x86_64.rpm

rpm -U升级报错低版本被需要

比如升级 libcom_err 时报错:

# rpm -U libcom_err-1.42.9-19.el7.x86_64.rpm
warning: libcom_err-1.42.9-19.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
error: Failed dependencies:
    libcom_err(x86-64) = 1.42.9-9.el7 is needed by (installed) e2fsprogs-libs-1.42.9-9.el7.x86_64
    libcom_err(x86-64) = 1.42.9-9.el7 is needed by (installed) libss-1.42.9-9.el7.x86_64
    libcom_err(x86-64) = 1.42.9-9.el7 is needed by (installed) e2fsprogs-1.42.9-9.el7.x86_64

原因:
低版本的 libcom_err-1.42.9-9.el7 被列出的这三个包所依赖,所以不能单独升级 libcom_err

解决:
将 libcom_err 和依赖它的几个包全部升级,注意升级时必须一次性全部升级,单独升级其中某一个还是会报错,例如单独升级 libss 会报错:

# rpm -U libss-1.42.9-19.el7.x86_64.rpm
warning: libss-1.42.9-19.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
error: Failed dependencies:
    libcom_err(x86-64) = 1.42.9-19.el7 is needed by libss-1.42.9-19.el7.x86_64
    libss = 1.42.9-9.el7 is needed by (installed) e2fsprogs-1.42.9-9.el7.x86_64

一次性升级这四个即可:

rpm -U libcom_err-1.42.9-19.el7.x86_64.rpm libss-1.42.9-19.el7.x86_64.rpm e2fsprogs-libs-1.42.9-19.el7.x86_64.rpm e2fsprogs-1.42.9-19.el7.x86_64.rpm

rpm -U glibc-2.17-317.el7.x86_64.rpm glibc-common-2.17-317.el7.x86_64.rpm 升级互相依赖的 glic 和 glic-common
rpm -U libselinux-utils-2.5-15.el7.x86_64.rpm libselinux-2.5-15.el7.x86_64.rpm libselinux-python-2.5-15.el7.x86_64.rpm 这三个必须同时升级


rpm -e 卸载

rpm -e 需要卸载的安装包
例如:卸载 tomcat4 软件包
rpm -e tomcat4

在卸载之前,通常需要使用 rpm -qa 命令查出需要卸载的安装包名称
例如安装rpm -i nginx-1.0.0-0.x86_64.rpm
之后通过rpm -e nginx-1.0.0-0.x86_64.rpm卸载会提示:
error: package nginx-1.0.0-0.x86_64.rpm is not installed
因为此安装包安装之后的名字并不是nginx-1.0.0-0.x86_64.rpm,所以我们查询一下
rpm -qa | grep nginx
结果为:nginx-1.0.0-0.x86_64
然后rpm -e nginx-1.0.0-0.x86_64就可以成功卸载了

在Linux操作系统下,几乎所有的软件均通过RPM进行安装、卸载及管理等操作。RPM 的全称为Redhat Package Manager ,是由Redhat公司提出的,用于管理Linux下软件包的软件。


yum 源管理(repo)

yum repolist 列出可用的yum源(repo)

yum repolist 列出已安装的 yum 源
通过查看 /etc/yum.repos.d/ 目录,也可以看当前的yum源
ls /etc/yum.repos.d/

repo 文件是 Fedora中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用!

# yum repolist
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: mirrors.bupt.edu.cn
 * extras: mirror.nyist.edu.cn
 * updates: mirrors.jlu.edu.cn
repo id                                                                    repo name                                                                                       status
base/7/x86_64                                                              CentOS-7 - Base                                                                                 10072
download.opensuse.org_repositories_home_Alexander_Pozdnyakov_RHEL_7_       added from: http://download.opensuse.org/repositories/home:/Alexander_Pozdnyakov/RHEL_7/         354
extras/7/x86_64                                                            CentOS-7 - Extras                                                                                 518
updates/7/x86_64                                                           CentOS-7 - Updates                                                                               5116
repolist: 16060

# ls /etc/yum.repos.d
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Sources.repo  CentOS-fasttrack.repo      download.opensuse.org_repositories_home_Alexander_Pozdnyakov_RHEL_7_.repo
CentOS-CR.repo    CentOS-Media.repo      CentOS-Vault.repo    CentOS-x86_64-kernel.repo

yum-config-manager –add-repo 安装yum源

--add-repo 从指定文件或URL添加软件仓库

先安装 yum-config-manager
sudo yum update && yum install -y yum-utils

通过 yum-config-manager 安装 docker 源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

通过 yum-config-manager 安装 maven 源

$ sudo yum-config-manager --add-repo http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo
已加载插件:fastestmirror
adding repo from: http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo
grabbing file http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo to /etc/yum.repos.d/epel-apache-maven.repo
repo saved to /etc/yum.repos.d/epel-apache-maven.repo

手动创建yum源文件

还可以直接创建 /etc/yum.repos.d/xxx.repo 文件,写入软件信息即可。
比如nginx官方给的方式,直接创建 /etc/yum.repos.d/nginx.repo 文本文件

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key

http://nginx.org/en/linux_packages.html#RHEL-CentOS

或者直接 wget 把repo文件下载到 /etc/yum.repos.d/ 目录中,比如安装 maven yum repo
wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo


yum

yum 和 rpm 的关系

rpm(RedHat Package Manager) 是由红帽公司开发的软件包管理方式,使用 rpm 我们可以方便的进行软件的安装、查询、卸载、升级等工作。但是 rpm 软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个 rpm 包组成时。

yum(全称为 Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。
yum 基於 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
yum 的关键之处是要有可靠的 repository,顾名思义,这是软件的仓库,它可以是 http 或 ftp 站点,也可以是本地软件池,但必须包含 rpm 的 header, header 包括了 rpm 包的各种信息,包括描述,功能,提供的文件,依赖性等.正是收集了这些 header 并加以分析,才能自动化地完成余下的任务。

yum [options] [command] [package ...]
其中的[options]是可选的,选项包括-h(帮助)等。[command]为所要进行的操作,[package …]是操作的对象。
-y:当安装过程提示选择全部为”yes”
-q:不显示安装的过程
-x [package], –exclude=[package] 采用全名或通配符排除软件包

yum list available 查看是否按照了某个repo

yum list available | grep extras 查看是否按照了某个repo

rpm -qa 查询是否安装了某个yum源

rpm -qa |grep -i repo-name

rpm -Uvh 在线命令安装yum源

可以通过 rpm 命令,指定源链接在线安装,
注意对应的linux版本,如果版本不对可能安装失败。
比如安装nginx源,RHEL/CentOS 7.x 版本中

sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

又比如安装mysql源
RHEL/CentOS 7.x 版本中

sudo rpm -Uvh http://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm

RHEL/CentOS 6.x 版本中

sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el6-3.noarch.rpm

rpm -e 删除yum源(及缓存)

rpm -qa|grep 查找yum源的具体名称
rpm -e repo-name 删除yum源

1、例如删除remi源

$ rpm -qa|grep remi
remi-release-6.10-1.el6.remi.noarch
$ sudo rpm -e remi-release-6.10-1.el6.remi.noarch

2、例如在 centos 6.x系统上错误安装了 7.x的mysql源后删除

$ rpm -qa|grep mysql
mysql80-community-release-el7-1.noarch
$ sudo rpm -e mysql80-community-release-el7-1.noarch
警告:/etc/yum.repos.d/mysql-community.repo 已另存为 /etc/yum.repos.d/mysql-community.repo.rpmsave

安装的 yum源都在 /etc/yum.repos.d/ 目录中,直接进入能看到,删除后的yum源会被标为 repo.rpmsave 结尾的文件


yum clean 删除yum缓存

删除yum repo缓存
一开始我删除7.x的repo后马上安装6.x的repo,结果安装的mysql版本还是7.x的,原来是yum repo有缓存,需要手动删除repo缓存,否则还会读取缓存中的7.x repo

$ cd /var/cache/yum/x86_64/latest/
$ ls
amzn-main  amzn-updates  mysql56-community  mysql-connectors-community  mysql-tools-community  nodesource  timedhosts
$ sudo rm -rf mysql*

或者

yum clean headers  #清理/var/cache/yum的headers
yum clean packages #清理/var/cache/yum下的软件包
yum clean metadata

或者
yum clean all
yum 会把下载的软件包和 header 存储在 cache 中,而不自动删除。如果觉得占用磁盘空间,可以使用 yum clean 指令进行清除,更精确 的用法是
yum clean headers 清除header,
yum clean packages 清除下载的rpm包,
yum clean all一全部清除。


yum makecache 生成本地缓存

yum makecache 将服务器上的软件包信息 现在本地缓存,以提高 搜索 安装软件的速度
经常用在更新 yum 源或者安装新 yum 源之后用 yum makecache 生成一下缓存。

yum search 查询想安装的软件

yum search keyword 搜索将尝试仅搜索软件包名称和摘要,但是如果“失败”,它将尝试描述和url。搜索结果会按相关性排序
yum search all 在全部包字段上搜索

yum install 安装

yum install package1 安装指定的安装包package1

yum update 更新和升级

yum update package1 更新指定程序包package1

yum list 查找和显示

yum info package1 显示安装包信息package1
yum list package1 显示指定程序包安装情况package1

yum list installed 列出已安装的包

yum list installed 列出所有已安装的软件包
yum list updates 列出所有可更新的软件包

yum remove 删除

rpm -qa | grep docker 查看已安装的 docker 版本
yum remove package1 删除程序包package1,同时会提示与之有依赖关系的包

yum安装软件日志

tail /var/log/yum.log
查看yum使用的历史记录的方法:
yum history info


上一篇 Linux-Service

下一篇 Kubernetes/K8S-kubectl

阅读
评论
2.9k
阅读预计13分钟
创建日期 2021-07-10
修改日期 2023-08-05
类别
标签

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论