Gzip: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Ikruusam (talk | contribs)
Ikruusam (talk | contribs)
 
(28 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Sissejuhatus ==
== Sissejuhatus ==


Linux keskkonna kaks enam kasutatavat arhiveerimiskäsku on <code>[https://wiki.itcollege.ee/index.php/Tar_kasutamine tar]</code> ja <code>gzip</code>. Kui käsk <code>tar</code> on eelkõige mõeldud arhiivide loomiseks, siis käsk <code>gzip</code> on peamiselt kasutatav failide tihendamiseks. Linuxi maailmas kasutatakse valdavalt just neid kahte käsku tihendatud arhiivide loomiseks. Esmalt lisatakse <code>tar</code> käsuga failid arhiivi ning hiljem <code>gzip</code> käsuga arhiiv tihendatakse.
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%.


== Kasutamine ==
== Kasutamine ==
Line 8: Line 10:
<code>
<code>
<pre>
<pre>
# gzip [options] [file(s)]
gzip [võtmed] [fail(id)]
</pre>
</pre>
</code>
</code>


Käsu täitmise järel <code>gzip</code> arhiveerib sisendina saadud faili ning seejärel tihendab loodud arhiivi. Käsu üks olulisemaid erinevusi <code>tar</code> käsust on see, et ta ei liida sisendeid ühte faili kokku vaid loob iga sisendi jaoks oma arhiiv. Loodud arhiivile antakse sisendiks olnud faili nimi, mille lõppu lisatakse <code>.gz</code> laiend. Sisendiks olnud fail aga kustutatakse.
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 standartne sisendkanal, pakitakse ja tihendatakse selle sisu ning suunatakse edasi standartsesse väljundkanalisse.   
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.   


Lahti pakitavad failid peavad lõppema <code>.gz</code> laiendiga.  
Lahti pakitavad failid peavad lõppema <code>.gz</code> laiendiga.  
Line 21: Line 23:
<code>
<code>
<pre>
<pre>
-d, --decompress Hõrendab, mitte ei tihenda
-d, --decompress Pakib lahti
-h, --help Abiinfo kuvamine
-h, --help Abiinfo kuvamine
-l, --list Tihendatud arhiivi sisu, maht ja tihenduse aste
-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
-L, --license gzip versiooni number ja  andmed litsentsi kohta
-N, --name Säilitab sisendi nime ja selle loomise aja
-N, --name Säilitab sisendi nime ja selle loomise aja
-n, --no-name Ei säilita sisendi nime ega selle loomise aega
-n, --no-name Ei säilita sisendi nime ega selle loomise aega
-q, --quiet gzip töötab hoiatusi kuvamata
-q, --quiet gzip töötab hoiatusi kuvamata
-r, --recursive Tihendab või hõrendab rekursiivselt etteantud kataloogis  
-r, --recursive Pakib kokku või lahti rekursiivselt etteantud kataloogis  
-t, --test Arhiivi testimine terviklikkuse osas
-t, --test Arhiivi testimine tervikluse osas
-v  --verbose Näitab, kui palju iga fail tihendatud on  
-v  --verbose Näitab, kui palju iga fail on kokku pakitud
-1, --fast Kiire tihendamine
-1, --fast Kiire kokku pakkimine
-9, --best Kõrgeim tihenduse aste
-9, --best Kõrgeim pakkimise aste
</pre>
</pre>
</code>
</code>


Nagu eelnevalt sai mainitud, ei oska <code>gzip</code> luua mitmest sisendist ühte tihendatud arhiivi ja seepärast kasutatakse arhiivi loomiseks enamasti <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 tihendatud. Kuid tuleb meeles pidada, et sellisel juhul <code>.gz</code> laiendit faili nimele automaatselt ei lisata, seepärast tuleks see laiend juba <code>tar</code> käsku kirjutada. Taoline käsk võiks siis näha välja selliselt:
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>
# tar -czf arhiivi_nimi.tar.gz failid_arhiivi
tar -czf arhiivi_nimi.tar.gz failid_arhiivi
</pre>
</pre>
</code>
</code>
Line 48: Line 51:
<code>
<code>
<pre>
<pre>
# gzip fail
gzip fail
</pre>
</pre>
</code>
</code>


Ühe failinime asemel võib anda ka mitu nime. Nimed võib asendada malliga. Järgnevas näites tihendatakse maksimaalse tihenduse astmega kõik jooksvas kataloogis olevad .txt laiendiga failid:  
Ü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>
# gzip -9 *.txt
gzip -9 *.txt
</pre>
</pre>
</code>
</code>


Järgnev näide tihendab kõik jooksvas kataloogis olevad failid ning näitab, kui palju on iga fail tihendatud:
Järgnev näide pakib kõik jooksvas kataloogis olevad failid ning näitab, kui palju on iga kokku pakitud:
<code>
<code>
<pre>
<pre>
# gzip -v *
gzip -v *


fail1.txt 59.0% -- replaced with fail1.txt.gz
fail1.txt 59.0% -- replaced with fail1.txt.gz
Line 69: Line 72:
</code>
</code>


Tihendatud arhiivide hõrendamine:
Kokku pakitud arhiivide lahti pakkimine:
<code>
<code>
<pre>
<pre>
# gzip -d fail1.txt.gz fail2.txt.gz
gzip -d fail1.txt.gz fail2.txt.gz
</pre>
</pre>
</code>
</code>


Tihendatud arhiivi sisu, mahu ja tihenduse astme vaatamine:
Kokku pakitud arhiivi sisu, mahu ja tihenduse astme vaatamine:
<code>
<code>
<pre>
<pre>
# gzip -l fail.txt.gz
gzip -l fail.txt.gz


compressed uncompressed ratio uncompressed_name
compressed uncompressed ratio uncompressed_name
Line 86: Line 89:
</code>
</code>


Oletame, et on tekkinud vajadus saada <code>gzip</code> arhiivist <code>bzip2</code> tihendatud arhiiv. Selleks ei ole vaja <code>.gz</code> faili hõrendada, et see siis <code>bzip2</code> käsuga uuesti tihendada. Kiirem moodus on kasutada <code>.gz</code> faili hõrendamisel võtit <code>-c</code>. Sellega tekitatakse arhiivi hõrendamisel väljund voog, mis antakse üle kanali <code>bzip2</code> sisendiks ning sealt omakorda suunatakse tihendamise tulem <code>.bz2</code> arhiivi.
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>
# gzip -dc failid.tar.gz | bzip2 > failid.tar.bz2  
gzip -dc failid.tar.gz | bzip2 > failid.tar.bz2  
</pre>
</pre>
</code>
</code>
Line 102: Line 105:


http://www.intuit.ru/department/os/baselinuxwork/4/11.html
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 ==
== Autor ==
Line 107: Line 117:
Ivo Kruusamäe
Ivo Kruusamäe
AK21
AK21
[[Category:Operatsioonisüsteemide administreerimine ja sidumine]]

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