В отличие от архиваторов используемых в DOS, таких как PKZIP или ARJ, собирающих файлы в архивы и одновременно сжимающих их, в UNIX имеются отдельные программы позволяющие собрать файлы в архив и записать его на какое-нибудь устройство или файл и программы позволяющие сжимать отдельные файлы, причем в качестве сжимаемого файла может быть архив предварительно созданный архиватором. Далее будут рассмотрены такие программы и показаны примеры их практического использования.
Программы для объединения файлов в архивы
Внимание! Программы описанные в этом разделе только собирают файлы в архив но не сжимают его!
Указанные здесь программы могут создавать архивы либо в виде файла на диске либо на любом другом устройстве таком как накопитель на магнитной ленте или дискете. Более подробную информацию о программах можно получить с помощью команды man, например man cpio
Это наиболее распространенная программа для архивирования данных, она имеется на всех реализациях UNIX и даже есть версия для DOS - gnutar.
Формат использования:
tar <команда>[ключ] [параметры] имена_файлов
|
Описание |
|
Создание архива |
|
Извлечение данных из архива |
|
Просмотр содержимого архива |
|
Параметр | Описание |
|
нет | Позволяет просматривать детальную информацию о записываемых или извлекаемых данных, с командой t выдает полную информацию о размере файла, времени создания и т.д. |
|
имя_устройства | В качестве имя_устройства может быть указано имя устройства для накопителя на магнитной ленте (/dev/rmt/0) , дискеты (/dev/diskette) или имени файла на диске, если указать - , то в качестве устройства будет использован стандартный ввод (для команды x или t) или стандартный вывод (команда с). Если ключ f не указан то имя устройства берется из переменной $TAPE, в которой обычно хранится имя устройства для накопителя на магнитной ленте. |
|
нет | Позволяет записывать ссылки на файлы или директории так как это были бы сами эти файлы, если этот ключ не указан то в архив будет записано только что это ссылка на файл, а не его содержимое. |
tar cv *
Эта команда запишет все файлы с поддиректориями на накопитель на магнитной ленте или на устройство указанное в переменной $TAPE.
tar cvf /dev/diskette parts *tap
Эта команда запишет директорию parts и все файлы с расширением tap на дискету. Внимание! При записи таким образом все данные на дискете пропадут, потому что tar записывает данные не заботясь о файловой системе находящейся на дискете. Для того что бы записать файлы на дискету сформатированную в DOS создайте архив на диске а затем скопируйте его на дискету.
tar xvf docs.tar
Эта команда извлечет все файлы из архива docs.tar
tar cf - * | (cd /other; tar xvf -)
Эта команда копирует все файлы с поддиректориями из текущей директории в директорию /other , это бывает удобно при копировании большого количества данных из одной файловой системы в другую или при копировании по сети. Работает наглядней и быстрее чем cp -r * /other
Эта программа менее известна обычным пользователям, вероятно потому, что имеет не привычный синтаксис. cpio ожидает на стандартном вводе список файлов которые нужно записать и записывает их на стандартный вывод. Поведение программы можно изменить с помощью дополнительных ключей. Если в качестве архива задано имя устройства, например /dev/rdiskette то при его заполнении cpio запросит вставить новую дискету или ленту. Это бывает очень удобно когда нужно перенести с машины на машину не соединенных сетью небольшое количество данных около 5-10 Mb, когда не хочется связываться с накопителем на магнитной ленте.
Формат использования:
cpio -o [ключи] < имена_файлов >имя_архива
cpio -i [ключи] < имя_архива
Примеры:
ls *.tap | cpio -oB -H odc -O /dev/rdisktette
либо
ls *.tap >list
ls *.inf >>list
cpio -oB -H odc -O /dev/rdiskette <list
В первом случае команда запишет все файлы с расширением .tap на дискету, причем если одной дискеты будет недостаточно то можно будет вставить следующую. Во втором примере создается файл list, в котором указаны имена всех файлов с расширением .tap и .inf, который направляется в cpio для указания какие файлы нужно записывать. Обратите внимание на то, что для задания имен файлов используются команды перенаправления ввода и конвейер командного интерпретатора UNIX.
cpio -iduBI /dev/rdiskette
Эта команда считывает все данные записанные вышеуказанным способом с дискеты в текущую директорию.
Если в вышеуказанных примерах использовать /dev/rmt/0
вместо /dev/rdiskette то можно записывать данные на ленту.
Внимание! Программы описанные в этом разделе сжимают каждый файл в отдельности, либо стандартный ввод!
Указанные здесь программы работают так сказать в паре. Одна сжимает данные а другая распаковывает. Сжатые файлы получают дополнительное расширение, например файл some_big_file.tar после сжатия получает имя some_big_file.tar.Z. Если нужно распаковать файл то программе распаковщику можно задать имя которое было до сжатия, то есть без дополнительного расширения. Более подробную информацию о программах можно получить с помощью команды man, например man compress
Это наиболее распространенные программы для сжатия данных, она имеется на всех реализациях UNIX. Compress сжимает файлы указанные в качестве параметров, сжатые файлы получают дополнительное расширение .Z, а старые файлы удаляются, если имена файлов не указаны то данные ожидаются со стандартного ввода и будут записаны на стандартный вывод. Uncompress соответственно распаковывает файлы сжатые ранее compress'oм. Обратите внимание на то, что после распаковки сжатый файл также удаляется. Если вам необходимо иметь сжатый и несжатый файл одновременно, то можно воспользоваться еще одной программой - zcat. Эта программа распаковывает файл указанный в качестве параметра и направляет данные на стандартный вывод.
Формат использования:
compress [имена_файлов]
uncompress [имена_файлов[.Z]]
zcat <имя_файла>
Примеры:
compress *
сжимает все файлы в текущей директории
uncompress *Z
восстанавливает все файлы с расширением Z. Внимание! Если вы измените расширение у сжатого файла то uncompress не сможет его распаковать, не известно чем это обосновано, но сжатый файл обязательно должен иметь соответствующее расширение.
zcat long_file.c.Z > long.file.c
создает восстанавливает все файлы с расширением Z. Внимание! Если вы измените расширение у сжатого файла то ни uncompress ни zcat не смогут его распаковать, не известно чем это обосновано, но сжатый файл обязательно должен иметь соответствующие расширение.
Эти программы аналогичны описанным выше с той разницей, что они распространяются в рамках проекта GNU фонда свободного программного обеспечения (FSF). Эти программы были написаны, отлажены и перенесены на все имеющиеся версии UNIX и DOS/Windows. Исходные тексты можно найти в Internet'e. По сравнению с compress, gzip имеет больший набор дополнительных опций а также сжимает в полтора, два раза лучше. Принцип работы аналогичен uncompress, только сжатые файлы получают расширение .gz.
Формат использования:
gzip [ключи] [имена_файлов]
gunzip [имена_файлов[.gz]]
gzcat <имя_файла>
|
Описание |
|
Работать с вложенными поддиректориями |
|
Показывает имя файла и процент сжатия |
|
Степень сжатия (от 1 до 9), т.е. -1 - быстрое, но мин. сжатие, -9 - макс. сжатие. |
|
Краткая подсказка о ключах |
gzip -9rv *
сжимает все файлы в текущей директории и во всех вложенных директориях c максимальным сжатием и информацией о каждом сжатом файле
gunzip *gz
восстанавливает все файлы с расширением gz.
Реальные пример работы с вышеописанными программами
Рассмотрим ситуацию когда вам нужно перенести детали DUCT размером в несколько мегабайт с одной станции на другую на дискетах.
cd /dcam
перейдем в каталог, в котором находится каталог parts содержащий детали. В большинстве случаев это /dcam. Если Вы не уверены в том где у Вас хранятся детали выполните следующие команды: cd `pathname 4`; cd ..
tar cvf - parts | gzip -9 >parts.tar.gz
записывает все файлы в директории parts в архив который по мере создания подается на стандартный вывод, где в свою очередь через конвейер получается gzip'oм и сжимается. Полученный результат записывается в файл parts.tar.gz
Если размер файла получился больше размера дискеты то вам необходимо выключить систему Volume management:
/etc/init.d/volmgt stop
записать наш файл на дискеты:
ls parts.tar.gz | cpio -oBH odc -O /dev/rdiskette
и включить Volume management обратно:
/etc/init.d/volmgt start
Иначе можно записать не выключая Volume management:
ls parts.tar.gz | cpio -oBH odc -O /vol/dev/aliases/floppy0
Следующие команды выполняются на станции на которую нужно записать детали.
cd
Перейдем в свой домашний каталог
cpio -iduBI /dev/rdiskette
Как было указано выше если данные были разбиты на несколько дискет необходимо выключить Volume management как указано выше, иначе используйте /vol/dev/aliases/floppy0 вместо /dev/rdiskette
gzcat parts.tar.gz | tar xvf -
Распакуем файл на стандартный вывод и извлечем файлы из tar архива. Обратите внимание на то что tar архив существует только в конвейере. В результате у Вас получится директория parts и останется файл parts.tar.gz который в дальнейшем можно удалить.