Lzma steht für Lempel-Ziv-Markov-Kettenalgorithmus. Lzma ist ein Komprimierungstool wie bzip2 und gzip zum Komprimieren und Dekomprimieren von Dateien. Es ist in der Regel deutlich schneller und effizienter als die Bzip-Komprimierung. Wie wir wissen, ist die Komprimierungsrate von gzip schlechter als von bzip2 (und lzma).
Lassen Sie uns in diesem Artikel verstehen, wie man lzma verwendet, ein effektives Komprimierungsprogramm, das ein deutlich besseres Komprimierungsverhältnis und einen schnelleren Betrieb aufweist.
Komprimieren Sie die Eingabetextdatei mit lzma -c
$ lzma -c --stdout sample.txt >sample.lzma
Dekomprimieren Sie die lzma-Datei mit der Option -d
$ lzma -d –stdout sample.lzma >sample.txt
Vergleich zwischen bzip2- und lzma-Komprimierungswerkzeugen
Um die Effektivität von lzma zu verstehen, lassen Sie uns eine 1 MB große sample.txt mit lzma und bzip2 komprimieren/dekomprimieren und das Ergebnis vergleichen. Diese Tests wurden mit einem Gerät durchgeführt, das über 1 GB RAM und einen Pentium 4-Prozessor verfügt.
Größe der Eingabedatei sample.txt:
$ ls -l sample.txt -rw-r--r-- 1 bala bala 1048576 2010-05-14 19:43 sample.txt
Hinweis: Wir haben den Zeitbefehl vor jedem Komprimierungs- und Dekomprimierungsbefehl verwendet, um die CPU-Auslastung des Befehls zu ermitteln.
Komprimieren Sie die sample.txt mit bzip2
Komprimieren Sie die Eingabedatei mit dem Befehl bzip2 und es ist keine Option während der Komprimierung erforderlich.
$ time bzip2 sample.txt real 0m27.874s user 0m13.981s sys 0m0.148s $ ls -l sample.txt.bz2 -rw-r--r-- 1 bala bala 1750 2010-05-14 19:43 sample.txt.bz2
Nach bzip2 Komprimierung beträgt die Größe der Ausgabedatei 1750 Byte .
Entpacken Sie die sample.txt mit bunzip2
Dekomprimieren Sie die komprimierte Datei mit dem Dienstprogramm bunzip2 und es muss auch keine Option übergeben werden.
$ bunzip2 sample.txt.bz2 real 0m0.232s user 0m0.128s sys 0m0.020s
Komprimieren Sie die sample.txt mit lzma
Lassen Sie uns nun die sample.txt mit dem lzma-Befehl mit den folgenden Optionen komprimieren:
- -c zum Komprimieren
- –stdout, um die komprimierte Ausgabe in stdout zu drucken
$ time lzma -c --stdout sample.txt >sample.lzma real 0m2.035s user 0m1.544s sys 0m0.132s $ ls -l sample.lzma -rw-r--r-- 1 bala bala 543 2010-05-14 19:48 sample.lzma
Nach der Komprimierung lzma erzeugt die Ausgabedatei mit der Größe 543 Bytes , was vergleichsweise weniger als der bzip2-Befehl ist. Außerdem ist, wie oben zu sehen, die von lzma verwendete CPU-Zeit viel geringer als die von bzip2.
Entpacken Sie die sample.txt mit lzma
Dekomprimieren Sie die *.lzma-Datei mit dem lzma-Befehl mit den folgenden Optionen:
- -d zum Komprimieren
- –stdout, um die dekomprimierte Ausgabe in stdout zu drucken
$ time lzma -d --stdout sample.lzma >sample.txt real 0m0.043s user 0m0.016s sys 0m0.004s
Wie oben zu sehen ist, ist die von lzma durchgeführte Dekomprimierung um ein Vielfaches schneller als von bzip2
Verschiedene Stufen der Lzma-Komprimierung
- Lzma bietet den Kompressionsbereich von -1 bis -9.
- -9 ist die höchste Komprimierungsrate, die eine gewisse Zeit und Systemressourcen erfordert, um dies zu erreichen. Diese Verhältnisse gelten nicht für die Dekompression.
- -1 ist die niedrigste Komprimierungsrate und läuft viel schneller.
Gehen Sie wie folgt vor, um eine schnelle lzma-Komprimierung mit dem niedrigen Komprimierungsverhältnis durchzuführen:
$ lzma -1 -c --stdout sample.txt >sample.lzma $ ls -l sample.lzma -rw-r--r-- 1 bala bala 548 2010-05-14 20:47 sample.lzma
Hinweis: -fast ist Alias für -1.
-9 ist das höchste Komprimierungsverhältnis und die Komprimierung dauert länger als das niedrige Komprimierungsverhältnis. Gehen Sie wie folgt vor, um eine intensive Komprimierung mit dem hohen Komprimierungsverhältnis durchzuführen:
$ lzma -9 -c --stdout sample.txt >sample.lzma $ ls -l sample.lzma -rw-r--r-- 1 bala bala 543 2010-05-14 20:55 sample.lzma
Hinweis: -best ist ein Alias für -9.