A tar
A GNU zip egyszerre csak egy fájlt tud tömöríteni, de mit tegyünk hogyha több fájlt szeretnénk ``összecsomagolni''? A megoldás a tar. A tar összecsomagolja az általunk megadott fájlokat egyetlen fájlba, amiből később kicsomagolhatjuk őket, szintén a tar használatával.
A tar-nak egy - jel után kell megadni hogy mit csináljon, minden művelet és kapcsoló egy betű. A legfontosabbak:
*
c - új tar fájl létrehozása
*
x - már létező tar fájl kicsomagolasa
*
v - végrehajtás közben írja ki a fajlneveket
*
z - készítsen/csomagoljon ki .tar.gz fájlt
*
f - fájlnév következik
Az f általában mindig használandó, ha nem adjuk meg akkor a tar alapértelmezés szerint (történelmi okok miatt) a szalagos egységet (tape drive) használja.
Ezután meg kell adnunk a tar fájl nevet, s ha becsomagolunk, akkor a becsomagolandó fájlok nevet - a tar könyvtár(ak)at is elfogad.
Tegyük fel, hogy az aktuális könyvtárban levő html fájlokat szeretnénk becsomagolni, és szeretnénk a fájlneveket kiíratni végrehajtás közben. A tar fájl neve legyen html_fajlok.tar.
$ ls *.html
icewm-1.html icewm-2.html icewm-5.html icewm-8.html
icewm-10.html icewm-3.html icewm-6.html icewm-9.html
icewm-11.html icewm-4.html icewm-7.html icewm.html
$ tar -cvf html_fajlok.tar *.html
icewm-1.html
icewm-10.html
icewm-11.html
icewm-2.html
icewm-3.html
icewm-4.html
icewm-5.html
icewm-6.html
icewm-7.html
icewm-8.html
icewm-9.html
icewm.html
$ ls -l html_fajlok.tar
-rw-rw-r-- 1 tpapp tpapp 40960 Oct 24 12:03 html_fajlok.tar
$
És létre is jött a tarfájl. A tarfájl általában valamivel nagyobb, mint a becsomagolt fájlok méretének összege, mivel a tarfájl tartalmaz kiegészítő információkat is (fájl neve, tulajdonosa, jogok, stb.) Ez a fájl még nem tömörített, úgyhogy tömöríthetjük gzip-el.
$ gzip html_fajlok.tar
$ ls -l html_fajlok.tar.gz
-rw-rw-r-- 1 tpapp tpapp 6273 Oct 24 12:03 html_fajlok.tar.gz
$
Az először tar-al becsomagolt, majd gzip fájlok gyakoriak, kiterjesztésük általában .tar.gz, vagy esetleg .tgz. Ez a formátum szinte szabvány, csak indokolt esetben érdemes tőle eltérni. A tar z kapcsolójával akár egyből csinálhatunk ilyen fájlt (a rövidség kedvéért most nem íratjuk ki a fájlneveket):
$ tar -czf html_fajlok.tar.gz *.html
$ ls -l html_fajlok.tar.gz
-rw-rw-r-- 1 tpapp tpapp 6273 Oct 24 12:03 html_fajlok.tar.gz
$
A kicsomagolás az x kapcsolóval történik, a c helyett használandó. Kicsomagoláskor elég a tar fájl nevét megadni. A z itt is használható .tar.gz fájlok kezelésére.
$ tar -xvzf html_fajlok.tar.gz
icewm-1.html
icewm-10.html
icewm-11.html
icewm-2.html
icewm-3.html
icewm-4.html
icewm-5.html
icewm-6.html
icewm-7.html
icewm-8.html
icewm-9.html
icewm.html
$
------------------------------------------------------------------------------------------------------------------
Egy nagyon egyszerû backup szkript
#!/bin/bash
tar -cZf /var/my-backup.tgz /home/me/
tar cf nev.tar Dir: a Dir könyvtár tartalmát összecsomagolja a nev.tar file-ba
tar czf nev.tar.gz Dir: ugyanez, csak gzip tömörítéssel
tar czf nev.tar /dev/nst0: a /dev/nst0 szalagos meghajtóra archivál
tar xzf nev.tar.gz: a nev.tar.gz archívum tartalmát csomagolja ki az aktuális könyvtárba
Egy újabb egyszerű "mentőprogram":
#!/bin/bash
/bin/tar czf /dev/nst0 /mnt
/bin/mt rewoffl -f /dev/nst0
Ha e scriptet betesszük a root crontabjába megfelelő időzítéssel, akkor a megadott időpontokban az mnt könyvtár tartalmát elmenti a szalagos meghajtóra, majd a feladat végeztével visszacsévéli és kiadja a szalagos médiát.
A következő alkalmazás kicsit kifinomultabb: több könyvtárat is megadhatunk, valamint alkalmas a kiírt anyag ellenőrzésére:
#!/bin/bash
PATH=/bin:/usr/bin
backupdirs="/etc /home /var"
mt -f /dev/nst0 rewind
for path in $backupdirs
do
echo "A $path könyvtárak archiválása indul" | wall
tar czf /dev/nst0 $path 1>/dev/null
sleep 2
done
echo "Archiválás kész, állapot:: $?" | wall
echo "Az archívum ellenőrzése indul" | wall
mt -f /dev/nst0 rewind
for path in $backupdirs
do
echo "$path ellenőrzése" | wall
tar tf /dev/nst0 1>/dev/null && \
echo "$path: verified" | wall || \
echo "$path: hibák az ellenőrzés során" | wall
if [ $? -eq 0 ]
then echo "$path: ellenőrizve"
else echo "$path: hiba az ellenőrzés során" 1>&2
fi
mt -f /dev/nst0 fsf 1
done
mt -f /dev/nst0 rewind
echo "Távolítsa el a szalagot!" | wall
Nincsenek megjegyzések:
Megjegyzés küldése