Графичният архивиращ формат е в изчислителните години истински металус, но все още е в тежка употреба днес. Какво прави така, че формата на катран да е толкова полезен дълго след създаването му?
Днешната сесия за въпроси и отговори ни идва с любезното съдействие на SuperUser - подразделение на Stack Exchange - обединяване на уеб сайтове с въпроси и отговори.
Reader на SuperUser MarcusJ е любопитен за формата на катран и защо продължава да го използва след всички тези години:
Знам, че катранът е направен за ленти архиви през деня, но днес имаме архивни файлови формати, които обединяват файлове и изпълняват компресия в същия логически файлов формат.
въпроси:
- Има ли наказание за ефективността по време на етапите на агрегиране / компресия / декомпресия за използване на капсулиран в gzip или bzip2 тар, в сравнение с използването на файлов формат, който обединява и компресира в една и съща структура от данни? Да приемем, че времето на изпълнение на компресора, което се сравнява, е идентично (например gzip и Deflate са подобни).
- Има ли функции на файла с формат tar, че други файлови формати, като например .7z и .zip, нямат?
- Тъй като катранът е такъв стар формат на файла и по-новите файлови формати съществуват днес, защо е тарг (независимо дали е капсулиран в gzip, bzip2 или дори в новия xz) все още толкова широко използван днес в GNU / Linux, Android, BSD и други UNIX операционни системи, за прехвърляне на файлове, изтегляне на програми и бинарни файлове, а понякога и като формат за мениджър на пакети?
Това е съвсем разумен въпрос; толкова много се е променило в изчислителния свят през последните тридесет години, но все още използваме формата на катран. Каква е историята?
Сътрудникът на SuperUser Allquixotic предлага известно разбиране за дълголетието и функционалността на формата на катран:
Част 1: Изпълнение
Ето едно сравнение на два отделни работни потока и какво правят.
Имате файл на диск
blah.tar.gz
което е, да речем, 1 GB от gzip-компресирани данни, които при некомпресиране заемат 2 GB (така че съотношението на компресия е 50%).Начинът, по който бихте създали това, ако искате да архивирате и компресирате поотделно, ще бъде:
tar cf blah.tar файлове ...
Това би довело до
blah.tar
което е просто обобщаване нафайлове ...
в некомпресирана форма.Тогава ще го направите
gzip blah.tar
Това ще прочете съдържанието на
blah.tar
от диска, ги компресирайте чрез алгоритъма за компресия на gzip, напишете съдържаниетоblah.tar.gz
, след което прекратете връзката (изтрийте) файлаblah.tar
.Сега, нека декомпресираме!
Път 1
Ти имаш
blah.tar.gz
, по един или друг начин.Решавате да изпълните:
gunzip blah.tar.gz
Това ще
- ПРОЧЕТЕТЕ съдържанието на 1GB компресирани данни от
blah.tar.gz
.- Процедирайте компресираните данни през
софтуерна
декомпресор в паметта.- Тъй като буферът за паметта се запълва с данни за "блок", ПИСМИ некомпресираните данни във файла
blah.tar
на диска и повторете, докато не се прочетат всички компресирани данни.- Прекратяване на връзката (изтриване) на файла
blah.tar.gz
.Сега вече имаш
blah.tar
на диска, който е некомпресиран, но съдържа един или повече файлове в него с много ниска структура на данните. Размерът на файла вероятно еняколко байта по-голяма от сумата от всички данни за файла.Ти бягаш:
tar xvf blah.tar
Това ще
- ПРОЧЕТЕТЕ 2GB некомпресирано съдържание на данни от
blah.tar
икатран
структурата на файловия формат, включително информация за файловите разрешения, имена на файлове, директории и др.- ПИСМЕТЕ на диска 2GB данните плюс метаданните. Това включва: преобразуване на информацията за структурата на данните / метаданните в създаването на нови файлове и директории на диск, както и пренаписване на съществуващи файлове и директории с ново съдържание на данни.
Общите данни, които ниеПРОЧЕТИ от диска в този процес е 1GB (за gunzip) + 2GB (за катран) = 3GB.
Общите данни, които ниеНАПИСАЛ до диска в този процес е 2GB (за gunzip) + 2GB (за катран) + няколко байта за метаданни = около 4GB.
Път 2
Ти имаш
blah.tar.gz
, по един или друг начин.Решавате да изпълните:
tar xvzf blah.tar.gz
Това ще
- ПРОЧЕТЕТЕ съдържанието на 1GB компресирани данни от
blah.tar.gz
, блок в даден момент, в паметта.- Процедирайте компресираните данни през
софтуерна
декомпресор в паметта.- Тъй като буферът на паметта се запълва, ще го направитръба тези данни, в паметта, до
катран
файлов формат, който ще прочете информацията за метаданните и т.н. и данните за некомпресираните файлове.- Тъй като буферът за паметта се запълва в
катран
файла parser, той ще записва некомпресираните данни на диск, като създава файлове и директории и ги попълва с некомпресирано съдържание.Общите данни, които ниеПРОЧЕТИ от диска в този процес е 1 GB компресирани данни, период.
Общите данни, които ниеНАПИСАЛ до диска в този процес е 2 GB некомпресирани данни + няколко байта за метаданни = около 2 GB.
Ако забележите, размерът на дисковете I / O вПът 2 еидентичен към дисковия вход / изход, изпълняван от, да речем
цип
или7-Zip
програми, коригиране на всякакви разлики в съотношението на компресия.И ако съотношението на компресия е вашето притеснение, използвайте
XZ
компресор за капсулиранекатран
, и имате LZMA2'ed TAR архив, който е също толкова ефективен, колкото и най-модерния алгоритъм, с който разполага7-Zip
:-)Част 2: Характеристики
катран
съхранява разрешенията на UNIX в своите файлови метаданни и е много добре познат и тестван за успешно опаковане на директория с различни видове разрешения, символни връзки и т.н.Има повече от няколко случая, в които може да се наложи да се съберат няколко файла в един файл или поток, но не задължително да се компресират (въпреки че компресията е полезна и често се използва).Част 3: Съвместимост
Много инструменти се разпространяват в изходна или двоична форма като .tar.gz или .tar.bz2, защото това е файлов формат с най-малък общ знаменател: подобно на повечето потребители на Windows има достъп до .zip или .rar декомпресори, повечето Linux инсталации, дори и най-основните, ще имат достъп най-малко на катран и gunzip, без значение колко възрастен или по-ниски. Дори и фърмуерите на Android имат достъп до тези инструменти.
Новите проекти, насочени към аудитории, изпълняващи съвременни дистрибуции, могат много добре да се разпространяват в по-модерен формат, като например .tar.xz (използвайки компресирания формат Xz (LZMA), който компресира по-добре от gzip или bzip2) или .7z, файловите формати Zip или Rar, тъй като компресират и определят оформление за капсулиране на няколко файла в един файл.
Не виждате .7z да се използват по-често поради същата причина, че музиката не се продава от онлайн магазините за изтегляне в съвсем нови формати като Opus или видео в WebM. Съвместимост с хора, управляващи древни или много основни системи.
Имате ли нещо, което да добавите към обяснението? Звучи в коментарите. Искате ли да прочетете повече отговори от други потребители на Stack Exchange? Вижте цялата тема на дискусията тук.