CentOS yum 命令

2018-02-16|Categories: External cmd, Linux|

Yum常用命令表格

详见红帽官方整理的《Yum Command Cheat Sheet.pdf》

配置

同一个Yum仓库配置多个源

[Base]
name=Base repo based on the official iso
baseurl=file:///misc/cd
        https://mirrors.aliyun.com/centos/$releasever/os/$basearch
failovermethod=priority
gpgcheck=0

一个yum仓库可以设置多个baseurl值,后面的值缩进对齐第一个值,但baseurl=这个语句只能出现一次,否则后出现的语句将覆盖之前的语句。

failovermethod默认值是roundrobin,意为从baseurl的多个值中随机选择一个进行连接,改为priority强制让yum从baseurl的第一个值开始连接,如果第一个URL连接失败,再依次连接后面的URL。

不要删除系统自带的仓库配置文件

虽然可以很简单的修改yum仓库配置文件,甚至可以直接从镜像网站下载定制的配置文件,但不要删除系统自带的:

$ ls -lh /etc/yum.repos.d/
total 36K
-rw-r--r--  1 root root 1.7K May  5 21:14 CentOS-Base.repo
-rw-r--r--. 1 root root 1.3K Aug 30  2017 CentOS-CR.repo
-rw-r--r--. 1 root root  649 Aug 30  2017 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  314 Aug 30  2017 CentOS-fasttrack.repo
-rw-r--r--. 1 root root  630 Aug 30  2017 CentOS-Media.repo
-rw-r--r--. 1 root root 1.3K Aug 30  2017 CentOS-Sources.repo
-rw-r--r--. 1 root root 3.8K Aug 30  2017 CentOS-Vault.repo
  • 首先,这些文件非常小,占用的硬盘空间可以忽略不计。
  • 其次,只有常用的仓库Base、Updates、Extras默认被启用。
  • 最后,如果删除了,万一要用的时候还需要到处找,反而麻烦。

使用固定的、速度更快的镜像仓库

系统自带的仓库文件包含一个官方维护的镜像服务器列表,每次yum安装都会从这个列表里选一台连接速度最快的服务器查找、下载所需的文件,被挑选的服务器经常变化,而且不一定是速度最快的,这时候可以考虑使用固定的、速度更快的镜像仓库,中国大陆推荐使用以下镜像源:

我个人喜欢用阿里云的镜像,毕竟背靠阿里巴巴这棵大树,而且有阿里云本身的商业利益在驱动,相比大学里由志愿者维护的、非盈利的镜像,在服务的可持续性方面更可靠一些。

以下命令可以从阿里云下载定制的CentOS仓库:

# 备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

# 下载
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

查询

查找指定软件包所属的包组

方法一(推荐)

通过yum插件yum-plugin-list-data查询:

yum install yum-plugin-list-data

# optional step
yum makecache

# `-C, --cacheonly` is optional, but before using it, must `yum makecache`
yum [-C] list-groups pkg_name

方法二

笨方法:列出所有包组信息,通过包名查找:

# `less +`表示less启动后立即执行加号+后面的操作,
# 这里的操作是`/pkg_name`,也就是搜索`pkg_name`
yum groupinfo '*' | less +/pkg_name

列出软件包的所有依赖包

yum deplist pkg_name

列出尚未安装的软件包的内容 2018-05-01

对于已经安装到本机的软件包,查看其包含的所有文件很简单:

rpm -ql pkg_name

但那些还没有安装的包不能用rpm -ql查看,而必须用yum-utils包提供的repoquery命令:

repoquery -l pkg_name

列出软件包的安装时间、安装命令 2018-06-04

$ yum history info yum-utils | grep -iE 'begin time|command line'
Begin time     : Mon May 14 17:22:33 2018
Command Line   : groupinstall base

列出所有Yum仓库 2018-06-24

yum repolist [enabled]

yum repolist disabled

yum repolist all

列出软件包的打包日期 2018-08-06

使用yum info pkg_name可以查看软件包的版本号,但无法查看它的打包日期,而打包日期可以帮助我们判断这个软件是否还在持续维护,此时需要安装yum-plugin-changelog

yum install -y yum-plugin-changelog
$ yum changelog 2 nginx
Loaded plugins: changelog, fastestmirror, langpacks, list-data
# 省略多行

Listing 2 changelogs

==================== Installed Packages ====================
1:nginx-1.12.2-2.el7.x86_64              installed
* Tue Mar  6 20:00:00 2018 Tadej Janež <tadej.j@nez.si> - 1:1.12.2-2
- enable building the ngx_http_auth_request_module module (RHBZ #1471107)

* Wed Oct 18 20:00:00 2017 Luboš Uhliarik <luhliari@redhat.com> - 1:1.12.2-1
- update to upstream release 1.12.2
- Resolves: #1468584 - (CVE-2017-7529) CVE-2017-7529 nginx: Integer
  overflow in nginx range filter module leading to memory disclosure

changelog stats. 1 pkg, 1 source pkg, 2 changelogs

输出结果包含了最近的2条更改记录,最新的nginx-1.12.2-2.el7.x86_64的打包日期是Tue Mar 6 20:00:00 2018

可以修改条目数量,例如yum changelog 1 nginx只显示最近的1条记录。

安装

最小化安装必备

包组

# Base包组包含了许多常用的包,
# 例如:vim-enhanced, lsof, tcpdump, wget, traceroute, yum-utils, which
yum groupinstall base

单独的包 2018-07-19

包名 为什么需要
open-vm-tools 确保VMWare虚拟机始终与宿主机同步时间,避免虚拟机从挂起状态恢复后时间滞后
git 从GitHub同步dotfiles,以及其它许多常用软件仓库
autofs 自动挂载光盘到/misc/cd,因此可以修改Yum的Base仓库从系统光盘安装软件包,节省时间
nfs-utils 管理NFS共享
tree 查看目录的树状结构
psmisc 包含了killallpstreefuser等工具
yum-plugin-list-data 列出软件包所属的包组

安装脚本:

yum install -y      \
    open-vm-tools   \
    git             \
    autofs          \
    nfs-utils       \
    tree            \
    psmisc          \
    yum-plugin-list-data

安装包组中的可选包(optional)

默认情况下,yum groupinstall仅安装包组列表中的必需(mandatory)和默认(default)程序包。如果还要安装包组中的可选(optional)程序包,可以设置group_package_types选项,添加optional参数:

yum --setopt=group_package_types=mandatory,default,optional groupinstall "Performance Tools"

删除

根据安装事务(Transaction)历史删除

列出所有事务历史

$ yum history
Loaded plugins: fastestmirror, list-data, refresh-packagekit, security
ID     | Login user               | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
    21 | root <root>              | 2018-02-03 21:57 | Install        |   18   
    20 | root <root>              | 2018-02-03 20:39 | Erase          |    1 EE
    19 | root <root>              | 2018-02-03 20:34 | Install        |    1 EE

查看指定事务ID的详情

$ yum history info 21
Loaded plugins: fastestmirror, list-data, refresh-packagekit, security
Transaction ID : 21
Begin time     : Sat Feb  3 21:57:19 2018
Begin rpmdb    : 1297:1f692416574b33c359288dd6f93f378fc1220284
End time       :            21:57:27 2018 (8 seconds)
End rpmdb      : 1315:f69d986edc17b097391049399740d81337491ebd
User           : root <root>
Return-Code    : Success
Command Line   : install -y freetype-devel gd-devel libcurl-devel libjpeg-turbo-devel libpng-devel libxml2-devel libxslt-devel readline-devel zlib-devel

撤销指定事务

yum history undo 21

自定义Yum仓库 2018-06-03

某些情况下(例如无法连接到互联网),用户需要建立自己的yum仓库,此时可以通过以下步骤完成:

创建仓库

yum install -y createrepo yum-utils

# 仅下载(不安装)编译`php`依赖的rpm包
mkdir -p /src/builddeps
yum-builddep --downloadonly --downloaddir=/src/builddeps/ php

# 根据下载的rpm包创建仓库,指定目录下将生成`repodata/`目录
createrepo /src/builddeps/

配置仓库文件

vim /etc/yum.repos.d/builddeps.repo

粘贴以下内容:

[BuildDeps]
name=Build Deps
baseurl=file:///src/builddeps/
enabled=1
gpgcheck=0

查看指定仓库包含的包的数量:

yum repolist --disablerepo='*' --enablerepo='BuildDeps'

更新仓库

如果后续下载了新的包,需要更新仓库:

yum-builddep --downloadonly --downloaddir=/src/builddeps/ mariadb

createrepo --update /src/builddeps/

# 只清除指定仓库的缓存
yum clean all --disablerepo='*' --enablerepo='BuildDeps'

yum repolist --disablerepo='*' --enablerepo='BuildDeps'

Leave A Comment