三大主流軟體分發格式對比
| 格式 | 副檔名 | 本質 | 優點 | 缺點 | 適用場景 |
| 源碼包 | .tar.gz, .tar.xz, .tar.bz2 | 原始碼 + 建構腳本 | 極致客製化、優化指令集、無廠商鎖定、可移植 | 編譯耗時、依賴地獄、難升級/移除、需開發工具鏈 | 開發者、嵌入式、特殊優化需求、無二進制發布軟體 |
| RPM | .rpm | 預編譯二進制 + 中繼資料 + 腳本 | 依賴管理、簽名驗證、資料庫追蹤、標準化 | 版本滯後、依賴衝突、跨發行版相容性差 | RHEL/CentOS/Fedora/SUSE/openSUSE 生產環境 |
| DEB | .deb | 預編譯二進制 + 控制資訊 + 腳本 | 依賴解析強 (APT)、分支豐富、社群龐大 | 同上 | Debian/Ubuntu/Mint/Kali 生產環境 |
一、源碼編譯安裝 (傳統三部曲)
# 1. 獲取並解壓
wget https://example.com/software-1.2.3.tar.xz
tar -xf software-1.2.3.tar.xz
cd software-1.2.3
# 2. 閱讀文檔 (關鍵!)
cat README INSTALL
# 3. 配置 (檢查依賴、生成 Makefile)
./configure --prefix=/usr/local/software-1.2.3 \
--enable-feature-x \
--with-ssl=/usr/local/openssl
# 常用選項: --prefix 安裝路徑, --enable/disable-*, --with/without-*
# 4. 編譯 (多核加速)
make -j$(nproc) # nproc 為 CPU 核心數
# 5. 安裝 (需 root)
sudo make install
# 6. 清理 (可選)
make clean
make distclean # 連 configure 生成文件一起清
源碼安裝進階技巧
- Checkinstall:將
make install 過程打包為 RPM/DEB,納入包管理器追蹤,便於日後移除/升級。sudo checkinstall -D --pkgname=mysoft --pkgversion=1.2.3 make install
- Stow/GNU Stow:安裝至
/usr/local/stow/software-1.2.3,再用 stow software-1.2.3 建立符號連結到 /usr/local,多版本共存極易切換/移除。
- 環境變數注入:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig 解決庫尋找問題。
二、RPM 套件管理 (RHEL/CentOS/Fedora/SUSE)
底層 rpm 指令
# 查詢
rpm -qa # 所有已安裝
rpm -qf /path/to/file # 檔案屬於哪個包
rpm -ql package # 包含檔案列表
rpm -qi package # 詳細資訊
rpm -qpR package.rpm # 查看未安裝包的依賴
# 安裝/升級
rpm -ivh package.rpm # 安裝 (-v 詳細 -h 進度條)
rpm -Uvh package.rpm # 升級 (不存在則安裝)
rpm -Fvh package.rpm # 升級 (僅已安裝)
# 移除
rpm -e package_name
rpm -e --nodeps package_name # 強制忽略依賴 (危險)
# 驗證
rpm -V package # 檢查檔案完整性 (大小/權限/MD5/時間)
rpm --import RPM-GPG-KEY # 導入 GPG 公鑰
rpm -K package.rpm # 驗證簽名
高層包管理器 (YUM/DNF) - 強烈推薦日常使用
dnf install nginx # 自動解決依賴
dnf remove nginx
dnf update # 全系統升級
dnf update nginx # 單包升級
dnf search keyword # 搜尋
dnf info nginx # 詳細資訊
dnf provides */nginx.conf # 反向查找提供檔案的包
dnf history # 事務歷史 (可回滾)
dnf repoquery --requires nginx # 遞歸依賴樹
dnf module list nodejs # 模組化串流 (RHEL 8+)
三、DEB 套件管理 (Debian/Ubuntu)
底層 dpkg 指令
dpkg -i package.deb # 安裝
dpkg -r package # 移除 (保留配置)
dpkg -P package # 徹底清除 (含配置)
dpkg -l | grep nginx # 列出已安裝
dpkg -L package # 檔案列表
dpkg -c package.deb # 查看未安裝包內容
dpkg -S /path/to/file # 檔案歸屬
dpkg-reconfigure package # 重新配置 (如 tzdata, postfix)
高層 APT 指令 (日常主力)
apt update # 更新索引 (必做第一步)
apt upgrade # 升級所有可升級包
apt full-upgrade # 智能處理依賴變更的升級
apt install nginx
apt remove nginx # 移除保留配置
apt purge nginx # 徹底清除
apt search keyword
apt show nginx # 詳細資訊
apt list --installed # 已安裝列表
apt list --upgradable # 可升級列表
apt autoremove # 移除孤兒依賴
apt edit-sources # 編輯軟體源
四、現代通用格式:跨發行版部署新選擇
| 技術 | 特點 | 適用場景 |
| Flatpak | 沙箱隔離、運行時共享、Flathub 倉庫、桌面應用優先 | 桌面端應用、專有軟體、舊版庫依賴隔離 |
| Snap | Canonical 推動、自動更新、單一文件、伺服器/桌面雙支援 | Ubuntu 生態、IoT、伺服器應用 (如 microk8s) |
| AppImage | 單一可執行檔、無需安裝/root、FUSE 掛載、完全便攜 | 臨時測試、跨系統攜帶、無權限環境 |
| Docker/Podman | 容器映像、完整隔離、基礎設施即代碼、生產標準 | 微服務、CI/CD、複雜依賴隔離、雲原生 |
五、最佳實踐總結
- 生產環境首選發行版官方倉庫 (dnf/apt):安全更新及時、依賴經測試、支援生命週期長。
- 需新版本/特定版本:啟用官方模組化串流 (RHEL 8+
dnf module) 或第三方可信倉庫 (EPEL, Remi, SCL, Docker 官方源)。
- 無倉庫源/專有軟體:優先尋找官方提供的 RPM/DEB/容器映像/AppImage。
- 極致客製化/嵌入式:源碼編譯 +
checkinstall 或 stow 管理。
- 複雜多服務部署:容器化 (Docker Compose/Kubernetes) 實現環境一致性與依賴隔離。
- 禁止常態化使用
--nodeps --force / --force-overwrite,除非極度清楚後果並有回滾預案。