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   =*
*=                                                                     =*
*************************************************************************