С чего начать Первые шаги трек · 15 ступеней
Linux Labs

tar — архивирование и распаковка файлов

4 мин GNU tar

Собирает файлы в архив со сжатием; архив без верхнего каталога при распаковке засыпает файлами текущую директорию.

Шпаргалка

5 команд Версия для печати
  • tar czf a.tar.gz dir создать (gzip)
  • tar czf a.tar.gz -C /base sub без лишних верхних каталогов
  • tar xzf a.tar.gz -C /dest распаковать в каталог
  • tar xzf a.tar.gz --strip-components=1
  • tar tvzf a.tar.gz посмотреть содержимое
  • c=create x=extract t=list z=gzip J=xz v=verbose f=file -C каталог

Обзор

tar собирает дерево файлов в один архив (.tar), часто со сжатием (.tar.gz, .tar.xz). Мнемоника флагов: create / extract / tlist, verbose, file, z=gzip, j=bzip2, J=xz.

Ключи

11

f требует аргумент — имя архива — и по соглашению ставится последним в группе букв (czf, не fcz). Перед первой распаковкой незнакомого архива посмотри его содержимое tar tzf: если в списке нет общего верхнего каталога, распаковка рассыплет файлы прямо в текущую директорию.

Ключ Что делает Пример
-c --create Создать новый архив. tar czf backup.tar.gz /etc
-x --extract Извлечь файлы из архива. tar xzf backup.tar.gz -C /restore
-t --list Показать содержимое архива, не извлекая файлы. tar tvzf backup.tar.gz
-f --file FILE Имя файла архива; ставится последним в группе однобуквенных флагов. tar czf backup.tar.gz dir
-z --gzip Сжатие gzip — быстрый баланс скорости и размера. tar czf backup.tar.gz dir
-C DIR Сменить каталог перед упаковкой или распаковкой. tar xzf backup.tar.gz -C /restore
-v --verbose Печатать список обрабатываемых файлов. tar czvf backup.tar.gz dir
-J --xz Сжатие xz — сильнее gzip, но заметно медленнее. tar cJf backup.tar.xz dir
--exclude PATTERN Исключить файлы и каталоги по шаблону. tar czf b.tar.gz --exclude='*.log' dir
-p --preserve-permissions Сохранить права файлов при извлечении. sudo tar xpzf backup.tar.gz -C /
--strip-components N Срезать N верхних уровней каталогов при извлечении. tar xzf release.tar.gz --strip-components=1

Ничего не найдено. Попробуй запрос короче.

Рецепты

1

Команды

bash
# создать
tar czf backup.tar.gz /etc                 # упаковать /etc с gzip
tar cJf backup.tar.xz dir                  # с xz (сильнее, медленнее)
tar czf b.tar.gz -C /var/www site          # запаковать site, лежа в /var/www (без /var/www/ в путях)
tar czf b.tar.gz --exclude='*.log' --exclude='cache' dir

# распаковать
tar xzf backup.tar.gz                      # извлечь сюда
tar xzf backup.tar.gz -C /restore          # извлечь в каталог
tar xzf b.tar.gz --strip-components=1       # срезать верхний каталог (частый кейс с релизами)
tar xzf backup.tar.gz etc/hosts            # извлечь один файл

# посмотреть/проверить (не распаковывая)
tar tzf backup.tar.gz | head               # список
tar tvzf backup.tar.gz                     # с правами/размерами/датами

# по сети (без промежуточного файла):
tar cz dir | ssh host 'tar xz -C /dest'    # переслать дерево на хост (см. ssh-client)

Неполадки

5

tar: Removing leading '/'

Норма: tar хранит относительные пути (чтобы не перезаписать систему при распаковке). Распаковывай в нужный каталог через -C.

Распаковал и засыпал текущий каталог («tar-бомба»)

Архив без верхнего каталога. Сперва смотри tar tzf a.tar.gz | head; распаковывай в отдельный -C /tmp/x. Лишний верхний каталог убирает --strip-components=1.

Permission denied / потерялись владельцы

Системные бэкапы распаковывай под root и с -p (права) / --same-owner (владельцы, у root по умолчанию).

Очень медленно / большой архив

xz (J) жмёт сильнее, но медленно; gzip (z) — баланс; для многоядерных — pigz (tar -c dir | pigz > a.tgz). Для инкрементов лучше rsync.

Не перезаписывать существующее при извлечении

--keep-old-files (ошибка, если есть) или --skip-old-files (пропустить).

Опасно

Распаковка неизвестного архива без предварительного просмотра (tar tzf) может рассыпать сотни файлов в текущий каталог поверх существующих — восстановить перезаписанное можно только из резервной копии. Распаковывай незнакомые архивы в отдельный пустой каталог (-C /tmp/x), а не туда, где уже есть важные файлы.

Термины

5
резервная копия backup copy
Копия данных для восстановления после заданного события; её полноту, доступность и восстановимость нужно проверять. Ещё встречается в: cp, docker compose, Loop-устройство, iostat и pidstat и ещё 3
проверка восстановления restore test
Практическая проверка получения требуемого состояния из резервной копии.
элемент архива archive member
Объект с именем, содержимым или метаданными, хранящийся внутри архива.
промежуточный каталог восстановления restoration staging directory
Отдельное место для распаковки и проверки восстановленных данных до замены рабочей версии.
манифест резервной копии backup manifest
Описание ожидаемых объектов копии и их существенных свойств для проверки полноты и восстановления.

См. также

  • rsync — Эффективное копирование и бэкап — только изменения, по сети и локально.
  • files-basics — Навигация и файлы — ls, cd, cp, mv, rm, cat, less, head, tail, копипаст в терминале.
Загрузка…