命令是干什么的
zypper 是 openSUSE 与 SLES 的软件包管理工具,底层是 libzypp 加 RPM 仓库,地位相当于 Debian 系里的 apt。仓库管理、搜索、安装、升级、打补丁都收在同一个命令下,商业版本 SLES 还区分官方补丁通道与普通升级。跨发行版运维时容易踩的两类坑集中在订阅状态与发行版级升级子命令的选择上:前者决定能不能刷到包,后者决定会不会把整机带到新的大版本。
基本信息
| 适用平台 | openSUSE Leap、openSUSE Tumbleweed、SUSE Linux Enterprise Server 与 Desktop |
|---|---|
| 基本语法 | zypper 子命令 包名,脚本里加 --non-interactive 避免交互卡住 |
| 常用子命令 | refresh 刷新元数据、in 安装、rm 卸载、se 搜索、up 升级、patch 打补丁、dup 发行版升级 |
| 仓库管理 | lr 列出、ar 添加、rr 删除、mr 修改;priority 数值越小优先级越高 |
| 锁与审计 | al 加锁防升级、ll 列出锁、ps 查看哪些进程需要重启 |
| 权限要求 | 安装与卸载需要 root,refresh 与查询普通用户受限 |
典型使用场景
- 新装的 SLES 或 openSUSE 机器核对仓库是否启用、地址是否正确
- 脚本化批量装包:用非交互模式避免确认提示把流水线挂住
- 安全补丁窗口:用补丁通道更新,比整机全量升级风险小
- 控制第三方源影响:给仓库设优先级,避免第三方包覆盖官方包
- 升级后确认哪些服务要重启:列出仍在使用已删除文件的进程
- 锁定关键组件版本,防止被自动升级带走导致兼容性告警
- 排查订阅过期造成的刷新失败,先修授权而不是先换源
常用示例
常用示例
sudo zypper refresh # 刷新所有仓库的元数据
sudo zypper repos -u # 列出仓库及其地址
sudo zypper search -s nginx # 搜索包,-s 显示版本与所在仓库
sudo zypper install -y nginx # 安装并自动确认
sudo zypper remove telnet # 卸载
sudo zypper update -y # 升级已安装的包
sudo zypper patch # 走官方补丁通道,SLES 日常维护常用
sudo zypper ps -s # 升级后列出仍在使用已删除文件的进程
sudo zypper addlock nginx # 给包加锁,防止被升级覆盖
sudo zypper patch --dry-run # 演练:只报告将要发生的变更search -s 输出逐列读法
| 列名 | 含义 | 正常与异常 |
|---|---|---|
| S | 状态位,i 表示本机已安装 | 字母的完整含义以本机手册为准,不要凭记忆推断 |
| Name | 软件包、模式或补丁的名称 | 同名包出现在多个仓库时这里会有多行 |
| Type | 类型:package 普通包、pattern 模式、patch 补丁 | 安装模式会连带一批相关包,影响范围更大 |
| Version | 仓库中可获取的版本号 | 与已装版本对比即可判断是否需要升级 |
| Arch | 架构,例如 x86_64、noarch | 与本机架构不一致的包不会被安装 |
| Repository | 来源仓库名 | 多仓库提供同名包时,这是判断来源与优先级的依据 |
SLES 的刷新失败常常与订阅有关:授权过期或未注册时会报仓库不可用或鉴权失败,先用 SUSEConnect 查注册与订阅状态,再考虑仓库配置。
zypper up 只升级已安装的包,zypper dup 是按仓库内容做发行版级升级,用于 Tumbleweed 或跨版本升级;服务器日常维护用 up 或 patch 更稳。
第三方仓库未导入签名密钥时会报签名错误,可用 zypper --gpg-auto-import-keys refresh 自动导入该仓库的密钥,但仅对你信任的源这样做。