tar
on väga asjalik tööriist, millega saab suurema hulga faile üheks failiks kokku pakkida, kusjuures “pakkimise” all ei mõtle ma tihendamist ega kokkusurumist, sest seda tar
iseenesest ei tee (ja see pole üldse halb). Neid arhiive nimetatakse tavaliselt “tarball-ideks”.
Tüüpiline tar
-käsk näeb välja selline:
tar [options] file.tar file(s)
Optsioonideks võivad olla näiteks:
-c
(create) arhiivi koostamiseks võix
(extract) arhiivi lahti võtmiseks-v
(verbose) töödeldud failide nimekirja välja printimiseks töö käigus-f
(file) ehk viitab sellele, et järgmine argument on arhiivi nimi, millega tegemist tehakse
Lihtne näide
Kataloogi “myfiles” kokkupakkimine arhiiviks:
tar -cf myfiles.tar myfiles
Selliselt satub arhiivi sisse ka kataloog ise. Nüüd tuleb fail sihtmasinasse liigutada ja seal lahti pakkida:
tar -xf myfiles.tar
Siin on viimane parameeter ära jäetud, sest me teame, et selle sisu on ühes kataloogis koos.
Arhiivi tihendamine
Kuna Unixi filosoofia on, et iga programm peaks tegema ühte asja ja seda hästi, siis tar
ise arhiivide kokkusurumisega ei tegele vaid kasutab selleks teisi teeke. Selle funktsiooni käivitamiseks on options-ite hulka vaja lisada j
bzip2 või z
gzip käivitamiseks.
bzip2-tüüpi arhiivi tekitamine ja avamine:
tar -cjf myfiles.tar.bz2 myfiles
tar -xjf myfiles.tar.bz2
gzip-tüüpi arhiivi tekitamine ja avamine:
tar -czf myfiles.tar.gz myfiles
tar -xzf myfiles.tar.gz
Kiire viis mitme faili ülekandmiseks ssh
ja tar
abil
Järgnev käsk on väga kacal näide käsurea võimekusest kasutades ära torusid ehk pipe-sid:
ssh raido@server "cd /data && tar -cf - myfiles" > ~/myfiles.tar
ssh raido@server
- logib serverisse sisse- jutumärkides olev osa on käsud, mis jooksutatakse kaugel(remote) serveris
cd /data
- liigub soovitud kausta&&
- see kahe käsu vahel tähedab seda, et kui sellele eelnev käsk ebaõnnestus, siis järgmist tegema ei hakata. Kui on kindel, et sellist olukorda ei juhtu või on vaja, et mõlemad käivitataks, siis võib selle asemel lihtsalt semikooloni ka panna.tar -cf - myfiles
- teeb “myfiles” kataloogidest arhiivi ja edastab selle pseudofaili, mida tähistab sidekriips. Selle tulemusena liigub käsu väljund torusse, mida järgmine käsk lennult tarbida saab.>
- see toimub nüüd kohalikus masinas ja tähendab seda, et torust tulev info edastatakse kohalikus süsteemis mingisse faili, millel on ka konkreetne nimi (koos asukohaga kodukataloogis): ~/myfiles.tar
Sama asja saab ka vastupidises suunas teha:
tar -cf - myfiles | ssh raido@server "tar -xf -"
tar -cf - myfiles
- pakib kausta “myfiles” kokku ja edastab torusse|
- see eraldab käske ja tähistab seda, et eelneva käsu väljund läheb järgnevale sisendiksssh raido@server
- logib serverisse sisse"tar -xf -"
- käsk, mis jooksutatakse kaugel serveris, ehk pakitakse arhiiv lahti, kusjuures arhiiv loetakse pseudofailist, mis viitab torule
Mis viimase lahenduse veel huvitavamaks teeb on see, et arhiiv omale failinime ei saagi, sest teda kuskile failisüsteemi vahepeal ei salvestatagi. Sama lahendust oleks saanud ka esimese käsu puhul kasutada kui faili suunamine (> ~/myfiles.tar
) asendada kohese torust tuleva arhiivi lahtipakkimisega (| tar -xf -
).
Kui võrguühendus omab mahu või kiiruse osas mingeid piiranguid (nt mobiilne internet), siis saab alati -j
või -z
lipukese juurde lisada. Piiratud riistvara nagu näiteks Raspberry Pi peal võib see ülekannet aeglustada, sest kokkupakkimine on üsna protsessori-intensiivne tegevus.