Gzip: Difference between revisions
(10 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== Sissejuhatus == | == Sissejuhatus == | ||
Linuxi kaks enam kasutatavat arhiveerimiskäsku on <code>tar</code> ja <code>gzip</code>. Kui käsk <code>tar</code> on eelkõige mõeldud mitme faili ühte arhiivfaili kokku liitmiseks, siis käsk <code>gzip</code> on peamiselt kasutatav failide kokku pakkimiseks. Linuxis kasutatakse valdavalt just neid kahte käsku pakitud arhiivide loomiseks. Esmalt liidetakse <code>tar</code> käsuga arhiveerimisele kuuluvad failid ühte faili kokku, mis siis <code>gzip</code> käsuga kokku pakitakse. | |||
Pakkimiseks kasutatakse [http://en.wikipedia.org/wiki/DEFLATE <code>DEFLATE</code>] kadudeta pakkimise algoritmi, mis on kombinatsioon [http://et.wikipedia.org/wiki/LZ77 <code>LZ77</code>] ja [http://et.wikipedia.org/wiki/Huffmani_kodeerimine <code>Huffmani kodeerimisest</code>]. Käsu rakendamisel toimub pakkimine alati, isegi kui saadud fail on sisendiks olnud failist pisut suurem. Pakkimise aste sõltub sisendfailis sisalduvatest andmetest, kuid nt tekstilised andmed pakitakse keskmiselt 60-70%. | Pakkimiseks kasutatakse [http://en.wikipedia.org/wiki/DEFLATE <code>DEFLATE</code>] kadudeta pakkimise algoritmi, mis on kombinatsioon [http://et.wikipedia.org/wiki/LZ77 <code>LZ77</code>] ja [http://et.wikipedia.org/wiki/Huffmani_kodeerimine <code>Huffmani kodeerimisest</code>]. Käsu rakendamisel toimub pakkimine alati, isegi kui saadud fail on sisendiks olnud failist pisut suurem. Pakkimise aste sõltub sisendfailis sisalduvatest andmetest, kuid nt tekstilised andmed pakitakse keskmiselt 60-70%. | ||
Line 14: | Line 14: | ||
</code> | </code> | ||
Käsu täitmise järel <code>gzip</code> | Käsu täitmise järel <code>gzip</code> pakib sisendina saadud faili. Käsu üks olulisemaid erinevusi <code>tar</code> käsust on see, et ta ei liiguta sisendfaile ühte faili kokku vaid loob iga sisendi jaoks oma kokku pakitud faili. Loodud failile antakse sisendiks olnud faili nimi, mille lõppu lisatakse <code>.gz</code> laiend. Sisendiks olnud fail aga kustutatakse. | ||
Faili nime võib <code>gzip</code> korral jätta sisendina ka andmata. Sellisel juhul võetakse sisendiks standardne sisendkanal, pakitakse selle sisu ning suunatakse edasi standardsesse väljund kanalisse. | Faili nime võib <code>gzip</code> korral jätta sisendina ka andmata. Sellisel juhul võetakse sisendiks standardne sisendkanal, pakitakse selle sisu ning suunatakse edasi standardsesse väljund kanalisse. | ||
Line 32: | Line 32: | ||
-q, --quiet gzip töötab hoiatusi kuvamata | -q, --quiet gzip töötab hoiatusi kuvamata | ||
-r, --recursive Pakib kokku või lahti rekursiivselt etteantud kataloogis | -r, --recursive Pakib kokku või lahti rekursiivselt etteantud kataloogis | ||
-t, --test Arhiivi testimine | -t, --test Arhiivi testimine tervikluse osas | ||
-v --verbose Näitab, kui palju iga fail on kokku pakitud | -v --verbose Näitab, kui palju iga fail on kokku pakitud | ||
-1, --fast Kiire kokku pakkimine | -1, --fast Kiire kokku pakkimine | ||
Line 39: | Line 39: | ||
</code> | </code> | ||
Nagu eelnevalt sai mainitud, ei oska <code>gzip</code> luua mitmest sisendist ühte arhiivfaili ja seepärast kasutatakse taoliste arhiivide loomiseks <code>tar</code> käsku. Samas oskab <code>tar</code> kasutada läbi võtme <code>-z</code> ka <code>gzip</code> võimalusi, mis tähendab, et kohe peale arhiivi loomist saab see ka kokku pakitud. Kuid tuleb meeles pidada, et sellisel juhul <code>.gz</code> laiendit faili nimele automaatselt ei lisata, | Nagu eelnevalt sai mainitud, ei oska <code>gzip</code> luua mitmest sisendist ühte arhiivfaili ja seepärast kasutatakse taoliste arhiivide loomiseks <code>tar</code> käsku. Samas oskab <code>tar</code> kasutada läbi võtme <code>-z</code> ka <code>gzip</code> võimalusi, mis tähendab, et kohe peale arhiivi loomist saab see ka kokku pakitud. Kuid tuleb meeles pidada, et sellisel juhul <code>.gz</code> laiendit faili nimele automaatselt ei lisata, seega tuleks see laiend juba <code>tar</code> käsku kirjutada. Taoline käsk võiks siis näha välja selliselt: | ||
<code> | <code> | ||
<pre> | <pre> | ||
Line 55: | Line 55: | ||
</code> | </code> | ||
Ühe failinime asemel võib anda ka mitu nime. Nimed võib asendada malliga. Järgnevas näites | Ühe failinime asemel võib anda ka mitu nime. Nimed võib asendada malliga. Järgnevas näites pakitakse maksimaalse tihenduse astmega kõik jooksvas kataloogis olevad <code>.txt</code> laiendiga failid: | ||
<code> | <code> | ||
<pre> | <pre> | ||
Line 62: | Line 62: | ||
</code> | </code> | ||
Järgnev näide | Järgnev näide pakib kõik jooksvas kataloogis olevad failid ning näitab, kui palju on iga kokku pakitud: | ||
<code> | <code> | ||
<pre> | <pre> | ||
Line 72: | Line 72: | ||
</code> | </code> | ||
Kokku pakitud arhiivide lahti pakkimine: | |||
<code> | <code> | ||
<pre> | <pre> | ||
Line 79: | Line 79: | ||
</code> | </code> | ||
Kokku pakitud arhiivi sisu, mahu ja tihenduse astme vaatamine: | |||
<code> | <code> | ||
<pre> | <pre> | ||
Line 89: | Line 89: | ||
</code> | </code> | ||
Oletame, et on tekkinud vajadus saada <code>gzip</code> arhiivist <code>bzip2</code> | Oletame, et on tekkinud vajadus saada <code>gzip</code> arhiivist <code>bzip2</code> pakitud arhiiv. Selleks ei ole vaja <code>.gz</code> faili lahti pakkida, et see siis <code>bzip2</code> käsuga uuesti kokku pakkida. Kiirem moodus on kasutada <code>.gz</code> lahti pakkimisel võtit <code>-c</code>. Sellega tekitatakse arhiivi lahti pakkimisel väljund voog, mis antakse üle kanali <code>bzip2</code> sisendiks ning sealt omakorda suunatakse kokku pakkimise tulem <code>.bz2</code> arhiivi. | ||
<code> | <code> | ||
<pre> | <pre> |
Latest revision as of 22:27, 29 May 2011
Sissejuhatus
Linuxi kaks enam kasutatavat arhiveerimiskäsku on tar
ja gzip
. Kui käsk tar
on eelkõige mõeldud mitme faili ühte arhiivfaili kokku liitmiseks, siis käsk gzip
on peamiselt kasutatav failide kokku pakkimiseks. Linuxis kasutatakse valdavalt just neid kahte käsku pakitud arhiivide loomiseks. Esmalt liidetakse tar
käsuga arhiveerimisele kuuluvad failid ühte faili kokku, mis siis gzip
käsuga kokku pakitakse.
Pakkimiseks kasutatakse DEFLATE
kadudeta pakkimise algoritmi, mis on kombinatsioon LZ77
ja Huffmani kodeerimisest
. Käsu rakendamisel toimub pakkimine alati, isegi kui saadud fail on sisendiks olnud failist pisut suurem. Pakkimise aste sõltub sisendfailis sisalduvatest andmetest, kuid nt tekstilised andmed pakitakse keskmiselt 60-70%.
Kasutamine
Käsu süntaks:
gzip [võtmed] [fail(id)]
Käsu täitmise järel gzip
pakib sisendina saadud faili. Käsu üks olulisemaid erinevusi tar
käsust on see, et ta ei liiguta sisendfaile ühte faili kokku vaid loob iga sisendi jaoks oma kokku pakitud faili. Loodud failile antakse sisendiks olnud faili nimi, mille lõppu lisatakse .gz
laiend. Sisendiks olnud fail aga kustutatakse.
Faili nime võib gzip
korral jätta sisendina ka andmata. Sellisel juhul võetakse sisendiks standardne sisendkanal, pakitakse selle sisu ning suunatakse edasi standardsesse väljund kanalisse.
Lahti pakitavad failid peavad lõppema .gz
laiendiga.
Olulisemad võtmed:
-d, --decompress Pakib lahti
-h, --help Abiinfo kuvamine
-l, --list Pakitud arhiivi sisu, maht ja kokku pakkimise aste
-f, --force Lubab nö. jõuga väljundfaili ülekirjutamist
-L, --license gzip versiooni number ja andmed litsentsi kohta
-N, --name Säilitab sisendi nime ja selle loomise aja
-n, --no-name Ei säilita sisendi nime ega selle loomise aega
-q, --quiet gzip töötab hoiatusi kuvamata
-r, --recursive Pakib kokku või lahti rekursiivselt etteantud kataloogis
-t, --test Arhiivi testimine tervikluse osas
-v --verbose Näitab, kui palju iga fail on kokku pakitud
-1, --fast Kiire kokku pakkimine
-9, --best Kõrgeim pakkimise aste
Nagu eelnevalt sai mainitud, ei oska gzip
luua mitmest sisendist ühte arhiivfaili ja seepärast kasutatakse taoliste arhiivide loomiseks tar
käsku. Samas oskab tar
kasutada läbi võtme -z
ka gzip
võimalusi, mis tähendab, et kohe peale arhiivi loomist saab see ka kokku pakitud. Kuid tuleb meeles pidada, et sellisel juhul .gz
laiendit faili nimele automaatselt ei lisata, seega tuleks see laiend juba tar
käsku kirjutada. Taoline käsk võiks siis näha välja selliselt:
tar -czf arhiivi_nimi.tar.gz failid_arhiivi
Näited
Lihtne arhiivi loomine:
gzip fail
Ühe failinime asemel võib anda ka mitu nime. Nimed võib asendada malliga. Järgnevas näites pakitakse maksimaalse tihenduse astmega kõik jooksvas kataloogis olevad .txt
laiendiga failid:
gzip -9 *.txt
Järgnev näide pakib kõik jooksvas kataloogis olevad failid ning näitab, kui palju on iga kokku pakitud:
gzip -v *
fail1.txt 59.0% -- replaced with fail1.txt.gz
fail2.txt 59.0% -- replaced with fail2.txt.gz
Kokku pakitud arhiivide lahti pakkimine:
gzip -d fail1.txt.gz fail2.txt.gz
Kokku pakitud arhiivi sisu, mahu ja tihenduse astme vaatamine:
gzip -l fail.txt.gz
compressed uncompressed ratio uncompressed_name
482 1107 59.0% fail.txt
Oletame, et on tekkinud vajadus saada gzip
arhiivist bzip2
pakitud arhiiv. Selleks ei ole vaja .gz
faili lahti pakkida, et see siis bzip2
käsuga uuesti kokku pakkida. Kiirem moodus on kasutada .gz
lahti pakkimisel võtit -c
. Sellega tekitatakse arhiivi lahti pakkimisel väljund voog, mis antakse üle kanali bzip2
sisendiks ning sealt omakorda suunatakse kokku pakkimise tulem .bz2
arhiivi.
gzip -dc failid.tar.gz | bzip2 > failid.tar.bz2
Kasutatud kirjandus
Н. М. Войтов. Основы работы с Linux. ДМК Пресс (2010).
В. Костромин. Самоучитель Linux для пользователя. БХВ-Петербург (2003).
Phil Hughes. Linux For Dummies. Quick Reference, 2nd Edition. IDG Books (1998).
http://www.intuit.ru/department/os/baselinuxwork/4/11.html
http://en.wikipedia.org/wiki/DEFLATE
http://et.wikipedia.org/wiki/LZ77
http://et.wikipedia.org/wiki/Huffmani_kodeerimine
Autor
Ivo Kruusamäe AK21