
Методы / Куликова Н.В., Петровская Е.Н. (ч.1,2)
.pdf
Литература
1.Фолькердинг П., Рейчард К., Фостер-Джонсон Э. Установка и конфигурирование LINUX: учебный курс – СПб: Издательство «Питер», 1999.
2.Билл Болл, Хойт Даф и др. Red Hat Linux 8/9 : Настольная книга пользователя. Издательство DiaSoft, 2004.
РАЗДЕЛ 8. ТЕКСТОВЫЕ РЕДАКТОРЫ В ОС LINUX.
Упаковщики и архиваторы
В этом разделе рассматриваются только текстовые редакторы для ASCII-файлов (таких, как исходные тексты программ, txt-файлы и т.д.).
Все рассматриваемые редакторы поддерживают основные операции редактирования: набор и правка текста, поиск и замена, работа с блоками (отметка, копирование, перемещение, удаление), загрузка/сохранение файлов.
Большинство редакторов при сохранении файла создают резервную (backup) копию, но в отличие от Dos, где она имеет то же имя, что и файл и
расширение .bak, в Unix принято давать резерв- Замечание ным копиям то же имя, что и у файла, но с
тильдой «~» на конце (файл «compress.c» – резервная копия«compress.c~»).
Самый древний: vi
Vi был первым «настоящим» текстовым редактором под Unix. Его реализации есть во всех подвидах Unix. Сделан он был программистами исключительно для собственного использования, и для обычного пользователя весьма неудобен. Практически единственное, что надо о нем знать – это как отличить его и как из него выходить, случайно оказавшись в нем (хотя для системных администраторов его знать все же желательно – иногда, например, при «починке» системы, ничего, кроме vi нет в принципе).
При загрузке vi (в Linux используется его «улучшенная» версия vim – Vi IMproved) экран выглядит приблизительно так, как на иллюстрации (символами «~» обозначаются строки за концом файла):
131
/dev/hda4 |
1 |
/ |
ext2 |
defaults |
1 |
vfat |
|
/dev/hda1 |
0 |
/c |
|
defaults |
0 |
ext2 |
|
/dev/hda2 |
0 |
/d |
|
defaults,ro |
2 |
swap |
|
/dev/hda3 |
0 |
swap |
|
defaults |
0 |
ext2 |
|
/dev/fd0 |
0 |
/mnt/floppy |
|
noauto |
0 |
iso9660 |
|
/dev/cdrom |
0 |
/mnt/cdrom |
|
noauto,ro |
0 |
iso9660 |
|
/dev/cdhdd |
0 |
/mnt/hdd |
|
noauto,ro |
0 |
proc |
|
none |
0 |
/proc |
|
defaults |
0 |
ext2 |
|
/dev/hdb4 |
0 0 |
/mnt/hdb4 |
|
noauto,ro |
/mnt/hdb2 |
ext2 |
|
/dev/hdb2 |
0 0 |
||
noauto,ro |
|
|
~
~
~
~
~
«/etc/fstab» [readonly] 10 lines, 756 characters
Не вдаваясь в подробности работы vi (режим просмотра, режим редактирования и т.д.): обычно для выхода из него достаточно набрать «:q» и нажать Enter. В том случае, если загруженный файл был изменен, то выйти без сохранения всегда можно, набрав «:qa!» («:»– вызов командного режима, «q» – выход, «a»
– из всех окон сразу, «!» – выход несмотря на наличие изменений). Если при нажатии «:» в нижней строке не появляется приглашение (тоже «:»), то надо сначала нажать три раза Esc.
132

Замечание
Замечание
Совет
Хотя достоинством vi является то, что он есть в любом Unix, его неудобство столь велико, что лучше потратить в каждой новой для себя системе несколько лишних минут и найти что-нибудь более приличное. Отсутствие же других текстовых редакторов является лишь показателем некачественной работы администратора системы, но никак не оправдывается наличием vi.
У vi есть любопытная особенность: если его «убить» (kill) во время редактирования файла, то он посылает письмо владельцу, уведомляя о том, что редактировался такой-то файл и его, возможно, удастся восстановить такойто командой.
Существует множество «клонов» vi – elvis, vile и т.д. (в имени каждого из них присутствует буквосочетание «vi»). Есть даже версии vi для X-Window (в том числе написанные с использованием Motif). Приверженцы vi создали к нему множество расширений, включая многоуровневое «undo» и цветовое выделение синтаксиса. Но, тем не менее, это все тот же самый vi, и обычному пользователю связываться с ним просто не имеет смысла.
Простой и быстрый: joe
Joe очень похож, по набору команд, на редактор WordStar. Он активно использует комбинации клавиш Ctrl+K буква. Однако в отличие от WordStar комбинации Ctrl+Q буква не применяются.
Основные комбинации клавиш приведены в таблице, но, нажав Ctrl-K H можно вызвать справку по клавишам (убирается она той же комбинацией Ctrl-K H).
133
Клавиши |
Действие |
|
Редактирование |
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). Чтобы вставить в текст сам «`», надо нажать его дважды.
134

Если вместо «joe» набрать «jstar», то joe запустится в режиме полной эмуляции клавиатуры WordStar, если «jmacs» – то в ре-
Замечание жиме эмуляции Emacs, «jpico» – будет эмулировать Pico.
Как в MC: mcedit
Mcedit – это редактор, который используется в MC. Он похож на привычный всем редактор из Norton Commander'а.
Mcedit понимает те же ключи «-c» и «-a», что и MC. Кроме того, поскольку это, собственно, и есть MC, он использует настройки MC, к примеру, «Display bits». Будучи запущен в цвете, mcedit умеет «расцвечивать» файлы .tex и .c (впрочем, по умолчанию цвета не самые приятные).
Основные клавиши редактирования приведены в таблице 8, но можно также посмотреть подсказку, нажав F1. Кроме того, F9 вызывает меню, в котором есть еще множество команд. Mcedit можно переключить в режим «эмуляции» Emacs, пере-
ключив в окне F9-> Options-> General пункт «Key emulation» в «Emacs».
Таблица 8
Клавиши |
Действие |
1 |
2 |
|
Редактирование |
Backspace |
Удалить символ перед курсором |
Ctrl+D |
Удалить символ под курсором (аналог Del) |
Ctrl+Y |
Удалить строку |
Ctrl+U |
Отмена последней операции редактирования |
Ins |
Переключение вставка/замена (insert/overtype) |
|
Поиск и замена |
F7 |
Поиск (можно использовать регулярные выражения) |
Shift+F7 |
Повтор последней операции поиска |
F4 |
Замена |
|
Работа с блоком |
F3 |
Первое нажатие – начало отметки блока, второе – конец |
(в консоли для отметки можно пользоваться |
|
|
Shift+стрелками, как в Word и Borland) |
135
Продолжение табл. 8
1 |
2 |
F5 |
Копировать |
F6 |
Переместить |
F8 |
Удалить |
Ctrl+F |
Записать в файл |
Shift+F5 |
Прочитать из файла |
|
Работа с файлами |
F2 |
Сохранить |
F10 |
Выйти(еслифайлизменен, тоспросит, сохранятьилинет) |
Ctrl+O |
Открыть файл |
Какие еще бывают текстовые редакторы в Linux.
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.
136

Упаковщики и архиваторы
Упаковщики и архиваторы: в чем отличие? Такие программы, как pkzip/pkunzip и arj, совмещают две разных функции: архивирование, т.е. помещение содержимого нескольких файлов в один (с сохранением информации о каждом файле), и упаковку, т.е. сжатие файла.
В Unix эти функции по историческим причинам реализуются отдельными программами: для упаковки используются compress, gzip, bzip2, а для архивации – tar.
Программы-архиваторы для резервного копирования. Кроме tar есть еще программы cpio и dump/restore, ноихмырассматриватьнебудем. Кроме того, в любом Unix есть программа ar,
Замечание которая хоть и умеет делать архивы из произвольных файлов, в первую очередь, предназначена
для создания библиотек объектных файлов, и будет рассматриваться в разделе «Компиляция и сборка программ».
У каждого архиватора и упаковщика есть свое стандартное расширение для имени файла, в таблице 9 приведены большинство из них.
Таблица 9
Расширение |
Тип файла |
.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 |
137

«Классический» упаковщик compress
Сompress упаковывает указанный ему файл и добавляет к имени расширение .Z.
Пример (файл-пример termcap взят из директории /etc):
bobby:~% ls -l |
|
|
|
|
total 428 |
1 |
ivanov |
lab5 |
434898 |
-rw-r--r-- |
||||
Sep 10 12:21 termcap |
|
|
||
bobby:~% compress termcap |
|
|
||
bobby:~% ls -l |
|
|
|
|
total 200 |
1 |
ivanov |
lab5 |
203137 |
-rw-r--r-- |
||||
Sep 10 12:21 termcap.Z |
|
|
||
bobby:~% _ |
|
|
|
|
Для распаковки используется программа uncompress: |
|
|||
bobby:~% uncompress termcap.Z |
|
|||
bobby:~% ls -l |
|
|
|
|
total 428 |
1 |
ivanov |
lab5 |
434898 |
-rw-r--r-- |
||||
Sep 10 12:21 termcap |
|
|
||
bobby:~% _ |
|
|
|
|
|
Если указать ключ «-r» и имя директо- |
|
|
рии, то будут упакованы/распакованы |
|
Предупреждение |
все файлы в этой директории. Этот |
|
ключ не означает «упаковать всю ди- |
||
|
||
|
ректорию в один файл»! |
Более новый упаковщик: gzip
Gzip был создан как более мощная замена для compress. Ис-
пользуется он точно так же: |
|
|
|
bobby:~% ls -l |
|
|
|
total 428 |
1 ivanov |
lab5 |
434898 |
-rw-r--r-- |
Sep 10 12:21 termcap bobby:~% gzip termcap bobby:~% ls -l
total 143
138
-rw-r--r-- 1 ivanov lab5 144719 Sep 10 12:21 termcap.gz
bobby:~% _
Gzip позволяет достигать больших степеней сжатия, чем compress, и поэтому почти вытеснил его. Поскольку большее сжатие занимает больше времени, есть возможность указать gzip'у, как паковать – быстрее (и слабее) или лучше (и медленнее). Для этого служат ключи от «-1» (самое быстрое сжатие)
до «-9» (наибольшее сжатие). |
|
|
||
bobby:~% ls -l |
|
|
|
|
total 428 |
1 |
ivanov |
lab5 |
434898 |
-rw-r--r-- |
||||
Sep 10 12:21 termcap |
|
|
||
bobby:~% gzip -9 termcap |
|
|
||
bobby:~% ls -l |
|
|
|
|
total 142 |
1 |
ivanov |
lab5 |
143832 |
-rw-r--r-- |
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 |
1 ivanov |
lab5 |
434898 |
-rw-r--r-- |
Sep 10 12:21 termcap bobby:~% bzip2 termcap bobby:~% ls -l
139

total 115 |
1 ivanov |
lab5 |
116736 |
-rw-r--r-- |
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.
140