Базовый набор инструментальных пользовательских программ


Оболочка Midnight Commander

Назначение и функции MC

Midnight Commander является представителем самого популярного семейства визуальных оболочек/менеджеров файлов "a la Norton Commander" (в мире Dos/Windows это Norton Commander, Volkov Commander, Dos Navigator, Far, Windows Commander; под Unix до MC существовал Demos Commander (deco)).

Это семейство характерно тем, что экран разбивается на три части -- две панели с файлами (левая и правая) и командная строка, позволяющая вводить команды операционной системы.

У MC есть следующие возможности:

  • Стандартные операции с файлами -- просмотр, редактирование, копирование, линковка, переименование/перемещение, удаление, изменение прав доступа и т.д.
  • Мощный встроенный редактор (есть функции работы с выделенным блоком, поиск/замена, отмена последней операции, цветовое выделение синтаксиса и т.д. -- можно даже отправить редактируемый файл по e-mail). Подробнее см. раздел "Редакторы>mcedit".
  • Выделение файлов разных типов цветом.
  • Можно назначать разные команды просмотра, редактирования и "исполнения" (по клавише Enter) для файлов разных типов.
  • "Фильтрованный" просмотр файлов (например, .html показываются не "как есть", с тэгами, а в уже отформатированном виде).
  • Нажав Enter на файле архива (.tar, .tgz, .zip, .a, .rpm и т.д.) можно "войти внутрь" него.
  • Поиск файлов по шаблону имени и по содержимому; результат поиска можно "превратить" в содержимое панели. Можно вывести на панели список файлов, полученный от внешней программы.
  • При копировании/перемещении можно переименовывать группы файлов "по шаблону" (file*.tar.gz->f*.tgz).

Запуск MC и основные отличия от NC/VC/Far

Для запуска Midnight Commander надо набрать "mc". По умолчанию он запускается "в цвете" на консоли, и в черно-белом варианте в окне xterm. Чтобы получить цвет в окне, надо воспользоваться ключом "-c" (color).

Первое отличие от семейства Norton Commander'а обусловлено тем, что в Unix нет букв дисков -- поэтому нет команды "сменить диск" (Alt+F1/Alt+F2).

Второе -- для многих действий (кроме F1-F10) используются другие сочетания клавиш -- это обусловлено тем, что, к примеру, у telnet нет возможности передавать сочетания типа Shift+Ctrl+PageUp. В основном используются сочетания "a la Emacs". В меню и справочной системе приведены сочетания клавиш для большинства операций. Там используются следующие обозначения:

ПримерЧто означает
C-rНажать Ctrl+R
M-?Нажать Esc, затем ?
C-x sНажать Ctrl+X, затем s
C-x C-sНажать Ctrl+X, затем Ctrl+S

В отличие от NC, для копирования в командную строку имени файла, на котором стоит курсор, используется не Ctrl+Enter, а "Esc Enter".

Поскольку в MC мышь используется "обычным" образом, то исчезает возможность отметки/вставки текста при помощи мыши. Чтобы выделять и вставлять текст мышью, надо при нажатии кнопок держать нажатой клавишу Shift.

Использование MC

Поскольку MC очень похож на NC&Co., и все команды можно найти в меню, обратим внимание лишь на несколько особенностей MC.

Быстрый переход по директориям


В любой момент можно перейти в другую директорию, даже если в командной строке что-то набрано -- для этого служит комбинация "Esc c" (change dir) -- отдаленный аналог Alt+F1/F2.

Кроме того, по комбинации "Ctrl+\" можно вызвать список "самых частоиспользуемых" директорий, куда можно занести такие директории как /tmp, /etc и т.д. -- по своему вкусу.

Встроенный ftp-клиент


В MC встроена поддержка FTP. Если выбрать в меню Left/Right пункт "FTP link...", и затем набрать имя компьютера, то MC покажет в панели список файлов с него. Другой способ -- перейти командой cd (или при помощи "Esc c" или Ctrl+\) в директорию со специальным именем вида "ftp://имя-компьютера".

По умолчанию MC входит на ftp-сервер под именем anonymous, но можно указывать имя пользователя (и, кстати, директорию) точно так же, как в обычных URL, используемых в Internet. К примеру,

ftp://ivanov@host.inp.nsk.su/tmp/
означает "зайти на машину host.inp.nsk.su как пользователь ivanov и перейти в директорию /tmp/".

Закрыть ftp-соединение можно, перейдя в любую локальную директорию, к примеру, в свою домашнюю.

Замечание
В меню Left/Right рядом с "FTP link..." есть пункт "Network link...". Он дает доступ к "самодельной" сетевой файловой системе MC, и практически никогда не используется (поскольку для него требуется на другом компьютере запустить сервер mcserv, чего никто никогда не делает -- просто незачем).

Переименование групп файлов


MC позволяет единообразно переименовывать группу файлов с похожими именами (которые подходят под некий шаблон) одной операцией.

К примеру, при отметке нескольких файлов и нажатии F6 (Move) появляется окно следующего вида:

Если мы отметили файлы с именами file01.tar.gz, file02.tar.gz и т.д. до file07.tar.gz, и хотим их переименовать в f1.tgz и т.д., то надо сделать следующее:

При переименовании каждого файла MC подставит в новое имя (f*.tgz) вместо "*" то, что соответствовало "*" в исходном шаблоне (file0*.tar.gz).

Замечание
Вообще-то можно указывать в имени и шаблоне несколько "*" -- MC подставит вместо кажой "*" в новое имя то, что соответствовало "*" в шаблоне (так можно переименовать fileAdata01.tar.gz...fileZdata05.tar.gz в fA1.tgz... -- исходный шаблон file*data0*.tar.gz). Допускаются и более хитрые переименования -- например, abc01.txt->01abc.txt -- подробности можно узнать, нажав F1 в окне копирования/переименования.

MC и русский язык


Если попробовать нажать F3 на файле с русским текстом, то вместо русских букв на экране будут точки. Аналогично, русские буквы вводиться не будут. Дело в том, что по умолчанию MC настроен на работу с файлами, содержащими только ASCII-символы (т.е. с кодами до 127), а русские буквы лежат выше.

Чтобы включить поддержку русского, надо выбрать в меню Options пункт "Display bits...", после этого появится окно следующего вида:

Надо включить "Full 8 bits output" и "Full 8 bits input".

Просмотр экрана "под панелями" по Ctrl+O


При работе на консоли и в окне xterm MC позволяет посмотреть то, что "скрыто" под панелями, при помощи Ctrl+O -- так же, как и в NC. Но то, как MC выполняет команды, вводимые в его командной строке с клавиатуры, сильно отличается, и поэтому иногда он начинает "глючить" -- вводятся лишние символы ^H, а иногда MC заявляет, что "Shell is already running a command".

Чтобы избежать этих проблем, лучше Ctrl+O не пользоваться вовсе, а для того, чтобы видеть вывод команд, запускаемых из-под MC, можно в окне Options|Configuration... переключатель "Pause after run..." поставить в положение "alwaYs" -- после завершения каждой команды MC будет просить нажать любую клавишу.

Если клавиши не работают...


При использовании программы Telnet из Windows95/NT клавиши F5-F10 "не работают". Это происходит из-за того, что Telnet просто не передает их (другие подвиды telnet также иногда страдают подобным).

Выход очень простой -- вместо Fn всегда можно нажать Esc, а затем соответствующую цифру: F1 -- Esc,1, F10 -- Esc,0.

Кроме Fn бывают проблемы и с клавишами Ins, Home, End, PgUp, PgDn (с Del все еще хитрее). Хотя в MC и предусмотрено частичное решение проблемы -- Options|Learn Keys, реально проблема заключается в отсутствии в Unix четкого стандарта на эти клавиши и должна решаться по-другому. А практически во всех программах предусмотрены другие эквиваленты -- так, вместо Home во многих программах можно нажимать Ctrl+A, вместо End -- Ctrl+E.

Возможные проблемы со шрифтами

Иногда при запуске MC (и не только) в окне xterm вместо рамок вокруг панелей и окошек ничего не рисуется, или изображаются какие-то странные символы. Это происходит из-за того, что в шрифте, используемом xterm, могут отсутствовать псевдографические символы (то же самое бывает и в Windows Telnet).

В этой ситуации можно запустить MC с ключом "-a", чтобы он для рисования рамок использовал символы +, -, |.


Текстовые редакторы

Текстовые редакторы

В этом разделе рассматриваются только текстовые редакторы для ASCII-файлов (таких, как исходные тексты программ, .txt-файлы и т.д.). В обзор попали только текстовые редакторы, работающие в текстовом режиме (пардон за тавтологию), т.е. в консоли или в окне xterm, а не в графике.

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

Замечание
Большинство редакторов при сохранении файла создают резервную (backup) копию, но в отличие от Dos, где она имеет то же имя, что и файл и расширение .bak, в Unix принято давать резервным копиям то же имя что и у файла, но с тильдой "~" на конце (файл "compress.c" -- резервная копия "compress.c~").

Самый древний: vi

Vi был первым "настоящим" текстовым редактором под Unix. Его реализации есть во всех подвидах Unix. Сделан он был программистами исключительно для собственного использования, и для обычного пользователя весьма неудобен. Практически единственное, что надо о нем знать -- это как отличить его и как из него выходить, случайно оказавшись в нем (хотя для системных администраторов его знать все же желательно -- иногда, например, при "починке" системы, ничего кроме vi нет в принципе).

При загрузке vi (в Linux используется его "улучшенная" версия vim -- Vi IMproved) экран выглядит приблизительно так, как на иллюстрации (символами "~" обозначаются строки за концом файла):

/dev/hda4         /                  ext2    defaults        1 1
/dev/hda1         /c                 vfat    defaults        0 0
/dev/hda2         /d                 ext2    defaults,ro     0 2
/dev/hda3         swap               swap    defaults        0 0
/dev/fd0          /mnt/floppy        ext2    noauto          0 0
/dev/cdrom        /mnt/cdrom         iso9660 noauto,ro       0 0
/dev/cdhdd        /mnt/hdd           iso9660 noauto,ro       0 0
none              /proc              proc    defaults        0 0
/dev/hdb4         /mnt/hdb4          ext2    noauto,ro     0 0
/dev/hdb2         /mnt/hdb2          ext2    noauto,ro     0 0
~
~
~
~
~
~
"/etc/fstab" [readonly] 10 lines, 756 characters

Не вдаваясь в подробности работы vi (режим просмотра, режим редактирования и т.д.): обычно для выхода из него достаточно набрать ":q" и нажать Enter. В том случае, если "с перепугу" или по неопытности загруженный файл был изменен, то выйти без сохранения всегда можно, набрав ":qa!" (":" -- вызов командного режима, "q" -- выход, "a" -- из всех окон сразу, "!" -- выход несмотря на наличие изменений). Если при нажатии ":" в нижней строке не появляется приглашение (тоже ":"), то надо сначала нажать три раза Esc.

Замечание
Хотя достоинством vi является то, что он есть в любом Unix, его неудобство столь велико, что лучше потратить в каждой новой для себя системе несколько лишних минут и найти что-нибудь более приличное. Отсутствие же других текстовых редакторов является лишь показателем халтурной работы администратора системы, но никак не оправдывается наличием vi.

Замечание
У vi есть любопытная особенность: если его "убить" (kill) во время редактирования файла, то он посылает письмо владельцу, уведомляя о том, что редактировался такой-то файл и его, возможно, удастся восстановить такой-то командой.

Совет
Существует множество "клонов" vi -- elvis, vile и т.д. (в имени каждого из них присутствует буквосочетание "vi"). Есть даже версии vi для X-Window (в том числе написанные с использованием Motif). Приверженцы vi создали к нему множество расширений, включая многоуровневое "undo" и цветовое выделение синтаксиса. Но тем не менее это все тот же самый vi, и обычному пользователю связываться с ним просто не имеет смысла.

Простой и быстрый: joe

Joe очень похож по набору команд на редактор WordStar и среды фирмы Borland (Borland Pascal, Borland C++ и т.д.). Он активно использует комбинации клавиш Ctrl+K буква. Однако, в отличие от WordStar комбинации Ctrl+Q буква не применяются.

Основные комбинации клавиш приведены в таблице, но нажав Ctrl-K H можно вызвать справку по клавишам (убирается она той же комбинацией Ctrl-K H).

КлавишиДействие
Редактирование
BackspaceУдалить символ перед курсором
Ctrl+DУдалить символ под курсором (аналог Del)
Ctrl+JУдалить до конца строки
Ctrl+YУдалить строку
Ctrl+_Отмена последней операции редактирования
Ctrl+T TПереключение вставка/замена (insert/overtype)
Поиск и замена
Ctrl+K FПоиск/замена; для замены надо в опциях (запрашиваются после ввода образца) указать R.
Поиск/замена понимает регулярные выражения (несколько специального вида), нажав Ctrl-K H можно получить подсказку.
Ctrl+LПовтор последней операции поиска/замены
Работа с блоком
Ctrl+K BОтметить начало
Ctrl+K KОтметить конец
Ctrl+K CКопировать
Ctrl+K MПереместить (не Ctrl-K V, как в WordStar/Borland!)
Ctrl+K YУдалить
Ctrl+K WЗаписать в файл
Ctrl+K RПрочитать из файла
Работа с файлами
Ctrl+K DСохранить
Ctrl+K XСохранить и выйти
Ctrl+CВыйти без сохранения
Ctrl+K EОткрыть файл (в новом окне)

Любую операцию можно прервать, нажав Ctrl+C.

Joe поддерживает редактирование нескольких файлов одновременно -- каждый в своем "окне". Подробности можно узнать в справке.

У joe есть одна "неприятная" особенность: символ "`" (обратный апостроф) используется как префикс для ввода специальных символов. Поэтому бывают проблемы при вставке текста из другого окна при помощи мыши -- к примеру, строка, содержащая "`b" приведет к вставке в текст символа с ASCII-кодом 2 (Ctrl+B). Чтобы вставить в текст сам "`", надо нажать его дважды.

Замечание
Если вместо "joe" набрать "jstar", то joe запустится в режиме полной эмуляции клавиатуры WordStar, если "jmacs" -- то в режиме эмуляции Emacs, "jpico" -- будет эмулировать Pico.

Самый навороченный: emacs

Emacs -- это даже не столько редактор, сколько среда. Некоторые (в основном, программисты) используют его практически для всего -- включая чтение почты. Перечень всего, что умеет Emacs, мало кому известен.

Практически все функции Emacs'а написаны на интерпретируемом языке Lisp, поэтому редактор работает сравнительно медленно.

Хотя Emacs -- довольно неподходящий выбор для начинающих, у него есть одно несомненное достоинство -- как и vi, он есть практически в любом Unix.

По умолчанию в графической среде X-Window Emacs запускается в графическом режиме в собственном окне, при этом многие действия можно выполнять мышью. Из консоли, а также если указать ключ "-nw", он запустится в текстовом режиме.

По клавише F10 вызывается меню -- но не обычное, а "клавишное" -- для выбора пункта надо нажать какую-либо клавишу (все они отображаются на экране).

У Emacs есть несколько особенностей, обычно ставящих в тупик непривычных к нему людей. Во-первых, в текстовом режиме клавиша Backspace -- это не удаление предыдущего символа, а синоним Ctrl+H -- префикс "команд помощи". Во-вторых, по умолчанию русские буквы не вводятся как буквы, а вызывают некие команды Emacs'а. В-третьих, если жать стрелку вниз за концом файла, то Emacs будет сам добавлять дополнительные строки.

Многие команды состоят не из одной клавиши, а из нескольких -- первой обычно является Ctrl+X, Ctrl+C или Ctrl+H.

Предупреждение
Сочетания вида "Ctrl+X Ctrl+C" -- это далеко не то же самое, что "Ctrl+X C"!

КлавишиДействие
Редактирование
DelУдалить символ перед курсором
Ctrl+DУдалить символ под курсором (аналог Del)
Ctrl+KВнутри строки -- далить до конца строки,
в конце строки -- удалить конец строки ("подклеить" следующую строку)
Ctrl+_Отмена последней операции редактирования
InsПереключение вставка/замена (insert/overtype)
Поиск
F10 s sПоиск
Ctrl+LПовтор последней операции поиска
Работа с файлами
Ctrl+X sСохранить
Ctrl+X Ctrl+CВыйти (если файл изменен, то спросит, сохранять или нет)

Получить список клавиш (весьма немаленький) можно, нажав "Ctrl+H b". Прервать практически любую команду можно, нажав Ctrl+G.

Как в MC: mcedit

Mcedit -- это редактор, который используется в MC. Соответственно, он похож на привычный всем редактор из Norton Commander'а.

Mcedit понимает те же ключи "-c" и "-a", что и MC. Кроме того, поскольку это, собственно, и есть MC, он использует настройки MC, к примеру, "Display bits". Будучи запущен в цвете, mcedit умеет "расцвечивать" файлы .tex и .c (впрочем, по умолчанию цвета не самые приятные).

Основные клавиши редактирования приведены в таблице, но можно также посмотреть подсказку, нажав F1. Кроме того, F9 вызывает меню, в котором есть еще множество команд. Mcedit можно переключить в режим "эмуляции" Emacs, переключив в окне F9->Options->General пункт "Key emulation" в "Emacs".

КлавишиДействие
Редактирование
BackspaceУдалить символ перед курсором
Ctrl+DУдалить символ под курсором (аналог Del)
Ctrl+YУдалить строку
Ctrl+UОтмена последней операции редактирования
InsПереключение вставка/замена (insert/overtype)
Поиск и замена
F7Поиск (можно использовать регулярные выражения)
Shift+F7Повтор последней операции поиска
F4Замена
Работа с блоком
F3Первое нажатие -- начало отметки блока, второе -- конец
(в консоли для отметки можно пользоваться Shift+стрелками, как в Word и Borland)
F5Копировать
F6Переместить
F8Удалить
Ctrl+FЗаписать в файл
Shift+F5Прочитать из файла
Работа с файлами
F2Сохранить
F10Выйти (если файл изменен, то спросит, сохранять или нет)
Ctrl+OОткрыть файл

Какие еще бывают текстовые редакторы в Unix
ed
является самым старым -- даже древнее vi. Это строчный, а не экранный редактор (те, кто встречался с программой edlin в Dos, поймут что это такое). Для "простого смертного" освоение ed -- практически непосильная (а главное -- совершенно ненужная) задача. Единственная причина, по которой он здесь упоминается -- предупредить, что им пользоваться не следует.
pico
обычно устанавливается вместе с почтовой программой pine. Он является практически полной копией редактора, используемого в Pine при составлении писем.
jed
умеет эмулировать Emacs (по умолчанию он запускается в этом режиме) и WordStar. Это сравнительно небольшой и быстрый редактор -- того же класса, что и joe.
jove
является облегченной версией Emacs ("Jonathan's Own Version of Emacs").
we
вариант редактора (точнее, оболочки для разработки программ) WPE, работающий в текстовом режиме.
vfte
вариант редактора FTE для консоли.

Кроме всего прочего, есть множество текстовых редакторов, работающих в графической оболочке X-Window -- обязательно есть xedit, а одним из самых удобных считается nedit. Их мы будем рассматривать позже, вместе с X-Window.


Упаковщики и архиваторы

Упаковщики и архиваторы: в чем отличие?

Такие программы, как pkzip/pkunzip и arj, совмещают две разных функции: архивирование, т.е. помещение содержимого нескольких файлов в один (с сохранением информации о каждом файле), и упаковку, т.е. сжатие файла.

В Unix эти функции по историческим причинам реализуются отдельными программами: для упаковки используются compress, gzip, bzip2, а для архивации -- tar.

Замечание
Программы-архиваторы разрабатывались в первую очередь для резервного копирования (обычно на ленту). Кроме tar есть еще программы cpio и dump/restore, но их мы рассматривать не будем.

Кроме того, в любом Unix есть программа ar, которая хоть и умеет делать архивы из произвольных файлов, в первую очередь предназначена для создания библиотек объектных файлов, и будет рассматриваться в разделе "Компиляция и сборка программ".

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

РасширениеТип файла
.gz Файл, упакованный gzip
.Z Файл, упакованный compress
.z Файл, упакованный pack
.bz2 Файл, упакованный bzip2
.tar Архив tar
.tar.gzАрхив tar, упакованный gzip
.tgz То же, что .tar.gz
.taz То же, что .tar.Z
.zip Упакованный архив zip/pkzip
.arj Упакованный архив arj
.a Библиотека ar

"Классический" упаковщик compress

compress упаковывает указанный ему файл и добавляет к имени расширение .Z.

Пример (файл-пример termcap взят из директории /etc):

bobby:~% ls -l
total 428
-rw-r--r--   1 ivanov   lab5       434898 Sep 10 12:21 termcap
bobby:~% compress termcap
bobby:~% ls -l
total 200
-rw-r--r--   1 ivanov   lab5       203137 Sep 10 12:21 termcap.Z
bobby:~% _

Для распаковки используется программа uncompress:

bobby:~% uncompress termcap.Z
bobby:~% ls -l
total 428
-rw-r--r--   1 ivanov   lab5       434898 Sep 10 12:21 termcap
bobby:~% _

Предупреждение
Если указать ключ "-r" и имя директории, то будут упакованы/распакованы все файлы в этой директории. Этот ключ не означает "упаковать всю директорию в один файл"!

Более новый упаковщик: gzip

Gzip был создан как более мощная замена для compress. Используется он точно так же:

bobby:~% ls -l
total 428
-rw-r--r--   1 ivanov   lab5       434898 Sep 10 12:21 termcap
bobby:~% gzip termcap
bobby:~% ls -l
total 143
-rw-r--r--   1 ivanov   lab5       144719 Sep 10 12:21 termcap.gz
bobby:~% _

Gzip позволяет достигать больших степеней сжатия, чем compress, и поэтому почти вытеснил его. Поскольку большее сжатие занимает больше времени, есть возможность указать gzip'у, как паковать -- быстрее (и слабее) или лучше (и медленнее). Для этого служат ключи от "-1" (самое быстрое сжатие) до "-9" (наибольшее сжатие).

bobby:~% ls -l
total 428
-rw-r--r--   1 ivanov   lab5       434898 Sep 10 12:21 termcap
bobby:~% gzip -9 termcap
bobby:~% ls -l
total 142
-rw-r--r--   1 ivanov   lab5       143832 Sep 10 12:21 termcap.gz
bobby:~% _

По умолчанию используется "-6".

Для распаковки применяется программа gunzip.

Gunzip умеет также распаковывать файлы .Z и .z.

Самый современный упаковщик: bzip2

Bzip2 был создан сравнительно недавно -- в 1996 году. Он использует при паковке алгоритм Burrows-Wheeler (вместо Lempel-Ziv, применяемого в compress/gzip/zip), что позволяет достигать еще больших степеней сжатия. Платой за это является несколько большее время упаковки.

Используемые bzip2 ключи почти идентичны gzip'овым. Но bzip2 по умолчанию использует наилучшее сжатие ("-9").

bobby:~% ls -l
total 428
-rw-r--r--   1 ivanov   lab5       434898 Sep 10 12:21 termcap
bobby:~% bzip2 termcap
bobby:~% ls -l
total 115
-rw-r--r--   1 ivanov   lab5       116736 Sep 10 12:21 termcap.bz2
bobby:~% _

Общие свойства compress, gzip и bzip2
  • Во-первых, при упаковке и распаковке эти программы "заменяют" исходный файл упакованным/распакованным следующим образом: они читают содержимое исходного файла и пишут результат в файл с таким же именем, но с добавлением/удалением расширения (.Z/.gz/.bz2), а затем удаляют исходный файл. Поэтому, если на диске недостаточно места для обоих файлов одновременно (или есть ограничения по дисковой квоте), то упаковка/распаковка может не удаться.

  • Во-вторых, при упаковке и распаковке все они стараются сохранить максимум информации о файле -- упакованному/распакованному файлу устанавливаются те же права доступа и время, что и исходному.

  • В-третьих, если не указывать имя файла, то упаковываться/распаковываться будет стандартный ввод, а результат отправляться на стандартный вывод. Это позволяет использовать упаковщики в конвейерах, к примеру, сразу ужимая результаты какой-либо вычислительной программы.

  • В-четвертых, если указать ключ "-c" ("cat"), то вместо замены исходного файла результат будет отправлен на стандартный вывод.

  • В-пятых, для каждого из форматов есть программа, позволяющая просмотреть содержимое файла, не распаковывая его на диске. Для .Z и .gz это zcat, zmore и zless, а для .bz2 -- bzcat и bzless.

    Кроме того, по файлам .Z и .gz можно вести поиск "a-la grep" -- для этого служит программа zgrep.

    Замечание
    Вообще-то zcat -- это синоним "gunzip -c", а zless и bzless -- очень простые скрипты. Поскольку zgrep также является скриптом, то несложно написать его аналог для bzip2.

Архиватор tar

Первоначально tar был разработан для резервного копирования на ленту, отсюда и его название -- Tape ARchiver. Но, поскольку возможность помещать большое количество файлов внутрь одного чрезвычайно удобно (к примеру, для хранения и передачи групп файлов, например, дистрибутивов), то он получил более широкое распространение.

Вообще-то в каждом Unix есть свой подвид tar, со слегка отличающимися опциями. Но основные опции (создать, развернуть, проверить архив) одинаковы во всех версиях. В Linux используется GNU-версия tar, которая доступна в большинстве других Unix (иногда под именем "gtar").

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

tar <буква-команды>f <имя-архива.tar> [файлы...]

В качестве команды обычно используется одна из следующих букв:

c
(Create) создать архив;
x
(eXtract) распаковать архив;
t
(Test) просмотреть содержимое архива.

Например, чтобы создать архив /tmp/someconfs.tar содержащий файлы /etc/fstab и /etc/passwd:

bobby:~% tar cf /tmp/someconfs.tar /etc/fstab /etc/passwd
tar: Removing leading `/' from absolute path names in the archive
bobby:~% _

Здесь сразу надо заметить две особенности:

  • Во-первых, у файлов, имена которых указаны в абсолютном виде, т.е. начинаются со "/", tar автоматически этот "/" обрезает, чтобы позже можно было распаковать архив в любое место (а не только обратно в /etc/).
  • Во-вторых, при нормальной работе tar ничего не печатает на экране (в отличие от pkzip и arj). Чтобы он показывал обрабатываемые файлы, надо указать ключ "v":

bobby:~% tar cvf /tmp/someconfs.tar /etc/fstab /etc/passwd
tar: Removing leading `/' from absolute path names in the archive
etc/fstab
etc/passwd
bobby:~% _

Если указать "vv", то кроме имен будут показываться те же атрибуты, что и при "ls -l".

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

Замечание
Хотя в большинстве систем tar прекрасно понимает именно такой синтаксис, в некоторых старых Unix'ах перед "сочетанием букв" обязательно надо указывать "-".

Для просмотра архива используется команда "t" (ключ "v" указывает, что надо выдавать более полную информацию):

bobby:~% tar tvf /tmp/someconfs.tar
-rw-r--r-- root/root       756 1998-12-21 16:40 etc/fstab
-rw-r--r-- root/root      1309 1999-02-22 10:35 etc/passwd
bobby:~% _

Для распаковки применяется команда "x":

bobby:~% mkdir /tmp/test
bobby:~% cd /tmp/test
bobby:/tmp/test% ls -l
total 0
bobby:/tmp/test% tar xf /tmp/someconfs.tar
bobby:/tmp/test% ls -l
total 1
drwxr-xr-x   2 ivanov   lab5         1024 Mar  4 16:03 etc/
bobby:/tmp/test% ls -l etc/
total 3
-rw-r--r--   1 ivanov   lab5          756 Dec 21 16:40 fstab
-rw-r--r--   1 ivanov   lab5         1309 Feb 22 10:35 passwd
bobby:/tmp/test% _

Tar разворачивает дерево-содержимое архива в текущей директории. Чтобы распаковать архив в другую директорию, надо или перейти в нее (командой cd) или указать ключ "-C" (распаковываем в директорию /tmp):

bobby:~% ls -l etc
/bin/ls: etc: No such file or directory
bobby:~% ls -l /tmp/etc
/bin/ls: /tmp/etc: No such file or directory
bobby:~% tar xf /tmp/someconfs.tar -C /tmp
bobby:~% ls -l /tmp/etc
total 3
-rw-r--r--   1 ivanov   lab5          756 Dec 21 16:40 fstab
-rw-r--r--   1 ivanov   lab5         1309 Feb 22 10:35 passwd
bobby:~% _

Замечание
Вообще-то назначение ключа "-C" более общее, и надо хорошо себе представлять, что он будет делать в каждом конкретном случае. Но при распаковке всего архива такое использование достигает цели.

Обычно .tar-файлы держат упакованными (чаще всего gzip'ом). Самое простое -- создать архив и затем упаковать его. Но можно указать в качестве имени архива "-" -- тогда результат будет отправлен на стандартный вывод, и затем передать его gzip'у, стандартный вывод которого перенаправить в файл:

bobby:~% tar cf - /etc/fstab /etc/passwd | gzip >someconfs.tgz
tar: Removing leading `/' from absolute path names in the archive
bobby:~% ls -l
total 1
-rw-r--r--   1 ivanov   lab5          990 Mar  4 16:28 someconfs.tgz
bobby:~% _

При использовании GNU tar (например, в Linux) есть еще более простой способ: можно указать ключ "z", который означает "пропустить файл через gzip":

bobby:~% tar czf someconfs.tgz /etc/fstab /etc/passwd
tar: Removing leading `/' from absolute path names in the archive
bobby:~% ls -l
total 1
-rw-r--r--   1 ivanov   lab5          990 Mar  4 16:31 someconfs.tgz
bobby:~% _

Этот же ключ можно указывать при распаковке и просмотре архива.

Предупреждение
Если сказать tar'у создать архив в той же директории, откуда берутся исходные файлы (к примеру, в текущей: "tar cf archive.tar ."), то сам .tar-файл тоже попадет в архив -- точнее, та его часть, что была создана на момент начала добавления его самого.

Дело в том, что tar (в отличие от Dos'овских pkzip и arj) не проверяет, что файл, который он собирается поместить в архив -- это сам архив. Поэтому лучше сами файлы-архивы создавать вне того дерева, из которого берутся файлы, или прямо указывать список всех файлов, которые надо положить в архив.

Совет
Man-страница по tar довольно запутанна, поэтому лучше воспользоваться info-документацией ("info tar"), которая содержит разделы специально для начинающих (включая tutorial'ы).

Совместимость с Dos: zip/unzip, unarj

zip/unzip


Для манипуляций с .zip файлами практически в любом Unix есть программы zip и unzip, совместимые с pkzip/pkunzip версии 2.04.

Поскольку ключи zip и unzip почти идентичны оным у pkzip/pkunzip, ма не будем здесь их подробно рассматривать. Получить краткую справку можно, запустив любую из этих программ без параметров.

unarj


Для распаковки .arj-файлов есть программа unarj, совместимая с версией 2.41. В отличие от "настоящего" arj, она не умеет создавать .arj-архивы, не оптимизирована по скорости и поддерживает лишь небольшое количество опций.

Поддерживаются самые часто используемые опции arj -- просмотр и распаковка, но при распаковке нет возможности указать, какие файлы надо извлекать -- можно распаковать только весь архив.

Краткую справку можно получить, набрав просто "unarj" без параметров:

bobby:~% unarj
UNARJ (Demo version) 2.41a Copyright (c) 1991-93 Robert K Jung

Usage:  UNARJ archive[.arj]    (list archive)
        UNARJ e archive        (extract archive)
        UNARJ l archive        (list archive)
        UNARJ t archive        (test archive)
        UNARJ x archive        (extract with pathnames)

This is an ARJ demonstration program and ** IS NOT OPTIMIZED ** for speed.
You may freely use, copy and distribute this program, provided that no fee
is charged for such use, copying or distribution, and it is distributed
ONLY in its original unmodified state.  UNARJ is provided as is without
warranty of any kind, express or implied, including but not limited to
the implied warranties of merchantability and fitness for a particular
purpose.  Refer to UNARJ.DOC for more warranty information.

ARJ Software                    Internet address :  robjung@world.std.com
Robert and Susan Jung           CompuServe userid:  72077,445
2606 Village Road West
Norwood, Massachusetts 02062
USA
bobby:~% _

Поскольку unarj -- просто демо, то к нему отсутствует man-страница. Единственная имеющаяся документация -- файл /usr/doc/unarj-2.41a/unarj.doc (это обычный текстовый файл).


Практические задания
  1. При помощи MC найти в директории /etc и ниже все файлы, в тексте которых встречается слово "class" и вывести их на одну из панелей.
  2. При помощи MC скопировать с ftp-сервера rdist файл

    /pub/Linux/redhat-5.2/i386/README
    к себе в home-директорию.
  3. При помощи MC скопировать с ftp-сервера arc (пользователь "arc", без пароля) директорию

    /pub2/os/linux/redhat-5.2
    в директорию /tmp/.
  4. В MC скопировать (воспользовавшись командой копирования один раз!) все файлы из /etc/, имена которых оканчиваются на "tab", так, чтобы они переименовались в ".tab" (т.е. fstab->fs.tab).
  5. Скопировав к себе в home-директорию файл

    /net/192.168.1.1/home/teachers/bolkhov/proverbs
    поменять его так, чтобы поговорки шли в таком порядке: про про гусей, про попа, про Карла; сделать это сначала в joe, затем в mcedit (подсказка: это задание на блоки текста).

    Замечание: директории "192.168.1.1" в /net/ не видно -- в нее надо явно зайти командой cd.

  6. Скопировав к себе в home-директорию файл

    /net/192.168.1.1/home/teachers/bolkhov/goose
    при помощи команды замены привести пословицу в нормальный вид; сделать это сначала в joe, затем в mcedit.
  7. В файле

    /net/192.168.1.1/home/teachers/bolkhov/moroz
    набран латинскими буквами фрагмент известного стихотворения. Привести его в Emacs в должный вид.
  8. Скопировав к себе в home-директорию файл /etc/termcap, упаковать его следующими способами: compress, gzip (с максимальной компрессией), bzip2, compress+bzip2, gzip+bzip2, и посмотреть, какой из способов лучше.
  9. Заархивировать директорию /etc в файл /tmp/etc.tar так, чтобы в архиве все файлы были внутри директории etc/ (т.е. чтобы в архиве все имена начинались с директории etc/).
  10. Заархивировать с упаковкой директорию /etc в файл /tmp/etc.tgz так, чтобы в архиве не было ссылок на etc/ (т.е. чтобы все имена начинались так, как будто они не в etc/, а в текущей директории).

----------------------------------------

© 1999 Дмитрий Болховитянов