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


