Kilencedik lecke

"Az igazi buherátor soha nem veszíti el a fejét. Mindig van róla egy tartalék másolata mágnesszalagon.'

Adataink archiválása

Ha huzamosabb ideig dolgozunk Unix alatt, elõbb vagy utóbb olyan sok fájlunk lesz, hogy már nem tudunk eligazodni köztük. További nehézséget jelent, ha archiválni szeretnénk az adatainkat, azaz a ritkán használt fájlokat összetömöríteni, hogy ne foglaljanak el annyi helyet.

Több fájl összefûzése egyetlen állományba

Az egyik legáltalánosabban használt archiváló eszköz a tar program. Eredeti feladata az, hogy a megadott fájlokat mágnesszalagra (streamer) írja, de alkalmas kapcsoló segítségével a mágnesszalag helyett fájlba is írathatunk vele. A tar nagyon egyszerû program, valójában nem csinál mást, mint a megadott fájlokat összefûzi egyetlen nagy fájlba. (Természetesen elhelyez néhány vezérlõ információt is, másképp a "betarolt" adatokat késõbb nem lehetne "kitarolni".)

A tar program általános szintaxisa:

tar key [directory] [tapefile] [blocksize] [name...] 
Az egyszerûség kedvéért a továbbiakban feltételezzük, hogy nem mágnesszalagra, hanem fájlba mentünk. (Mágnesszalagra mentéshez tudnunk kell egyet s mást a hardverrõl is.) A fájlok "betarolása" a következõ módon történik:
tar cf tarfile file1, file2, ...
a c kapcsoló utasítja a programot, hogy új tarfile-t hozzon létre (create), az f kapcsoló jelzi, hogy a mentés fájlba történik (ha ezt nem adjuk meg, akkor automatikusan a mágnesszalagra kezd írni, még akkor is, ha nincs is streamerünk). A file1, file2, ... fájlok kerülnek be a tarfile-ba. Természetesen (mint mindenhol) itt is használhatjuk a * és ? karaktereket.

Néhány további hasznos kapcsoló:

t
megmutatja a tarfile-ban található fájlok neveit.

v
"beszédes" üzemmódra állítja a programot (ilyenkor a tar mindig kiírja, hogy mit csinál éppen. Ha a v kapcsolót a t-vel együtt használjuk, hosszú listát (long list, olyan mint amit az ls -l csinál) kapunk a tarfile (vagy a mágnesszalag) tartalmáról.

r
Új fájlokat fûz hozzá a már létezõ tarfile-hoz.

x
Kitarolja a tarfile-ben lévõ fájlokat.

xw
Kitarolja a tarfile tartalmát, de minden fájlra rákérdez, hogy valóban létrehozza-e.

Nézzünk meg egy példát: az alábbi alkönyvtárban szeretnénk néhány fájt összefogni egyetlen állományba:

orlando% ls -l
total 410
-rwxr--r--   1 stsmork  iit          373 Jul  7 08:45 automail
-rw-------   1 stsmork  iit          643 Jul  7 08:46 login.c
-rw-------   1 stsmork  iit          643 Jul  7 08:45 logout.c
-rwx------   1 stsmork  iit           25 Jul  7 08:45 openwin
-rw-r--r--   1 stsmork  iit         1286 Jul  7 08:46 prg.c
-rwxr--r--   1 stsmork  iit          467 Jul  7 08:45 search
-rwx--x--x   1 stsmork  iit        94208 Jul  7 08:45 unzip
-rwx--x--x   1 stsmork  iit       110592 Jul  7 08:45 zip
Elsõ lépésként "taroljuk be" az összes C nyelvû forrás fájlt egy source.tar nevû állományba. A következõ sorban a már létezõ fájlhoz hozzáfûzünk két újat (a zip és unzip nevûeket), végül megnézzük a keletkezett .tar fájl tartalmát:
orlando% tar cf source.tar *.c
orlando% tar rf source.tar zip unzip
orlando% tar tvf source.tar
rw------- 321/113     643 Jul  7 08:46 1994 login.c
rw------- 321/113     643 Jul  7 08:45 1994 logout.c
rw-r--r-- 321/113    1286 Jul  7 08:46 1994 prg.c
rwx--x--x 321/113  110592 Jul  7 08:45 1994 zip
rwx--x--x 321/113   94208 Jul  7 08:45 1994 unzip
A kicsomagolás a következõ módon történik:
orlando% tar xvf source.tar
x login.c, 643 bytes, 2 blocks
x logout.c, 643 bytes, 2 blocks
x prg.c, 1286 bytes, 3 blocks
x zip, 110592 bytes, 216 blocks
x unzip, 94208 bytes, 184 blocks

Tömörítés

Ha archiválni szeretnénk adatainkat, akkor célszerû tömöríteni õket. Erre a legegyszerûbb mód a (kissé fatengelyes) compress program használata. A compress mindössze egyetlen fájlt tud tömöríteni, így ha sok fájlt akarunk archiválni, akkor elõször be kell tarolnunk õket, majd a tar fájlt összenyomnunk. A sûrítés befejezte után az eredeti fájl letörlõdik, helyette az összenyomott változat marad meg, .Z-re végzõdõ névvel. Folytatva az elõzõ példát:
orlando% ls -l source.tar
-rw-r--r--   1 stsmork  iit       215040 Jul  7 08:48 source.tar
orlando% compress source.tar
orlando% ls -l source.tar.Z
-rw-r--r--   1 stsmork  iit       120811 Jul  7 08:48 source.tar.Z
Figyeljük meg az eredeti és a tömörített fájl mérete közötti különbséget! A kicsomagolás az uncompress programmal történik. Tipikus eset, hogy egy archivált fájl neve valahogy így néz ki: valami.tar.Z - ebbõl következtethetünk arra, hogy az adatokat elõbb "betarolták", majd a tar fájlt összenyomták a compress segítségével. (A mérföld hosszúságú fájlnevek beírását elkerülhetjük a * karakter alkalmas használatával.)
orlando% uncompress so*Z
orlando% ls -l source.tar
-rw-r--r--   1 stsmork  iit       215040 Jul  7 08:48 source.tar
Természetesen több más tömörítõprogram is létezik, például a gzip/gunzip páros,* vagy a PC-s világból jól ismert zip/unzip és arj programok. Ezek sokkal okosabbak mint a compress + tar páros, de nem minden rendszeren találhatók meg, ezért most nem beszélünk róluk. (A nyilvános adatbázisokban található programcsomagokat legtöbbször a tar és a compress programok segítségével archiválják).

Fájlok küldése e-mailben

Technikai okokból e-mailen általában nem tudunk bináris fájlokat küldeni, mert az átvitel legtöbb helyen hétbites. A megoldást az jelenti, hogy az e-mailben elküldendõ bináris fájlokat alkalmas program segítségével átkonvertáljuk olyan formára, hogy az csak hétbites karaktereket tartalmazzon (pontosabban: olyan karaktereket, amelyek ASCII kódja kisebb mint 127).

Az intelligensebb levelezõprogramok a szöveg mellett bináris fájlokat is tudnak küldeni mellékletként (attachment). Ilyenkor a levelezõprogam automatikusan elvégzi a szükséges kódolást, de errõl a címzett levelezõprogramjának is tudnia kell. Ha ez nem így van, akkor a címzett kénytelen kézzel dekódolni a bináris állományt.

Tételezzük fel, hogy ostoba levelezõprogramunk van és a bináris fájlokat kénytelenek vagyunk kézzel kódolni. Ezt az uuencode programmal tehetjük meg. Paraméterezése:

uuencode kódolandó_fájl dekódolt_fájl
A kimenet alapértelmezésben a standard outputra kerül, amit fájlba irányíthatunk a > segítségével. Kódoljuk el a korábbi példában létrehozott soruce.tar fájlt úgy, hogy a dekódolás után létrejött fájl neve src.tar legyen.
orlando% uuencode source.tar src.tar >source.tar.uu
orlando% ls -l source*
-rw-r--r--   1 stsmork  iit       215040 Jul  7 08:48 source.tar
-rw-r--r--   1 stsmork  iit       296302 Jul  8 09:01 source.tar.uu
Figyeljük meg, hogy a kódolt fájl valamivel hosszabb, mint az eredeti. Íme a kódolt fájl elsõ néhány sora:
begin 644 src.tar
M```````````````````````C:6YC;'5D92`\<W1D:6\N:#X*"B-D969I;F4@
M5%)512`@,0HC9&5F:6YE($9!3%-%(#`*"D9)3$4@*F9P.PH*;6%I;B@I"GL*
M8VAA<B!C:"P@96YD(#T@5%)513L*;&]N9R!C=7)R96YT+"!N97AT.PH*(&EF
Világosan látszik, hogy ez emberi fogyasztásra alkalmatlan. A dekódolás az uudecode programmal történik:
orlando% uudecode source*uu
orlando% ls -l s*
-rw-r--r--   1 stsmork  iit       215040 Jul  7 08:48 source.tar
-rw-r--r--   1 stsmork  iit       296302 Jul  8 09:01 source.tar.uu
-rw-r--r--   1 stsmork  iit       215040 Jul  8 09:01 src.tar
Figyeljük meg, hogy a dekódolt program neve nem soruce.tar, hanem src.tar, mivel a kódoláskor így adtuk meg. Célszerû a kódolt fájl nevében valamilyen módon jelezni, hogy uuencode-olt fájlról van szó (általában odabiggyesztenek egy .uu-t a fájlnév végére). Gyakoriak az olyan archivált fájlok, mint pl: valami.tar.Z.uu, amibõl következtethetünk arra, hogy a fájlt milyen programok segítségével kell kicsomagolni.

Feladatok

  1. Készítsünk egy alkönyvtárat a home directorynkban és másoljunk bele néhány fájlt.

  2. Lépjünk be az alkönyvtárba és hozzunk létre két újabb alkönyvtárat, amibe ugyancsak tegyünk be valamilyen fájlokat.

  3. Visszatérve a home directoryba, tar-oljuk be az 1. pontban létrehozott alkönyvtárat.

  4. Nézzük meg az elõbb létrehozott fájl tartalmát.

  5. Adjunk hozzá két újabb (tetszõleges) fájlt a 3. pontban létrehozott fájlhoz.

  6. Sûrítsük össze és uuencode-oljuk a fájlt.

  7. Töröljük le az 1. pontban létrehozott alkönyvtár struktúrát.

  8. Bontsuk ki a 6. pontban létrehozott archív fájlt. Vajon a kitarolás után meglesznek-e az alkönyvtárak, amiket a 2. pontban hoztunk létre?


*************************************************************************
*=                                                                     =*
*=                           SZERZOI JOGOK                             =*
*=                                                                     =*
*=   Ez  a dokumentum a Unix  operacios  rendszer  es a szamitogepes   =*
*=   halozatok elterjedeset  kivanja  elosegiteni, ezert dijmentesen   =*
*=   terjesztheto.  Nem szabad azonban a terjesztes soran a szoveget   =*
*=   megvaltoztatni,  barmilyen  modon  megcsonkitani  es a  szerzoi   =*
*=   jogokra vonatkozo megjegyzest eltavolitani!  Sem  a dokumentum,   =*
*=   sem annak barmely resze nem hasznalhato fel segedanyagkent vagy   =*
*=   tankonyvkent profitorientalt intezmenyekben vagy tanfolyamokon,   =*
*=   a szerzok elozetes irasbeli engedelye nelkul!                     =*
*=                                                                     =*
*=   (C) Csaky Istvan es Mork Peter         Miskolc, 1994. januar 19   =*
*=                                                                     =*
*************************************************************************