Lzma je zkratka pro Lempel-Ziv-Markov chain Algorithm. Lzma je komprimační nástroj jako bzip2 a gzip pro kompresi a dekomprimaci souborů. Bývá výrazně rychlejší a efektivnější než komprese bzip. Jak víme, kompresní poměr gzip je horší než bzip2 (a lzma).
V tomto článku si vysvětlíme, jak používat lzma, efektivní kompresní nástroj, který má výrazně lepší kompresní poměr a rychlejší provoz.
Zkomprimujte vstupní textový soubor pomocí lzma -c
$ lzma -c --stdout sample.txt >sample.lzma
Dekomprimujte soubor lzma pomocí volby -d
$ lzma -d –stdout sample.lzma >sample.txt
Porovnání mezi nástroji pro kompresi bzip2 a lzma
Abychom porozuměli účinnosti lzma, komprimujme/dekomprimujeme 1MB sample.txt s lzma i bzip2 a porovnejme výsledek. Tyto testy byly provedeny na počítači, který má 1 GB RAM a procesor je Pentium 4.
Velikost vstupního souboru sample.txt:
$ ls -l sample.txt -rw-r--r-- 1 bala bala 1048576 2010-05-14 19:43 sample.txt
Poznámka: Použili jsme příkaz time před každým příkazem pro kompresi a dekompresi, abychom zjistili využití CPU příkazu.
Komprimujte soubor sample.txt pomocí bzip2
Vstupní soubor zkomprimujte příkazem bzip2 a během komprese tuto volbu nevyžaduje.
$ 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
Po bzip2 kompresi, velikost výstupního souboru je 1750 bajtů .
Dekomprimujte soubor sample.txt pomocí bunzip2
Dekomprimujte komprimovaný soubor pomocí nástroje bunzip2 a také nevyžaduje předání žádné možnosti.
$ bunzip2 sample.txt.bz2 real 0m0.232s user 0m0.128s sys 0m0.020s
Komprimujte soubor sample.txt pomocí lzma
Nyní zkomprimujme sample.txt pomocí příkazu lzma s následujícími možnostmi:
- -c pro komprimaci
- –stdout pro tisk komprimovaného výstupu ve formátu stdout
$ 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
Po kompresi lzma vytvoří výstupní soubor o velikosti 543 bajtů , což je poměrně méně než příkaz bzip2. Také, jak je vidět výše, čas procesoru používaný lzma je mnohem kratší než u bzip2.
Dekomprimujte soubor sample.txt pomocí lzma
Dekomprimujte soubor *.lzma pomocí příkazu lzma s následujícími možnostmi:
- -d pro komprimaci
- –stdout pro tisk dekomprimovaného výstupu ve formátu stdout
$ time lzma -d --stdout sample.lzma >sample.txt real 0m0.043s user 0m0.016s sys 0m0.004s
Jak je vidět výše, dekomprese prováděná pomocí lzma je mnohonásobně rychlejší než bzip2
Různé úrovně komprese Lzma
- Lzma poskytuje rozsah komprese od -1 do -9.
- -9 je nejvyšší kompresní poměr, který vyžaduje určité množství času a systémových prostředků. Tyto poměry nejsou použitelné pro dekompresi.
- -1 je nejnižší kompresní poměr a běží mnohem rychleji.
Chcete-li provést rychlou kompresi lzma pomocí nízkého kompresního poměru, postupujte takto:
$ 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
Poznámka: -fast je alias na -1.
-9 je nejvyšší kompresní poměr a komprese trvá déle než poměr nízké úrovně. Chcete-li provést intenzivní kompresi pomocí vysokého kompresního poměru, postupujte takto:
$ 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
Poznámka: -nejlepší je alias na -9.