Работа с архивами в Linux
часто используемые
В Linux классические утилиты архивации и сжатия данных разделены.
Команда tar архивирует каталоги в один файл без сжатия, хотя в ней есть опции позволяющие задействовать утилиты сжатия.
-c создание архива -x распаковка архива -v подробно выводить информацию -z использовать gzip -J использовать xz -C <path> на время выполнения команды меняет текущий каталог на указанный -f <path_to_arch_file> файл архива, можно использовать вместо перенаправления потока
Утилиты сжатия, принимают данные из стандартного входа и выдают результат на стандартный выход
- gzip - жмет быстро но слабо
- xz - жмет хорошо но медленно
По умолчанию данные сжимаются, для обратного процесса используется опция -d (--decompress)
Архивация
# идентичные команды без сжатия tar -C /home/user -cv ./ > archive.tar tar -C /home/user -cvf archive.tar ./ # идентичные команды сжатия gzip tar -C /home/user -cv ./ | gzip > archive.tar.gz tar -C /home/user -czv ./ > archive.tar.gz tar -C /home/user -czvf archive.tar.gz ./ # идентичные команды сжатия xz tar -C /home/user -cv ./ | xz > archive.tar.xz tar -C /home/user -cJv ./ > archive.tar.xz tar -C /home/user -cJvf archive.tar.xz ./
Распаковка
# идентичные команды распаковки gzip cat archive.tar.gz | gzip -d | tar -C /home/user -xv zcat archive.tar.gz | tar -C /home/user -xv cat archive.tar.gz | tar -C /home/user -xzv tar -C /home/user -xzvf archive.tar.gz # идентичные команды распаковки xz cat archive.tar.xz | xz -d | tar -C /home/user -xv xzcat archive.tar.xz | tar -C /home/user -xv cat archive.tar.xz | tar -C /home/user -xJv tar -C /home/user -xJvf archive.tar.xz
Разделение функций дает большую гибкость. Утилиты сжатия потока данных можно применять для сжатия проходящего трафика и прочих потоковых операциях.
Но есть и недостаток. Проблематично добавлять или изменять файлы в больших сжатых архивах. Для этих целей лучше использовать другие форматы архивов и другие утилиты совмещающие в себе функции архивации и сжатия. Например, zip или 7zip.
zip -r arch.zip /home/user 7za a arch.7z /home/user
cpio
cpio это более древний аналог tar
# вывод списка файлов в архиве cpio -it -F file.cpio # создать архив ls | cpio -ov > archive.cpio # распаковать архив в текущую директорию cpio -idv < /path/to/archiv.cpio