概要
かつて日本国内で広く普及していた圧縮形式「LHA(拡張子 .lzh)」のファイルを、Linux環境で展開(解凍)・管理するためのコマンドです。
現在ではレガシーな形式ですが、過去のデータ資産や古いソフトウェアのアーカイブを扱う際に必要となります。現代の環境では lhasa ではなく、標準的な lha コマンドを使用するのが一般的です。
※多くのディストリビューションで標準インストールされていないため、追加インストールが必要です(例: sudo apt install lha や dnf install lha)。
仕様(引数・オプション)
構文
lha [コマンド] [オプション] [アーカイブファイル] [対象ファイル...]
主なコマンド(動作指定)
| コマンド | 説明 |
| l | アーカイブ内のファイル一覧を表示します(展開はしません)。 |
| x | ディレクトリ構造を保持したままファイルを展開します(推奨)。 |
| e | ファイルを展開します(実装によってはディレクトリ構造を無視する場合があります)。 |
| v | 詳細なファイル一覧を表示します。 |
| t | アーカイブの整合性をテストします(展開はしません)。 |
主なオプション(挙動変更)
| オプション | 説明 |
| f | 同名のファイルが存在する場合、確認せずに強制的に上書きします(Force)。 |
| q | 処理メッセージを表示せずに実行します(Quiet)。 |
| w=[DIR] | 指定したディレクトリを展開先とします。 |
基本の使い方
まずはアーカイブを展開せずに、中身のファイルリストを確認します。これにより、予期せぬ大量のファイルが含まれていないかチェックできます。
# アーカイブファイルの種類を確認(LHA形式であることを確認)
file old_data_v1.lzh
# 中身のリストを表示
lha l old_data_v1.lzh
実行結果例
old_data_v1.lzh: LHa 2.x archive data [lh5, v1, OS-9]
PERMSSN UID GID SIZE RATIO STAMP NAME
---------- ----------- ------- ------ ------------ --------------------
-rw-r--r-- 1000/1000 3412 45.2% Jan 21 10:00 readme.txt
-rw-r--r-- 1000/1000 15820 21.5% Jan 21 10:00 src/main.c
---------- ----------- ------- ------ ------------ --------------------
Total 2 files 19232 31.0%
実践コマンド
ディレクトリ構造を維持して展開する
アーカイブ内のフォルダ階層をそのまま保って展開します。通常はこの x コマンドを使用します。
# カレントディレクトリに構造を保って展開
lha x old_data_v1.lzh
展開先ディレクトリを指定する
カレントディレクトリを汚さないように、ディレクトリを指定して展開します(w オプションの使用法は実装バージョンにより異なる場合がありますが、ここではディレクトリ移動後の実行例を推奨します)。
# 作業用ディレクトリを作成し、その中で展開(最も確実な方法)
mkdir extracted_data
cd extracted_data
lha x ../old_data_v1.lzh
特定のファイルだけを取り出す
アーカイブ全体ではなく、必要なファイルだけを指定して展開します。
# readme.txt だけを取り出す
lha x old_data_v1.lzh readme.txt
カスタムポイント
- 強制上書き展開 (f)バッチ処理などで、既存ファイルを問答無用で上書きしたい場合に f オプション(スイッチ)を付与します。Bash
# 確認プロンプトを出さずに上書き展開 lha xf backup.lzh
注意点
- 文字コードの問題LHA形式はShift_JIS(Windows/DOS)でファイル名が保存されていることが多く、Linux(UTF-8環境)で展開するとファイル名が文字化けする場合があります。※最近の 7z コマンド(p7zip-full パッケージ)でも .lzh を扱える場合があり、そちらの方が文字コード変換に強いことがあります(7z x file.lzh)。
- セキュリティリスクLHAは古い形式であり、作成ツールによってはパスの検証が不十分なものがあります。信頼できないアーカイブを展開する際は、必ず事前に l コマンドで中身を確認し、絶対パス(/etc/… など)が含まれていないか注意してください。
- コマンドの入手性UbuntuなどのDebian系では non-free や universe リポジトリを有効にしないとインストールできない場合があります。見つからない場合は jlha-utils パッケージを探すか、7z の利用を検討してください。
応用
7zコマンドでLHAを展開する(モダンな代替案)
もし lha コマンドがインストールできない場合、多くのLinux環境で標準的な 7z コマンドでも代用可能です。
# p7zip-fullがインストールされている場合
7z x old_data_v1.lzh
まとめ
LHA形式は現在では作成されることは稀ですが、過去のデータを復元する際には避けて通れない形式です。
基本は lha l で確認し、lha x で展開するという、tarやzipと同様の作法で扱うことができます。ファイル名の文字化けが激しい場合は、7z コマンドでの展開も試してみてください。
