Руководство по команде tar в Linux: создание, сжатие и распаковка архивов

Бесплатная консультация юриста

+7 (800) 301-07-30

Реклама jurik.ru

В Linux утилита tar (от tape archive) является стандартным инструментом для упаковки файлов и каталогов в один архивный файл. В отличие от простого копирования, tar сохраняет структуру каталогов, права доступа, владельцев и временные метки. При необходимости архив можно дополнительно сжать с помощью gzip, bzip2 или xz.

Синтаксис базовой команды

tar -[ключи] <имя_архива> <путь_к_файлам_или_каталогам>

Где:

  • -c – create, создать новый архив.
  • -x – extract, извлечь содержимое архива.
  • -t – list, показать список файлов в архиве.
  • -v – verbose, выводить процесс в терминал (полезно для наблюдения).
  • -f – указывает имя файла архива (обязательно, если работа идёт с файлом, а не со стандартным вводом/выводом).
  • -z – сжать/разжать архив с помощью gzip (получаем .tar.gz или .tgz).
  • -j – использовать bzip2 (получаем .tar.bz2).
  • -J – использовать xz (получаем .tar.xz).

Примеры создания архивов

Простой TAR‑архив без сжатия

tar -cvf backup.tar /home/dmosk

Создаётся файл backup.tar, содержащий всю домашнюю директорию пользователя dmosk. Параметр -v выводит каждый добавляемый файл.

Архив с сжатием gzip (.tar.gz)

tar -czvf archive.tar.gz /home/dmosk

Ключ -z указывает tar использовать gzip для сжатия. В результате получаем файл archive.tar.gz (иногда называют .tgz).

Архив с сжатием bzip2 (.tar.bz2)

tar -cjvf archive.tar.bz2 /home/dmosk

Ключ -j переключает сжатие на bzip2. Этот метод обычно даёт лучшее сжатие, но работает медленнее.

Архив с сжатием xz (.tar.xz)

tar -cJvf archive.tar.xz /home/dmosk

Ключ -J использует xz – современный алгоритм с высоким коэффициентом сжатия.

Создание архива и передача его по сети

Часто требуется создать архив «на лету» и сразу отправить его на удалённый сервер. Это удобно, так как не оставляет промежуточных файлов на диске.

Разбор команды:

  • -czvf - – создаём архив в поток - (stdout) и сразу сжимаем gzip.
  • Пайп | передаёт поток в ssh.
  • На удалённом сервере cat > /backup/www_backup.tar.gz сохраняет полученный поток в файл.

Извлечение файлов из архива

Распаковать весь архив в текущий каталог

tar -xvf backup.tar

Распаковать gzip‑архив в указанный каталог

tar -xzvf archive.tar.gz -C /restore/path

Ключ -C задаёт целевой каталог, куда будет произведено извлечение.

Просмотр содержимого без распаковки

tar -tvf archive.tar.gz

Полезные комбинации ключей

Комбинация Назначение
-cvf Создать архив без сжатия
-czvf Создать архив и сжать gzip
-cjvf Создать архив и сжать bzip2
-cJvf Создать архив и сжать xz
-xvf Распаковать архив без сжатия
-xzvf Распаковать gzip‑архив
-xjvf Распаковать bzip2‑архив
-xJvf Распаковать xz‑архив

Часто задаваемые вопросы

  1. Можно ли добавить файлы в уже существующий архив?
    Да. Для этого используется ключ -r (append) или -u (update). Пример:
    tar -rvf backup.tar newfile.txt
  2. Как проверить целостность архива?
    Команда tar -tvf archive.tar.gz выводит список файлов; если она завершилась без ошибок, архив, как правило, цел.
  3. Что делать, если архив слишком большой для одного диска?
    Можно разбить его на части с помощью split:
    tar -czf ⸺ /big/data | split -b 2G ⸺ archive_part_

    Для восстановления:

    cat archive_part_* | tar -xzvf -
  4. Можно ли зашифровать архив?
    Встроенного шифрования в tar нет, но можно использовать gpg:
    tar -czf ⎯ /home/dmosk | gpg -c -o backup.tar.gz.gpg

Лучшие практики при работе с TAR

  • Всегда указывайте абсолютный путь к архивируемым данным, чтобы избежать неожиданного включения лишних файлов.
  • Проверяйте права доступа после распаковки, особенно если архив создавался от root.
  • Не храните пароли в скриптах. При удалённом копировании используйте SSH‑ключи.
  • Отключайте вывод -v в автоматических скриптах, чтобы не засорять логи.
  • Регулярно проверяйте резервные архивы командой tar -tvf и, при возможности, делайте тестовое восстановление.

Пример скрипта резервного копирования

#!/bin/bash

DATE=$(date +%Y-%m-%d_%H-%M-%S)
ARCHIVE="/backup/home_${DATE}.tar.gz"
SOURCE="/home/dmosk"

tar -czf "$ARCHIVE" "$SOURCE"

if [ $? -eq 0 ]; then
 echo "Резервная копия успешно создана: $ARCHIVE"
else
 echo "Ошибка при создании резервной копии!" >&2
 exit 1
fi

find /backup -name "home_*.tar.gz" -mtime +30 -delete

Скрипт можно добавить в cron для ежедневного выполнения.

Утилита tar – мощный и гибкий инструмент для создания архивов в Linux. С помощью небольшого набора ключей (-c, -x, -z, -j, -J, -v, -f) можно быстро упаковать любые файлы, сжать их, передать по сети и восстановить в любой момент. Следуя рекомендациям, приведённым в этой статье, вы сможете надёжно хранить резервные копии и эффективно управлять архивами в своих проектах.


Текущая дата и время: 20:34:28