Работа с архивами в Linux: различия между версиями

Материал из sysadm
Перейти к навигации Перейти к поиску
Строка 10: Строка 10:
 
-J использовать xz
 
-J использовать xz
 
-C <path> меняет текущий каталог на указанный для следующих далее параметров, в одной команде может использоваться несколько раз
 
-C <path> меняет текущий каталог на указанный для следующих далее параметров, в одной команде может использоваться несколько раз
-f <path_to_arch_file> файл архива, можно использовать вместо перенаправления потока
+
-f <path_to_arch_file> направляет поток архивируемых данных у указанный файл, по умолчанию направляется на стандартный вывод
 
</pre>
 
</pre>
  
Утилиты сжатия, принимают данные из стандартного входа и выдают результат на стандартный выход
+
'''Утилиты сжатия'''
* gzip - жмет быстро но слабо
+
<pre>
* xz - жмет хорошо но медленно
+
# gzip - использует метод сжатия zip, жмет быстро но слабо
 +
# xz - использует метод сжатия lzma, жмет хорошо но медленно
  
По умолчанию данные сжимаются, для обратного процесса используется опция -d (--decompress)
+
# сжатие данных из стандартного ввода и направление результата на стандартный вывод
 +
cat /path/to/file | gzip > /path/to/file.gz
 +
cat /path/to/file | xz  > /path/to/file.xz
 +
 
 +
# сжатие файлов
 +
# указанные файлы сжимаются с добавлением соответствующего расширения, исходные файлы удаляются
 +
gzip /path/to/file
 +
xz  /path/to/file
 +
 
 +
# для распаковки используется опция -d (--decompress)
 +
cat /path/to/file.gz | gzip -d > /path/to/file
 +
cat /path/to/file.xz | xz -d  > /path/to/file
 +
gzip -d /path/to/file.gz
 +
xz  -d /path/to/file.xz
 +
 
 +
</pre>
  
 
'''Архивация'''
 
'''Архивация'''

Версия 03:05, 24 июля 2025

часто используемые

В Linux классические утилиты архивации и сжатия данных разделены.

Команда tar архивирует каталоги в один файл без сжатия, хотя в ней есть опции позволяющие задействовать утилиты сжатия.

-c создание архива
-x распаковка архива
-v подробно выводить информацию
-z использовать gzip
-J использовать xz
-C <path> меняет текущий каталог на указанный для следующих далее параметров, в одной команде может использоваться несколько раз
-f <path_to_arch_file> направляет поток архивируемых данных у указанный файл, по умолчанию направляется на стандартный вывод

Утилиты сжатия

# gzip - использует метод сжатия zip, жмет быстро но слабо
# xz - использует метод сжатия lzma, жмет хорошо но медленно

# сжатие данных из стандартного ввода и направление результата на стандартный вывод
cat /path/to/file | gzip > /path/to/file.gz
cat /path/to/file | xz   > /path/to/file.xz

# сжатие файлов
# указанные файлы сжимаются с добавлением соответствующего расширения, исходные файлы удаляются
gzip /path/to/file
xz   /path/to/file

# для распаковки используется опция -d (--decompress)
cat /path/to/file.gz | gzip -d > /path/to/file
cat /path/to/file.xz | xz -d   > /path/to/file
gzip -d /path/to/file.gz
xz   -d /path/to/file.xz

Архивация

# идентичные команды без сжатия
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 ./

Разреженные файлы (sparse)

# в архиве файлы сохраняется как sparse
# при восстановлении из такого архива файлы будут записываться на диск как sparse, даже если опция --sparse не указана
tar --sparse -cJvf /home/user/archive.tar.xz ./

# (не проверено) предположительно будет восстанавливать все файлы с конвертацией в sparse, даже если архивировались без sparse
tar --sparse -xJvf /home/user/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