admin 管理员组文章数量: 888526
CentOS 基础命令 III
软件包管理
为了满足应用的需求,我们通常会在系统上安装各种相应的软件,并在维护中会对软件进行升级和删除,甚至是退回到旧的版本。 CentOS 中主要有三种类型的软件管理方式,分别为源代码编译、RPM 包管理和 YUM 管理方式。其中 YUM 管理方式是对用户最友好的方式,其次为 RPM 方式,最不友好的是源代码编译方式。源代码编译也可生成 RPM 包, RPM 包又可让 YUM 解决资源依赖问题。
“RPM Package Manager” 是 RPM 的递归缩写,也就是 RPM 软件包管理器。RMP 包管理器可以生成 RMP 软件包、安装、查询、升级、卸载、校验软件包和对 RPM 数据库进行管理。 RPM 软件包是以 .rpm 为扩展名,其命名规范为:
name-version-release.os.arch.rpm
其中 name 为程序名称; version 为程序版本号; release 为发行号,用于标识 RPM 包本身的发行号,与源程序的 release 号无关; os 为 RPM 包支持的操作系统版本,如 el6、el7、el8 等; arch 为系统架构,如 i686、x86_64、amd64、ppc(power-pc)、noarch(即不依赖平台)。
例如:
openssh-server-8.0p1-4.el8_1.x86_64
|-----1------| |-2-| 3 4 51-->name 2--> version 3-->release 4-->os 5-->arch
RPM 具有一组 rpm 命令集来实现包管理器的功能。虽然打包系统定义了一种依赖模型,可以查询到所依赖的软件和库,但有时会陷入令人头痛的包依赖地狱(package dependency hell)。 高级包管理系统 YUM 此时就可以大放光彩了,其可以自动下载软件包并解决包依赖问题。在 CentOS 8 中开始采用 DNF 代替 YUM,这两个命令的大部分选项是兼容的,所以就不必太过担心了。
高级包管理系统 YUM 的两大基础设施,分别为软件包仓库和与软件包操作相关的命令集,以实现软件包的安装、查询、升级、卸载、校验软件包和对 RPM 数据库进行管理。
CentOS 软件包仓库库配置文件位于 /etc/yum.repo.d 内。
$ yum repolist all /* 列表所有仓库 */repo id /* 仓库 iD */ repo name /* 仓库名称 */ status /* 仓库状态 */
AppStream CentOS-8 - AppStream enabled /* enabled 表示仓库开启 */
AppStream-source CentOS-8 - AppStream Source disabled /* disabled 表示仓库关闭 */
BaseOS CentOS-8 - Base enabled
BaseOS-source CentOS-8 - BaseOS Sources disabled
Devel CentOS-8 - Devel WARNING! F disabled
HighAvailability CentOS-8 - HA disabled
PowerTools CentOS-8 - PowerTools disabled
base-debuginfo CentOS-8 - Debuginfo disabled
c8-media-AppStream CentOS-AppStream-8 - Media disabled
c8-media-BaseOS CentOS-BaseOS-8 - Media disabled
centosplus CentOS-8 - Plus disabled
centosplus-source CentOS-8 - Plus Sources disabled
cr CentOS-8 - cr disabled
...
列表的内容与 /etc/yum.repo.d 内的仓库配置文件 .repo 相对应。仓库配置文件常用参数如下:
$ cat /etc/yum.repos.d/CentOS-Base.repo# 井号起始的为注释内容。
# 远程仓库系统会根据您的 IP 地址自动选择相匹配的地理区域的仓库镜像。[BaseOS] /* 仓库 ID。不能和其它仓库 ID 重复。*/
name=CentOS-$releasever - Base /* 仓库名称。*/
mirrorlist=/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra /* 仓库镜像列表地址。*/
#baseurl=/$contentdir/$releasever/BaseOS/$basearch/os/ /* 仓库地址。*/
gpgcheck=1 /* gpg 测试,以验证包的完整。*/
enabled=1 /* 是否开启此仓库。*/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial /* gpg 公钥位置。*/
除了 CentOS 官方提供的仓库外,还可以使用第三方仓库。
CentOS 官方仓库及其推荐的第三方仓库介绍:
=show&redirect=Repositories。
CentOS 软件仓库国内及其它地理区域的镜像:
CentOS 6 /
CentOS 7 /
CentOS 8 /
直接取 CentOS 软件仓库镜像的主域名,就可以看到各大网站提供的所有软件仓库。
清华大学镜像: /
阿里云镜像:/
华为镜像:/
网易三石镜像:/
为了提高软件包下载速度,我们还可以直接设置国内仓库的地址。
示例:
/* 国内远程仓库*//* 添加网易 docker-ce 仓库。*/
$sudo wget -O /etc/yum.repos.d/docker-ce.repo .repo$cat /etc/yum.repos.d/docker-ce.repo[docker-ce-stable]
name=Docker CE Stable - $basearch
#baseurl=/$releasever/$basearch/stable
baseurl=/$releasever/$basearch/stable/* 注意 baseurl 两行的对应关系与仓库网址对应关系。可以很方便的设置为任何仓库源。*/enabled=1
gpgcheck=1
gpgkey=
.../* 本地仓库*//* 在系统更新后,同步一个远程仓库到本地,再设置本地仓库。*//* centos 7 */
$sudo yum install yum-utils createrepo /* 安装 yum 插件。*/
$sudo mkdir /tmp/data/repos
$sudo reposync -r docker-ce-stable -p /tmp/data/repos
/* reposync 同步仓库到本地, -r 指定同步的仓库 id,-p 指定同步数据所到位置。*/
$sudo createrepo /tmp/data/repos/docker-ce-stable
/* 创建仓库 xml 索引,也就是 metadata。*//* centos 8 */
$sudo dnf install createrepo_c
$sudo mkdir /tmp/data/repos
$sudo dnf reposync -r docker-ce-stable -p /tmp/data/repos
$sudo createrepo_c /tmp/data/repos/docker-ce-stable
$sudo cp /etc/yum.repos.d/docker-ce.repo /etc/yum.repos.d/local-docker-ce.repo
$sudo vim /etc/yum.repos.d/local-docker-ce.repo[docker-ce-stable]
name=Docker CE Stable - $basearch
#baseurl=/$releasever/$basearch/stable
baseurl=file:///data/repos/docker-ce-stable/linux/centos/$releasever/$basearch/stable
...
yum 命令
yum [options] command [package …]
--security /* 指定包含安全更新的软件包,一般用于 check-upate 或 update */-v /* 繁琐模式。*/
[-y | --assumeyes] /* 自动同意所有安装时的问题。*/
-h /* 帮助。*/repolist [all | enabled | disabled] /* 列表所有/开启/关闭的仓库。*/
repoinfo [all | enabled | disabled | <repo_id> ...] /* 查询指定仓库的信息。 */clean [packages | metadata | dbcache | expire-cache | all]
/* 清理系统下载的软件包、仓库信息元数据、仓库信息 sqlite 元数据、使缓存数据过期或清理所有数据。缓存目录位于 /var/cache/yum。*/makecache [fast] /* 下载所有已启用仓库的元数据,如果使用 fast,则相当于执行 yum clean expire-cache。*/check-update /* 检查是否有更新。*/install [package ...] /* 安装一个或多个软件包,用空格分隔软件包名称 */
reinstall [package ...] /* 重新安装一个或多个软件包。*/
update [package ...] /* 更新指定的一个、多个软件包或所有可以更新的软件包。*/
update-to [package ...] /* 更新一个或多个指定的软件到指定版本的软件包。*/
remove | erase [package ...] /* 删除一个或多个软件包。*/list [list_option] /* 列表指定软件包*/[all | glob_exp] [...] /* 列表所有的软件包或与指定的 glob 表达式匹配的软件包。*/available [glob_exp] [...] /* 列表可供安装的软件包。*/updates [glob_exp] [...] /* 列表可供更新的软件包。*/installed [glob_exp] [...] /* 列表已安装的软件包。*/obsoletes [glob_exp] [...] /* 列表已标识为废弃的软件包。*/recent [glob_exp] [...] /* 列表最近添加到仓库的软件包。*/info [list_option] /* 查询指定软件包的信息*//*info 可以使用与 list_option 同样的选项,但一般直接查询指定软件包的信息。*/search [string] /* 查找软件包,可以指定部分字符串来查找。*/group [groups_option] /* 软件包组的管理,类似软件包管理。 */list [installed|available|environment|language|package|hidden|ids]/* 列表软件包组,或选择以下类型,只有指定了 hidden,才会列出隐藏包组。*/install /* 安装软件包组。 */remove /* 删除软件包组,其会删除软件包组包含的所有软件包,无论其它软件包是否依赖所删除的。 */ info /* 查看软件包组信息。*/deplist [package] [...] /* 列表指定软件包依赖 */provides | whatprovides [command | package] /* 查询指定的命令或软件包由谁提供 */history /* 软件包管理事务历史 */list [<trans-id> ...] /* 列表管理事务历史,含事务 ID、命令行、日期、动作和所作的改动。 */info <trans-id> ... /* 查询指定事务详细信息。*/redo <trans-id> /* 重做指定事务。*/rollback <trans-id> /* 回滚到指定事务。*/undo <trans-id> /* 撤销指定事务。/
示例:
$sudo yum --security check-update /* 检查是否有关于安全的更新。*/$sudo yum update /* 安装所有更新。*/$yum search epel /* 查找 epel 仓库安装包。*/Last metadata expiration check: 0:00:59 ago on Wed 09 Dec 2020 08:43:00 PM CST.
============================== Name Matched: epel ==============================
epel-release.noarch : Extra Packages for Enterprise Linux repository configuration
epel-rpm-macros.noarch : Extra Packages for Enterprise Linux RPM macros$yum info epel-release /* 查询 epel-release 仓库安装包信息。*/Last metadata expiration check: 0:03:45 ago on Wed 09 Dec 2020 08:43:00 PM CST.
Installed Packages
Name : epel-release
Version : 8
Release : 9.el8
Architecture : noarch
Size : 32 k
Source : epel-release-8-9.el8.src.rpm
Repository : @System
From repo : @commandline
Summary : Extra Packages for Enterprise Linux repository configuration
URL :
License : GPLv2
Description : This package contains the Extra Packages for Enterprise Linux (EPEL) repository: GPG key as well as configuration for yum.$sudo yum install epel-release rmpfusion-free-release \
rpmfusion-nonfree-release -y /* 安装 epel、rpmfusion 仓库。*/$sudo yum history list /* 查询安装历史。*/ ID | Command line | Date and time | Action(s) | Altered
--------------------------------------------------------------------------------44 | install vsftpd | 2020-12-15 21:54 | Install | 1 43 | | 2020-12-15 17:30 | Upgrade | 2 42 | update | 2020-12-12 16:19 | Upgrade | 1
...$sudo yum history info 44 /* 查询事务 ID 44 详细信息。*/Transaction ID : 44
Begin time : Tue 15 Dec 2020 09:54:33 PM CST
Begin rpmdb : 2115:61986a56c82aec41b92fb2b3bc09ce57dd092e60
End time : Tue 15 Dec 2020 09:54:34 PM CST (1 seconds)
End rpmdb : 2116:146141955c021eb24181666635dc6b4293874964
User : <haojiang>
Return-Code : Success
Releasever : 8
Command Line : install vsftpd
Comment :
Packages Altered:Install vsftpd-3.0.3-32.el8.x86_64 @appstream$sudo yum remove vsftpd /* 删除 vsftpd。*/Dependencies resolved.
================================================================================Package Architecture Version Repository Size
================================================================================
Removing:vsftpd x86_64 3.0.3-32.el8 @appstream 343 kTransaction Summary
================================================================================
Remove 1 PackageFreed space: 343 k
Is this ok [y/N]: y
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transactionPreparing : 1/1 Running scriptlet: vsftpd-3.0.3-32.el8.x86_64 1/1 Erasing : vsftpd-3.0.3-32.el8.x86_64 1/1 Running scriptlet: vsftpd-3.0.3-32.el8.x86_64 1/1 Verifying : vsftpd-3.0.3-32.el8.x86_64 1/1
Installed products updated.Removed:vsftpd-3.0.3-32.el8.x86_64 Complete!$sudo yum history redo 44 /* 重做事务 ID 44。*/Last metadata expiration check: 0:23:16 ago on Tue 15 Dec 2020 09:43:53 PM CST.
Repeating transaction 44, from Tue 15 Dec 2020 09:54:33 PM CSTInstall vsftpd-3.0.3-32.el8.x86_64 @appstream
================================================================================Package Architecture Version Repository Size
================================================================================
Installing:vsftpd x86_64 3.0.3-32.el8 appstream 180 kTransaction Summary
================================================================================
Install 1 PackageTotal download size: 180 k
Installed size: 343 k
Is this ok [y/N]: y
Downloading Packages:
vsftpd-3.0.3-32.el8.x86_64.rpm 308 kB/s | 180 kB 00:00
--------------------------------------------------------------------------------
Total 112 kB/s | 180 kB 00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transactionPreparing : 1/1 Installing : vsftpd-3.0.3-32.el8.x86_64 1/1 Running scriptlet: vsftpd-3.0.3-32.el8.x86_64 1/1 Verifying : vsftpd-3.0.3-32.el8.x86_64 1/1
Installed products updated.Installed:vsftpd-3.0.3-32.el8.x86_64 $whereis vsftpd /* 查询 vsftpd 位置。*/vsftpd: /usr/sbin/vsftpd /etc/vsftpd /usr/share/man/man8/vsftpd.8.gz$sudo yum provides /usr/sbin/vsftpd /* 查询指定命令由那个软件包提供。*/Last metadata expiration check: 6 days, 1:41:12 ago on Wed 09 Dec 2020 08:43:00 PM CST.
vsftpd-3.0.3-32.el8.x86_64 : Very Secure Ftp Daemon
Repo : @System
Matched from:
Filename : /usr/sbin/vsftpdvsftpd-3.0.3-32.el8.x86_64 : Very Secure Ftp Daemon
Repo : appstream
Matched from:
Filename : /usr/sbin/vsftpd$sudo yum deplist vsftpd /* 查询指定软件的依赖。*/CentOS Linux 8 - AppStream 3.8 kB/s | 4.3 kB 00:01
CentOS Linux 8 - BaseOS 4.7 kB/s | 3.9 kB 00:00
CentOS Linux 8 - Extras 1.5 kB/s | 1.5 kB 00:01
CentOS Linux 8 - Extras 7.6 kB/s | 8.6 kB 00:01
...
package: vsftpd-3.0.3-32.el8.x86_64dependency: /bin/bashprovider: bash-4.4.19-12.el8.x86_64dependency: /bin/shprovider: bash-4.4.19-12.el8.x86_64dependency: libc.so.6(GLIBC_2.28)(64bit)provider: glibc-2.28-127.el8.x86_64dependency: libcap.so.2()(64bit)provider: libcap-2.26-4.el8.x86_64dependency: libcrypto.so.1.1()(64bit)provider: openssl-libs-1:1.1.1g-11.el8.x86_64
...
注:如未特别指出,以上 yum 命令参数与 dnf 命令参数通用。
/* Centos 7 用 yum 下载软件包。如果加 --resolve,还将下载依赖。*/
$yum install --downloadonly --downloaddir=./epel.release.noarch/* Centos 8 用 yum/dnf 下载软件包。*如果加 --resolve,还将下载依赖。*/
$[yum | dnf] download epel.release.noarch
rpm 命令
GENERAL OPTIONS-v /* 繁琐模式。*/
-vv /* 输出大量的调试信息。*/INSTALL AND UPGRADE OPTIONS{-i | --install} /* 安装指定软件包。*/
{-U | --upgrade} /* 更新或安装指定软件包。其更新过程其实是先删除再安装。*/
{-F | --freshen} /* 仅升级已安装的软件包。*/-h /* 使用 # 字符显示安装或更新进度。*/--percent /* 解包文档时,输出百分比进度。*/--oldpackage /* 使用指定旧版本软件包更新。*/--test /* 仅作测试和报告潜在冲突。*/ERASE OPTIONS{-e | --erase} /* 删除指定软件包。*/--test /* 仅作测试,与 -vv 结合使用对调试很有用。*/QUERY OPTIONS{-q | --query} /* 查询指定软件包信息。*/[package-select-option]{-a | --all} /* 查询所有已安装的软件包。*/{-p | --package} package_file /* 查询指定软件包。*/{-f | --file} file /* 查询指定文件属于哪个软件包。*/--fileprovide /* 列表指定文件由哪些文件提供。*/--filerequire /* 列表指定文件依赖哪些文件。*/[package-query-option]{-i | --info} /* 查询指定软件包的信息。*/{-l | --list} /* 列表指定软件包内的文件。*/--provides /* 列表指定软件包提供哪些功能。*/--whatrequires capability /* 查询哪些软件包依赖指定的功能(软件包名称)。*/{-R | --requires} /* 查询指定软件包的依赖功能。*/{-c | --configfiles} /* 列表指定软件包的配置文件。*/--scripts /* 查询指定软件包中用来安装和删除的脚本。*/--querytags /* 列表 rpm 可以查询的标记。*/VERIFY OPTIONS{-V | --verify} /* 使用 rpm 数据库内的元数据来验证软件包。*//* 验证输出为 9 个字符的字符串,每个字符串含义如下:c %config 配置文件。
d %doc 文档文件。
g %ghost 文件内容不是软件包包含的。
l %license 版权文件。
r %readme 说明文档。
l %license 版权文件。
r %readme 说明文档。. 测试通过。
S 文件大小不同。
M 文件权限和类型不同。
5 MD5 不匹配。
D 主次设备编号不匹配。
L readlink(2) 路径不匹配。
U 用户属主不同。
G 组不同。
T 修改时间不同。
P 功能不匹配。*/-K /* 公钥验证。*/
示例:
$rpm -qa | grep openssh /* 查询所有已安装的软件包,grep 匹配 openssh。*/openssh-server-8.0p1-5.el8.x86_64
openssh-clients-8.0p1-5.el8.x86_64
openssh-8.0p1-5.el8.x86_64
openssh-askpass-8.0p1-5.el8.x86_64$rpm -q vsftpd /* 查询是否安装了 vsftpd 软件包。*//* 验证软件包签名。*/
$rpm -K .3.2011/AppStream/x86_64/os/Packages/vsftpd-3.0.3-32.el8.x86_64.rpm.3.2011/AppStream/x86_64/os/Packages/vsftpd-3.0.3-32.el8.x86_64.rpm: digests signatures OK/* 安装相应远程仓库的 vsftpd 软件包。*/
$sudo rpm .3.2011/AppStream/x86_64/os/Packages/vsftpd-3.0.3-32.el8.x86_64.rpm $sudo rpm -qi vsftpd /* 查询相关信息。*/Name : vsftpd
Version : 3.0.3
Release : 32.el8
Architecture: x86_64
Install Date: Tue 15 Dec 2020 09:21:09 PM CST
Group : System Environment/Daemons
Size : 351530
License : GPLv2 with exceptions
Signature : RSA/SHA256, Wed 29 Apr 2020 12:08:42 AM CST, Key ID 05b555b38483c65d
Source RPM : vsftpd-3.0.3-32.el8.src.rpm
Build Date : Mon 27 Apr 2020 10:04:03 AM CST
Build Host : x86-01.mbox.centos.org
Relocations : (not relocatable)
Packager : CentOS Buildsys <bugs@centos.org>
Vendor : CentOS
URL : .html
Summary : Very Secure Ftp Daemon
Description :
vsftpd is a Very Secure FTP daemon. It was written completely from
scratch.$sudo rpm -e vsftpd /* 删除指定软件。*/$sudo rpm -ql vsftpd /* 查询指定的软件包含的文件。*/ /etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/lib/.build-id
...
编译安装
一般来说,当我们下载了程序源代码后,其内会提供编译安装所需的相应文件,如 README、INSTALL、configure、Makefile 等文件。README 自述文件介绍软件及其安装方式;INSTALL 一般是安装方式介绍;configure 是用于生成 Makefile 的脚本。Makefile 是编译和安装的特定格式文件。源代码编译所需的依赖文件,如头文件、库文件、所依赖的程序和编译套件就必须自行安装了。另外编译安装的软件并非比软件包安装的好,但有时软件安装包发行的比较慢,就可以自行编译安装了。
configure 脚本
--help /* 帮助。 */
--prefix /* 指定安装目录。*/
--with-*** /* 指定可选模块。*/
示例:
/* 下在 git 源代码。*/
$wget .9.5.tar.xz
/* 解源代码压缩包。*/
$tar -xvf git-2.9.5.tar.xz$cd git-2.9.5.tar.xz$less README /* 查看自述文件。*/
$less INSTALL /* 查看安装文件。*/$sudo yum install make gcc -y /* 安装编译套件。*/
/* 安装编译依赖。*/
$sudo yum install sudo dnf install dh-autoreconf curl-devel expat-devel gettext-devel openssl-devel perl-devel zlib-devel asciidoc xmlto/* 指定安装目录为 /usr/local/git,方便以后删除或升级。*/
$make prefix=/usr/local/git all doc
$sudo make prefix=/usr/local/git install install-doc install-html/* 把编译安装的 git 路径放到环境变量里,修改 .bashrc 文件。*/
$vim ~.bashrc
export PATH=/usr/local/git/bin:$PATH /* 修改最后一行。*/$source ~.bashrc /* 使修改立刻生效。*/
本文标签: CentOS 基础命令 III
版权声明:本文标题:CentOS 基础命令 III 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1688273106h200047.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论