A tömörítés egy olyan eljárás, amelynek segítségével egy fájlból egy kisebb fájl állítható elő. Ha a tömörített fájlból teljes mértékben visszanyerhető az eredeti fájl (``bitről bitre''), akkor veszteségmentes, ha nem akkor veszteséges tömörítésről beszélünk. Az első általánosan alkalmazható, a második csak akkor hogyha kis eltérések nem számítanak, pl. kép- és hangfájlok esetén.
A veszteséges tömörítési eljárások általában hatékonyabbak[1], de nem minden esetben alkalmazhatóak-egy futtatható programot akár egy bitnyi eltérés is használhatatlanná tenne. Ebben a fejezetben veszteségmentes tömörítésekkel foglalkozunk.
A tömörítés nagyon hasznos lehet, ha pl. helyet akarunk megspórolni a lemezen, vagy egy viszonylag lassú (pl. telefon) vonalon szeretnénk egy nagyobb fájlt elküldeni. Általános szabályként elmondható, hogy minél hatékonyabb egy tömörítési eljárás, annál több számolást igényel, vagyis lassabb. Nincs ``optimális'' tömörítés, mindig el kell dönteni, hogy érdemes-e több időt rááldozni arra, hogy a kapott fájl valamivel kisebb legyen.
A tömörítések többek között a fájlban levő ismétlődéseket és más redundanciákat használják ki, például azt, hogy egy szövegfájl minden egyes byte-ján 256 érték lenne ábrázolható, szemben az általában kihasznált kb. 70 betűvel és írásjellel. Azok a fájlok amelyek nem ennyire ``rendezettek'', kevésbé tömöríthetőek. Például egy bináris fájl általában kevésbé tömöríthető mint egy szövegfájl, egy tömörített fájl pedig szinte egyáltalán nem tömöríthető tovább.
Linux alatt a legelterjedtebb tömörítőprogram a GNU zip. A GNU zip LZ77 algoritmust használ, ami méret tekintetében nem tartozik a leghatékonyabbak közé, viszont nagyon gyors és kevés erőforrást igényel, ezért szinte bármilyen gépen alkalmazható.
A GNU zip egyszerre csak egy fájlt tömörít (ha több fájlt szeretnénk egybetömöríteni, akkor a tar programmal együtt használható). A tömörítésre a gzip parancsot használjuk. Az eredeti fájl törlődik, a tömörített fájl neve végére automatikusan .gz kiterjesztés kerül.
$ ls -l -rw-r--r-- 1 tpapp tpapp 303705 Oct 23 19:34 gnuplot.html $ gzip gnuplot.html $ ls -l -rw-r--r-- 1 tpapp tpapp 91122 Oct 23 19:34 gnuplot.html.gz $
Látható, hogy a tömörített fájl mérete az eredetinek kevesebb, mint a harmada. Kitömöríteni a gunzip paranccsal lehet[2].
$ ls -l -rw-r--r-- 1 tpapp tpapp 91122 Oct 23 19:34 gnuplot.html.gz $ gunzip gnuplot.html.gz $ ls -l -rw-r--r-- 1 tpapp tpapp 303705 Oct 23 19:34 gnuplot.html $
A .gz kiterjesztés automatikusan lekerül a fájl végéről. A gzip parancs sok paraméterrel rendelkezik, többek között lehet állítani a tömörítés mértékét, fájlneveket, stb. Javasolt a man oldal elolvasása.
| [1] | abban az értelemben, hogy kisebb fájlt állítanak elő |
| [2] | Ez a parancs tulajdonképpen a gzip parancsot használja, megfelelően paraméterezve. |