3.1 Lekcija 1
Sertifikat: |
Linux Essentials |
---|---|
Verzija: |
1.6 |
Tema: |
3 Moć komandne linije |
Cilj: |
3.1 Arhiviranje datoteka upotrebom komandne linije |
Lekcija: |
1 od 1 |
Uvod
Kompresija se koristi za smanjenje količine prostora koji određeni skup podataka zauzima. Kompresija se obično koristi za smanjenje količine prostora koja je potrebna za pohranjivanje datoteke. Još jedna uobičajena upotreba je smanjenje količine podataka koji se šalju preko mrežne veze.
Kompresija radi zamjenom obrazaca koji se ponavljaju u podacima. Pretpostavimo da imate roman. Neke riječi su izuzetno uobičajene, ali imaju više znakova, kao što je riječ “the”. Mogli biste značajno smanjiti veličinu romana ako biste ove uobičajene riječi i obrasce s više znakova zamijenili zamjenama za jedan karakter. Na primjer, zamijenite “the” grčkim slovom koje se ne koristi drugdje u tekstu. Algoritmi kompresije podataka slični su ovome, ali su složeniji.
Kompresija dolazi u dvije varijante, lossless varijanta bez gubitaka i lossy varijanta sa gubicima. Stvari kompresovane algoritmom bez gubitaka mogu se dekompresovati natrag u njihov izvorni oblik. Podaci kompresovani algoritmom s gubitkom ne mogu se povratiti. Algoritmi s gubitkom se često koriste za slike, video i audio gdje je gubitak kvalitete neprimjetan za ljude, nebitan za kontekst ili je gubitak vrijedan ušteđenog prostora ili mrežne propusnosti.
Alati za arhiviranje se koriste za spajanje datoteka i direktorija u jednu datoteku. Neke uobičajene upotrebe su sigurnosne kopije, izvorni kod softvera u paketu i zadržavanje podataka.
Arhiva i kompresija se obično koriste zajedno. Neki alati za arhiviranje čak i kompresuju svoj sadržaj prema zadanim postavkama. Drugi mogu opciono kompresovati svoj sadržaj. Nekoliko alata za arhiviranje mora se koristiti zajedno sa samostalnim alatima za kompresovanje ako želite kompresovati sadržaj.
Najčešći alat za arhiviranje datoteka na Linux sistemima je tar
. Većina Linux distribucija se isporučuje s GNU verzijom tar
alata, tako da će to biti ona koja će biti obrađena u ovoj lekciji. tar
sam po sebi upravlja samo arhiviranjem datoteka, ali ih ne kompresuje.
Postoji mnogo alata za kompresiju dostupnih na Linuxu. Neki uobičajeni bez gubitaka su bzip2
, gzip
i xz
. Sva tri ćete naći na većini sistema. Možete naići na stari ili vrlo minimalan sistem gdje xz
ili bzip
nisu instalirani. Ako postanete redovan korisnik Linuxa, vjerovatno ćete naići na datoteke kompresovane sa sva tri. Sva tri koriste različite algoritme, tako da fajl komprimiran ili kompresovan jednim alatom ne može biti dekompresovan drugim. Alati za kompresiju imaju kompromis. Ako želite visok omjer kompresije, bit će potrebno više vremena za kompresovanje i dekompresiju datoteke. To je zato što veća kompresija zahtijeva više rada na pronalaženju složenijih obrazaca. Svi ovi alati kompresuhu podatke, ali ne mogu kreirati arhive koje sadrže više datoteka.
Samostalni alati za kompresovanje obično nisu dostupni na Windows sistemima. Windows alati za arhiviranje i kompresovanje obično su povezani zajedno. Imajte to na umu ako imate Linux i Windows sisteme koji trebaju dijeliti datoteke.
Linux sistemi takođe imaju alate za rukovanje .zip
datotekama koje se obično koriste na Windows sistemu. Zovu se zip
i unzip
. Ovi alati nisu standardno instalirani na svim sistemima ili distribucijama, tako da ako ih trebate koristiti, možda ćete ih morati instalirati. Na sreću, oni se obično nalaze u repozitorijima paketa distribucija.
Alati za kompresovanje
Koliko se prostora na disku uštedi kompresovanjem datoteka ovisi o nekoliko faktora. Priroda podataka koje kompresuujete, algoritam koji se koristi za kompresovanje podataka i nivo kompresije. Ne podržavaju svi algoritmi različite nivoe kompresije.
Počnimo s postavljanjem nekih testnih datoteka za kompresiju:
$ mkdir ~/linux_essentials-3.1 $ cd ~/linux_essentials-3.1 $ mkdir compression archiving $ cd compression $ cat /etc/* > bigfile 2> /dev/null
Sada kreiramo tri kopije ove datoteke:
$ 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
Sada ćemo kompresovati datoteke sa svakim od gore navedenih alata za kompresiju:
$ 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
Uporedite veličine kompresovanih datoteka sa nekompresovanom datotekom pod nazivom bigfile
. Također primijetite kako su alati za kompresiju dodali ekstenzije imenima datoteka i uklonili nekompresovane datoteke.
Koristite bunzip2
, gunzip
, ili unxz
kako biste dekompresovali datoteke:
$ 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
Ponovo primijetite da se sada kompresovana datoteka briše nakon što je dekompresovana.
Neki alati za kompresiju podržavaju različite nivoe kompresije. Viši nivo kompresije obično zahtjeva više memorije i CPU ciklusa, ali rezultira manjom kompresovanom datotekom. Za niži nivo je suprotno. Ispod je demonstracija kompresije sa xz
i gzip
alatima:
$ 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
Nije potrebno dekompresovati datoteku svaki put kada je koristite. Alati za kompresiju obično dolaze sa posebnim verzijama uobičajenih alata koji se koriste za čitanje tekstualnih datoteka. Na primjer, gzip
ima verziju cat
, grep
, diff
, less
, more
i nekoliko drugih. Za gzip
, alati imaju prefiks z
, dok prefiks bz
postoji za bzip2
, a xz
postoji za xz
. Ispod je primjer korištenja zcat
za čitanje prikaza datoteke kompresovane sa gzip
-om:
$ 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
Alati za arhiviranje
Program tar
je vjerovatno najrašireniji alat za arhiviranje na Linux sistemima. U slučaju da se pitate zašto je tako nazvan, to je skraćenica za “tape archive”. Datoteke kreirane pomoću tar
često se nazivaju tar kuglice (eng.tar balls). Vrlo je uobičajeno da aplikacije distribuirane kao izvorni kod budu u tar kuglicama.
GNU verzija tar
sa kojom se isporučuju distribucije Linuxa ima puno opcija. Ova lekcija će pokriti najčešće korišteni podskup opcija.
Počnimo kreiranjem arhive datoteka koje se koriste za kompresiju:
$ cd ~/linux_essentials-3.1 $ tar cf archiving/3.1.tar compression
Opcija c
nalaže tar
alatu da kreira novu arhivsku datoteku, a f
opcija je ime datoteke koju treba kreirati. Argument odmah iza opcija uvijek će biti ime datoteke na kojoj će se raditi. Ostali argumenti su putanje do bilo koje datoteke ili direktorija u koje želite dodati, navesti ili izdvojiti iz datoteke. U primjeru, dodajemo direktorij compression
i sav njegov sadržaj u arhivu.
Da bismo vidjeli sadržaj tar arhive, koristimo 't' opciju u tar alatu:
$ 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
Obratite pažnju na to kako opcijama prethodi karakter crta -
. Za razliku od većine programa, kod tar
, -
nije potreban kada se specificiraju opcije, iako ne uzrokuje nikakvu štetu ako se koristi.
Note
|
Možete koristiti |
Ekstraktujmo sada datoteku:
$ cd ~/linux_essentials-3.1/archiving $ ls 3.1.tar $ tar xf 3.1.tar $ ls 3.1.tar compression
Pretpostavimo da vam je potrebna samo jedna datoteka iz arhive. Ako je to slučaj, možete ga navesti nakon naziva datoteke arhive. Po potrebi možete odrediti više datoteka:
$ 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
Sa izuzetkom apsolutnih putanja (putanje koje počinju sa /
), tar
datoteke čuvaju cijelu putanju do datoteka kada se kreiraju. Pošto je datoteka 3.1.tar
kreirana sa jednim direktorijem, taj direktorij će biti kreiran u odnosu na vaš trenutni radni direktorij kada se ekstraktuje. Drugi primjer bi ovo trebao pojasniti:
$ 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
|
Ako želite da koristite apsolutnu putanju u |
Program tar
također može upravljati kompresijom i dekompresijom arhiva u hodu. tar
to radi pozivanjem jednog od alata za kompresiju o kojima smo govorili ranije u ovoj lekciji. To je jednostavno kao dodavanje opcije prikladne algoritmu kompresije. Najčešće korišteni su j
, J
i z
za bzip2
, xz
i gzip
, respektivno. Ispod su primjeri koji koriste gore navedene algoritame:
$ 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
Obratite pažnju kako u primjeru .tar
datoteke imaju različite veličine. To pokazuje da su oni uspješno kompresovani. Ako kreirate kompresovane .tar
arhive, uvijek trebate dodati drugu ekstenziju datoteke koja označava algoritam koji ste koristili. To su .xz
, .bz
i .gz
za xz
, bzip2
i gzip
, respektivno. Ponekad se koriste skraćene ekstenzije kao što je .tgz
.
Moguće je dodati datoteke u već postojeće nekompresovane tar arhive. Koristite opciju u
da to učinite. Ako pokušate da dodate u kompresovanu arhivu, dobićete grešku.
$ 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.
Upravljanje ZIP datotekama
Windows mašine često nemaju aplikacije za rukovanje tar kuglicama ili mnoge alate za kompresiju koji se obično nalaze na Linux sistemima (distribucijama). Ako trebate komunicirati sa Windows sistemima, možete koristiti ZIP datoteke. ZIP datoteka je arhivska datoteka slična kompresovanoj tar
datoteci.
Programi zip
i unzip
se mogu koristiti za rad sa ZIP datotekama na Linux sistemima (distribucijama). Primjer u nastavku trebao bi biti sve što vam treba da ih počnete koristiti. Prvo kreirajmo set datoteka:
$ cd ~/linux_essentials-3.1 $ mkdir zip $ cd zip/ $ mkdir dir $ touch dir/file1 dir/file2
Sada koristimo zip
da spakujemo ove datoteke u ZIP datoteku:
$ zip -r zipfile.zip dir adding: dir/ (stored 0%) adding: dir/file1 (stored 0%) adding: dir/file2 (stored 0%) $ rm -rf dir
Na posljetku, možemo raspakovati ZIP datoteku ponovo:
$ 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
Prilikom dodavanja direktorija u ZIP datoteke, opcija -r
uzrokuje da zip
uključi sadržaj direktorija. Bez toga, imali biste prazan direktorij u ZIP datoteci.
Vođene vježbe
-
Prema ekstenzijama, koji od sljedećih alata je korišten za kreiranje ovih datoteka?
Naziv datoteke tar
gzip
bzip2
xz
archive.tar
archive.tgz
archive.tar.xz
-
Prema ekstenzijama, koje od ovih datoteka su arhive, a koje su kompresovane?
Naziv datoteke Archive Compressed file.tar
file.tar.bz2
file.zip
file.xz
-
Kako biste dodali datoteku u
gzip
kompresovanutar
datoteku? -
Koja opcija
tar
navoditar
da uključi/
(root direktorij) u apsolutne putanje? -
Da li
zip
podržava različite nivoe kompresije?
Istraživačke vježbe
-
Prilikom ekstrakcije datoteka, da li
tar
podržava globove na listi datoteka? -
Kako možete osigurati da je dekompresovana datoteka identična datoteci prije nego što je kompresovana?
-
Šta se dešava ako pokušate da ekstraktujete (izdvojite) datoteku iz
tar
arhive koja već postoji na vašem sistemu datoteka? -
Kako biste ekstraktovali datoteku
archive.tgz
bez upotrebe opcijetar
z
?
Sažetak
Linux sistemi imaju nekoliko dostupnih alata za kompresiju i arhiviranje. Ova lekcija pokrila je one najčešće. Najčešći alat za arhiviranje je tar
. Ako je neophodna interakcija sa Windows sistemima, zip
i unzip
mogu kreirati i ekstraktovati ZIP datoteke.
Komanda tar
ima nekoliko opcija koje vrijedi zapamtiti. Oni su x
za ekstrakciju, c
za kreiranje, t
za prikaz sadržaja i u
za dodavanje ili zamjenu datoteka. Opcija v
navodi datoteke koje obrađuje tar
prilikom kreiranja ili ekstrakcije arhive.
Tipični repozitorij Linux distribucije ima mnogo alata za kompresiju. Najčešći su gzip
, bzip2
i xz
. Algoritmi kompresije često podržavaju različite nivoe koji vam omogućavaju optimizaciju za brzinu ili veličinu datoteke. Datoteke se mogu dekompresovati pomoću gunzip
, bunzip2
i unxz
alata.
Alati za kompresiju obično imaju programe koji se ponašaju kao uobičajeni alati za tekstualne datoteke, s razlikom šta rade na kompresovanim datotekama. Nekoliko od njih su zcat
, bzcat
i xzcat
. Alati za kompresiju obično se isporučuju s programima s funkcionalnošću grep
, more
, less
, diff
i cmp
.
Komande korištene u ovoj vježbi:
bunzip2
-
Dekompresuj
bzip2
kompresovanu datoteku. bzcat
-
Prikaži sadržaj
bzip
kompresovane datoteke. bzip2
-
Kompresuj datoteku koristeći
bzip2
algoritam i format. gunzip
-
Dekompresuj
gzip
kompresovanu datoteku. gzip
-
Kompresuj datoteku koristeći
gzip
algoritam i format. tar
-
Kreiraj, ažuriraj, prikaži i ekstraktuj
tar
arhive. unxz
-
Dekompresuj
xz
kompresovanu datoteku unzip
-
Dekompresuj i ekstraktuj (izdvoji) sadržaj ZIP datoteke.
xz
Kompresuj datoteku koristeći xz
algoritam i format.
zcat
-
Prikaži sadržaj
gzip
kompresovane datoteke. zip
-
Kreiraj i kompresuj ZIP arhivu.
Odgovori na vođene vježbe
-
Prema ekstenzijama, koji od sljedećih alata je korišten za kreiranje ovih datoteka?
Filename tar
gzip
bzip2
xz
archive.tar
X
archive.tgz
X
X
archive.tar.xz
X
X
-
Prema ekstenzijama, koje od ovih datoteka su arhive, a koje su kompresovane?
Filename Archive Compressed file.tar
X
file.tar.bz2
X
X
file.zip
X
X
file.xz
X
-
Kako biste dodali datoteku u
gzip
kompresovanutar
datoteku?Prvo biste dekompresovali datoteku sa
gunzip
-om, zatim biste dodali datoteku satar uf
-om, i onda kompresovali sve to sagzip
-om. -
Koja opcija
tar
navoditar
da uključi/
(root direktorij) u apsolutne putanje?Opcija
-P
. Izvodak iz man stranice:-P, --absolute-names Nemojte uklanjati početne kose crte iz imena datoteka prilikom kreiranja arhiva
-
Da li
zip
podržava različite nivoe kompresije?Da. Koristili biste karaktere
-#
, zamjenom karaktera#
sa brojevima od 0 do 9. Izvodak iz man stranice:-# (-0, -1, -2, -3, -4, -5, -6, -7, -8, -9) Regulate the speed of compression using the specified digit #, where -0 indicates no compression (store all files), -1 indi‐ cates the fastest compression speed (less compression) and -9 indicates the slowest compression speed (optimal compression, ignores the suffix list). The default compression level is -6. Iako se još dorađuje, namjera je da ova postavka kontroliše brzinu kompresije za sve metode kompresije. Tre- nutno kontroliše samo deflaciju.
Odgovori na istraživačke vježbe
-
Prilikom ekstrakcije datoteka, da li
tar
podržava globove na listi datoteka?Da, koristili biste opciju
--wildcards
.--wildcards
moraju biti postavljeni odmah izatar
datoteke kada se koriste opcije bez crtice. Na primjer:$ tar xf tarfile.tar --wildcards dir/file* $ tar --wildcards -xf tarfile.tar dir/file*
-
Kako možete osigurati da je dekompresovana datoteka identična datoteci prije nego što je kompresovana?
Ne morate ništa raditi s alatima koji su obrađeni u ovoj lekciji. Sva tri uključuju kontrolne sume (eng.checksums) u svom formatu datoteke koji se provjerava kada se dekompresuju.
-
Šta se dešava ako pokušate da ekstraktujete (izdvojite) datoteku iz
tar
arhive koja već postoji na vašem sistemu datoteka?Datoteka na vašem sistemu datoteka je prepisana (zamjenjena) verzijom koja se nalazi u
tar
datoteci. -
Kako biste ekstraktovali datoteku
archive.tgz
bez upotrebe opcijetar
z
?Deompresovali biste ju upotrebom
gunzip
alata.$ gunzip archive.tgz $ tar xf archive.tar