ubuntu中无全局黑名单,仅三种互不重叠机制:dpkg hold(影响所有apt操作)、unattended-upgrades黑名单(仅限安全更新)、modprobe黑名单(仅禁用内核模块加载),混用或错配即失效。

Ubuntu 里没有全局“软件更新黑名单”这个概念,只有三种互不重叠、用途明确的限制机制:包级别 hold、无人值守升级黑名单、内核模块黑名单。用错地方就完全失效。
dpkg --set-selections 设置包为 hold 状态
这是最常用、也最可靠的“禁止某软件更新”方法,适用于任何 deb 包(比如 nginx、docker-ce、nvidia-driver-535),且对 apt upgrade 和 unattended-upgrades 都生效。
- 执行
echo "package-name hold" | sudo dpkg --set-selections,例如:echo "nvidia-driver-535 hold" | sudo dpkg --set-selections - 验证是否生效:
dpkg --get-selections | grep "hold",输出中应含该包名和hold字样 - 想恢复更新时,把
hold换成install:echo "nvidia-driver-535 install" | sudo dpkg --set-selections - 注意:
hold不影响依赖安装,但若其他包显式依赖新版本,apt可能报错或拒绝升级整批包
unattended-upgrades 的 Package-Blacklist 配置
这个黑名单只对 unattended-upgrades 服务起作用,不影响手动 apt upgrade。它专用于阻止安全更新流程中误装高风险包,比如内核、固件。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 编辑
/etc/apt/apt.conf.d/50unattended-upgrades - 在
Unattended-Upgrade::Package-Blacklist块里添加包名,每行一个,用分号结尾,例如:"linux-image-generic"; "linux-firmware"; - 必须确保
Allowed-Origins里只留-security源,否则黑名单可能被绕过(比如误启用了-updates) - 修改后运行
sudo unattended-upgrades --dry-run --debug,检查输出中是否还出现被黑包名
modprobe 黑名单禁用内核模块(不是软件包)
别混淆:这里禁的是驱动模块(如 nouveau、rtl8188eu),不是用户态软件。它不阻止软件包更新,只防止模块在启动或运行时加载。
- 写入
/etc/modprobe.d/blacklist.conf,格式为:blacklist module-name,例如:blacklist nouveau - 若模块被内置进内核或有强依赖,需改用:
install module-name /bin/true - 必须执行
sudo update-initramfs -u,否则重启后不生效 - 验证:
lsmod | grep module-name应无输出;若仍有,说明没进 initramfs 或拼写错误
真正容易被忽略的是三者边界:hold 影响所有 apt 行为,Package-Blacklist 只管无人值守,modprobe blacklist 只管内核模块加载。混用或错配,比如在 50unattended-upgrades 里加 nginx,根本不会生效——它只扫描 -security 源里的包,而 nginx 更新走的是 -updates 或第三方源。










