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

Материал из sysadm
Перейти к навигации Перейти к поиску
Строка 1: Строка 1:
= часто используемые =
 
В Linux классические утилиты архивации и сжатия данных разделены.
 
  
Команда tar архивирует каталоги в один файл без сжатия, хотя в ней есть опции позволяющие задействовать утилиты сжатия.
+
= Разделение функций =
<pre>
+
 
-c создание архива
+
Разделение функций сжатия и каталогизации дает большую гибкость. Утилиты сжатия потока данных можно применять для сжатия проходящего трафика и прочих потоковых операций.
-x распаковка архива
+
 
-v подробно выводить информацию
+
Но есть и недостаток. Проблематично добавлять или изменять файлы в больших сжатых архивах. Для этих целей лучше использовать комплексные архиваторы zip или 7zip.
-z использовать gzip
 
-J использовать xz
 
-C <path> меняет текущий каталог на указанный для следующих далее параметров, в одной команде может использоваться несколько раз
 
-f <path_to_arch_file> направляет поток архивируемых данных у указанный файл, по умолчанию направляется на стандартный вывод
 
</pre>
 
  
'''Утилиты сжатия'''
+
== Утилиты сжатия данных ==
 
<pre>
 
<pre>
 
# gzip - использует метод сжатия zip, жмет быстро но слабо
 
# gzip - использует метод сжатия zip, жмет быстро но слабо
Строка 35: Строка 28:
 
</pre>
 
</pre>
  
'''Архивация'''
+
== Утилиты каталогизации ==
 +
 
 +
'''tar'''
 
<pre>
 
<pre>
# идентичные команды без сжатия
+
# основные опции команды tar
tar -C /home/user -cv ./ > archive.tar
+
-c создание архива
tar -C /home/user -cvf archive.tar ./
+
-x распаковка архива
 +
-v подробно выводить информацию
 +
-z использовать gzip
 +
-J использовать xz
 +
-C <path> меняет текущий каталог на указанный для следующих далее параметров, в одной команде может использоваться несколько раз
 +
-f <path_to_arch_file> направляет поток архивируемых данных у указанный файл, по умолчанию направляется на стандартный вывод
 +
 
 +
# упаковка каталога без сжатия и направление данных на стандартный вывод
 +
tar -c /path/to/dir > archive.tar
 +
 
 +
# упаковка каталога без сжатия и направление данных в файл архива
 +
tar -cf /path/to/archive.tar /path/to/dir
 +
 
 +
# упаковка списка каталогов
 +
tar -cf /path/to/archive.tar \
 +
  /path/to/dir1 \
 +
  /path/to/dir2 \
 +
  /path/to/dir3
  
# идентичные команды сжатия gzip
+
# упаковка отдельных файлов и подкаталогов из разных каталогов
tar -C /home/user -cv ./ | gzip > archive.tar.gz
+
tar -cf /path/to/archive.tar \
tar -C /home/user -czv ./ > archive.tar.gz
+
  -С /path/to/dir1 file1 subdir2 file3 \
tar -C /home/user -czvf archive.tar.gz ./
+
  -C /path/to/dir2 file4 file5 subdir6 \
 +
 
 +
# распаковка файла архива в текущий каталог
 +
tar -xf /path/to/archive.tar
 +
 
 +
# распаковка файла архива в указанный каталог
 +
tar -C /path/to/dir -xf /path/to/archive.tar
 +
 
 +
# распаковка входящего потока в текущий каталог
 +
cat /path/to/archive.tar | tar -x
 +
 
 +
# распаковка входящего потока в указанный каталог
 +
cat /path/to/archive.tar | tar -С /path/to/dir -x
 +
 
 +
# для упаковки/распаковки со сжатием и детальной информации, используйте соответствующие опции
 +
tar -cz /path/to/dir > archive.tar.gz
 +
tar -cJvf /path/to/archive.tar.xz /path/to/dir
 +
tar -xz /path/to/archive.tar.gz
 +
tar -C /path/to/dir -xJvf /path/to/archive.tar.xz
 +
cat /path/to/archive.tar.gz | tar -С /path/to/dir -xz
  
# идентичные команды сжатия 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 ./
 
 
</pre>
 
</pre>
  
Строка 62: Строка 89:
 
</pre>
 
</pre>
  
'''Распаковка'''
+
'''cpio'''
<pre>
 
# идентичные команды распаковки 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
 
</pre>
 
 
 
Разделение функций дает большую гибкость. Утилиты сжатия потока данных можно применять для сжатия проходящего трафика и прочих потоковых операциях.
 
 
 
Но есть и недостаток. Проблематично добавлять или изменять файлы в больших сжатых архивах. Для этих целей лучше использовать другие форматы архивов и другие утилиты совмещающие в себе функции архивации и сжатия. Например, zip или 7zip.
 
 
 
 
<pre>
 
<pre>
zip -r arch.zip /home/user
+
# cpio это более древний аналог tar
7za a arch.7z /home/user
 
</pre>
 
  
= cpio =
 
cpio это более древний аналог tar
 
<pre>
 
 
# вывод списка файлов в архиве
 
# вывод списка файлов в архиве
 
cpio -it -F file.cpio
 
cpio -it -F file.cpio
Строка 97: Строка 101:
 
# распаковать архив в текущую директорию
 
# распаковать архив в текущую директорию
 
cpio -idv < /path/to/archiv.cpio
 
cpio -idv < /path/to/archiv.cpio
 +
</pre>
 +
 +
== Потоковые команды со сжатием ==
 +
<pre>
 +
# zcat  - использует gzip
 +
# xzcat - использует xz
 +
 +
# направление файла на стандартный вывод с одновременной распаковкой gzip
 +
zcat /path/to/file.txt.gz | grep 'patern'
 +
# эквивалент
 +
cat /path/to/file.txt.gz | gzip -d | grep 'patern'
 +
 +
# направление файла на стандартный вывод с одновременной распоковкой xz
 +
xzcat /path/to/file.txt.xz | grep 'patern'
 +
# эквивалент
 +
cat /path/to/file.txt.xz | xz -d | grep 'patern'
 +
</pre>
 +
 +
= Комплексные утилиты архивации =
 +
<pre>
 +
zip -r arch.zip /home/user
 +
7za a arch.7z /home/user
 
</pre>
 
</pre>

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

Разделение функций

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

Но есть и недостаток. Проблематично добавлять или изменять файлы в больших сжатых архивах. Для этих целей лучше использовать комплексные архиваторы zip или 7zip.

Утилиты сжатия данных

# 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

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

# упаковка каталога без сжатия и направление данных на стандартный вывод
tar -c /path/to/dir > archive.tar

# упаковка каталога без сжатия и направление данных в файл архива
tar -cf /path/to/archive.tar /path/to/dir

# упаковка списка каталогов
tar -cf /path/to/archive.tar \
  /path/to/dir1 \
  /path/to/dir2 \ 
  /path/to/dir3

# упаковка отдельных файлов и подкаталогов из разных каталогов
tar -cf /path/to/archive.tar \
  -С /path/to/dir1 file1 subdir2 file3 \
  -C /path/to/dir2 file4 file5 subdir6 \ 

# распаковка файла архива в текущий каталог
tar -xf /path/to/archive.tar

# распаковка файла архива в указанный каталог
tar -C /path/to/dir -xf /path/to/archive.tar

# распаковка входящего потока в текущий каталог
cat /path/to/archive.tar | tar -x

# распаковка входящего потока в указанный каталог
cat /path/to/archive.tar | tar -С /path/to/dir -x

# для упаковки/распаковки со сжатием и детальной информации, используйте соответствующие опции
tar -cz /path/to/dir > archive.tar.gz
tar -cJvf /path/to/archive.tar.xz /path/to/dir
tar -xz /path/to/archive.tar.gz
tar -C /path/to/dir -xJvf /path/to/archive.tar.xz
cat /path/to/archive.tar.gz | tar -С /path/to/dir -xz

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

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

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

cpio

# cpio это более древний аналог tar

# вывод списка файлов в архиве
cpio -it -F file.cpio

# создать архив
ls | cpio -ov > archive.cpio

# распаковать архив в текущую директорию
cpio -idv < /path/to/archiv.cpio

Потоковые команды со сжатием

# zcat  - использует gzip
# xzcat - использует xz

# направление файла на стандартный вывод с одновременной распаковкой gzip
zcat /path/to/file.txt.gz | grep 'patern'
# эквивалент
cat /path/to/file.txt.gz | gzip -d | grep 'patern'

# направление файла на стандартный вывод с одновременной распоковкой xz
xzcat /path/to/file.txt.xz | grep 'patern'
# эквивалент
cat /path/to/file.txt.xz | xz -d | grep 'patern'

Комплексные утилиты архивации

zip -r arch.zip /home/user
7za a arch.7z /home/user