Linux講座にようこそ。このページは「Linuxの使い方 - 第4章 ファイル操作のコマンド2」です。

Linuxの使い方

4. ファイル操作のコマンド2(4/5)

4.3 コマンドのご紹介2(3/4)

4.3.10 ファイルの圧縮と解凍(gzip、bzip2、zip、unzip、lhaコマンド)

gzipとbzip2コマンドはUNIX系OSでよく使われている圧縮・解凍ツールで、ほとんどのLinuxディストリビューションで標準でインストールされています。また、Windows系OSで使われているzipやlzh形式の圧縮ファイルを取り扱うzip、unzip、lhaコマンドもあります。(Fedoraではlhaコマンドはインストールされないため、個別にインストールする必要があります)

gzipとbzip2コマンドは、主にtarコマンドで作成したアーカイブファイルを圧縮するのに使用します。一般に、bzip2コマンドの方が圧縮率が高いと言われていますので、最近はbzip2コマンドの方がよく使われているようです。

Windows系OSで解凍する可能性がある場合は、zipコマンドで圧縮しておけばWindowsの標準機能で解凍できます。ただし、ファイル名に全角文字を含んでいる場合は、ファイル名が文字化けしてしまうことがありますので、ファイル名は半角文字にしておいた方がよいでしょう。

この他のコマンドとして、gzipで圧縮したファイルの解凍を行うgunzipや、bzip2で圧縮したファイルの解凍を行うbunzip2がありますが、解凍はgzipやbzip2でもできますので、ここでは説明しません。使い方をお知りになりたい方はmanコマンド等で調べてください。

なお、KDEの場合はファイルマネージャーのDolphinで対話的に圧縮・解凍が行えますので、通常はそちらを使った方が簡単です。また、ArkというGUIのアーカイブツールもあります。

一般形式

gzip及び、bzip2コマンドは圧縮結果を元のファイルに上書きします。上書きしたくない場合は-cオプションで標準出力に出力し、それをリダイレクトします。そのときの出力ファイルの拡張子は「.gz」及び、「.bz2」にします。

zip及び、lhaコマンドで作成した圧縮ファイルの拡張子は、それぞれ「.zip」及び、「.lzh」にします。

$ gzip -cdr ファイルパス名1 ファイルパス名2 …
$ bzip2 -zcd ファイルパス名1 ファイルパス名2 …
$ zip -r 圧縮ファイルパス名 ファイルパス名1 ファイルパス名2 …
$ unzip 圧縮ファイルパス名
$ lha ael 圧縮ファイルパス名 ファイルパス名1 ファイルパス名2 …

gzipコマンドのオプションには、次のようなものがあります。

【表4-16】gzipコマンド・オプション
オプション意味
-c, --stdout, --to-stdout圧縮結果を標準出力に出力します。
-d, --decompress, --uncompress圧縮ファイルを解凍します。当オプションを指定しないと圧縮を行います。
-r, --recursiveファイルパス名としてディレクトリを指定すると、そのディレクトリを含めてツリー構造全体を圧縮します。

bzip2コマンドのオプションには、次のようなものがあります。

【表4-17】bzip2コマンド・オプション
オプション意味
-z, --compress圧縮します。当オプションはデフォルト値です。
-c, --stdout 圧縮結果を標準出力に出力します。
-d, --decompress圧縮ファイルを解凍します。

zipコマンドのオプションには、次のようなものがあります。

【表4-18】zipコマンド・オプション
オプション意味
-r,--recurse-pathsファイルパス名としてディレクトリを指定すると、そのディレクトリを含めてツリー構造全体を圧縮します。

lhaコマンドのオプションには、次のようなものがあります。(オプションの先頭の-はありませんので注意してください)

【表4-19】lhaコマンド・オプション
オプション意味
a圧縮します。
e圧縮ファイルを解凍します。
l圧縮情報を表示します。

実行例

gzipコマンドでカレントディレクトリの下のファイルを圧縮・解凍します。

$ ls
ex02_1.c  ex02_2.c  makefile
$
$ gzip ex02_1.c makefile ← 圧縮します
$ ls
ex02_1.c.gz  ex02_2.c  makefile.gz ← 拡張子「.gz」が付きます
$
$ gzip -d ex02_1.c.gz makefile.gz ← 解凍します
$ ls
ex02_1.c  ex02_2.c  makefile ← 元に戻ります
$

bzip2コマンドでカレントディレクトリの下のファイルを圧縮・解凍します。

$ ls
ex02_1.c  ex02_2.c  makefile
$
$ bzip2 ex02_1.c makefile ← 圧縮します(-zオプションを付けても同じ)
$ ls
ex02_1.c.bz2  ex02_2.c  makefile.bz2 ← 拡張子「.bz2」が付きます
$
$ bzip2 -d ex02_1.c.bz2 makefile.bz2 ← 解凍します
$ ls
ex02_1.c  ex02_2.c  makefile ← 元に戻ります
$

tarのアーカイブファイルをbzip2で圧縮・解凍します。

$ tar -cf - . | bzip2 -c > ~/TMP/BACKUP/bkup1.tar.bz2
$
$ bzip2 -cd ~/TMP/BACKUP/bkup1.tar.bz2 | tar -xC ~/RESTORE -f - ← カレントディレクトリをRESTOREに変更して回復します
$ ls ~/RESTORE
ex02_1.c  ex02_2.c  makefile
$

zipコマンドで圧縮し、unzipコマンドで解凍します。

$ zip ~/TMP/BACKUP/bkup2.zip ex02_1.c makefile
  adding: ex02_1.c (deflated 23%)
  adding: makefile (deflated 57%)
$
$ cd ~/RESTORE
$ unzip ~/TMP/BACKUP/bkup2.zip
Archive:  /home/merry/TMP/BACKUP/bkup2.zip
  inflating: ex02_1.c
  inflating: makefile
$ ls
ex02_1.c  makefile
$

lhaコマンドで圧縮・解凍します。

$ lha a ~/TMP/BACKUP/bkup3.lzh ex02_1.c makefile
ex02_1.c    - Frozen(77%) o
makefile    - Frozen(44%) o
$ lha l ~/TMP/BACKUP/bkup3.lzh ← 圧縮ファイルの内容を表示します
 PERMSSN    UID  GID      SIZE  RATIO     STAMP           NAME
---------- ----------- ------- ------ ------------ --------------------
-rw-r--r--  1001/501       132  77.3% May 19 14:20 ex02_1.c
-rw-r--r--  1001/501       267  44.9% May 18 10:49 makefile
---------- ----------- ------- ------ ------------ --------------------
 Total         2 files     399  55.6% May 19 17:23
$
$ cd ~/RESTORE
$ lha e ~/TMP/BACKUP/bkup3.lzh
ex02_1.c    - Melted   :  o
makefile    - Melted   :  o
$ ls
ex02_1.c  makefile
$ 		

4.3.11 テキストファイルの作成・編集(viコマンド)

viエディタ
【図4-3】viエディタの操作画面
C言語のソースファイルを編集中

UNIX系OSでのテキストエディタといえばEmacsが有名ですが、最近はディスクトップ環境の標準エディタも充実してきました。例えば、GNOMEならばgedit、KDEならばKwite等があります。これらのほかに、UNIX系OSであればどれでも使えて手軽なviエディタがあります。初心者には使いにくいでしょうが、システム管理を行う方はviが使えたほうがよいでしょう。

一般形式

viはスクリーンエディタですが、マウスやファンクションキーは使えません。操作はサブコマンドで行います。

$ vi ファイルパス名 ← viの起動 

viは入力モードコマンドモードの2つのモードがあります。入力モードはデータの入力が出来るモードで、コマンドモードはviのサブコマンドが実行できるモードです。viを起動した直後はコマンドモードになっています。

モードの切替えは、入力モードからコマンドモードへは「Esc」(エスケープ)キーで、コマンドモードから入力モードへは文字や行の挿入コマンドを実行します。

サブコマンド

サブコマンドは沢山ありますが、ここで紹介しているのは基本的なもののみです。

【表4-20】挿入と削除のコマンド
サブコマンド機能
a、iaコマンドはカーソルの後ろに、iコマンドはカーソルの前に文字を追加します。入力モードになります。
o、Ooコマンドはカーソル行の前に、Oコマンドはカーソル行の後ろに1行追加します。入力モードになります。
xカーソルの1文字を削除します。文字列を削除するには「削除文字数x」とします。
ddカーソル行の1行を削除します。連続行を削除するには「削除行数dd」とします。

「:xx」の形式のコマンドはedエディタのサブコマンドです。コマンドモードで:(コロン)を入力すると最終行にカーソルが移動しますので、そのままサブコマンドを入力します。

【表4-21】格納と終了のコマンド
サブコマンド機能
ZZデータを元のファイルに格納して、viを終了します。
:wデータを元のファイルに格納します。「:write」も同じです。
:w ファイルパス名データを指定したファイルに格納します。「:write ファイルパス名」も同じです。
:qviを終了します。「:quit」も同じです。変更を加えた後に、格納しないで終了する場合は「:q!」で強制終了します。

矢印キーはサポートされていないことがありますので注意してください。

【表4-22】カーソルの移動、その他のコマンド
サブコマンド機能
h、lhコマンドは左、lコマンドは右にカーソルを移動します。
←、→←キーは左、→キーは右にカーソルを移動します。
j、kjコマンドは下、kコマンドは上にカーソルを移動します。
↓、↑↓キーは下、↑は上にカーソルを移動します。
:shviから一時的に抜け出します。viに戻るにはexitコマンドを実行します。