Tänane küsimuste ja vastuste seanss jõuab meile viisakalt SuperUserini - Stack Exchange'i ja kogukonnapõhiste Q & A veebisaitide rühmitusse.
Küsimus
SuperUseri lugeja MarcusJ on uudishimulik tarformaali kohta ja seda, miks me kasutame seda ikkagi pärast kõiki neid aastaid:
I know that tar was made for tape archives back in the day, but today we have archive file formats that both aggregate files and perform compression within the same logical file format.
Questions:
- Is there a performance penalty during the aggregation/compression/decompression stages for using tar encapsulated in gzip or bzip2, when compared to using a file format that does aggregation and compression in the same data structure? Assume the runtime of the compressor being compared is identical (e.g. gzip and Deflate are similar).
- Are there features of the tar file format that other file formats, such as.7z and.zip do not have?
- Since tar is such an old file format, and newer file formats exist today, why is tar (whether encapsulated in gzip, bzip2 or even the new xz) still so widely used today on GNU/Linux, Android, BSD, and other such UNIX operating systems, for file transfers, program source and binary downloads, and sometimes even as a package manager format?
See on täiesti mõistlik küsimus; Viimase kolmekümne aasta jooksul on arvutite maailmas nii palju muutunud, kuid me kasutame endiselt tar-vormingut. Mis on lugu?
Vastus
SuperUseri kaasautor Allquixotic pakub mõningat ülevaadet tar-vormingu pikaealisuse ja funktsionaalsuse kohta:
Part 1: Performance
Here is a comparison of two separate workflows and what they do.
You have a file on disk
blah.tar.gz
mis on näiteks 1 GB gzip-kokkusurutud andmeid, mis kokkuostutena mahutavad 2 GB (nii surveaste on 50%).
Nii, nagu te seda teeksite, kui peaksite eraldi arhiveerima ja pakkima, oleks:
tar cf blah.tar files …
See tooks kaasa
blah.tar
mis on lihtsalt koondatud
files …
tihendamata kujul.
Siis teete
gzip blah.tar
See loeb sisu
blah.tar
ketast, pakkige neid gzip-pakkimisalgoritmi abil, sisestage sisu
blah.tar.gz
siis lahutage (kustuta) fail
blah.tar
Nüüd laseme lahti!
Tee 1
Sul on
blah.tar.gz
ühel või teisel viisil.
Te otsustate joosta:
gunzip blah.tar.gz
See on
-
LUGEGE 1GB tihendatud andmete sisu
blah.tar.gz
-
Protsessi abil saate survestatud andmeid läbi
gzip
dekompressor mälus.
-
Kuna mälu puhver täidab "plokk" väärt andmeid, kirjuta kokkusurutud andmed faili
blah.tar
kettale ja korrake, kuni kõik kokkusurutud andmed loetakse.
-
Faili eemaldamine (kustutamine)
blah.tar.gz
Nüüd sul on
blah.tar
mis on tihendamata, kuid sisaldab ühte või mitut selles sisalduvat faili, mille andmetöötlus on väga väike. Faili suurus on arvatavastipaar baiti suurem kui kõigi failide andmete summa oleks.
Sa jooksed:
tar xvf blah.tar
See on
-
LUGEGE 2 GB tihendamata andmete sisu
blah.tar
ja
tar
failivormingu andmestruktuurid, sealhulgas teave failiõiguste, failinimede, kataloogide jne kohta.
- KIRJUTAGE 2 GB andmete ja metaandmete salvestamiseks. See hõlmab järgmisi andmeid: andmete struktuuri / metaandmete teabe tõlkimine uute failide ja kataloogide loomiseks kettale vastavalt vajadusele või olemasolevate failide ja kataloogide ümberkirjutamine uute andmetega.
Andmed kokku LUGEGE ketast selles protsessis oli 1 GB (gunzipile) + 2 GB (tõrva jaoks) = 3 GB.
Andmed kokku WROTE selle protsessi ketas oli 2 GB (gunzipile) + 2 GB (tõrva jaoks) + mõned baidid metaandmete jaoks = umbes 4 GB.
Tee 2
Sul on
blah.tar.gz
ühel või teisel viisil.
Te otsustate joosta:
tar xvzf blah.tar.gz
See on
-
LUGEGE 1GB tihendatud andmete sisu
blah.tar.gz
plokk korraga, mällu.
-
Protsessi abil saate survestatud andmeid läbi
gzip
dekompressor mälus.
-
Kui mälu puhver täidab, siis see saab toru need andmed, mällu, kuni
tar
failiformaadi parser, mis loeb teavet metaandmete jms kohta ning tihendamata failiandmete kohta.
-
Kuna mälu puhver täidab
tar
faili parser, kirjutab see CD-le kokkusurumata andmed, luues faile ja katalooge ning lisades neid pakkimata sisu.
Andmed kokku LUGEGE kettalt selles protsessis oli 1GB kokkusurutud andmeid, ajavahemik.
Andmed kokku WROTE selle protsessi ketas oli 2 GB pakkimata andmeid + mõned baidid metaandmete jaoks = umbes 2 GB.
Kui märkate, on ketta sisend / väljaminek Tee 2 onidentne kettale I / O, mida teostab näiteks
Zip
või
7-Zip
programmid, mis kohanduvad kokkusurumise suhte erinevustega.
Ja kui tihendussuhe on teie mure, siis kasutage
Xz
kompressor kapseldada
tar
ja teil on LZMA2'd TARi arhiiv, mis on sama efektiivne kui kõige arenenum algoritm, mis on saadaval
7-Zip
:-)
Osa 2: funktsioonid
tar
salvestab UNIXi õigused oma failide metaandmetes ning on väga hästi tuntud ja testitud, et edukalt pakendada kataloogi igasuguste erinevate õigustega, sümboolsed lingid jne. On rohkem kui paar juhust, kus võib tekkida vajadus hoida hulga faile üks fail või voog, kuid mitte tingimata seda kokku suruda (kuigi tihendamine on kasulik ja tihti kasutatakse).
3. osa: ühilduvus
Paljud tööriistad levitatakse lähte- või binaarfailina nagu.tar.gz või.tar.bz2, sest see on "madalaima ühise nimetajaga" failivorming: nagu enamikel Windowsi kasutajatel on juurdepääs.zip või.rar dekompressoritele, enamik Linuxi installimisi, isegi kõige elementaarsem on ligipääs vähemalt tõrva ja gunzipile, olenemata sellest, kui vana või parandatud. Isegi Android-püsivaralistel on juurdepääs nendele tööriistadele.
Uusimad projektid, mis sihivad tänapäeva distributsiooni kasutavaid külastajaid, võivad väga hästi levitada kaasaegsemas vormingus, näiteks.tar.xz (kasutades Xz (LZMA) tihendusformaati, mis tihendab paremini kui gzip või bzip2) või.7z, mis on sarnane Zip- või RAR-failivorminguid nii, et see nii pakkib kui ka määrab paigutuse mitme faili kapseldamiseks ühte faili.
Te ei näe.7z sagedamini sama põhjusel, et muusikat ei müüda veebipõhiste allalaadimisharjumuste uudsetest formaatidest nagu Opus või veebimoodulis. Kooskõla inimestega, kes kasutavad iidseid või väga põhilisi süsteeme.
Kas teil on seletamiseks midagi lisada? Helistage kommentaarides.Kas soovite lugeda rohkem vastuseid teistelt tech-savvy Stack Exchange'i kasutajatelt? Tutvu täieliku arutelu teemaga siit.