Некоторые форматы архивов прошли через пик популярности и остались в прошлом. В UNIX традиционно для создания архива (то есть объединения нескольких файлов в один) и для сжатия использовались разные инструменты. Из‑за этого инструменты сжатия могут появляться и устаревать, не вызывая проблем, — нет потребности оставлять поддержку устаревших алгоритмов в новых архиваторах. Если и понадобится распаковать данные старым алгоритмом, всегда можно поставить отдельную утилиту.
РЕКОМЕНДУЕМ:
Анализ и изучение ELF-файлов в Linux
Если в ходе археологических раскопок тебе попадется файл .<wbr />tar.<wbr />Z, можно поставить ncompress и выполнить compress <wbr />-d <wbr />file.<wbr />tar.<wbr />Z, после чего понадобится только стандартный tar. В других случаях оригинальный алгоритм LZW никому в голову не придет.
Иное дело с собственно форматами архивов. В отличие от алгоритмов сжатия, способы собрать один файл из нескольких сложно сравнивать между собой. Формат ZIP не поддерживает права файлов, а tar — поддерживает, в этом смысле tar.gz лучше ZIP. При этом придумать формат, который был бы объективно и бесспорно лучше tar, достаточно сложно.
Однако есть формат файла, а есть инструменты для работы с ним. И поведение tar, и формат создаваемых файлов стандартизованы в POSIX, что и делает его популярным на всех UNIX-подобных системах. К тому же утилита tar достаточно удобна в использовании. По крайней мере tar <wbr />cvf и tar <wbr />xvf быстро запоминает каждый пользователь.
cpio
Ты удивишься, но tar — это не самый распространенный формат архивов в Linux. Среди пользователей — да, но больше всего данных хранится в формате cpio, с которым редко приходится работать вручную.
Почти на каждой машине с Linux есть файл в этом формате, поскольку именно его ядро использует для initrd (inirial RAM disk). Его же использует формат пакетов RPM. Как говорит документация ядра, определяющим фактором была простота формата.
А вот пользоваться утилитами, которые с ним работают, совсем не просто. Вот как надо вызывать утилиту cpio, чтобы создать архив:
1 |
find /path/to/dir -depth -print | cpio -o > /path/to/archive.cpio |
Для скрипта сборки — сойдет, даже в чем‑то удобно. Для ручного использования… tar <wbr />cvf явно проще и покрывает большую часть потребностей пользователя.
ar
Другой распространенный формат, который никто не использует напрямую, — ar. Его реализация входит в состав пакета GNU binutils. Как он оказался в пакете с утилитами для работы с исполняемыми файлами? Дело в том, что он используется для создания статических библиотек.
РЕКОМЕНДУЕМ:
Структура каталогов в Linux
Никакого особенного формата «статической библиотеки» в ELF не существует. Каждый файл с исходным кодом компилируется в отдельный объектный файл в том же формате ELF. Файлы вроде libfoo.<wbr />a — это на самом деле архивы в формате ar, которые содержат несколько объектных файлов. Таким образом, пользователь может писать:
1 |
gcc -o myprog myprog.o /usr/lib/foo/static/libfoo.a |
Второй пользователь этого формата — пакетный менеджер dpkg. Если файл .<wbr />rpm — это сжатый cpio, то .<wbr />deb — сжатый ar.