Debian 上的 Java 更新,通常不是由 Java 自己单独控制,而是跟着 apt 和 unattended-upgrades 一起走。因此,想“禁用 Java 自动更新”,实际要先分清系统现在通过哪一层在自动装包,再决定是只拦住相关更新,还是直接关闭无人值守升级。下面按检查、修改配置、验证结果和后续手动更新四个环节展开,命令和配置项都保留原样,方便直接照着操作。
先确认当前 Java 版本和路径
动手改配置前,先看系统当前启用了哪个 Java 版本。这样后面排查更新来源时,至少知道自己要关注的是哪套运行时或 JDK。
sudo update-alternatives --config java
执行后,终端会列出已经安装的 Java 版本及对应路径。记下你准备控制更新的那个版本路径,后续核对包名或排查更新记录时会更方便。
如果你的系统原文里出现了 ja va 这样的断开写法,这里应以实际命令 java 为准。
修改 50unattended-upgrades,拦住自动安装来源
Debian 上最常见的自动更新入口是 unattended-upgrades。如果 Java 安全更新会被自动装上,通常要先检查这个配置文件:
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
打开后,找到类似下面的 Origins-Pattern 配置:
Unattended-Upgrade::Origins-Pattern {
// ...
"origin=Debian,codename=${distro_codename},label=Debian-Security";
// ...
};
原文的做法是:在 Origins-Pattern 列表中,找到与 Java 更新相关的条目,例如这行安全更新来源:
"origin=Debian,codename=${distro_codename},label=Debian-Security";
然后在行首加上两个斜杠 //,把它注释掉。保存后,这一来源下的相关安全更新将不再被自动安装。
需要注意的是,这种改法影响的不只是 Java,而是该来源匹配到的自动更新行为。也就是说,如果你注释的是整条 Debian Security 来源,实际停掉的范围可能比“仅 Java”更大,操作前最好先确认自己的目标。
使用 nano 保存退出的方法如下:按 Ctrl+X,再按 Y 确认,最后按 Enter。
修改 20auto-upgrades,关闭无人值守升级
如果系统启用了周期性自动升级,还需要继续检查另一个配置文件:
sudo nano /etc/apt/apt.conf.d/20auto-upgrades
你会看到类似下面几行:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";
其中关键项是最后一行。把它从:
APT::Periodic::Unattended-Upgrade "1";
改成:
APT::Periodic::Unattended-Upgrade "0";
这样做的含义很直接:关闭系统的无人值守自动升级。改完后同样保存并退出。
这一改动的范围也不是只针对 Java,而是会停用整套 unattended-upgrades 自动安装机制。如果你的目标只是避免 Java 在后台自动升级,这一步是否要做,取决于你是否接受其他软件包也改为手动更新。
修改完成后,系统行为会发生什么变化
按原文的步骤完成后,系统就不会再按之前的方式自动安装 Java 更新了。更准确地说:
- 如果你只改了
50unattended-upgrades,主要是限制特定自动更新来源。 - 如果你把
APT::Periodic::Unattended-Upgrade改为"0",则是直接关闭无人值守升级。
因此,是否“彻底关闭 Java 自动更新”,取决于你改到了哪一层配置。对多数桌面或服务器环境来说,第二种方式更直接,但影响面也更大。
以后如何手动更新 Java
关闭自动更新后,后续就需要自己定期检查并手动升级。原文给出的命令如下:

sudo apt update
sudo apt upgrade
其中 需要替换成实际的 Java 包名,例如 default-jre 或 openjdk-11-jre。
如果你只是想在维护窗口内自行控制升级节奏,这种方式更适合;但相应地,也需要自己承担补丁延迟带来的安全风险,尤其是在长期联网的 Debian 主机上。







