Linux: инструменты компрессии и архивации (zip/gzip/bzip, tar/7zip/7zz)

Задачи архивации и сжатия делаются зачастую вместе для создания ужатых архивов ряда файлов. Пример чаще всего используемой мной команды (удаление исходных файлов, создание tar архива и компрессия gzip):
tar --remove-files -czf logs.tgz logs/
Создание таких ужатых архивов имеет два основных плюса: сохранение объема на носителе и более быстрое копирование на удаленную систему.
Так же есть дополнительные плюсы, например: возможность задания пароля на архив, разбиение архива на небольшие по размеру файлы (даже меньшего объема в сравнении с исходным файлом).
Compression
Тут можно посмотреть benchmark разных компрессоров (Gzip vs Bzip2 vs LZMA vs XZ vs LZ4 vs LZO) .
zip/unzip, gzip/gunzip, bzip2/bunzip2 – стандартные утилиты для компрессии/де-компресси в Linux-среде. По практике zip полезен при необходимости работы с windows, gzip шустрее ужимает, а bzip2 ужимает более качественно.
По умолчанию при компрессии исходные файлы сжимаются и не сохраняются, при декомпрессии ужатые файлы сохраняются. Дата редактирования файла не обновляется при операциях копрекссии/де.
При сжатии и разжатии можно использовать стандартные REGEXP.
gunzip temp.*.log.[1-9].gz
Oпции

-d <dir> – куда кладем файл.

zip/gzip/bzip2 -1..-9 – можно задавать compression rate. -1 имеет самый быстрый и имет alias fast, -9 лучше ужимает, но медленней имеет alias best. Влияет на время/объем, но не сильно. По умолчанию используется 6.
 -1   compress faster              -9   compress better
-1..-9       These options change the compression level used, with the -1 option being the fastest, with less compression, and the -9 option being the slowest, with optimal compression. The default compression level is 6.

Даже дефолтного уровня gzip прекрасно жмет текст.

Usage

zip/unzip

$ zip -r 3 backups
$ unzip 3.zip 
Archive: 3.zip
 inflating: 3.txt 
$ unzip 3.zip -d /tmp/
Archive: 3.zip
 inflating: /tmp/3.txt 
gzip/gunzip
# compression
$ gzip /root/anaconda-ks.cfg /root/initial-setup-ks.cfg
$ gzip -c * >files.zip # директории не сжимаются, нужно использовать tar

# decompression
$ ll /root/ | grep gz
-rw-------. 1 root root 1107 Jul 26 15:45 anaconda-ks.cfg.gz
-rw-------. 1 root root   41 Jul 26 16:16 initial-setup-ks.cfg.gz
$ gunzip /root/anaconda-ks.cfg.gz
$ gunzip -c /root/anaconda-ks.cfg.gz >/root/anaconda-ks.cfg
$ gzip -d /root/initial-setup-ks.cfg.gz # альтернатива gunzip (лучше так не делать)
bzip2/bunzip2
$ bzip2 /root/anaconda-ks.cfg /root/initial-setup-ks.cfg
$ ll /root/ | grep bz2
-rw-------. 1 root root 1228 Jul 26 15:45 anaconda-ks.cfg.bz2
-rw-------. 1 root root   14 Jul 26 16:16 initial-setup-ks.cfg.bz2
$ bunzip2 /root/anaconda-ks.cfg.bz2
$ bzip2 -d /root/initial-setup-ks.cfg.bz2
ARCHIVING
tar (tape archive), star (tar extended version, нужно ставить) и WinRAR (WIN) – инструменты по архивации (создание архива, добавление к архиву, обновление архива и извлечение из него) со встроенными возможностями по сжатию (причем разными алгоритмами, например, tar умеет сжимать и через gzip и через bzip2). Все инструменты умеют сохранять права, владельца файла, время создания и прочие атрибуты (например, SELinux file contexts).  По умолчанию при архивации исходные файлы сохраняются, а при разорхивации архив не удаляется.
TAR options
Основные опции:
f – задаем имя архива
c – создаем архив
x – извлекаем данные из архива, работает и на сжатые через -z/-j файлы, причем расширение файла не обязательно должно быть правильным аля tar.gz
t – смотрим содержимое архива, работает и на сжатые через -z/-j файлы, причем расширение файла не обязательно должно быть правильным аля tar.gz
z – сжимаем архив gzip
j – сжимаем архив bzip2
r – добавляем файл в существующий архив (не работает для сжатый архивов)
u – добавляем файл в архив если файл новее того, что есть там (не работает для сжатый архивов)
v – дебаг режим
–xattrs/–no-xattrs – сохраняем/не сохраняем расширенные атрибуты файлов
–selinux/–no-selinux – сохраняем/не сохраняем SELinux контекст
TAR usage
Создаем tarball (tar-архив) с названием /tmp/home.tar из всего содержимого директории /home/user1/.  При использовании –remove-files удаляются старые файлы после создания архива.
[root@host1 ~]# tar -cf /tmp/home.tar /home/user1/
[root@host1 ~]# tar --remove-files -cf logs.tar logs/
Создаем tarbal test.tar  из всего содержимого директории backups/internal/home/ и файла report/ddm/report_ddm_all_2014-07-28.txt
[root@host1 ~]# tar -cf test.tar backups/internal/home/ report/ddm/report_ddm_all_2014-07-28.txt
Добавляем файл “v” и директорию /home/redkin.p/bin/ в test.tar
[root@host1 ~]# tar -rf test.tar v /home/redkin.p/bin/
Добавляем файлы в архив используя append (не работает с сжатыми gzip файлами).
[root@host1 ~]# tar --append -f test.tar file1 file2 file3
Смотрим содержимое архива test.tar
[root@host1 ~]#  tar -tf test.tar
Извлекаем файлы из архива test.tar в текущую директорию (архив не удаляется)
[root@host1 ~]#  tar -xf ~/test.tar
Извлекаем файлы из архива test.tar в директорию test
[root@host1 ~]# tar -xf ~/test.tar -C test/
Создаем tarball из всей директории и сжимаем файлы в нем через gzip (разные вариации расширений/исполнений)
[root@host1 ~/temp]# tar -czf test.tgz *
[root@host1 ~/temp]# tar -czf test2.tar.gz *
[root@host1 ~/temp]# tar -czf test3.tgz ~/temp
[root@host1 ~/temp]# tar -czf test4.tgz /root/dir/
Создаем tarball test.tar.gz из всей директории /home, сохраняем все атрибуты, сжимаем через gzip
[root@host1 ~]# tar --selinux --xattrs -czf ~/test.tar.gz ~/
7-Zip 7zip usage

7-zip хорош – поддерживает шифрование с парольным доступном (как WinRar) и разбивку файлов на несколько (напр. позволяет обойти ограничение облака в размере файла).

Для MacOS официально поддерживается консольная версия.

Extract
7z e archive.tar

# MACOS
./7zz x ~/Downloads/archive/Win10_1909_Russian_x64.7z.001
7zz x test.7z -pPass -o/output_dir/
TAR + ZIP with password

Архивируем и защищаем на базовом! уровне паролем на zip

tar -cf files.tar files/
zip -e files.tar.zip files.tar

Leave a Reply