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版本,操作步骤如下:
- 创建专属的pin配置文件,路径为
/etc/apt/preferences.d/meld.pref(文件名可自定义,后缀推荐用.pref,确保系统能识别) - 在文件中写入以下内容:
Package: meld Pin: version 1.5.3-1ubuntu1 Pin-Priority: 1001
- 保存文件后,执行
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
相关产品推荐
相关产品推荐

