3.1 Lecke 1
Tanúsítvány: |
Linux Essentials |
---|---|
Verzió: |
1.6 |
Témakör: |
3 A Paranccsor Erősségei |
Fejezet: |
3.1 Fájlok Archiválása a Paranccsorban |
Lecke: |
1/1 |
Bevezetés
A tömörítést arra használjuk, hogy csökkentsük egy adathalmaz által felhasznált hely méretét. A tömörítést általában egy fájl tárolásához szükséges hely csökkentésére használják. Egy másik gyakorlati alkalmazás a hálózati kapcsolaton keresztül küldött adatok mennyiségének a csökkentése.
A tömörítés az adatok ismétlődő mintáinak cseréjével történik. Tételezzük fel, hogy van egy regényünk. Néhány szó rendkívül gyakori és több karakterből áll, mint például az “egy” szó. Jelentősen csökkenthetjük a regény méretét, ha ezeket a gyakori, többkarakteres szavakat és mintákat egy karakterre cseréljük. Például az “egy” szót helyettesíthetjük egy görög betűvel, ami sehol nem szerepel a szövegben. A tömörítési algoritmusok ehhez hasonlóak, de sokkal összetettebbek.
A tömörítésnek két változata van, veszteségmentes (lossless) és veszteséges (lossy). A veszteségmentes algoritmusokkal tömörített fájlok kitömöríthetők az eredeti formájukba. A veszteséges algoritmussal tömörített adatok nem állíthatók helyre. A veszteséges algoritmusokat gyakran használják képek, videók és hangfájlok esetén, ahol a minőségvesztés az emberek számára nem észrevehető, nem releváns, esetleg a tárhelykapacitás vagy a hálózati sebesség fontosabb a veszteségnél.
Az archiváló eszközökkel fájlokat és mappákat egyetlen fájlba csomagolhatunk. Gyakran használjuk biztonsági mentések esetén, szoftverek forráskódjainak tárolására és adatok megőrzésére.
Az archiválást és a tömörítést általában együtt használják. Egyes archiváló eszközök alapértelmezetten archiválják a tartalmukat, mások pedig csak opcionálisan. Néhány archiváló eszközt együtt kell használni különálló tömörítő eszközökkel, ha tömöríteni szeretnénk tartalmukat.
A fájlok Linux rendszeren történő archiválásának legyakrabban használt eszköze a tar
. A legtöbb Linux disztribúcióban a tar
GNU verziója található meg, ezért a leckében erről lesz szó. A tar
önmagában csak a fájlok archiválását kezeli, de nem tömöríti őket.
Sok különböző tömörítő eszköz van a Linuxban. Ismert veszteségmentes eszközök a bzip2
, a gzip
, és az xz
. A legtöbb rendszeren mindhármat megtalálhatjuk. Régi, vagy nagyon minimális rendszeren az xz
vagy a`bzip` esetleg nincs telepítve. Ha rendszeresen használunk majd Linuxot, valószínűleg találunk majd mindhárom eszköz által tömörített fájlokat. Mindhárom különböző algoritmusokat használ, így az egyik eszközzel tömörített fájl nem tömöríthető ki egy másikkal. A tömörítő programok kompromisszumokkal járnak. Ha nagy tömörítési arányt szeretnénk, a fájl tömörítése és kitömörítése több időt vesz igénybe. Ez azért van, mert a nagyobb tömörítéshez összetettebb mintákra van szükség. Mindhárom eszköz tömöríti az adatokat, de nem hozhatnak létre több fájlt tartalmazó archívumot.
Különálló tömörítő programok általában nem érhetők el Windwos rendszereken. A Windows archiváló és tömörítő eszközei általában egyben jelennek meg. Jegyezzük ezt meg, ha Linux és Windows rendszerek között akarunk fájlokat megosztani.
A Linux rendszerekben vannak eszközök a .zip
fájlok kezelésére is, amikkel általában Windows rendszereken találkozhatunk. Ezek az eszközök a zip
és az unzip
. Ezek nincsenek minden rendszeren alapértelmezetten telepítve, így nekünk kell őket telepíteni. Szerencsére általában elérhetők a disztribúció repositoryjában.
Tömörítő eszközök
Az, hogy mennyi területet takaríthatunk meg a tömörítéssel, a következő néhány tényezőn múlik: a tömörítendő adatok jellege, az adatok tömörítésére használt algoritmus és a tömörítési szint. Nem minden algoritmus támogatja a különböző szintek használatát.
Próbáljuk meg néhány tesztfájl tömörítését:
$ mkdir ~/linux_essentials-3.1 $ cd ~/linux_essentials-3.1 $ mkdir compression archiving $ cd compression $ cat /etc/* > bigfile 2> /dev/null
Most hozzuk létre a fájl három másolatát:
$ cp bigfile bigfile2 $ cp bigfile bigfile3 $ cp bigfile bigfile4 $ ls -lh total 2.8M -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile2 -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile3 -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile4
Most tömörítsük a fájlokat az összes fent említett tömörítő eszközzel:
$ bzip2 bigfile2 $ gzip bigfile3 $ xz bigfile4 $ ls -lh total 1.2M -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile -rw-r--r-- 1 emma emma 170K Jun 23 08:08 bigfile2.bz2 -rw-r--r-- 1 emma emma 179K Jun 23 08:08 bigfile3.gz -rw-r--r-- 1 emma emma 144K Jun 23 08:08 bigfile4.xz
Hasonlítsuk össze a tömörített fájlok méretét a tömörítetlen bigfile
nevű fájl méretével. Vegyük észre, hogy a tömörítő eszközök kiterjesztéseket adtak a fájlokhoz és eltávolították a tömörítetlen fájlokat.
A bunzip2
, gunzip
, vagy az unxz
segítségével csomagoljuk ki a fájlokat:
$ bunzip2 bigfile2.bz2 $ gunzip bigfile3.gz $ unxz bigfile4.xz $ ls -lh total 2.8M -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile2 -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile3 -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile4
Vegyük ismét észre, hogy a tömörített fájl törlésre kerül a kicsomagolás során.
Néhány tömörítő eszköz támogatja a különböző tömörítési szintek használatát. Egy magasabb szint általában több memóriát és CPU-ciklust igényel, de egy kisebb méretű fájlt eredményez. Az alacsonyabb szintre pontosan ennek ellenkezője igaz. Íme egy példa az xz
és a gzip
segítségével:
$ cp bigfile bigfile-gz1 $ cp bigfile bigfile-gz9 $ gzip -1 bigfile-gz1 $ gzip -9 bigfile-gz9 $ cp bigfile bigfile-xz1 $ cp bigfile bigfile-xz9 $ xz -1 bigfile bigfile-xz1 $ xz -9 bigfile bigfile-xz9 $ ls -lh bigfile bigfile-* * total 3.5M -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile -rw-r--r-- 1 emma emma 205K Jun 23 13:14 bigfile-gz1.gz -rw-r--r-- 1 emma emma 178K Jun 23 13:14 bigfile-gz9.gz -rw-r--r-- 1 emma emma 156K Jun 23 08:08 bigfile-xz1.xz -rw-r--r-- 1 emma emma 143K Jun 23 08:08 bigfile-xz9.xz
Nem szükséges egy fájlt kicsomagolni minden alkalommal, amikor használni szeretnénk. A tömörítő eszközökön belül általában megtalálhatóak a szöveges fájlok olvasására való eszközök speciális verziói. Például a gzip
rendelkezik a cat
, a grep
, a diff
, a less
, a more
, és néhány másik eszköz saját verziójával. A gzip
esetén az eszközök prefixuma egy z
, bz
a bzip2
esetén, az xz
pedig az xz
esetén. Íme egy példa a zcat
használatára egy gzip
segítéségvel tömörített fájl esetén:
$ cp /etc/hosts ./ $ gzip hosts $ zcat hosts.gz 127.0.0.1 localhost # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Archiváló eszközök
A tar
valószínűleg a leggyakrabban használt archiváló eszköz Linux esetén. Ha felmerülne bennünk, hogy miért így nevezték el: ez egy rövidítés a “tape archive” (szalagos archívum) kifejezésre. A tar
segítségével létrehozott fájlokat gyakran tar balls-nak nevezzük. Gyakran előfordul, hogy a forráskódként elérhető alkalmazások tar ball-ban vannak.
A tar
GNU verziója, amit a Linux disztribúciókban megtalálhatunk, sok kapcsolót tartalmaz. Ez a lecke a leggyakrabban használtakra terjed ki.
Kezdjük azzal, hogy létrehozunk egy archívumot a tömörítéshez használt fájlokról:
$ cd ~/linux_essentials-3.1 $ tar cf archiving/3.1.tar compression
A c
kapcsoló jelzi a tar
számára, hogy egy új fájlt hozzon létre és az f
kapcsolóval adjuk meg a létrehozandó fájl nevét. A kapcsolókat követő argumentum mindig a fájl neve lesz, amin dolgoznia kell a parancsnak. A többi argumentum a hozzáadni kívánt fájlokhoz vagy könyvtárakhoz vezető útvonal. A példában hozzáadjuk a compression
mappát és a teljes tartalmát az archívumhoz.
Hogy megnézzük egy tar ball tartalmát, használjuk a tar
t
kapcsolóját:
$ tar -tf 3.1.tar compression/ compression/bigfile-xz1.xz compression/bigfile-gz9.gz compression/hosts.gz compression/bigfile2 compression/bigfile compression/bigfile-gz1.gz compression/bigfile-xz9.xz compression/bigfile3 compression/bigfile4
Vegyük észre, hogyan előzi meg a kapcsolókat a -
. A legtöbb programmal ellentétben a tar
esetén a -
nem kötelező az opciók megadása során, de a használata sem okoz problémát.
Note
|
Használhatjuk a |
Most tömörítsük ki a fájlt:
$ cd ~/linux_essentials-3.1/archiving $ ls 3.1.tar $ tar xf 3.1.tar $ ls 3.1.tar compression
Tételezzük fel, hogy csak egy fájlra van szükségünk az archívumból. Ebben az esetben az archívum neve után megadhatjuk. Akár több fájlt is meghatározhatunk, ha szükséges:
$ cd ~/linux_essentials-3.1/archiving $ rm -rf compression $ ls 3.1.tar $ tar xvf 3.1.tar compression/hosts.gz compression/ compression/bigfile-xz1.xz compression/bigfile-gz9.gz compression/hosts.gz compression/bigfile2 compression/bigfile compression/bigfile-gz1.gz compression/bigfile-xz9.xz compression/bigfile3 compression/bigfile4 $ ls 3.1.tar compression $ ls compression hosts.gz
Az abszolút útvonalak kivételével (útvonalak, amik /
-el kezdődnek), a tar
fájlok létrehozásakor megőrzik a fájlok teljes elérési útját. Mivel a 3.1.tar
fájl egy mappával lett létrehozva, a mappa az aktuális munkakönyvtárhoz képest relatívan jön létre. Egy másik példa, hogy ezt világossá tegyük:
$ cd ~/linux_essentials-3.1/archiving $ rm -rf compression $ cd ../compression $ tar cf ../tar/3.1-nodir.tar * $ cd ../archiving $ mkdir untar $ cd untar $ tar -xf ../3.1-nodir.tar $ ls bigfile bigfile3 bigfile-gz1.gz bigfile-xz1.xz hosts.gz bigfile2 bigfile4 bigfile-gz9.gz bigfile-xz9.xz
Tip
|
Ha egy |
A tar
program a tömörítést és kitömörítést képes menet közben is elvégezni. A tar
ezt a már korábban említett tömörítési eszközök egyikének meghívásával teszi. Olyan egyszerű, mint hozzáadni a megfelelő kapcsolót a tömörítéshez. A leggyakrabban használtak a j
, J
, és a z
a bzip2
, xz
, és a gzip
. Az alábbiakban nézzünk meg néhány példát ezekre az algoritmusokra:
$ cd ~/linux_essentials-3.1/compression $ ls bigfile bigfile3 bigfile-gz1.gz bigfile-xz1.xz hosts.gz bigfile2 bigfile4 bigfile-gz9.gz bigfile-xz9.xz $ tar -czf gzip.tar.gz bigfile bigfile2 bigfile3 $ tar -cjf bzip2.tar.bz2 bigfile bigfile2 bigfile3 $ tar -cJf xz.tar.xz bigfile bigfile2 bigfile3 $ ls -l | grep tar -rw-r--r-- 1 emma emma 450202 Jun 27 05:56 bzip2.tar.bz2 -rw-r--r-- 1 emma emma 548656 Jun 27 05:55 gzip.tar.gz -rw-r--r-- 1 emma emma 147068 Jun 27 05:56 xz.tar.xz
Vegyük észre, hogy a példában a .tar
fájlok különböző méretűek. Ez jelzi azt, hogy a tömörítés sikeres volt. Ha tömörített .tar
archívumokat hozunk létre, mindig hozzá kell adnunk egy második fájlkiterjesztést, ami a használt algoritmust jelöli. Ezek az .xz
, .bz
, és .gz
az xz
esetén, a bzip2
, és a gzip
. Néha rövidített kifejezéseket használunk, mint a .tgz
.
Lehetőségünk van fájlokat hozzáadni tömörítetlen tar archívumokhoz. Ehhez a u
kapcsolót használhatjuk. Ha tömörített archívummal próbálkozunk, hibaüzenetet fogunk kapni.
$ cd ~/linux_essentials-3.1/compression $ ls bigfile bigfile3 bigfile-gz1.gz bigfile-xz1.xz bzip2.tar.bz2 hosts.gz bigfile2 bigfile4 bigfile-gz9.gz bigfile-xz9.xz gzip.tar.gz xz.tar.xz $ tar cf plain.tar bigfile bigfile2 bigfile3 $ tar tf plain.tar bigfile bigfile2 bigfile3 $ tar uf plain.tar bigfile4 $ tar tf plain.tar bigfile bigfile2 bigfile3 bigfile4 $ tar uzf gzip.tar.gz bigfile4 tar: Cannot update compressed archives Try 'tar --help' or 'tar --usage' for more information.
ZIP fájlok kezelése
Windowsos eszközökön általában nem találunk olyan alkalmazásokat, amivel a tar ballokat kezelhetnénk, sem pedig azokat a tömörítő eszközöket, amik Linux alatt elérhetők. Ha Windows rendszerekkel is kell dolgoznunk, használhatunk ZIP fájlokat. A ZIP hasonlít egy tar
fájlhoz.
A zip
és az unzip
programok segítségével tudunk ZIP fájlokkal dolgozni Linux rendszerek esetén. Az alábbi példa megmutatja, hogyan használhatjuk őket. Először hozzunk létre néhány fájlt:
$ cd ~/linux_essentials-3.1 $ mkdir zip $ cd zip/ $ mkdir dir $ touch dir/file1 dir/file2
Most használjuk a zip
-et, hogy ezeket a fájlokat egyetlen ZIP fájlba csomagoljuk:
$ zip -r zipfile.zip dir adding: dir/ (stored 0%) adding: dir/file1 (stored 0%) adding: dir/file2 (stored 0%) $ rm -rf dir
Végezetül csomagoljuk ki a ZIP fájlt:
$ ls zipfile.zip $ unzip zipfile.zip Archive: zipfile.zip creating: dir/ extracting: dir/file1 extracting: dir/file2 $ find . ./zipfile.zip ./dir ./dir/file1 ./dir/file2
Amikor mappákat adunk a ZIP fájlokhoz, a -r
kapcsoló jelzi a zip
számára, hogy a mappa tartalmát is vegye figyelembe. Ezen kapcsoló nélkül egy üres mappa kerül a ZIP fájlba.
Gyakorló Feladatok
-
A kiterjesztések alapján melyik eszközök hozták létre az alábbi fájlokat?
Fájlnév tar
gzip
bzip2
xz
archive.tar
archive.tgz
archive.tar.xz
-
A kiterjesztések alapján mely fájlok archívumok és melyek tömörítettek?
Fájlnév Archívum Tömörített file.tar
file.tar.bz2
file.zip
file.xz
-
Hogyan adhatunk hozzá egy fájlt egy
gzip
által tömörítetttar
fájlhoz? -
Melyik
tar
kapcsoló instruálja atar
-t, hogy adja hozzá a/
jelet abszolút útvonalak esetén? -
Támogat a
zip
a különböző tömörítési szinteket?
Gondolkodtató Feladatok
-
Támogatja-e a
tar
a globokat a fájllistában kicsomagolás esetén? -
Hogyan lehetünk biztosak abban, hogy a kicsomagolt fájl megegyezik-e a tömörítés előtti fájllal?
-
Mi történik, ha megpróbálunk kicsomagolni egy már létező fájlt egy
tar
archívumból? -
Hogyan csomagolnánk ki az
archive.tgz
fájlt atar
z
kapcsolója nélkül?
Összefoglalás
A Linux rendszerekben több tömörítő és archiváló eszközt megtalálhatunk. Ebben a leckében a leggyakrabban előfordulókat vizsgáltuk meg. A legáltalánosabb archiváló eszköz a tar
. Ha Windows rendszerekkel kell együttműködnünk, a zip
és az unzip
segítségével hozhatunk létre és csomagolhatunk ki ZIP fájlokat.
A tar
parancsnak van néhány kapcsolója, amit érdemes megjegyeznünk. Az x
a kicsomagolás, a c
a létrehozás, a t
a tartalom megtekintése és az u
a fájlok hozzáadása vagy cseréje. A v
kapcsoló kilistázza azokat a fájlokat, amikkel a tar
a létrehozás vagy kitömörítés során dolgozik.
Egy általános Linux disztribúció repositoryjában több tömörítő eszközt is megtalálhatunk. A legismertebbek a gzip
, a bzip2
, és az xz
. A tömörítő algoritmusok gyakran támogatják a különböző szinteket, amelyekkel sebesség vagy fájlméret alapján optimalizálhatunk. A fájlokat a gunzip
, bunzip2
, és unxz
segítségével tömöríthetjük ki.
A tömörítő eszközökhöz gyakran tartoznak különböző segédprogramok, amelyek az általános szövegfájlokhoz tartozó eszközökre hasonlítanak, azzal a különbséggel, hogy ezek tömörített fájlokkal dolgoznak. Néhány ilyen például a zcat
, bzcat
, és az xzcat
. A tömörítő eszközökhöz általában tartoznak olyan programok, mint a grep
, more
, less
, diff
, és cmp
.
A gyakorlatok során használt parancsok:
bunzip2
-
bzip2
tömörítésű fájl kitömörítése. bzcat
-
Egy
bzip
tömörítésű fájl tartalmának kiíratása. bzip2
-
Fájlok tömörítése a
bzip2
algoritmussal és formátummal. gunzip
-
gzip
tömörítésű fájl kitömörítése. gzip
-
Fájlok tömörítése a
gzip
algoritmussal és formátummal. tar
-
tar
archívumok frissítése, listázása, tömörítése vagy létrehozása. unxz
-
xz
tömörítésű fájl kitömörítése. unzip
-
Egy ZIP fájl tartalmának kitömörítése és kicsomagolása.
xz
Fájlok tömörítése az xz
algoritmussal és formátummal.
zcat
-
Egy
gzip
tömörítésű fájl tartalmának kiíratása. zip
-
ZIP archívumok létrehozása és tömörítése.
Válaszok a Gyakorló Feladatokra
-
A kiterjesztések alapján melyik eszközök hozták létre az alábbi fájlokat?
Fájlnév tar
gzip
bzip2
xz
archive.tar
X
archive.tgz
X
X
archive.tar.xz
X
X
-
A kiterjesztések alapján mely fájlok archívumok és melyek tömörítettek?
Fájlnév Archívum Tömörített file.tar
X
file.tar.bz2
X
X
file.zip
X
X
file.xz
X
-
Hogy adhatunk hozzá egy fájlt egy
gzip
által tömörítetttar
fájlhoz?A fájlt a
gunzip
segítségével kell kitömörítenünk, hozzáadni a fájlt atar uf
paranccsal, és végül agzip
használatálval tömöríteni. -
Melyik
tar
kapcsoló instruálja atar
-t, hogy adja hozzá a/
jelet abszolút útvonalak esetén?A
-P
kapcsoló. Idézet a man oldalról:-P, --absolute-names Nem szedi le a bevezető `/` jeleket a fájlnevekről
-
Támogat a
zip
különböző tömörítési szinteket?Igen. A
-#
használatával, a#
-t felcserélve egy számmal 0 és 9 között. Idézet a man oldalról:-# (-0, -1, -2, -3, -4, -5, -6, -7, -8, -9) A # számjegy megadásával szabályozza a tömörítés sebességét: -0: nincs tömörítés (csak tárol minden fájlt), -1: a leggyorsabb tömörítési módszer (gyengébb tömörítés), és -9: a leglassabb tömörítési módszer (optimális tömörítés, nem veszi figyelembe a fájlnevek végződését). Az alapértelmezett tömörítési szint a -6. Bár még fejlesztés alatt áll, a cél az, hogy ez a beállítás vezérelje a tömörítési sebességet az összes tömörítési módszer esetén. Jelenleg csak a deflációt lehet szabályozni.
Válaszok a Gondolkodtató Feladatokra
-
Támogatja-e a
tar
a globokat a fájllistában kicsomagolás esetén?Igen a
--wildcards
kapcsolóval. A--wildcards
kapcsolót közvetlenül a fájlnév után kell elhelyeznünk, amikor a kötőjel nélküli kapcsolókat használjuk. Például:$ tar xf tarfile.tar --wildcards dir/file* $ tar --wildcards -xf tarfile.tar dir/file*
-
Hogyan lehetünk biztosak abban, hogy a kicsomagolt fájl megegyezik-e a tömörítés előtti fájllal?
Az ebben a leckében szereplő eszközök használata esetén semmit nem kell tennünk. Mindhárom tartalmazza a checksumokat a fájlformátumban, amelyeket kicsomagoláskor ellenőriz.
-
Mi történik ha megpróbálunk kicsomagolni egy már létező fájlt egy
tar
archívumból?A fájlrendszerben már létező fájl felülíródik a
tar
fájlban találhatóval. -
Hogyan csomagolnánk ki az
archive.tgz
fájlt atar
z
kapcsolója nélkül?Először a
gunzip
segítségével kell kitömörítenünk.$ gunzip archive.tgz $ tar xf archive.tar