Linux AppImage:一個檔案即可完成桌面應用程式的發佈方式

在 Windows 上安裝程式時,通常會想到以下流程。

  1. 下載 .exe.msi 安裝檔
  2. 點擊「Next、Next、Finish」
  3. 什麼地方安裝了什麼,實際上往往不太清楚(註冊表 + 散落在各處的檔案)

Linux 則有一種完全不同、在 Windows 上幾乎看不到的應用程式發佈方式。 那就是 AppImage(應用影像)

就像在手機上只下載一個 APK 檔就能執行應用程式一樣,Linux 也可以 只用一個檔案就執行完整的桌面應用程式。不需要安裝過程,也不需要套件管理器,只要管理「可執行檔一個」即可。

本文將一次性整理:

  • AppImage 是什麼
  • 為什麼對 Windows 使用者來說既陌生又有吸引力
  • 在 Linux 上如何管理 AppImage(尤其是 /opt 的使用)

AppImage 是什麼?



一句話總結:

AppImage = 將應用程式 + 所需的所有函式庫打包成「可執行單一檔案」

也就是把執行某個應用程式所需的一切都盡量塞進去,然後把整個包裝成一個可執行檔來發佈。

使用方式也非常簡單。

# 1. 下載 AppImage 檔案
$ ls
MyApp-1.0-x86_64.AppImage

# 2. 給予執行權限
$ chmod +x MyApp-1.0-x86_64.AppImage

# 3. 執行
$ ./MyApp-1.0-x86_64.AppImage

就這樣。 「安裝」這個概念幾乎不存在,想刪除就直接刪掉那個檔案。

如果把它和 Windows 做比較,AppImage 更像是 Portable(可攜式)應用程式,但它是為 Linux 桌面生態系統打造的「標準格式」。


image

為什麼對 Windows 使用者來說會感到陌生?

Windows 的傳統方式是:

  • 安裝程式會
  • 把檔案複製到系統資料夾
  • 在註冊表中加入鍵值
  • 註冊開始選單、服務、驅動等

使用者會覺得「我只是安裝了,結果 OS 的某個角落多了很多東西」。

相對地,AppImage 會:

  • 沒有註冊表
  • 不改動系統目錄
  • 不註冊到套件管理器

完全獨立的一個檔案 形式存在。 不管放在哪裡,只要那個檔案存在就能執行。

如果 Windows 是「我最不清楚自己安裝了什麼」的 OS, AppImage 就是「我手上有這個檔案,這就是我的應用程式」的體驗。

這點與 Linux 的哲學相契合:

  • 「一切皆檔案」
  • 「比起自動魔法,更偏向使用者能理解的結構」

AppImage 提供了「應用程式 = 一個檔案」的極簡模型。


AppImage 的優點:為什麼這麼方便?



以下整理出喜歡 AppImage 的關鍵點:

1. 沒有安裝流程

  • 不需要註冊到套件管理器
  • 不會偷偷複製到 /usr/bin/usr/lib
  • 沒有註冊表

只是一個「可執行檔」而已。

2. 刪除/整理非常簡單

  • 想不喜歡就直接刪除檔案
  • 不必擔心「這個應用程式在系統上留下了什麼」

當然設定檔可能會產生在 ~/.config,但執行檔本身始終是可見的。

3. 避免依賴地獄(Dependency Hell)

AppImage 通常會把執行所需的函式庫自帶進去,因而:

  • 不同發行版的 glibc 版本差異
  • libXxx.so 版本不匹配

這些問題大多在 AppImage 內部已經解決,使用者只需擔心「這個發行版能跑嗎?」的疑慮會減少。

4. 不需要 root 權限

大多數情況下:

  • 下載
  • 給予執行權限(chmod +x
  • 直接執行

不會複製到系統目錄,不需要 sudo


缺點:與套件管理器的折衷

AppImage 不是萬能的。主要缺點包括:

  • 中央管理困難
  • 透過 apt、pacman、dnf 等無法一眼看到版本/更新
  • 更新方式各不相同
  • 有些 AppImage 內建更新功能,但也有不少沒有
  • 磁碟使用量可能較大
  • 每個 AppImage 都自帶函式庫,重複部分會佔用空間

因此,建議「不是所有應用都用 AppImage」:

  • 安裝流程繁瑣的應用
  • 想在多個發行版上共用的應用
  • 不常用或實驗性工具

AppImage 放在哪裡?管理策略

現在談談實際問題:AppImage 檔案放在哪裡,如何管理?

Linux 使用者風格各異,主要有兩種做法。

1. 放在使用者目錄下(如 ~/Apps~/bin

我自己剛開始用 Linux 時也是這樣做的。

  • ~/apps/MyApp/MyApp.AppImage
  • 直接放在 ~/Downloads 執行
  • 隨時整理

優點

  • 不需要 root 權限
  • 如果是「只用於自己的機器」也不成問題

缺點

  • 多個使用者帳號時無法共用
  • 後續整理時會混淆「這是 AppImage 嗎?」
  • 在 Linux 檔案系統觀點上,系統應用與個人資料混在一起

對於個人筆記本來說不算壞,但想更「Linux 化」的管理方式,建議採用以下方法。

2. 在 /opt 下以應用程式為單位管理

這是我偏好的方式。

  1. 為每個應用在 /opt 下建立目錄
  2. 把 AppImage 放進去
  3. 設定權限與群組,讓多個使用者共用

以管理 MyApp.AppImage 為例:

# 1. 建立應用程式目錄
sudo mkdir -p /opt/myapp

# 2. 移動 AppImage
sudo mv ~/Downloads/MyApp-1.0-x86_64.AppImage /opt/myapp/myapp.AppImage

# 3. 給予執行權限
sudo chmod 755 /opt/myapp/myapp.AppImage

若想在任何地方都能用 myapp 指令執行:

sudo ln -s /opt/myapp/myapp.AppImage /usr/local/bin/myapp

這樣就完成:

  • 真正執行檔位置:/opt/myapp/myapp.AppImage
  • PATH 中的指令:/usr/local/bin/myapp

想更嚴格管理權限

例如只允許特定群組執行:

# 建立 myapps 群組
sudo groupadd myapps

# 將目錄與檔案的群組改為 myapps
sudo chown -R root:myapps /opt/myapp

# 只允許擁有者與群組執行(其他人禁止)
sudo chmod 750 /opt/myapp/myapp.AppImage
sudo chmod 750 /opt/myapp

現在只要屬於 myapps 群組的使用者才能執行。

sudo usermod -aG myapps alice
sudo usermod -aG myapps bob

這種做法的優點:

  • 符合 Linux 檔案系統的意圖
  • /opt 是「不屬於發行版套件的應用程式」的放置地
  • 多個使用者可以共用同一個 AppImage
  • 透過權限/群組在檔案系統層面控制誰能使用

與桌面環境整合(.desktop 檔案)

若想讓 AppImage 不只是單純的檔案,而能在 GNOME/KDE 等桌面環境的選單中顯示,僅需建立一個 .desktop 檔案。

例如:

~/.local/share/applications/myapp.desktop

[Desktop Entry]
Type=Application
Name=My App
Exec=/opt/myapp/myapp.AppImage
Icon=/opt/myapp/icon.png
Terminal=false
Categories=Utility;

這樣就能在應用程式選單中看到「My App」,點擊即可執行 /opt/myapp/myapp.AppImage

若想全系統可見,將檔案放在 /usr/share/applications/ 即可。

這種方式與套件管理器無關,只要「新增/刪除檔案」即可,管理非常簡單。


總結:一個檔案背後的 Linux 哲學

AppImage 本身就是 Linux 哲學的體現。

  • 透明性
  • 應用程式所在位置、執行內容都能直接看到
  • 使用者主導
  • 安裝程式不會隨意改動系統,使用者自行決定放在哪裡
  • 簡單
  • 安裝/移除不再是複雜的魔法,而是「複製/刪除檔案」

在 Windows 上很少見的模型。

如果你對「安裝後 OS 角落堆積東西」感到厭煩,AppImage 會是一個相當新鮮的選擇。

開始使用 AppImage 時,建議:

  1. 初期可放在使用者目錄下
  2. 逐漸熟悉後,移至 /opt/應用名稱,並設定群組權限、符號連結、.desktop 檔案

這樣就能清楚掌握:

  • 系統上有哪些應用程式
  • 誰能使用哪些應用程式

這正是 Linux 的核心價值之一。