teejuht
1.
|
Sissejuhatus |
2.
|
Arhiveerimise idee ja praktika: tar ja gzip |
3.
|
tar zcvf ja tar zxvf |
4.
|
Tükkideks ehk voulme'deks tegemine split |
5.
|
Data kontrollimine |
Enamasti öeldaks "faile kokku pakkima", kusjuures sisuliselt viiakse läbi kaks tegevust:
- mitmed väikesed failid ühendatakse kokku (arhiveerimine)
- see kokkuühendatud fail teisendatakse nii ümber, et tema
maht väheneb (kompresseerimine)
Niisiis, failide nö. kokku pakkimise mõte on omada endiselt kõnelaust informatsiooni kusjuures kulutada selle hoidmiseks vähem resurssi (nt. kõvaketta pinda). Info mis oli enne kokkupakkimist programmidele kasutatav ei ole enam vahetult kasutatav. Et seda jälle kasutada tuleb ta eelnevalt lahti pakkida.
Siit tekib muidugi küsimus, et kui meil on näiteks 40 MB
paljude väikeste failide kujul juttu ja selle kokkupakkides väheneb
ta maht 4 MB-ni; miks mitte teda siis veel kokku pakkida ja saada 0,4 MB
ja äkki veel ja veel nii, et kogu info on pärast 1 B -s (veep
parem 1 bitis kirjas)?
Sisuliselt on see muidugi absurdne :)
2. Arhiveerimise ja kompresseerimise idee ja praktika: tar ja gzip
Olgu meil kolm faili:
bash# ls
-rw-r--r-- 1 root
root 13 Aug
10 09:42 konsonandid
-rw-r--r-- 1 root
root 17 Aug
10 09:42 nasaalid
-rw-r--r-- 1 root
root 12 Aug
10 09:42 vokaalid
vokaalid:
aaaaaaaaiiiiiiii
konsonandid:
kkkkkkkkgggggggg
nasaalid:
mmmmmmmmnnnnnnnn
peale arhiveerimist
bash# tar cvf tähed.tar
vokaalid konsaonandid nasaalid
bash# ls -l
-rw-r--r-- 1 root
root 13 Aug
10 09:42 konsonandid
-rw-r--r-- 1 root
root 17 Aug
10 09:42 nasaalid
-rw-r--r-- 1 root
root 10240 Aug 10 09:43 tähed.tar
-rw-r--r-- 1 root
root 12 Aug
10 09:42 vokaalid
bash#
saame uue faili
tähed.tar:
bash#cat tähed
vokaalid100644
0 0
14 6563603320 10610 0ustar rootrootaaaaaaaaaaa
konsonandid100644
0 0
15 6563603334 11333 0ustar rootrootkkkkkkkkkkkk
nasaalid100644
0 0
21 6563603345 10577 0ustar rootrootmmmmmmmmmmmmmmmm
bash#
No see fail on küll suurem kui liidetavate summa oleks. Seal sees on:
- faiilde nimed
- õigused (100644)
- omaniku ja grupi andmed
- sisu
kompresseerimine teeb midagi sellist, põhimõtteliselt:
originaal:
oooooaaaabbbbcccc
peale pakkimist:
4o4a4b4c
ja suurus poole väiksem!
Praktiliselt tuleb anda käsk:
bash# gzip tähed.tar
bash# ls -l
-rw-r--r-- 1 root
root 13 Aug
10 09:42 konsonandid
-rw-r--r-- 1 root
root 17 Aug
10 09:42 nasaalid
-rw-r--r-- 1 root
root 182 Aug 10 09:43
tähed.tar.gz
-rw-r--r-- 1 root
root 12 Aug
10 09:42 vokaalid
bash# rm konsonandid nasaalid
vokaalid
Noo nii ja siin on kurb tunnistus, et väikesi faile kokku pakkida ei maksa :(
Lahtipakkimine:
bash# ls
-rw-r--r-- 1 root
root 182 Aug 10 09:43
tähed.tar.gz
bash# gzip -d tähed
-rw-r--r-- 1 root
root 182 Aug 10 09:43
tähed.tar
bash# tar xvf tähed
bash#ls
-rw-r--r-- 1 root
root 13 Aug
10 09:42 konsonandid
-rw-r--r-- 1 root
root 17 Aug
10 09:42 nasaalid
-rw-r--r-- 1 root
root 182 Aug 10 09:43
tähed.tar
-rw-r--r-- 1 root
root 12 Aug
10 09:42 vokaalid
Eelmine punkt oli eihk liiga paljusõnaline, sestap toon siin ära mõned faktid:
- enne kokupakkimist on normaalne koondada küik kraam ühte
kataloogi (võib olla mitmetasemeline)
- tar -il on laiendist .tar ükskõik aga gzip-il ei ole
- laiend peab olema .gz.
- tar ega gzip ei võimalda teha nn. volume'id nt. 1 440 kB suuruseid
tükke; selleks on split ja cat
- kasutage käsku 'tar zcvf arh.nimi.tgz *' kokkupakkimiseks, nii
teeb ta ka gzip-i ära.
- kasutage käsku tar zxvf arh.nimi.tgz lahtipakkimiseks, nii teeb
ta gzip -d ära.
- kui teil on fail arh.tar.gz siis võib teha nii: bash# mv arh.tar.gz
arh.tgz; tar zxvf arh.tgz
- saab arhiivis sisaduvate failide nimekirja: tar -ztf isikud.tar.gz
Olgu meil olemas piisavalt suur (so. mõni MB) fail isikud.tar.gz; toimetage isikud.tar.gz eraldi kataloogi ja andke korraldus:
split -b 1000 isikud.tar.gz
ning tulemusena peaks kataloogi tekkima faile selliste nimedega: xaa, xab, .. , xaz, xba, ..
tykkide kokkuyhendamine:
seda saab teha cat kasuga:
cat * > isikud.tar.gz
kui ls'i default parameetreid mitte puutuda saab ta nad kokku õiges järjekorras (selleks on tähestikuline järjekord)
Ikka ja jälle on kahtlusi selles suhtes kas info transpordil ei läinud mõni oluline bitikene kaotsi. Selleks on olemas linuxis spetsiaalsed vahaendid:
1. cmp compare two files - kahe faili võrdlemine
cmp esimene teine
2. diff - kahe faili või kataloogitäie võrdlemine
diff -r kataloog1 kataloog2
3. kaval on enne ja peale suuremaid kopeerimisi kasutada ka cksum programmi:
Ta arvutad iga faili jaoks välja nn. CRC arvu ja neid tulebki enne ja pärast võrrelda.
bash# cksum failinimi
32343566 545 failinimi
esimene on see CRC, teine faili suurus ja viimane faili nimi