Ubuntu系统下如何将PHP锁定至7.4版本并解决锁定失效问题
Ubuntu系统下如何将PHP锁定至7.4版本并解决锁定失效问题
我来帮你梳理下问题所在,以及正确的版本锁定方法:
一、为什么你的apt preferences配置失效了?
你之前只锁定了php这个包,但实际上php是个虚拟包——它本身不对应具体的安装文件,只是一个指向实际PHP版本包的“别名”。真正决定PHP版本的是php7.4-cli、php7.4-common这类具体的软件包,还有你可能安装的各种扩展(比如php7.4-mysql、php7.4-gd)。所以只锁定php虚拟包,根本无法阻止系统更新到更高版本的PHP。
二、正确的apt preferences配置方法(推荐,允许7.4系列小版本更新)
如果你想保持在PHP7.4系列,同时还能接收7.4.x的安全小更新,推荐用下面的配置修改/etc/apt/preferences:
打开文件:
sudo vi /etc/apt/preferences
添加以下内容:
# 锁定所有php7.4相关包到7.4.*版本 Package: php7.4* Pin: version 7.4.* Pin-Priority: 1000 # 锁定核心PHP相关包到7.4兼容版本 Package: php-common php-cli php-fpm php-cgi Pin: version 7.4.* Pin-Priority: 1000
Pin-Priority: 1000表示强制优先安装指定版本,不会被更高版本(比如8.x)替代- 通配符
php7.4*会覆盖所有以php7.4开头的扩展包,确保它们都保持和7.4兼容的版本
配置完成后,运行以下命令测试:
sudo apt update && sudo apt full-upgrade
之后用php -v检查,版本应该还是停留在7.4.x系列。
三、更简单的apt-mark hold方法(完全锁定当前版本,不接受小更新)
如果你想完全固定当前安装的PHP7.4具体版本(比如7.4.33),连小版本更新都不想接收,可以用apt-mark hold命令:
首先查看当前已安装的所有php7.4相关包:
dpkg -l | grep php7.4
然后把这些包全部锁定:
sudo apt-mark hold $(dpkg -l | grep php7.4 | awk '{print $2}')
这条命令会自动提取所有php7.4相关的包名并标记为“hold”,之后系统就不会再更新这些包了。
两种方法的区别
- apt preferences:允许7.4系列内的小版本升级(比如7.4.33→7.4.34),同时阻止升级到8.x版本,适合需要保持安全更新的场景
- apt-mark hold:完全锁定当前安装的具体版本,任何更新都不会进行,适合需要绝对固定版本的场景
四、验证锁定是否生效
可以用apt policy命令查看包的锁定状态,比如:
apt policy php7.4-cli
如果输出里显示Pin: version 7.4.*且优先级为1000,或者显示hold状态,就说明锁定成功了。
备注:内容来源于stack exchange,提问作者timppu
相关产品推荐
相关产品推荐

