Некоторые форматы архивов прошли через пик популярности и остались в прошлом. В UNIX традиционно для создания архива (то есть объединения нескольких файлов в один) и для сжатия использовались разные инструменты. Из‑за этого инструменты сжатия могут появляться и устаревать, не вызывая проблем, — нет потребности оставлять поддержку устаревших алгоритмов в новых архиваторах. Если и понадобится распаковать данные старым алгоритмом, всегда можно поставить отдельную утилиту.
Если в ходе археологических раскопок тебе попадется файл .
, можно поставить ncompress и выполнить compress
, после чего понадобится только стандартный tar
. В других случаях оригинальный алгоритм LZW никому в голову не придет.
Иное дело с собственно форматами архивов. В отличие от алгоритмов сжатия, способы собрать один файл из нескольких сложно сравнивать между собой. Формат ZIP не поддерживает права файлов, а tar — поддерживает, в этом смысле tar.gz лучше ZIP. При этом придумать формат, который был бы объективно и бесспорно лучше tar, достаточно сложно.
Однако есть формат файла, а есть инструменты для работы с ним. И поведение tar, и формат создаваемых файлов стандартизованы в POSIX, что и делает его популярным на всех UNIX-подобных системах. К тому же утилита tar
достаточно удобна в использовании. По крайней мере tar
и tar
быстро запоминает каждый пользователь.
cpio
Ты удивишься, но tar — это не самый распространенный формат архивов в Linux. Среди пользователей — да, но больше всего данных хранится в формате cpio, с которым редко приходится работать вручную.
Почти на каждой машине с Linux есть файл в этом формате, поскольку именно его ядро использует для initrd (inirial RAM disk). Его же использует формат пакетов RPM. Как говорит документация ядра, определяющим фактором была простота формата.
А вот пользоваться утилитами, которые с ним работают, совсем не просто. Вот как надо вызывать утилиту cpio, чтобы создать архив:
Для скрипта сборки — сойдет, даже в чем‑то удобно. Для ручного использования… tar
явно проще и покрывает большую часть потребностей пользователя.
ar
Другой распространенный формат, который никто не использует напрямую, — ar. Его реализация входит в состав пакета GNU binutils. Как он оказался в пакете с утилитами для работы с исполняемыми файлами? Дело в том, что он используется для создания статических библиотек.
Никакого особенного формата «статической библиотеки» в ELF не существует. Каждый файл с исходным кодом компилируется в отдельный объектный файл в том же формате ELF. Файлы вроде libfoo.
— это на самом деле архивы в формате ar, которые содержат несколько объектных файлов. Таким образом, пользователь может писать gcc
.
Второй пользователь этого формата — пакетный менеджер dpkg. Если файл .
— это сжатый cpio, то .
— сжатый ar.