跳转至

yum

1 rpm

rpm包里面是已经编译好并打包成一定目录层级的文件,安装过程就是将包里面的文件拷贝到安装目录下
  • 功能:rpm包管理
  • 语法:
  • 查询包信息: rpm {-q|--query} [select-options] [query-options]
  • 安装包:rpm {-i|--install} [install-options] PACKAGE_FILE ...
  • 更新包:rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
  • 更新或安装:rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
  • 卸载包:rpm {-e|--erase} [--allmatches] [--justdb] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
  • -v:显示详细信息,包括进度
  • -h:通常与-v一起使用,获得更好的显示效果

1.1 rpm安装

-vh 可以显示详细的过程、进度信息
  • rpm -i file:安装(不会显示详细安装信息)
  • rpm -ivh *.rpm:安装(显示详细安装信息、进度信息)

1.1.1 强制安装

  • rpm -ivh *.rpm --nodeps --force:强制安装,不考虑依赖

1.1.2 指定安装位置

  • rpm -ivh *.rpm --prefix=安装路径
通常指定安装目录不使用rpm来操作,容易产生错误,建议使用[rpm2cpio和cpio](#rpm2cpio和cpio)命令

1.2 rpm更新

  • rpm -Uvh *.rpm:如果没有,则安装,否则更新
  • rpm -Fvh 包全名:如果没有则不安装,否则更新

1.3 rpm卸载

  • rpm -e 软件名

1.4 查询rpm包是否安装

  • rpm -q 包名:查询安装包的简要信息
  • rpm -qi 包名:查看一个包的详细信息
  • rpm -qf 文件名:查看一个文件是由哪个包安装的
  • rpm -ql 包名:查看一个包安装了哪些文件
  • rpm -qa:查看系统中安装了哪些包
  • 示例:
$ rpm -q gcc
gcc-4.8.5-44.el7.x86_64
$ rpm -qi gcc
Name        : gcc
Version     : 4.8.5
Release     : 44.el7
Architecture: x86_64
Install Date: Fri 27 Aug 2021 03:28:38 PM CST
Group       : Development/Languages
Size        : 39226437
License     : GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD
Signature   : RSA/SHA256, Thu 15 Oct 2020 02:49:36 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM  : gcc-4.8.5-44.el7.src.rpm
Build Date  : Wed 30 Sep 2020 10:42:39 AM CST
Build Host  : x86-02.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://gcc.gnu.org
Summary     : Various compilers (C, C++, Objective-C, Java, ...)
Description :
The gcc package contains the GNU Compiler Collection version 4.8.
You,ll need this package in order to compile C code.
$ rpm -qf /usr/bin/gcc
gcc-4.8.5-44.el7.x86_64
$ rpm -ql gcc
/usr/bin/c89
/usr/bin/c99
/usr/bin/cc
/usr/bin/gcc
/usr/bin/gcc-ar
/usr/bin/gcc-nm
/usr/bin/gcc-ranlib
...
$ rpm -qa
geoipupdate-2.5.0-1.el7.x86_64
setup-2.8.71-11.el7.noarch
python-IPy-0.75-6.el7.noarch
python-pycurl-7.19.0-19.el7.x86_64
...

1.5 rpm包下载地址

  1. https://centos.pkgs.org/
  2. http://www.rpmfind.net/linux/rpm2html/search.php rpmfind: http://rpmfind.net/linux/RPM/index.html

pkgs: https://pkgs.org/

fedora koji: https://koji.fedoraproject.org/koji/index

pbone: http://rpm.pbone.net/

源码: https://src.fedoraproject.org/projects/rpms/%2A

CentOS CentOS7.7 https://vault.centos.org/7.7.1908/os/Source/SPackages/

https://vault.centos.org/7.7.1908/updates/Source/SPackages/

CentOS7.8 https://vault.centos.org/7.8.2003/os/Source/SPackages/

https://vault.centos.org/7.8.2003/updates/Source/SPackages/

CentOS7.9 https://vault.centos.org/7.9.2009/os/Source/SPackages/

https://vault.centos.org/7.9.2009/updates/Source/SPackages/

CentOS8.2 https://vault.centos.org/8.2.2004/AppStream/Source/SPackages/

https://vault.centos.org/8.2.2004/BaseOS/Source/SPackages/

CentOS8.3 https://vault.centos.org/8.3.2011/AppStream/Source/SPackages/

https://vault.centos.org/8.3.2011/BaseOS/Source/SPackages/

1.6 rpm包制作

1.7 主要流程

  1. 配置.spec文件
  2. 执行rpmbuild [option] .spec文件

1.7.1 设置打包时不删除调试信息

在spec文件中添加%define __strip /bin/true

2 rpm2cpio和cpio

2.1 rpm2cpio

rpm2cpio 也是rpm包附加的,意味着只要rpm工具,就会有rpm2cpio
```shell
$ rpm -qf /usr/bin/rpm2cpio
rpm-4.11.3-45.el7.x86_64
$ rpm -qf /usr/bin/rpm
rpm-4.11.3-45.el7.x86_64
```
  • 语法:
    • rpm2cpio rpm包 > cpio文件:将rpm包转成cpio文件
    • rpm2cpio rpm包|cpio -idvm:先将rpm包转成cpio文件,再执行cpio提取归档文件内容(常用)
  • 示例:直接生成cpio文件
$ ls
test.rpm
$ rpm2cpio test.rpm > test.cpio
$ ls test.cpio
test.cpio

2.2 cpio

  • 语法:
    • rpm2cpio rpm包|cpio -idvm:常用命令,在当前目录安装rpm包内容
  • 示例
$ rpm2cpio test.rpm |cpio -idvm
./usr/local/include/nccode
./usr/local/include/nccode/blockdata.h
./usr/local/include/nccode/codingmodule.h
./usr/local/include/nccode/codingparam.h
./usr/local/include/nccode/nccode_define.h
./usr/local/include/nccode/nccode_enums.h
./usr/local/include/nccode/nccode_memorypool.h
./usr/local/include/nccode/segmentdata.h
./usr/local/include/nccode/storagecodingmodule.h
./usr/local/lib64/libjerasure.so
./usr/local/lib64/libnc_code.so
11061 blocks

3 yum

  • 参考教程
  • 功能:基于rpm包的管理工具
  • 语法:yum [options] [command] [package ...]
  • 部分command功能描述

语法 功能
yum install package1 [...] 安装包(可以同时安装多个包)
yum remove package1 [...] 卸载安装包(可以同时指定多个包)
yum update [package1] [...] 升级包同时也升级软件和系统内核(不指定包名,默认升级所有包)
yum upgrade [package1] [...] 只升级包,不升级软件和系统内核(不指定包名,默认升级所有包)
yum check-update [package1] [...] 只升级包,不升级软件和系统内核(不指定包名,默认升级所有包)
yum list 显示系统中已经安装和可以安装包的信息
yum list [...] 显示指定包的信息
yum info package 显示指定包信息(比list更详细)
yum deplist package 显示包的依赖
yum repolist 显示配置的安装源

- 部分option功能描述

命令 功能
-y 安装过程确认都是y
-t 忽略安装过程错误
-v 显示安装过程详细信息

3.1 查找so属于哪一个包

  • 语法:yum provides .so名
  • 示例
$ yum provides libcrypto.so.10
已加载插件:fastestmirror, priorities
Loading mirror speeds from cached hostfile
1:openssl-libs-1.0.1e-42.el7_1.9.i686 : A general purpose cryptography library with TLS implementation
源    :base
匹配来源:
提供    :libcrypto.so.10

3.2 仅下载包不安装

<font color=#ED7001>yum-plugin-downloadonly</font> 方式默认会下载依赖,而`yumdownloader`需要<font color=#ED7001>--resolve</font>来指定下载依赖

3.2.1 方法一:使用yum-plugin-downloadonly插件

  1. 安装工具:yum install -y yum-plugin-downloadonly
  2. 使用仅下载命令:yum -y install --downloadonly --downloaddir=下载目录 包名
    1. --downloadonly:表示只下载
    2. --downloaddir=下载目录:指定rpm包下载到哪个位置

3.2.2 方法二:使用yumdownloader工具

  1. 下载工具:yum install yum-utils
  2. 使用yumdownloader下载rpm包:yumdownloader --resolve --destdir=下载目录 rpm包
    1. --resolve:表示下载依赖包
    2. --destdir=下载目录:指定rpm包下载到哪个位置

3.2.3 方法三(推荐):自动下载所有依赖,不管本机是否已经安装了相应的库

  1. 下载工具:yum install yum-utils
  2. 执行命令:repotrack rpm包

3.3 yum源配置

  • 一般我们在/etc/yum.repos.d/目录下新建.repo仓库文件
  • 配置yum源后,再执行如下指令
  • yum clean all
  • yum makecache
  • yum list
  • 参考资料

4 apt