CentOS rpm包管理

Posted 白菜素三鲜丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS rpm包管理相关的知识,希望对你有一定的参考价值。

rpm包管理

rpm包概述

什么是rpm包

由红帽公司开发的软件升级、安装、卸载查询工具

为什么要使用rpm包

就像在windows系统中一样,如果你想要安装一个QQ,安装一个微信,安装一款游戏,首先要去该软件的官网上去下载相关的软件包,通常都是.exe的安装包。还有那种绿色软件包,一下载下来,解压开就能使用无需安装。

那么Linux中也有很多种类的安装包,我们在Linux上也需要安装软件,软件包的种类也有很多,但是最方便,最简单,最简易,速度最快的,也就是rpm包了。

rpm包命名规则

## name-version-release.os.arch.rpm
软件名称-版本号-发布次数.适合linux系统.硬件平台.rpm

## 举例
bash-4.2.46-34.el7.x86_64.rpm
# bash:软件名称
# 4.2.46:版本号
# 34:该版本的发布次数
# el7:适合系统版本(RedHat7,CentOS7)并向下兼容
# x86_64:系统平台64位     x86:32位 i386
# RPM:包的后缀名

Linux中软件的安装方式

# rpm安装:已经编译好的源码包,下载下来后,直接使用rpm命令安装即可
缺点:版本会低于官网版本

# 源码安装:先编译,将源码翻译成系统认识的软件再安装
缺点:步骤复杂繁琐

# 二进制安装:绿色安装,免安装
缺点:不是所有程序都能二进制包

RPM包获取途径

1.检查光盘是否放入光驱

## 挂载语法
mount 源设备文件 目标路径
[root@localhost ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 is write-protected, mounting read-only

## 查看磁盘信息
df -h:查看磁盘分区情况,磁盘使用情况,也能查看挂载设备及目录

## 卸载语法
umount 目标路径
umount /mnt
[root@localhost ~]# umount /mnt/

## 挂载报错
[root@localhost ~]# mount /dev/cdrom /mnt
mount: no medium found on /dev/sr0
原因:设备文件是空的,里面没有任何内容,光驱没有连接

## 卸载报错
[root@localhost mnt]# umount /mnt
umount: /mnt: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[root@localhost mnt]# cd
[root@localhost ~]# umount /mnt
原因:设备繁忙

## 查看挂载结果
[root@localhost ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# ll /mnt/
total 696
-rw-r--r--.  3 root root     14 Oct 30  2020 CentOS_BuildTag
drwxr-xr-x.  3 root root   2048 Oct 27  2020 EFI
-rw-rw-r--. 21 root root    227 Aug 30  2017 EULA
-rw-rw-r--. 21 root root  18009 Dec 10  2015 GPL
drwxr-xr-x.  3 root root   2048 Oct 27  2020 images
drwxr-xr-x.  2 root root   2048 Nov  3  2020 isolinux
drwxr-xr-x.  2 root root   2048 Oct 27  2020 LiveOS
drwxr-xr-x.  2 root root 673792 Nov  4  2020 Packages
drwxr-xr-x.  2 root root   4096 Nov  4  2020 repodata
-rw-rw-r--. 21 root root   1690 Dec 10  2015 RPM-GPG-KEY-CentOS-7
-rw-rw-r--. 21 root root   1690 Dec 10  2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r--.  1 root root   2883 Nov  4  2020 TRANS.TBL

## 此目录用来存放系统基础用的RPM包
root@localhost ~]# ll /mnt/Packages/ -d
drwxr-xr-x. 2 root root 673792 Nov  4  2020 /mnt/Packages/

[root@localhost ~]# ll /mnt/Packages/bash-4.2.46-34.el7.x86_64.rpm 
-rw-rw-r--. 4 root root 1037976 Apr  4  2020 /mnt/Packages/bash-4.2.46-34.el7.x86_64.rpm

rpm命令使用-安装

## 语法:
rpm [选项] rpm包名

rpm包名:
    1.本地包名:在系统中某个目录下的rpm包
    2.远程包名:不用下载,直接使用网站上的rpm包
## 选项:
-i:安装
-v:显示安装的过程
-h:显示安装的进度条
--test:仅测试,不安装
--force:强制安装
--nodeps:忽略依赖关系

## 举例 
# -i
[root@localhost ~]# rpm -i /mnt/Packages/bash-4.2.46-34.el7.x86_64.rpm

# -v
[root@localhost ~]# rpm -iv /mnt/Packages/bash-4.2.46-34.el7.x86_64.rpm 
Preparing packages...

# -h
[root@localhost ~]# rpm -ivh /mnt/Packages/bash-4.2.46-34.el7.x86_64.rpm 
Preparing...                          ################################# [100%]

# 安装远程包名
[root@localhost ~]# rpm -ivh https://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/Packages/xz-5.2.2-1.el7.x86_64.rpm
Retrieving https://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/Packages/xz-5.2.2-1.el7.x86_64.rpm
Preparing...                          ################################# [100%]
    package xz-5.2.2-1.el7.x86_64 is already installed

# --test
[root@localhost ~]# tree
-bash: tree: command not found
[root@localhost ~]# rpm -ivh --test /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm 
Preparing...                          ################################# [100%]
[root@localhost ~]# tree
-bash: /usr/bin/tree: No such file or directory

# --force --nodeps
[root@localhost ~]# rpm -ivh --force --nodeps /mnt/Packages/samba-4.10.16-5.el7.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:samba-0:4.10.16-5.el7            ################################# [100%]
warning: group printadmin does not exist - using root

## 注意:rpm命令管理rpm包的缺点,无法解决依赖关系,需要手动一个一个的安装依赖包

rpm命令使用-查询

## 语法
rpm [选项] rpm包名

## 选项
-q:查看指定的安装包是否安装

--- 以下选项皆要配合-q使用 ---
-a:全部安装过的包
-i:详细信息
-l:列出rpm包相关的配置文件和目录
-c:只查看该软件包相关的配置文件
-d:只查看该软件的帮助文档文件
-f:反向查找,根据配置文件、目录、帮助文档,查找该文件属于哪个包
--scripts:查看安装包,安装之前之后和卸载之前之后要执行的脚本

## 举例
# -q
[root@localhost ~]# rpm -q bash
bash-4.2.46-34.el7.x86_64

# -qa
[root@localhost ~]# rpm -qa | grep vim
vim-common-7.4.629-8.el7_9.x86_64
vim-minimal-7.4.629-7.el7.x86_64
vim-filesystem-7.4.629-8.el7_9.x86_64
vim-enhanced-7.4.629-8.el7_9.x86_64

# -qi 组合使用
[root@localhost ~]# rpm -qa|grep net|xargs rpm -qi

# -ql
[root@localhost ~]# rpm -ql bash

# -qd
[root@localhost ~]# rpm -qc bash

# -qf
[root@localhost ~]# rpm -qf /etc/networks 
initscripts-9.49.53-1.el7.x86_64

# -q --scripts
[root@localhost mnt]# rpm -q --scripts bash
postinstall scriptlet (using <lua>):
nl        = \\n
sh        = /bin/sh..nl
bash      = /bin/bash..nl
f = io.open(/etc/shells, a+)
if f then
  local shells = nl..f:read(*all)..nl
  if not shells:find(nl..sh) then f:write(sh) end
  if not shells:find(nl..bash) then f:write(bash) end
  f:close()
end
postuninstall scriptlet (using <lua>):
-- Run it only if we are uninstalling
if arg[2] == "0"
then
  t=
  for line in io.lines("/etc/shells")
  do
    if line ~= "/bin/bash" and line ~= "/bin/sh"
    then
      table.insert(t,line)
    end
  end

  f = io.open("/etc/shells", "w+")
  for n,line in pairs(t)
  do
    f:write(line.."\\n")
  end
  f:close()
end

镜像站地址

1.阿里云镜像站:(https://developer.aliyun.com/mirror/)

2.网易镜像站:(http://mirrors.163.com/)

3.清华源:(https://mirrors.tuna.tsinghua.edu.cn/)

4.中科大源:(https://mirrors.ustc.edu.cn/)

以上是关于CentOS rpm包管理的主要内容,如果未能解决你的问题,请参考以下文章

软件包管理 3-----基本知识 rpm yum

rhel和centos软件包管理

Linux软件安装管理 - CentOS

Linux学习-软件安装

CentOS软件包管理

CentOS6.5系统自定义RPM包实践