В.А.Костромин

ОС Linux на Вашем персональном компьютере


Назад Вернуться к оглавлению. Далее

5. Интерфейс командной строки (продолжение)

5.10. Некоторые употребительные команды
5.11. Работа с архиваторами
5.11.1. Программа tar
5.11.2. Программа gzip
5.11.3. Программа bzip2

5.10. Некоторые употребительные команды

Итак, мы рассмотрели в предыдущем подразделе работу с оболочкой и написание скриптов. При создании скриптов в той или иной мере используются как встроенные команды оболочки, так и утилиты, которые существуют в системе в виде отдельных программ. Несколько часто применяемых утилит (команд) уже были рассмотрены в предыдущих разделах. Полное описание всех команд заняло бы целую книгу. Даже краткие описания, подобные приведенным выше, занимают слишком много места. Однако, имея в виду начинающего пользователя, необходимо привести хотя бы перечень команд, которые применяются для выполнения основных действий в системе. Дадим такую сводку в виде следующей таблицы (команды, уже упоминавшиеся в тексте, здесь не повторяются):

Команда
Основное назначение
at Запуск заданий в определенное время
cal Выводит календарь
clear Очищает экран терминала
cmp Сравнивает два файла
cpio Архивирует файлы или извлекает их из архива
cron Процесс-демон таймера (служит для выполнения заданий в определенное время)
crypt Шифрование/дешифрование паролей и данных
date Вывод и изменение текущей системной даты и времени
diff Сравнение двух текстовых файлов
echo Выводит аргумент в стандартный вывод
head Выводит заданное число строк из начала текстового файла в стандартный вывод
kill Удаляет зависшие или почему-либо ненужные из выполняющихся заданий
lpr Вывод заданного файла на печать
dir, vdir Вывод содержимого (списка файлов и подкаталогов) текущего каталога
mail Программа обработки (прием и передача) электронной почты 
messg Разрешает или запрещает прием сообщений от других пользователей
ps Выводит отчет о состоянии активных процессов
set Выводит значение переменной окружения или присваивает переменной новое значение
sort Сортирует строки текстового файла
tail Выводит заданное число строк из конца текстового файла в стандартный вывод
time Эта команда служит для запуска другой команды и измерения ресурсов компьютера, использованных этой другой программой (времени, памяти и системных вызовов)
wc Служит для подсчета числа байт, слов или строк в файле
write Отправка сообщения другому пользователю

Между прочим, Вы можете воспользоваться командой apropos (она описана в разделе 5.1.1) для того, чтобы получить список всех команд, имеющихся в системе и начинающихся на определенную букву (символ). Например, по команде
        apropos ^a
будет выдан список команд, имена которых начинаются на "a" (символ ^ перед шаблоном поиска указывает, что шаблон должен стоять в начале искомых имен команд). Перебирая начальные символы, легко получить список всех возможных команд системы с краткими описаниями (правда, по английски). Вы увидите, что возможных команд гораздо больше, нежели перечислено в вышеприведенной таблице. И хотя ниже  в этом разделе мы еще поговорим о некоторых еще не встречавшихся нам командах, но нет никакой возможности даже кратко рассмотреть здесь все команды ОС. Этому посвящены отдельные книги, например, книга Питера Дайсона "Операционная система UNIX. Настольный справочник", перевод С.Орлова, изд. "ЛОРИ", 1997 г.

5.11. Работа с архиваторами

При работе с Linux Вы, может быть, еще не скоро встретитесь с необходимостью работать с большинством консольных команд, поскольку имеются такие оболочки, как Midnight Commander или графические оболочки типа KDE. Но с командами архивирования (точнее, разархивирования) Вам работать придется обязательно, хотя бы потому, что Вы будете часто встречать архивированные файлы в Интернет.

Основным средством архивирования в UNIX (а, следовательно, и в Linux) является комплекс из двух программ - tar и gzip. Хотя никто не запрещает пользоваться arj, pkzip, lha, rar и т.д. - версии этих программ для Linux общедоступны. Просто уж исторически сложилось, что пользователи Unix чаще применяют именно эти две программы, и именно в таком формате распространяется большая часть программного обеспечения для Unix. Поэтому овладеть работой с tar и gzip - дело чести любого пользователя.

5.11.1. Программа tar

Возникает вопрос, зачем использовать две программы? Все дело в том, что tar расшифровывается как Tape ARchiver, он не сжимает данные, а лишь объединяет их в единый файл с последовательным доступом для последующей записи на ленту. По умолчанию этот архивный файл создается на ленточном накопителе, точнее на устройстве /dev/rmt0. Если Вы хотите создать архивный файл на диске, то необходимо использовать команду tar с опцией f, после которой указывается имя архивного файла.

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

-A --catenate, --concatenate
    добавляет файлы в существующий архив
-c, --create
    создает новый архив
-d, --diff, --compare
    найти различия между архивом и файловой системой
--delete
    удалить из архива (не может использоваться с магнитной лентой!)
-r, --append
    дописывает файлы в конец архива
-t, --list
    выводит список файлов архива
-u, --update
    добавляет только файлы, которые новее, чем имеющаяся в архиве копия 
-x, --extract, --get
    извлечь файлы из архива

Если Вы работаете с файлами архивов на дисках, а не с ленточным устройством, то, очевидно, обязательной будет и опция f.

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

Однобуквенные опции программы tar могут перечисляться друг за другом (Вы увидите это в приводимых ниже примерах).

Я не буду давать здесь описание всех опций команды tar, просто приведу несколько командных строк для выполнения самых необходимых действий с архивами.
Чтобы создать один tar-архив из нескольких файлов, используется команда:

tar -cf имя_архива файл1 файл2 ....

где опция c сообщает программе, что необходимо создать (create) архив, а опция f говорит о том, что архив должен создаваться в виде файла, имя которого должно следовать сразу за этой опцией.
В именах файлов, которые сохраняются в архиве, можно использовать шаблоны имен файлов, в том числе просто символы-заместители * и ?. Благодаря этому можно очень короткой командой отправить в архив сразу много файлов. Например, для того, чтобы создать архив, содержащий все файлы одного из подкаталогов (пусть это будет sub_dir) текущего каталога, достаточно дать команду

tar -cvf имя_архива ./sub_dir/*

или даже просто

tar -cvf имя_архива sub_dir.

По этой команде в архиве будут сохранены не только файлы, расположенные непосредственно в подкаталоге sub_dir, но и рекурсивно все файлы из подкаталогов каталога sub_dir. При этом в архиве сохраняется вся структура подкаталогов каталога sub_dir. Заметим, что если в только что приведенном примере вместо * поставить *.*, то будут сохранены только те файлы, которые расположены непосредственно в подкаталоге sub_dir, а подкаталоги каталога sub_dir архивированы не будут. Если в том же примере не указать имя подкаталога, то будут архивироваться все файлы (и подкаталоги) текущего каталога. Но если Вы дадите команду следующего вида

tar -cvf имя_архива ./.*,

то в архиве будут сохранены не только все файлы (и подкаталоги) текущего каталога, но и файлы из родительского каталога, а хотели ли Вы этого?.

Теперь Вы знаете как создать архив, а для того, чтобы распаковать (извлечь) файлы из архива, нужно дать команду:

tar -xvf имя_архива файлы

Получить список файлов архива можно командой:

tar -tf имя_архива | less

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

tar -Mcvf /dev/fd0H1440 /каталог

Такая команда создаст на дискетах архив с содержимым каталога, разбивая его на тома. Монтировать дискеты перед запуском команды не нужно, программа просто пишет на устройство потоком (в данном случае на дискету по секторам). При этом никакой файловой системы на дискете не создается. После заполнения дискеты Вам будет выдан запрос на смену дискеты. Только, прежде чем запускать такую команду на выполнение, приготовьте достаточное число свободных дискет (помните, что tar не сжимает файлы), которые лучше всего соответствующим образом пометить и обязательно пронумеровать. Кроме того, имейте в виду, что вся информация на дискетах будет молча уничтожена.

Чтобы восстановить сохраненные данные, воспользуйтесь командой:

tar -Mxpvf /dev/fd0H1440,

Если Вы ошибетесь в порядке вставляемых дискет, программы сообщит Вам об этом и попросит заменить том.

В заключение раздела заметим, что всегда можно получить подсказку по использованию программы tar, дав команду

tar -help

При этом, если Вы используете русифицированный дистрибутив Linux, например, Black Cat 6.02, то подсказка будет выдаваться по-русски.

5.11.2. Программа gzip

Хотя программа tar создает архивы, но она, как было сказано, не сжимает архивы, а просто создает из отдельных файлов единый архивный файл. Для сжатия этого файла часто применяют команду gzip. В простейшем случае она вызывается в следующем формате:

gzip файл

Если перечислить несколько имен файлов, то каждый из них будет заархивирован отдельно (общий архив не создается). В командной строке можно указать сразу несколько имен файлов или шаблон имени файла.

Для того, чтобы распаковать архив, используйте команду : gzip -d файл_архива или gunzip файл_архива

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

Перечислим кратко другие полезные опции программы gzip:
 

-h --help вызов краткой помощи по использованию программы
-l --list выдает имя файла, содержащегося в архиве, его обьем и степень сжатия
-L --license отображает лицензию на программу
-N --name сохранять (или восстанавливать) исходное имя и время создания файла
-n --no-name не сохранять (не восстанавливать) исходное имя и время создания файла
-q --quiet подавляет выдачу на экран предупреждающих сообщений
-r --recursive рекурсивно обрабатывать подкаталоги (используется в случае. когда задан шаблон имен обрабатываемых файлов)
-S .suf 
--suffix .suf
добавить суффикс .suf к имени сжатого файла (вместо добавляемого по умолчанию суффикса gz; но учтите, что при разархивации файлов с суффиксами, отличными от gz, программа Вас не поймет)
-t --test протестировать архивный файл
-v --verbose выдача дополнительных сообщений в процессе работы программы 
-V --version отобразить версию программы
-1 --fast быстрое сжатие
-9 --best более высокая степень сжатия
 
Поскольку программа gzip не умеет сохранять в одном архиве несколько файлов, то обычно ее применяют для сжатия архивов, созданных программой tar. Более того, среди опций программы tar имеется специальная опция, позволяющая сразу после создания сжать его с помощью программы gzip. Для выполнения такого сжатия надо использовать команду tar примерно следующим образом:

tar -czf имя_архива шаблон_имен_файлов (или имя_каталога).

Только имейте в виду, что в этом случае суффикс gz не добавляется автоматически к имени создаваемого архива, поэтому лучше сразу задать имя архива с указанием обеих суффиксов: имя.tar.gz.

5.11.3. Программа bzip2

В последнее время все чаще вместо программы gzip используется архиватор bzip2, который обеспечивает более высокую степень сжатия и работает несколько быстрее. Команда bzip2 не устанавливается автоматически при инсталляции Black Cat Linux (как, вероятно, и других дистрибутивов). Но она имеется на дистрибутивном диске в виде rpm-пакета и ее легко установить (как это сделать, смотрите в разделе об установке нового ПО).

bzip2 замещает каждый файл, имя которого задано в командной строке, сжатой версией, добавляя к имени файла суффикс .bz2. Сжатый файл имеет то же самое время модификации, права доступа и, по возможности, того же владельца, что и исходный файл, что дает возможность восстановить эти атрибуты при извлечении файлов из архива.
В некоторых случаях сжатый файл может оказаться даже больше по размеру, чем исходный. Это происходит, например, для файлов длиной менее 100 байт, потому что механизм сжатия использует заголовок длиной около 50 байт. Для файлов, представляющих собой случайную последовательность символов (в том числе для выходных файлов большинства файловых архиваторов) длина файла увеличивается примерно на 0.5%.
bunzip2 (или bzip2 -d) разархивирует указанные в командной строке файлы. Если эти файлы не были созданы программой bzip2, они не будут разархивироваться, будет выдано соответствующее предупреждение. При разархивации bzip2 пытается угадать имя разархивируемого файла по следующим правилам:
       filename.bz2 заменяется на filename
       filename.bz заменяется на filename
       filename.tbz2 заменяется на filename.tar
       filename.tbz заменяется на filename.tar
       любое другое имя заменяется на имя.out

Опции командной строки для  bzip2  очень похожи на опции команды gzip, но все же они не идентичны. Приведу краткую сводку наиболее необходимых в работе опций:

    -d --decompress
Принудительная разархивация. Эта опция необходима в силу того, что bzip2, bunzip2 и bzcat - это на самом деле одна и та же программа, которая сама по расширению имени файла принимает решение о том, какое действие надо выполнить над указанным файлом. Опция -d отключает этот механизм и заставляет программу разархивировать указанные файлы.
    -z --compress
Принудительная архивация.
    -t --test
Проверка целостности указанного файла(ов) без разархивации.
    -f --force
Перезапись существующего файла. По умолчанию bzip2 не перезаписывает существующие файлы. Если Вы хотите перезаписать существующий файл, надо задать опцию -f.
    -k --keep
Сохранять (не удалять) исходные файлы при архивации или разархивации.
    -s --small
Снижает требования к обьему используемой оперативной памяти за счет снижения скорости архивации. Эту опцию рекомендуется применять на компьютерах с малым обьемом ОЗУ (8 мегабайт и меньше).
    -q --quiet
Не выводить малосущественные сообщения.
    -v --verbose
Выводить дополнительную информацию в процессе работе (представляет интерес в диагностических целях).
    -L --license -V --version
Отобразить версию программы и лицензионное соглашение.

Аргументы командной строки, которым предшествует двойное тире --, трактуются как имена файлов, даже если они начинаются с тире. Например, bzip2 -- -myfilename.

Я думаю, что приведенных данных достаточно для квалифицированного применения архиваторов tar, gzip и bzip2.

Дополнительную информацию можно найти по следующим ссылкам:

  • Bzip2 Howto

  • Назад Вернуться к оглавлению. Далее

    <
    В.А.Костромин
    Последние изменения
    в содержание файла внесены
    30 августа 2000 г.