Малоизвестные форматы архивов Linux

linux

Не­кото­рые фор­маты архи­вов прош­ли через пик популяр­ности и оста­лись в прош­лом. В UNIX тра­дици­онно для соз­дания архи­ва (то есть объ­еди­нения нес­коль­ких фай­лов в один) и для сжа­тия исполь­зовались раз­ные инс­тру­мен­ты. Из‑за это­го инс­тру­мен­ты сжа­тия могут появ­лять­ся и уста­ревать, не вызывая проб­лем, — нет пот­ребнос­ти оставлять под­дер­жку уста­рев­ших алго­рит­мов в новых архи­вато­рах. Если и понадо­бит­ся рас­паковать дан­ные ста­рым алго­рит­мом, всег­да мож­но пос­тавить отдель­ную ути­литу.

Ес­ли в ходе архе­оло­гичес­ких рас­копок тебе попадет­ся файл .tar.Z, мож­но пос­тавить ncompress и выпол­нить compress -d file.tar.Z, пос­ле чего понадо­бит­ся толь­ко стан­дар­тный tar. В дру­гих слу­чаях ори­гиналь­ный алго­ритм LZW никому в голову не при­дет.

Иное дело с собс­твен­но фор­матами архи­вов. В отли­чие от алго­рит­мов сжа­тия, спо­собы соб­рать один файл из нес­коль­ких слож­но срав­нивать меж­ду собой. Фор­мат ZIP не под­держи­вает пра­ва фай­лов, а tar — под­держи­вает, в этом смыс­ле tar.gz луч­ше ZIP. При этом при­думать фор­мат, который был бы объ­ективно и бес­спор­но луч­ше tar, дос­таточ­но слож­но.

Од­нако есть фор­мат фай­ла, а есть инс­тру­мен­ты для работы с ним. И поведе­ние tar, и фор­мат соз­дава­емых фай­лов стан­дарти­зова­ны в POSIX, что и дела­ет его популяр­ным на всех UNIX-подоб­ных сис­темах. К тому же ути­лита tar дос­таточ­но удоб­на в исполь­зовании. По край­ней мере tar cvf и tar xvf быс­тро запоми­нает каж­дый поль­зователь.

cpio

Ты уди­вишь­ся, но tar — это не самый рас­простра­нен­ный фор­мат архи­вов в Linux. Сре­ди поль­зовате­лей — да, но боль­ше все­го дан­ных хра­нит­ся в фор­мате cpio, с которым ред­ко при­ходит­ся работать вруч­ную.

Поч­ти на каж­дой машине с Linux есть файл в этом фор­мате, пос­коль­ку имен­но его ядро исполь­зует для initrd (inirial RAM disk). Его же исполь­зует фор­мат пакетов RPM. Как говорит до­кумен­тация ядра, опре­деля­ющим фак­тором была прос­тота фор­мата.

А вот поль­зовать­ся ути­лита­ми, которые с ним работа­ют, сов­сем не прос­то. Вот как надо вызывать ути­литу cpio, что­бы соз­дать архив:

find /path/to/dir -depth -print | cpio -o > /path/to/archive.cpio

Для скрип­та сбор­ки — сой­дет, даже в чем‑то удоб­но. Для руч­ного исполь­зования… tar cvf явно про­ще и пок­рыва­ет боль­шую часть пот­ребнос­тей поль­зовате­ля.

ar

Дру­гой рас­простра­нен­ный фор­мат, который ник­то не исполь­зует нап­рямую, — ar. Его реали­зация вхо­дит в сос­тав пакета GNU binutils. Как он ока­зал­ся в пакете с ути­лита­ми для работы с исполня­емы­ми фай­лами? Дело в том, что он исполь­зует­ся для соз­дания ста­тичес­ких биб­лиотек.

Ни­како­го осо­бен­ного фор­мата «ста­тичес­кой биб­лиоте­ки» в ELF не сущес­тву­ет. Каж­дый файл с исходным кодом ком­пилиру­ется в отдель­ный объ­ектный файл в том же фор­мате ELF. Фай­лы вро­де libfoo.a — это на самом деле архи­вы в фор­мате ar, которые содер­жат нес­коль­ко объ­ектных фай­лов. Таким обра­зом, поль­зователь может писать gcc -o myprog myprog.o /usr/lib/foo/static/libfoo.a.

Вто­рой поль­зователь это­го фор­мата — пакет­ный менед­жер dpkg. Если файл .rpm — это сжа­тый cpio, то .deb — сжа­тый ar.

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (2 оценок, среднее: 5,00 из 5)
Загрузка...
Понравилась статья? Поделиться с друзьями:
Добавить комментарий