Вики / Базовые команды
tar (архивы)
Создание и распаковка архивов tar/gz/xz; бэкап каталогов.
tar собирает дерево файлов в один архив (.tar), часто со сжатием (.tar.gz,
.tar.xz). Мнемоника флагов: create / extract / tlist, verbose,
file, z=gzip, j=bzip2, J=xz.
| Ключ | Значение |
|---|---|
c / x / t |
создать / извлечь / показать список |
f FILE |
имя архива (всегда последним в группе) |
v |
подробно (список файлов) |
z / j / J |
gzip / bzip2 / xz |
-C DIR |
сменить каталог (куда извлекать / откуда паковать) |
--exclude=PAT |
исключить по шаблону |
-p |
сохранить права (для root по умолч.) |
--strip-components=N |
срезать N верхних каталогов при извлечении |
-a |
выбрать сжатие по расширению f автоматически |
# создать
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)
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 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 каталог
См. также
- Базовые команды с файлами — Базовые команды
- rsync (синхронизация) — Базовые команды