apt-mark hold 是 apt 包管理器用于鎖定特定軟件包、防止其被自動(dòng)升級(jí)的命令。1. 使用 sudo apt-mark hold 包名 可鎖定指定包,如 sudo apt-mark hold nginx;2. 執(zhí)行后該包在 apt upgrade 時(shí)將保持原版本;3. 用 apt-mark showhold 可查看已鎖定的包;4. 若要恢復(fù)升級(jí),使用 sudo apt-mark unhold 包名;5. 注意需準(zhǔn)確指定包名,部分自動(dòng)更新機(jī)制仍需額外配置,且長期鎖定可能引發(fā)依賴或安全問題。
有時(shí)候你不想讓某些軟件包自動(dòng)升級(jí),比如因?yàn)榧嫒菪詥栴}或特定版本需求。這時(shí)候可以用 apt-mark hold 命令來鎖定 APT 包,防止它被意外更新。
什么是 apt-mark hold?
apt-mark hold 是 APT 包管理器提供的一項(xiàng)功能,用于將某個(gè)已安裝的軟件包標(biāo)記為“保持當(dāng)前狀態(tài)”,也就是阻止它通過 apt upgrade 或系統(tǒng)更新機(jī)制進(jìn)行升級(jí)。
使用這個(gè)命令不會(huì)影響其他包的升級(jí),只會(huì)影響你指定的那個(gè)包。
舉個(gè)例子:如果你正在運(yùn)行 mysql 5.7,并且不希望系統(tǒng)自動(dòng)升級(jí)到 MySQL 8.0,就可以用這個(gè)方法鎖定 MySQL 的相關(guān)包。
如何使用 apt-mark hold 鎖定包
操作非常簡單,只需要一條命令:
sudo apt-mark hold 包名
比如你想鎖定 nginx:
sudo apt-mark hold nginx
執(zhí)行完后,你會(huì)看到輸出類似:
nginx set on hold.
這樣之后,即使有新版本可用,在執(zhí)行 apt upgrade 時(shí)也不會(huì)升級(jí)這個(gè)包。
如果你想確認(rèn)哪些包已經(jīng)被鎖定,可以運(yùn)行:
apt-mark showhold
這條命令會(huì)列出所有當(dāng)前被“hold”的包。
如果想恢復(fù)升級(jí)怎么辦?
如果你后來決定放開限制,允許這個(gè)包繼續(xù)升級(jí),可以用:
sudo apt-mark unhold 包名
例如解除對(duì) nginx 的鎖定:
sudo apt-mark unhold nginx
同樣你會(huì)看到提示:
Canceled hold on nginx.
注意事項(xiàng)和常見問題
- 并不是所有情況都適用:在一些自動(dòng)更新機(jī)制(如 unattended-upgrades)中,可能還需要額外配置才能完全阻止升級(jí)。
- 包名要準(zhǔn)確:有些軟件可能會(huì)有多個(gè)相關(guān)的包名,比如 nginx, nginx-core, nginx-full 等,記得檢查清楚你要鎖定的是哪個(gè)具體包。
- 不要濫用:長期鎖定太多包可能導(dǎo)致依賴沖突或安全漏洞無法修復(fù),建議只在必要時(shí)使用。
基本上就這些。這個(gè)功能雖然簡單,但在控制服務(wù)器環(huán)境版本一致性上非常實(shí)用。