Работа с архивами в Linux: различия между версиями
Перейти к навигации
Перейти к поиску
Admin (обсуждение | вклад) |
Admin (обсуждение | вклад) |
||
| (не показано 8 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
| − | |||
| − | |||
| − | + | = Разделение функций = | |
| + | |||
| + | Разделение функций сжатия и каталогизации дает большую гибкость. Утилиты сжатия потока данных можно применять для сжатия проходящего трафика и прочих потоковых операций. | ||
| + | |||
| + | Но есть и недостаток, проблематично добавлять или изменять файлы в больших сжатых каталогизированных архивах. Для этих целей лучше использовать комплексные архиваторы zip или 7zip. | ||
| + | |||
| + | == Утилиты сжатия данных == | ||
| + | <pre> | ||
| + | # 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 | ||
| + | |||
| + | </pre> | ||
| + | |||
| + | == Утилиты каталогизации == | ||
| + | |||
| + | '''tar''' | ||
<pre> | <pre> | ||
| + | # основные опции команды tar | ||
-c создание архива | -c создание архива | ||
-x распаковка архива | -x распаковка архива | ||
| Строка 9: | Строка 38: | ||
-z использовать gzip | -z использовать gzip | ||
-J использовать xz | -J использовать xz | ||
| − | -C <path> | + | -C <path> меняет текущий каталог на указанный для следующих далее параметров, в одной команде может использоваться несколько раз |
| − | -f <path_to_arch_file> файл | + | -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 - | + | tar -xz /path/to/archive.tar.gz |
| − | tar -C / | + | tar -C /path/to/dir -xJvf /path/to/archive.tar.xz |
| + | cat /path/to/archive.tar.gz | tar -С /path/to/dir -xz | ||
| − | # | + | # аналоги команд без использования опций сжатия |
| − | tar - | + | tar -c /path/to/dir | gzip > archive.tar.gz |
| − | tar - | + | tar -cv /path/to/dir | xz > /path/to/archive.tar.xz |
| − | tar -C / | + | cat /path/to/archive.tar.gz | gzip -d | tar -x |
| + | cat /path/to/archive.tar.xz | xz -d | tar -C /path/to/dir -xv | ||
| + | cat /path/to/archive.tar.gz | gzip -d | tar -С /path/to/dir -x | ||
| − | # | + | # при работе с сжатыми данными использовать опцию -f без опций сжатия крайне не эффективно |
| − | tar - | + | # например, так мы сначала записываем несжатые данные в файл, а потом его заново читаем и заново пишем уже в сжатый файл |
| − | + | tar -cvf /path/to/archive.tar /path/to/dir | |
| − | + | xz /path/to/archive.tar | |
| − | # в | + | # в данном случае нужно либо не использовать опцию -f |
| − | # | + | # либо использовать опцию -f с опцией сжатия |
| − | tar | + | tar -cv /path/to/dir | xz > /path/to/archive.tar.xz |
| + | tar -cJvf /path/to/archive.tar.xz /path/to/dir | ||
| − | |||
| − | |||
</pre> | </pre> | ||
| − | ''' | + | '''Разреженные файлы (sparse)''' |
<pre> | <pre> | ||
| − | # | + | # tar поддерживает работу с разряженными (sparse) файлами |
| − | |||
| − | |||
| − | |||
| − | |||
| − | # | + | # в архиве файлы сохраняется как sparse |
| − | + | # при восстановлении из такого архива файлы будут записываться на диск как sparse, даже если опция --sparse не указана | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | # (проверено) если упаковать sparse файлы с указанием опции --sparse, то при восстановлении они будут восстанавливаться как sparse, даже если эта опция не указана в команде восстановления | |
| + | tar --sparse -cJvf /path/to/archive.tar.xz /path/to/dir | ||
| − | + | # (не проверено) будут ли записываться в tar файл пустые области sparse файлов, если указана опция --sparse? | |
| + | # (не проверено) будут ли записываться в tar файл пустые области не sparse файлов, если указана опция --sparse? | ||
| − | + | # (не проверено) если файлы упакованы в tar без указания опции --sparse, а при восстановлении эта опция указана, будут ли все файлы восстанавливаться как sparse? | |
| − | + | tar --sparse -xJvf /home/user/archive.tar.xz | |
| − | |||
</pre> | </pre> | ||
| − | + | '''cpio''' | |
| − | |||
<pre> | <pre> | ||
| + | # cpio это более древний аналог tar | ||
| + | |||
# вывод списка файлов в архиве | # вывод списка файлов в архиве | ||
cpio -it -F file.cpio | cpio -it -F file.cpio | ||
| Строка 79: | Строка 126: | ||
# распаковать архив в текущую директорию | # распаковать архив в текущую директорию | ||
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> | ||
Текущая версия на 05:01, 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 # аналоги команд без использования опций сжатия tar -c /path/to/dir | gzip > archive.tar.gz tar -cv /path/to/dir | xz > /path/to/archive.tar.xz cat /path/to/archive.tar.gz | gzip -d | tar -x cat /path/to/archive.tar.xz | xz -d | tar -C /path/to/dir -xv cat /path/to/archive.tar.gz | gzip -d | tar -С /path/to/dir -x # при работе с сжатыми данными использовать опцию -f без опций сжатия крайне не эффективно # например, так мы сначала записываем несжатые данные в файл, а потом его заново читаем и заново пишем уже в сжатый файл tar -cvf /path/to/archive.tar /path/to/dir xz /path/to/archive.tar # в данном случае нужно либо не использовать опцию -f # либо использовать опцию -f с опцией сжатия tar -cv /path/to/dir | xz > /path/to/archive.tar.xz tar -cJvf /path/to/archive.tar.xz /path/to/dir
Разреженные файлы (sparse)
# tar поддерживает работу с разряженными (sparse) файлами # в архиве файлы сохраняется как sparse # при восстановлении из такого архива файлы будут записываться на диск как sparse, даже если опция --sparse не указана # (проверено) если упаковать sparse файлы с указанием опции --sparse, то при восстановлении они будут восстанавливаться как sparse, даже если эта опция не указана в команде восстановления tar --sparse -cJvf /path/to/archive.tar.xz /path/to/dir # (не проверено) будут ли записываться в tar файл пустые области sparse файлов, если указана опция --sparse? # (не проверено) будут ли записываться в tar файл пустые области не sparse файлов, если указана опция --sparse? # (не проверено) если файлы упакованы в tar без указания опции --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