部署好服務(wù)器之后,第一件事往往是更新系統(tǒng)。定期更新能修補(bǔ)安全漏洞、修復(fù)軟件缺陷,并保證軟件包與最新依賴庫的兼容性。長期不更新的服務(wù)器更容易被攻擊者盯上,安裝新軟件時(shí)也更容易出問題。
更新 Ubuntu 只需在終端執(zhí)行幾條命令。你也可以開啟自動(dòng)安全更新,即使沒有手動(dòng)登錄,系統(tǒng)也能自動(dòng)打補(bǔ)丁。
注意:用 `apt` 更新軟件包,和把系統(tǒng)升級(jí)到新的 Ubuntu 大版本(例如從 22.04 升到 24.04)是兩件事。版本升級(jí)會(huì)替換系統(tǒng)級(jí)文件,是一個(gè)獨(dú)立的流程,需要單獨(dú)操作。
執(zhí)行以下步驟需要通過 SSH 或終端訪問服務(wù)器。在生產(chǎn)服務(wù)器上操作前,建議先創(chuàng)建快照或備份。
完整命令如下:
```bash
sudo apt update
apt list --upgradable
sudo apt upgrade
sudo apt autoremove
cat /var/run/reboot-required
sudo reboot
```
---
在本機(jī)終端運(yùn)行 `ssh` 命令連接服務(wù)器:
```bash
ssh username@your_server_ip
```
將 `username` 替換為實(shí)際用戶名(新服務(wù)器通常是 `root`),`your_server_ip` 替換為服務(wù)器 IP。
用戶可以在 hPanel 的 VPS 面板中找到 IP 地址和登錄信息。macOS / Linux 直接使用系統(tǒng)終端,Windows 可以用終端或 PuTTY。
如果是第一次使用遠(yuǎn)程服務(wù)器,建議先完成基本的 VPS 初始化配置再開始更新。`ls`、`cd`、`pwd` 這幾條基礎(chǔ)命令有助于在服務(wù)器中導(dǎo)航。如果想避免每次都輸密碼,可以配置 SSH 密鑰登錄。
更新前,先用 `lsb_release -a` 或 `hostnamectl` 確認(rèn)服務(wù)器運(yùn)行的版本:
```bash
lsb_release -a
```
輸出會(huì)顯示發(fā)行商、描述、版本號(hào)和代號(hào)。`Release` 一行對(duì)應(yīng)版本號(hào)(如 `24.04`),`Codename` 是版本名稱(如 `noble`)。
也可以用:
```bash
hostnamectl
```
輸出中的 `Operating System` 一行會(huì)確認(rèn) Ubuntu 版本,同時(shí)顯示內(nèi)核版本和系統(tǒng)架構(gòu)。
搞清楚版本很重要,因?yàn)椴糠周浖透率轻槍?duì)特定版本的。如果這兩條命令都不可用,也可以通過 `/etc/os-release` 查看版本信息。
`sudo apt update` 會(huì)從 Ubuntu 倉庫拉取最新的軟件包信息:
```bash
sudo apt update
```
這條命令不會(huì)安裝任何東西,只下載最新的包元數(shù)據(jù),讓系統(tǒng)知道哪些包可以升級(jí)、從哪里獲取。
輸出末尾如果顯示類似"8 packages can be upgraded",說明有更新可用;顯示"All packages are up to date"則說明當(dāng)前已是最新。
每次升級(jí)前都應(yīng)該先執(zhí)行這條命令。沒有刷新列表,`apt upgrade` 可能會(huì)跳過更新,或者嘗試下載已經(jīng)不存在的舊版本。
`apt list --upgradable` 列出所有有新版本可用的軟件包:
```bash
apt list --upgradable
```
輸出包含每個(gè)軟件包的名稱、當(dāng)前版本,以及將要升級(jí)到的目標(biāo)版本。大多數(shù)名字可能不熟悉——它們通常是系統(tǒng)庫或后臺(tái)依賴,這是正常的。
在生產(chǎn) VPS 上,升級(jí)前值得看一眼這份列表,確認(rèn)數(shù)據(jù)庫、Web 服務(wù)器或語言運(yùn)行時(shí)是否在本次更新范圍內(nèi)。
如果某個(gè)軟件包暫時(shí)不想升級(jí),可以先鎖定它:
```bash
sudo apt-mark hold package_name
```
建議:在生產(chǎn)服務(wù)器上升級(jí)前,先創(chuàng)建一個(gè)快照或備份。一旦更新出現(xiàn)問題,快照能比現(xiàn)場(chǎng)排查快得多地恢復(fù)到正常狀態(tài)。
`sudo apt upgrade` 將所有可用更新安裝到服務(wù)器上:
```bash
sudo apt upgrade
```
APT 會(huì)先顯示本次變更摘要,輸入 `Y` 并回車確認(rèn)。
這條命令只安裝現(xiàn)有軟件包的新版本,會(huì)補(bǔ)全缺失的依賴,但不會(huì)刪除已安裝的軟件。
Nginx、MySQL 等正在運(yùn)行的服務(wù)在軟件包更新后可能會(huì)自動(dòng)重啟。在生產(chǎn)服務(wù)器上,建議安排在低流量時(shí)段升級(jí)。
如果某個(gè)軟件包因依賴沖突被跳過(內(nèi)核或主要庫更新時(shí)偶爾發(fā)生),需要改用:
```bash
sudo apt full-upgrade
```
警告:`full-upgrade` 可能會(huì)刪除軟件包來解決依賴沖突。確認(rèn)前請(qǐng)仔細(xì)檢查摘要,確認(rèn) APT 不會(huì)刪除你依賴的關(guān)鍵組件。
`sudo apt autoremove` 刪除那些作為依賴被安裝、但當(dāng)前已不再需要的軟件包:
```bash
sudo apt autoremove
``
升級(jí)后,舊版本的依賴(如過期的內(nèi)核鏡像或已被替換的庫)通常會(huì)殘留在系統(tǒng)中,`autoremove` 負(fù)責(zé)找出并清理它們。
---
檢查是否需要重啟,查看以下文件是否存在:
```bash
cat /var/run/reboot-required
```
文件存在時(shí)會(huì)輸出 ` System restart required `;如果什么都沒有,則無需重啟。內(nèi)核和系統(tǒng)庫更新是該文件出現(xiàn)的最常見原因。
需要注意的是,這個(gè)文件依賴軟件包安裝后的鉤子腳本來生成。在精簡(jiǎn)版或定制鏡像中,鉤子可能不存在,即使文件沒有出現(xiàn),也可能需要重啟。剛更新過內(nèi)核的話,不管有沒有這個(gè)文件,都建議重啟。
查看是哪些軟件包觸發(fā)了重啟提示:
```bash
cat /var/run/reboot-required.pkgs
```
確認(rèn)可以重啟后執(zhí)行:
```bash
sudo reboot
```
SSH 會(huì)話會(huì)斷開,等一兩分鐘后重新連接即可。
注意:重啟前保存好所有工作,并提前告知團(tuán)隊(duì)。重啟期間所有運(yùn)行中的服務(wù)都會(huì)停止,應(yīng)安排在維護(hù)窗口內(nèi)進(jìn)行。
重啟后重新運(yùn)行 `sudo apt update`,并檢查是否還有待升級(jí)的軟件包:
```bash
sudo apt update
apt list --upgradable
```
`apt list --upgradable` 在"Listing..."之后如果沒有任何輸出,說明所有軟件包都已是最新版本。
確認(rèn)內(nèi)核版本:
```bash
uname -r
```
版本號(hào)應(yīng)與剛安裝的最新內(nèi)核一致。也可以重新運(yùn)行 `lsb_release -a` 驗(yàn)證 Ubuntu 版本——軟件包更新不會(huì)改變大版本號(hào),版本升級(jí)(如升到 24.04 或 26.04)需要單獨(dú)用 `do-release-upgrade` 來完成。
安裝 `unattended-upgrades` 軟件包,可以讓系統(tǒng)在兩次手動(dòng)更新之間自動(dòng)應(yīng)用安全補(bǔ)丁。
很多 Ubuntu Server 默認(rèn)已經(jīng)安裝了這個(gè)包,先確認(rèn)一下:
```bash
dpkg -s unattended-upgrades | grep Status
```
輸出顯示 `install ok installed` 說明已安裝;否則手動(dòng)安裝:
```bash
sudo apt install unattended-upgrades
```
然后啟用它:
```bash
sudo dpkg-reconfigure unattended-upgrades
```
提示詢問是否自動(dòng)下載并安裝穩(wěn)定更新,選擇"是"即可。
這會(huì)生成配置文件 `/etc/apt/apt.conf.d/20auto-upgrades`,指示 APT 每天檢查并自動(dòng)應(yīng)用來自 Ubuntu `-security` 倉庫的安全更新。
如需調(diào)整更新范圍、屏蔽特定軟件包或配置自動(dòng)重啟規(guī)則,編輯 `/etc/apt/apt.conf.d/50unattended-upgrades`。
開啟自動(dòng)更新并不意味著可以完全不管服務(wù)器。應(yīng)定期登錄檢查:`/var/run/reboot-required` 是否出現(xiàn)、`/var/log/unattended-upgrades/` 中有無失敗記錄、各項(xiàng)服務(wù)是否運(yùn)行正常。
更新時(shí)遇到的問題大多歸結(jié)為五類:包文件被鎖、更新中斷、依賴損壞、倉庫丟失,以及軟件包配置詢問。
APT 進(jìn)程被鎖
報(bào)錯(cuò)類似"Could not get lock /var/lib/dpkg/lock-frontend",說明有另一個(gè)包管理進(jìn)程正在運(yùn)行。先查看是什么占著鎖:
```bash
sudo lsof /var/lib/dpkg/lock-frontend
```
等現(xiàn)有進(jìn)程完成。如果進(jìn)程已崩潰但鎖文件殘留,確認(rèn)沒有任何包管理操作在運(yùn)行后再刪除:
```bash
sudo rm /var/lib/dpkg/lock-frontend
sudo dpkg --configure -a
```
更新中斷
SSH 掉線或更新被強(qiáng)制中斷可能導(dǎo)致軟件包處于半安裝狀態(tài),用以下命令恢復(fù):
```bash
sudo dpkg --configure -a
```
這會(huì)補(bǔ)全那些被遺留在異常狀態(tài)的軟件包的配置流程。
依賴關(guān)系損壞
軟件包缺少依賴時(shí),運(yùn)行:
```bash
sudo apt --fix-broken install
```
APT 會(huì)自動(dòng)下載缺失的依賴并重新配置,使依賴關(guān)系恢復(fù)一致。
倉庫不可訪問
`apt update` 報(bào)告無法訪問某個(gè)倉庫時(shí),檢查 `/etc/apt/sources.list` 和 `/etc/apt/sources.list.d/` 中的源配置,刪除或修正指向已失效倉庫的條目。
軟件包配置詢問
更新過程中有時(shí)會(huì)詢問是保留當(dāng)前配置文件還是替換為軟件包自帶的新版本。如果服務(wù)器上有自定義的配置,除非明確知道需要新文件,否則選擇保留本地版本。
遇到其他問題時(shí),`grep`、`cat`、`ps` 這幾條常用 Linux 命令在排查時(shí)很有幫助。
---
更新軟件包只是 VPS 安全維護(hù)的一個(gè)環(huán)節(jié)。完整的維護(hù)還包括:加固 SSH 配置、設(shè)置防火墻、監(jiān)控系統(tǒng)狀態(tài)和定期備份。
SSH 安全:禁用 root 直接登錄,修改默認(rèn) SSH 端口,切換為密鑰認(rèn)證。這幾步結(jié)合定期更新,能堵住絕大多數(shù)常見攻擊路徑。
防火墻:Ubuntu 內(nèi)置 UFW(Uncomplicated Firewall),幾條命令就能完成配置,控制哪些流量可以到達(dá)服務(wù)器。
建議制定一個(gè)固定的每周維護(hù)計(jì)劃:更新軟件包、檢查是否有待重啟、審查防火墻規(guī)則、測(cè)試備份可用性。形成文檔記錄有助于保持執(zhí)行的一致性。
Copyright ? 2013-2020. All Rights Reserved. 恒訊科技 深圳市恒訊科技有限公司 粵ICP備20052954號(hào) IDC證:B1-20230800.移動(dòng)站


