lha

35 年的 .lzh 封存歷史, 如今以單一且自帶相依套件的靜態二進位檔形式發佈。

下載適合你平台的二進位檔 閱讀歷史

靜態二進位 · 在任何 Linux、macOS 或 Windows 上 都不需要安裝 libc

最新發佈 · 上游原始碼 · 建置稽核 · 演算法

什麼是 lha?

LHA(原名 LHarc)是 1988–1989 年由吉崎英明 (Y.Tagawa)所建立的檔案壓縮與封存格式。它採用 LZARI/LZHUF 演算法 (LZ77 + Huffman 的算術編碼變體),是 1990 年代 MS-DOS 與日本個人電腦 上佔主導地位的封存格式,遠早於 ZIP 普及。

lha(這個二進位檔)支援所有常見的 LZH 變體 (-lh0--lh1--lh4--lh5--lh6--lh7--lhx--lzs-, 以及 -lhd- 目錄標頭), 加上舊式的 LArc 與 PMarc 格式。當其他工具都打不開老封存檔時, lha 還能解出來。

簡史

1988–1989 — LHarc 與 LZARI

吉崎英明(Y.Tagawa)在 1988–1989 年發行了針對 MS-DOS 的 原版 LHarc。它是日本最早被廣泛使用的封存格式, 結合了奧村晴彥最初發表的 LZARI 算術編碼(LZ77 變體) 與靜態 Huffman。Tagawa 的貢獻,是將其作為封存格式實用化。

1990–1991 — LZH 問世

吉崎將演算法改進為 LZHUF(LZ77 + 動態 Huffman), 於 1990 年以 LHA 格式發行。封存標頭將壓縮方式嵌入到 檔名後綴中,這也是為什麼你的舊 .lzh 檔案 會以 -lh5- 這類後綴結尾的原因。現代壓縮工具大多會 對使用者隱藏這一點;LHA 編碼器則是明確選擇壓縮方式。

1991–1993 — LHA for UNIX

1991 年大木優(M.Oki)將 LHA 移植到 UNIX。1993 年 綿貫和彥(N.Watazaki)接手維護並幾乎完全重寫了程式碼庫, 形成了沿用至今的 LHa for UNIX。我們今天隨這個二進位檔 一起發佈的 man 頁面,仍然在原作者署名一欄寫著 M. Oki 與 N. Watazaki — 這就是同一份原始碼。

LHA for UNIX 使用的是一種自訂的自由軟體授權: 必須標示作者、禁止將衍生作品稱為「LHA」、並明確禁止未經聯絡作者 進行僅二進位檔的再散佈。這也是為什麼直到今天 Debian 把它 放在 non-free/contrib 的緣故。

1994–2010 — ZIP 時代、2ch 風格論壇

PKZIP 2.0(1993 年)與 Info-ZIP zip(1994 年起)在西方 PC 上 取代了 LHA。在日本,.lzh 封存檔一直流行到 2000 年代初期 — 熱門網站用 LZH 散佈檔案,BBS 預設附加 LZH,Windows 下 .exe 自解壓縮包也廣泛採用 LHA。2ch 風格的電子佈告欄 交換 LZH 檔案一直延續到 2000 年代後期。

2010–2020 — 沉寂維護期

檔案越來越大、頻寬也越來越便宜,LHA 那種適度的 CPU 成本不再重要。 7-Zip 的 LZMA + .7z 在壓縮率上大幅領先。Watazaki 的 LHA for UNIX 樹偶爾有小修補,但不再有正式發佈。

2022 — autoconf 復活(jca02266)

2022 年,GitHub 使用者 jca02266 接手了沉寂已久的程式碼樹, 並為它加上了現代的 autoconf 建置系統。其成果就是 LHa for UNIX 1.14i-ac20220213 — 這正是本儲存庫 原樣收錄upstream/lha/ 下的來源。 原始 C 程式碼、man 頁面和上游測試套件都維持原樣。

jca02266 的 autoconf 工作首次讓這個格式能在任何現代 Linux 發行版上即時編譯。ljh-sh/lha 在此基礎上更進一步,產生預先編譯 靜態二進位檔,讓終端使用者連 apt install build-essential 都不必做。

支援的壓縮方式

後綴演算法說明
-lh0-未壓縮(僅封存) 用於快速封存。中繼資料標頭仍記錄方式,以便舊工具 能正確解碼。
-lh1-LZARI(LZ77 + 算術編碼) 原始 LHarc 方式。只有原版 MS-DOS 工具鏈會寫這種; 你今天遇到的大多數封存檔是 -lh5-
-lh4-LZARI 變體 保留備用。實際上少見。
-lh5-LZHUF(LZ77 + 動態 Huffman) 預設方式。1990 年起的標準 LZH 格式。 當下你遇到最多 .lzh 檔案用的就是這種。
-lh6-LZARI + 靜態 Huffman 變體 實驗性。不常見。
-lh7-LZHUF + 樹變體 實驗性。
-lhx-LZH 相容性標記 表示該封存檔使用更新的 LZH 慣例,外加獨立的 -lhd- 目錄標頭。
-lzs-LZARI 變體 保留。

除了壓縮方式之外,lha 還支援讀寫舊式的 LArcPMarc 格式(可在 configure 時啟用)。請參閱 lha --help 取得目前預設值。

下載

每個封存檔包含:

最新發佈位於 github.com/ljh-sh/lha/releases

macOS / Linux 最快路徑(一行指令):

x i lha           # x-cmd 安裝資料庫(透過 x.eget 解析到 ljh-sh/lha)
x eget use lha    # eget 的裸名解析器 — 等價,命中同一個 release

兩者都會自動識別你的 OS + 架構,從 releases/latest 拉取對應的靜態二進位檔,解壓到 ~/.local/bin/lha,並加入 PATH。無需編譯器、無需 brew tap、無需 apt-add-repo。

或者直接下載對應平台的封存檔:

平台檔案說明
Linux x86_64lha-x86_64-linux-musl.tar.gz 完全靜態。在任何 Linux 發行版(Alpine、Debian、RHEL、Arch…) 都能執行。
Linux ARM64lha-aarch64-linux-musl.tar.gz 完全靜態。用於 aarch64 Linux(如 Graviton、Ampere Altra、 64 位元的 Pi 4/5)。
macOS Apple Siliconlha-aarch64-macos.tar.gz 連結器使用系統 libiconv(macOS 內建)。
macOS Intellha-x86_64-macos.tar.gz 同上。從 Apple Silicon 交叉編譯;在 Intel Mac 上原生執行, 在 Apple Silicon 上經 Rosetta 執行。
Windows x86_64lha-x86_64-windows.zip 以 MinGW 建置,無需 VC++ 執行階段可轉散發套件。

安裝(可選,手動):

tar xzf lha-x86_64-linux-musl.tar.gz
sudo install -m 0755 lha-x86_64-linux-musl/bin/lha /usr/local/bin/lha
sudo install -m 0644 lha-x86_64-linux-musl/man/man1/lha.1 /usr/local/share/man/man1/
man lha

自行建置

包裝指令稿是純 POSIX shell。 從儲存庫根目錄開始:

git clone https://github.com/ljh-sh/lha.git
cd lha
bash scripts/build.sh         # 主機架構(autoreconf + configure + make)
cd upstream/lha && bash scripts/smoke.sh  # 上游測試套件 20 個情境
cd ../../ && bash scripts/build-alpine.sh  # 於 alpine:3.20 中建置 musl-static
bash scripts/build.sh  &&  bash scripts/smoke.sh  # 主機端往返測試

各目標的旗標(host / musl / MSYS2)詳見 scripts/build.sh; 套件內二進位檔適用的上游授權條款則見 NOTICE.md