Программы gzip, bzip2, xz предназначены для сжатия одиночных файлов. Сжатые файлы имеют расширения .gz, bz2, xz соответственно. Кроме того, распознаются расширения .tgz, .tbz, .txz, являющиеся сокращением от двойных расширений .tar.gz, .tar.bz2, .tar.xz.
Для распаковки используются эти же программы с опцией -d
(decompress).
При сжатии файла оригинальный файл удаляется и создается сжатый файл, к имени которого добавляется соответствующее расширение. При распаковке расширение отбрасывается, создается несжатый файл, а сжатый файл удаляется. Исключением являются случаи, когда имя файла не задано, вместо имени файла стоит "-" или дополнительно к имени файла опция -c
. В первых двух случаях исходные данные читаются со стандартного ввода, а результат выводится на стандартный вывод, в третьем - исходные данные читаются из файла, файл не удаляется, результат выводится на стандартный вывод.
Если результат сжатия должен быть выведен на экран терминала, то программа сжатия завершается с ошибкой, чтобы не выводить данные, не предназначенные для просмотра человеком.
У программ сжатия есть альтернативные имена. Запуск по этим именам эквивалентен запуску с некоторым набором опций.
gunzip
, bunzip2
, unxz
= запуск с опцией -d
zcat
, bzcat
, xzcat
= запуск с опцией -c
Вспомогательные программы:
zmore file.gz
= zcat file.gz | more
zgrep file.gz text
= zcat file.gz | grep text
zdiff file1.gz file2.gz
= zcat file1.gz > /tmp/xxfile1; zcat file2.gz > /tmp/xxfile2; diff /tmp/xxfile1 /tmp/xxfile2; rm /tmp/xxfile1 /tmp/xxfile2
Сжатие файла
gzip file
Распаковка файла
gzip -d file.gz
Сжатие "на лету"
echo Test | gzip > test.gz
Распаковка в стандартный вывод и подсчет строк в распакованном потоке
gzip -d -c test.gz | wc -l
Архиватор tar (Tape ARchiver) изначально предназначен для создания архивов файлов на магнитных лентах. При архивировании после списка опций указываются имена файлов и каталогов, которые надо поместить в архив. Для того, чтобы указать файл архива, используется опция -f имя_файла (обычного или файла-устройства). Если вместо имени файла указан "-", то для ввода/вывода архива используется стандартный ввод/вывод.
Каждый файл в архиве предваряется заголовком, содержащим имя файла, права доступа, владельца и группу владельцев файла (в текстовом представлении) и другие атрибуты файла. При извлечении файла из архива атрибуты по возможности восстанавливаются.
Основные операции с архивом задаются соответствующими опциями :
-с
– Создать архив (Create)
-t
– Проверить архив и выдать список заархивированых файлов (Test)
-x
– Извлечь файлы из архива (eXtract)
Дополнительные опции, используемые совместно с опциями операций:
-v
– Печатать информацию о процессе архивирования/извлечения файлов
-z
– Использовать gzip
для дополнительного сжатия/распаковки архива
-j
– Использовать bzip2
для дополнительного сжатия/распаковки архива
-J
– Использовать xz
для дополнительного сжатия/распаковки архива (только последние версии)
Новые версии gnutar
умеют при извлечении файлов из архива определять программу сжатия автоматически. Для старых версий требуется явно указывать опцию. Версии tar
из коммерческих вариантов Unix вообще не поддерживают опции сжатия и требуют построения конвейера из программы сжатия и архиватора tar
.
Опции можно писать без знака минус и писать несколько опций вместе, начиная с опции операции и заканчивая опцией задания файла архива.
Заархивировать каталог /etc в архив etc.tar
tar cf etc.tar /etc
Заархивировать каталог /etc в архив etc.tbz, на лету сжимая архив программой bzip2 и выдавая в процессе архивирования имена обрабатываемых файлов
tar cjvf etc.tbz /etc
Выдать содержимое архива etc.tbz
tar tf etc.tbz
- современная версия tar
tar tjf etc.tbz
- более ранние версии tar
Распаковать архив etc.tgz в современной версии tar
tar xf etc.tgz
Распаковать архив, сжатый программой xz, версией tar без встроенной поддержки этого формата
xzcat etc.txz | tar xf -
Переслать каталог с вложенными файлами и подкаталогами в домашний каталог пользователя user на компьютер remotehos.example, используя программу ssh
tar cf - mydir/ | ssh user@remotehos.example tar xf -
Программа cpio (CoPy In/Out) предназначена для чтения файлов из архива (In) и записи файлов в архив (Out), а также для копирования файлов из каталога в каталог (Pass through). По умолчанию чтение/запись архива производится через стандартный ввод/вывод. Чтобы явно указать файл архива, используется опция -F
. В программу встроены средства удаленного протокола через rsh
или ssh
. Для работы с архивом на удалённой машине он задаётся в формате -F user@host:file
. Для администраторов Linux'a программа интересна тем, что с её помощью создаются установочные пакеты формата RPM и образы начальной загрузки initrd
.
Основные опции:
cpio -i -d < <archive>
– чтение архива со стандартного ввода. Дополнительная опция -d указывает, что надо создавать структуру подкаталогов, сохраненную в архиве.
find . -depth -print0 | cpio -o --null > <archive>
– чтение имен файлов со стандартного ввода и вывод архива на стандартный вывод. Опция -print0
команды find
и --null
команды cpio
указывают на то, что в качестве разделителя имён файлов используется нулевой символ '\0'. Это позволяет корректно отработать имена, содержащие пробелы, табуляции и переводы строк.
find . -name z\* -depth -print0 | cpio -p --null -d /tmp
– скопировать все файлы с именами на букву z из текущего каталога с подкаталогами в каталог /tmp
. Опция -d
указывает, что в целевом каталоге надо создавать необходимые подкаталоги.