Если ты думаешь, что tar — это какая-то магия, ты ошибаешься. Это самый обычный инструмент из далёких 70-х, когда у нас были магнитные ленты, а не быстрые флешки. Название «Tape ARchive» говорит само за себя — создавали его для архивирования на ленты, которые еле крутятся. Сейчас ленты почти никто не юзает, но tar почему-то никто не выкидывает.

Что это за зверь и зачем он нужен?

Tar — это просто упаковщик. Он берёт кучу файлов и делает из них один большой файл — архив. И всё. Сжатие он сам не делает, но может вызвать сжатие через gzip, bzip2 и другие алгоритмы — вот они уже реально сжимают, а tar просто пакует.

Синтаксис команды

Формат — страшный для новичков, но прост для тех, кто варится в Linux по уши:

tar [операция и опции] [архив] [файлы] 

Операций всего несколько, выбираешь одну, и всё:

  • -c (create) — создать архив
  • -x (extract) — распаковать архив
  • -t (list) — посмотреть, что внутри

Опции:

  • -v (verbose) — показать, что происходит (сами файлы)
  • -f — указать имя архива (обязательно, иначе tar обидится)

Покажи себя — хочешь быстро и по делу, набирай короткие ключи. Хочешь, чтобы скрипт было легче читать — длинные, типа --create.

Создание архива — как сделать пакт из файлов

Чтобы запаковать файлы file1, file2, file3 в архив archive.tar, лови команду:

tar -cf archive.tar file1 file2 file3

Всё просто — -c создаёт, -f — файл архива.

Если хочешь видеть, что туда запихивается, добавляй -v:

tar -cvf archive.tar file1 file2 file3

Каталоги по умолчанию упаковываются с рекурсией — если ты не хочешь тащить всё содержимое папок, предупреждай tar опцией --no-recursion. Хотя зачем?

Сжатие: gzip, bzip2 и их хренова дюжина

Самое популярное сжатие — gzip. Добавь к команде -z и получишь tar.gz:

tar -czf archive.tar.gz file1 file2

Bzip2 с -j, создаст tar.bz2:

tar -cjf archive.tar.bz2 file1 file2

Если хочешь поиграться — есть lzip, lzma, lzop, xz, но честно, не вижу смысла париться, если не занимаешься архивацией на уровне спецов.

Смотреть, что внутри архива

Никогда не знаешь, что ты туда запихал пару месяцев назад? Вот команда:

tar -tf archive.tar

Если нужен полный отчёт — -v в помощь:

tar -tvf archive.tar

Тебе покажут владельца, размер, дату — если уж хочешь быть точно в курсе.

Распаковка архива — берёшь и вытаскиваешь

Чтобы распаковать целиком:

tar -xf archive.tar

Если хочешь видеть прогресс — добавь -v:

tar -xvf archive.tar

Если не хочешь, чтобы архив выплеснулся в текущую папку и засрал всё вокруг, юзай опцию -C с нужным каталогом:

tar -xf archive.tar -C /opt/files

Работать с gzip и bzip2 архивами — точно так же

Не парься, просто указывай архив, а tar сам разберётся:

tar -xf archive.tar.gz
tar -xf archive.tar.bz2

Извлекать выборочно — не надо распаковывать всё, если не хочешь

Если в архиве гора файлов, а тебе нужны только парочка, указывай их после имени архива:

tar -xf archive.tar file1 file2

Не забудь — имена файлов надо брать точные, включая пути, которые показаны командой -t.

Если каталоги — так же:

tar -xf archive.tar dir1 dir2

Подстановочные знаки — чтобы не переписывать всё вручную

Хотелось бы достать все .js файлы? Вот тебе:

tar -xf archive.tar --wildcards '*.js' 

Не забудь кавычки, иначе оболочка съест твои шаблоны.

Добавить файлы в существующий архив — потому что никто не идеален

Добавить один или несколько файлов к уже готовому архиву? Нет проблем:

tar -rvf archive.tar newfile

-r — append, -v — показать процесс.

Удалить файл из архива — если уже всё испортил

Удаление из архива — это жёстко и не всегда возможно, но если хочешь:

tar --delete -f archive.tar file1

Но предупреждаю: это не магия. Часто лучше пересоздать архив.

Итог

Tar — не крутая игрушка, а хреново простое, но бесценное оружие в руках любого, кто реально пашет в Linux. Если ты продолжаешь думать, что это сложно — ты просто не юзал его достаточно много раз и без гугла. А если юзаешь — всегда держи в голове: один ключ, одно действие, никаких лишних телодвижений. 

Проблемы с архивами чаще всего из-за того, что ты забыл ключ -f или перепутал порядок аргументов. Запомни это, и архивы станут для тебя привычным и надёжным инструментом, а не гадким чертиком из командной строки.