Linuxのアーカイブ・同期・デバイス処理に関する世界観です。
ZIPのdeflate圧縮は、辞書式とハフマン法というアルゴリズムによって可逆圧縮を行う。
辞書式は、頻繁に出現する言葉を「何文字前からの何文字」と符号化する。
ハフマン法は、頻繁に出現する言葉を短くし、あまり出現しない言葉を長くする、といったように符号化する。
zipやgzipでは、このdeflate圧縮アルゴリズムが使われている。日本人によって考案されたLHA(lhXシリーズ圧縮)も、deflateとほぼ同じアルゴリズムである。
2023.01.16編集
よく使われる言葉を短くし、あまり使われない言葉を長くするのは、クロード・シャノンによる情報理論の基本です。
このように、情報を単純化することを「コード化」と呼びます。
よく使われる言葉を短くし、あまり使われない言葉を長くすることで、意味を失うことなく効率的に情報を伝えることができます。
モールス信号などでもそのような工夫がされており、英語の中でもっともよく使われる「E」が「トン」ひとつ、「T」が「ツー」ひとつと、もっとも短くなっています。
詳しくは、TRON開発者の坂村健さんによる「痛快! コンピュータ学」に書かれているので、ぜひ参考になさってください。
コンピュータ科学も参照のこと。
2023.02.06
tarは複数のファイルをまとめてアーカイブ(圧縮ファイル)を作るプログラム。gzipやbzip2などのアルゴリズムに基づいてアーカイブを圧縮・展開できる。
圧縮する場合:
$ tar czvf hoge.tar.gz hoge_dir/
展開する場合:
$ tar xzvf hoge.tar.gz
コマンド名(どれかひとつは必須):
コマンド | 意味 |
---|---|
c | ファイルを圧縮して圧縮ファイルを作成する。 |
x | 圧縮ファイルからファイルを展開する。 |
t | 圧縮ファイルの中に存在するファイルの一覧を表示する。 |
u | 圧縮ファイルの中にファイルを追加・更新する。(存在しないファイルと更新されたファイルのみ) |
r | 圧縮ファイルの最後(末尾)にファイルを追加する。(同名のファイルも含む) |
A | 圧縮ファイルに別の圧縮ファイルを結合する。 |
必須ではないオプション:
オプション | 説明 |
---|---|
v | 処理内容を詳細に表示する。 |
f ファイル名 | 圧縮ファイル名(あるいはデバイス名)を指定する。 |
z | gzipで圧縮・解凍を行う。 |
Z | compressで圧縮・解凍を行う。 |
j | bzip2で圧縮・解凍を行う。 |
上の表は以下のリンク先を参考に書きました。
以下はman-page。
cpio形式に圧縮・展開する。
cpioよりもtarの方が良く知られている。RPMパッケージに採用されていることで有名。RPMパッケージはrpm2cpioコマンドでcpio形式に変換することができる。
Red Hat(RPM)も参照のこと。
2つのディレクトリの間でファイルツリーを同期する。
rsyncを使うことで、データをディレクトリ間で同期することが出来ます。
$ rsync -av 同期元ツリー/ 同期先ツリー/
rsyncを使うと、ディレクトリの中で変更があったファイルだけを探し出し、新しいファイルだけをコピーできる。
オプションでアーカイブモード(-a)を選択することで、サブディレクトリを再帰的に実行したり、ファイルの属性(パーミッション、タイムスタンプ、シンボリックリンク)をそのまま保持することができる。
また、-vは詳細な動作内容を表示するオプション。
rsyncのman-pageはJMに無いようなので英語版を読んでください。
rsyncコマンドは、2つのディレクトリの同期をとる。完全にファイル内容を同じにしたい場合、バックアップを取りたい場合などに使える。ただ間違えて同期してファイルが消えることがあるのでtarコマンドなどとの併用がおすすめ。
rsyncはシェルスクリプトにしてcronに指定することで、毎日夜に定期的に同期してくれるように設定することもできる。tarとの併用で、たまに全体のバックアップをとっても良いだろう。
UNIXシステム管理(cron)も参照のこと。
イメージ単位でファイルシステム全体をバックアップ・復旧できる。
UNIXのバックアップツールとして最も一般的で最適だが、ファイルシステムの一部だけをバックアップしたり、複数のファイルシステムにまたがるディレクトリツリーをバックアップすることはできない。
そのような場合にはtarやrsync, cpioを用いる。
dumpとrestoreを使うのは、システム全体をバックアップ・復旧したい場合で、他にddコマンドなどがあり、ddコマンドは環境をまるごと複製する際に便利。システム管理者としては覚えておかなければならないコマンドである。
以下はdumpの例:
# dump -0uf dumpfile1 /dev/sda1
バックアップレベルを0とした場合、フルバックアップとなる。1を指定した場合、0から変更された部分のみバックアップされる。2, 3, 4と増分バックアップできる。-uは/etc/dumpdatesを更新する。-fはダンプファイルの名前を指定する。
以下はrestoreの例:
# restore -rf dumpfile1
フルバックアップをレストアしてから、1, 2, 3とレストアしていく。-rは対話なしですべて一括でレストアする。-fはダンプファイルの名前を指定する。
(【概要を一通り】Linuxのバックアップについてのまとめ - エンジニアの入り口を参考に執筆しました。)
以下はman-pages。
gzipアーカイブ(*.gz)に圧縮・展開する。
そもそもUNIXではcompressという圧縮コマンドを使っていたが、それで使われていたLZWというアルゴリズムには特許侵害の恐れがあり、GNUが代替の圧縮形式として開発した。
gzipコマンドで圧縮、gunzipコマンドで展開ができる。あるいはtarコマンドに-zオプションを付ける。また、zcatコマンドで展開した内容を表示できる。
以前のcompress形式のアーカイブ(*.Z)は、compressコマンドで圧縮、uncompressコマンドで展開ができる。あるいはtarコマンドに-Zオプションを付ける。
bzip2アーカイブ(*.bz2)に圧縮・展開する。
bzip2コマンドで圧縮、bunzip2コマンドで展開ができる。あるいはtarコマンドに-jオプションを付ける。
gzipよりも高い圧縮率を持つが、gzipよりも圧縮・展開にかかるスピードは遅い。スピードよりも圧縮率を重視する場合に使われている。
xzアーカイブ(*.xz)に圧縮・展開する。
xzコマンドで圧縮、unxzコマンドで展開ができる。あるいはtarコマンドに-Jオプション(--xzオプション)を付ける。
ZIP/LHA/RAR形式のアーカイブを展開する。
ZIP形式のアーカイブ(*.zip)は、zipコマンドで圧縮、unzipコマンドで展開ができる。
たとえば、Windowsで圧縮したzip形式の圧縮ファイルを解凍したりするのに使う。
暗号化されたzipを解凍したい場合は、zipcloakコマンドを使用する。
あるいは、zipの-eオプションやunzipの-Pオプションを使う。
ディスクの使用容量を確認する。ハードウェアにおけるディスクの使用量を調べる。
$ df -h
ファイルやディレクトリの使用容量を確認する。ディレクトリにおけるディスクの使用量を調べる。
$ du -h
ブロックファイルや変換形式を指定して、ファイルを変換してコピーする。
ddコマンドでは、入力(if=/dev/xxx)と出力(of=/dev/xxx)を指定する。デバイスを直接指定した場合、デバイスの内容をそのままコピーできる。
デバイスをそのままイメージに出力したり、イメージからデバイスに出力したり、といった用途に使うことが多い。たとえばCDROMからISOイメージを作成したりできる。
(【 dd 】コマンド――ブロック単位でファイルをコピー、変換する:Linux基本コマンドTips(163) - @ITを参考に執筆しました。)
ext2やLinuxカーネル(ファイルシステム)やUNIXシステム管理(ファイルシステム)を参照のこと。
zchunkは差分圧縮フォーマットで、zsyncは差分同期システム。
ひとつのファイルを複数の「チャンク」に分割し、コピーする時は必要なチャンクだけを差分コピーすれば良い。
Fedora 30でDNFがzchunkに対応した。zsyncはUbuntuなどの毎日更新されるテスト版(日本のミラーサーバーにミラーリングされない)を高率的にダウンロードするために、isoファイルの差分同期を行うために使える。
ちなみに、Debianには昔からjigdoと呼ばれるパッケージのダウンロードシステムがある。パッケージを個別にダウンロードし、最後にCD形式にまとめる。
Zstd(Zstandard)はFacebookの社員によって開発された新しい圧縮アルゴリズム。
高い圧縮率(deflate圧縮と遜色がない)でありながら高速な圧縮・解凍が可能。
UbuntuやFedoraでも採用されたほか、Linuxカーネルでもカーネルイメージやファームウェアの圧縮に使われてきている。
Facebookも参照のこと。
Zstdアーカイブ(*.zst)はzstdコマンドで圧縮、unzstdコマンド(あるいはzstd -dオプション)で展開ができる。
ZstdのGUIフロントエンドには7-zipなどが存在する。
特に、Windowsからzip圧縮ファイルを持ってきて展開した場合などに、ファイル名が文字化けすることがあります。
この場合、convmvコマンドを使って、ファイル名を変換できます。
diffとpatchについてはdiffとpatch・テキスト処理を参照のこと。
ソースからのインストールを参照のこと。