You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

apt-mark与APT-pin(/etc/apt/preferences.d/pin)哪个版本锁定方式更可靠?

在Ubuntu 16.04 LTS中,锁定软件包版本主要有两种实用机制:**APT-pinning(全局生效)**和apt-mark(针对已安装版本锁定),下面分别详细说明操作方式和区别:

一、APT-pinning:全局锁定指定版本

这个方法是系统级全局生效的,不管你用apt、apt-get、aptitude命令行工具,还是Synaptic、Muon这类图形包管理器,都会严格遵循这个锁定规则。

比如你要把meld固定到1.5.3-1ubuntu1版本,操作步骤如下:

  1. 创建专属的pin配置文件,路径为/etc/apt/preferences.d/meld.pref(文件名可自定义,后缀推荐用.pref,确保系统能识别)
  2. 在文件中写入以下内容:
Package: meld
Pin: version 1.5.3-1ubuntu1
Pin-Priority: 1001
  1. 保存文件后,执行sudo apt update让配置生效

参数说明:

  • Package: meld:明确指定要锁定的软件包名称
  • Pin: version 1.5.3-1ubuntu1:设定要锁定的具体版本号
  • Pin-Priority: 1001:把优先级设为1001(高于APT默认的500优先级),确保系统会优先选择这个版本,不会被后续的源更新覆盖
二、apt-mark:锁定已安装的现有版本

如果你已经手动安装了meld_1.5.3-1ubuntu1,并且移除了APT-pin的配置,想要直接锁死当前已装版本不让它自动升级,可以用apt-mark工具:

操作命令:

  • 锁定版本:sudo apt-mark hold meld
  • 查看已锁定的包:apt-mark showhold(执行后会列出所有被锁定的软件包,此时meld会出现在列表中)
  • 解除锁定:sudo apt-mark unhold meld

两种方法的核心区别:

  • APT-pinning是强制系统优先选择指定版本,哪怕源里有更高版本也不会自动安装;如果指定版本不在当前源中,可能会导致安装/更新失败(需要确保源里存在该版本)
  • apt-mark hold只是阻止已安装版本被自动升级,但如果你手动指定更高版本安装,系统还是会允许的

注意事项:

  • 使用APT-pinning时,一定要确认你指定的版本在当前配置的软件源中存在,否则执行sudo apt update后可能出现版本无法找到的错误
  • 两种方法可以结合使用,但通常根据实际需求选择一种即可:需要全局强制锁定到特定版本选APT-pinning;只是不想让已装版本被自动升级选apt-mark hold

内容的提问来源于stack exchange,提问作者N0rbert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:24:02