1. Структура системы встроенной электронной помощи и команда man.

      1. Источники справочной информации

Если вы окажетесь в ситуации, когда не знаете, что предпринять или сделать для достижения желаемой цели, лучше всего начать искать подсказку в самой системе. Дистрибутив Red Hat Linux содержит тысячи страниц документации, представленной в электронном виде, так что ответы на все возникающие вопросы у вас, что называется, "на кончиках пальцев". Существует несколько независимых источников, которые содержат информацию почти по любому аспекту работы в системе Linux:

  • страницы интерактивного руководства man;

  • гипертекстовое руководство info;

  • документация, прилагаемая к пакетам ПО;

  • текстовые файлы HOWTO и FAQ проекта Linux Documentation Project;

  • команда locate.

      1. Страницы интерактивного руководства man

Выше уже было вкратце рассказано о команде man, с помощью которой пользователь всегда может в затруднительной ситуации получить подсказку почти по любой команде системы, форматах файлов и системных вызовах. Это основной способ получения подсказки во всех UNIX-системах. Страницы руководства man в Linux делятся на следующие секции:

Таблица 3.4. Основные секции интерактивного руководства man

Секция

Содержание

1

Команды пользователя

8

Системные команды

2

Системные вызовы

3

Библиотечные вызовы (подпрограммы)

4

Устройства

5

Форматы файлов

6

Игры

7

Разное

9

Ядро (kernel internals)

n

Tcl/Tk commands

Порядок перечисления секций в этой таблице не случаен. Дело в том, что файлы с информацией расположены в подкаталогах каталога /usr/man и команда man ищет нужную информацию, просматривая эти подкаталоги именно в том порядке, который приведен табл. 3.4. Если вы, например, дадите команду

[user]$ man swapon

то получите справку о команде swapon из секции 8. Поэтому если вы хотите получить справку по системному вызову swapon, надо дать команду

[user]$ man 2 swapon

указывая номер секции, в которой надо искать информацию.

Страницы man просматриваются с помощью команды less (что дает возможность просматривать информацию поэкранно и перемещаться по этим экранам вперед и назад), так что для управления процессом вывода информации можно использовать клавиши, используемые в программе less. Наиболее употребительные:

Таблица 3.5. Клавиатурные команды, используемые при просмотреman-страниц

Клавиша

Назначение

<Q>

Выход из программы

<Enter>

Просмотр строка за строкой

<Space>

Вывод следующего экрана информации

<B>

Вернуться к предыдущему экрану

</> за которой следует строка символов и <Enter>

Поиск введенной строки символов

<N>

Повторение предыдущего поиска.

Если вы предпочитаете читать текст не с экрана, а с отпечатанной копии, то можете отпечатать соответствующую страницу, воспользовавшись командой

[user]$ man имя_команды | lpr

    1. Интерпретатор ksh. Файлы инициализации, служебные и системные переменные.

    2. Встроенные команды и функции программной оболочки ksh.

ПЕРЕМЕННЫЕ СРЕДЫ ВЫПОЛНЕНИЯ

Некоторые переменные среды являются зарезервированными словами,

которые использует интерпретатор shell. Их значения устанавливаются,

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

различными другими частями системы UNIX. Имея под рукой полный спи-

сок, вы можете убедиться, что все необходимые переменные определены.

Имена переменных могут варьироваться в System V, BSD и XENIX. Здесь

приведены имена для System V.

Эти shell-переменные являются частью среды вашего регистрацион-

ного интерпретатора shell. Они хранятся в виде символьных строк, и

если уж они установлены, от них нельзя избавиться. Только переуста-

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

Когда меняются значения переменных, новые значения локальны для теку-

щего интерпретатора shell до тех пор, пока они не будут экспортирова-

ны.

CDPATH Строка поиска, определяющая, куда вы можете

перейти с помощью команды cd

HOME Место хранения ваших файлов в системном дереве

IFS Внутренний разделитель полей, который определяет

символы, разделяющие слова между собой

LOGNAME Ваше регистрационное имя, определенное в /etc/passwd

MAIL Определяет местонахождение вашего почтового ящика,

чтобы вас можно было оповестить о поступлении вам

новой почты

PATH Определяет порядок и имена каталогов для поиска

исполняемых модулей

PS1 Главная строка подсказки, которая отображается

в качестве вашего обычного приглашения

PS2 Вторичная строка подсказки, которая отображается,

когда интерпретатору shell нужен дополнительный ввод

TERM Строка, определяющая ваш тип терминала

TERMCAP Устанавливается либо на файл описания терминала,

либо на запись этого файла

TZ Зона времени, понимаемая так, как описано в ctime(3)

SHELL Имя shell-интерпретатора, который вы запускаете

EXINIT Строка инициализации для редактора ex

ПОСЛЕДОВАТЕЛЬНОСТЬ ДЕЙСТВИЙ ИНТЕРПРЕТАТОРА SHELL

Shell выполняет определенную последовательность действий по ин-

терпретации команд для каждой прочитанной им строки. Зная эту после-

довательность, вы можете изолировать многие проблемы на соответствую-

щем уровне. Иногда на определенном шаге этой последовательности могут

появиться странные вхождения символов. Поэтому важно знать, когда из-

меняются значения переменных.

Один из примеров относится к раскрытию имени файла и символу

звездочки. Shell НЕ раскрывает метасимволы во время присвоения значе-

ний. Оператор F=* означает в действительности, что переменной F прис-

ваивается один символ. Когда выполняется шаг 7 последовательности

действий, звездочка раскрывается как метасимвол имени файла, превра-

щаясь во все имена файлов в текущем каталоге. Это можно продемонстри-

ровать на примере команды "echo $F". Для того чтобы сохранить лите-

ральное значение звездочки, вам нужно экранировать ее, что защитит ее

от шага 7. Получается команда echo "$F". А для того чтобы вообще по-

давить значение переменной F, вам следует исключить шаг 3 - подста-

новку параметров. Указывая команду echo '$F', вы печатаете буквы $F,

а не значение переменной F.

Действия выполняются в таком порядке:

1. Чтение входа и синтаксический разбор

2. Словесное сопровождение разбора

3. Подстановка параметров

4. Подстановка команд

5. Переназначение ввода-вывода

6. Обработка внутренних разделителей полей

7. Раскрытие имени файла

8. Трассировка выполнения

9. Обработка переменных среды

10. Выполнение команды

Далее эти шаги рассматриваются более подробно. Когда вы програм-

мируете на языке shell, попытайтесь представить себе, какой шаг вы

используете для каждой строки текста программы. Возможно, вы путаете

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

лять эффект от действия ваших команд и сокращать число возможных оши-

бок.

1. Командная строка или логическая конструкция читается с терми-

нала или из файла данных. Чтение останавливается при обнаружении сле-

дующих символов: точки с запятой (;), символа фоновой задачи (&), ло-

гического и (&&), логического или (||) либо символа новой строки

(\n). Выполняется разбор введенных данных на слова с учетом пробелов

и табуляций.

2. Если в текущем интерпретаторе shell установлен флаг многос-

ловности (-v), то прочитанная строка отображается на стандартное уст-

ройство регистрации ошибок.

3. Выполняется подстановка параметров. Сюда входит подстановка

позиционных параметров, подстановка переменных и подстановка специ-

альных выражений. Параметры всегда имеют префикс в виде денежного

знака ($).

4. Выполняется подстановка команд. Это относится ко всем коман-

дам, взятым в символы ударения (`). Такая команда вычисляется и вы-

полняется, а результирующий текст заменяет исходное выражение в пол-

ной командной строке. Выполняемая команда может содержать

последовательные команды, конвейеры или команды, сгруппированные в

скобках. Любые лишние пробелы, табуляции или символы новой строки,

появившиеся в результате выполнения команды, впоследствии удаляются

при обработке внутренних разделителей полей. Если нужно сохранить эти

лишние символы, примените двойные кавычки вокруг всего выражения.

5. Проверяется переназначение ввода-вывода. Если таковое имеет-

ся, исходный дескриптор файла (0, 1 или 2) закрывается, а затем отк-

рывается повторно с новым значением. Вновь открытый дескриптор файла

занимает в файловом вводе-выводе то же место, что и закрытый файловый

дескриптор. Символы переназначения удаляются из командной строки.

6. Поскольку командная строка могла измениться по сравнению со

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

рается на слова с учетом переменной среды IFS. Эта переменная содер-

жит разделители между полями, которые отделяют слова друг от друга в

командной строке. Каждый символ командной строки, который занесен в

IFS, заменяется на пробел, чтобы разграничить слова. Все неэкраниро-

ванные пробелы, табуляции, символы новой строки и нулевые аргументы

удаляются из командной строки. Все экранированные значения переменных

защищены от разбора, выполняемого в соответствии с IFS. Для того что-

бы увидеть значение IFS, введите такой конвейер команд:

echo "<$IFS>" | od -bc

7. Далее shell ищет все слова, для которых требуется раскрытие

имени файла (метасимвола). Делается попытка сопоставить образец с

файлами текущего каталога. Если подходящие файлы найдены, они заменя-

ют выражение в командной строке. Если соответствия не обнаружено, ме-

тасимволы остаются в этом выражении. Все присвоения переменным защи-

щены от раскрытия метасимволов. Типичным примером является команда

"ls z*". Если имена каких-либо файлов начинаются с буквы z, эти имена

перечисляются. В противном случае печатается сообщение "z* not

found".

8. Если установлен флаг трассировки выполнения (-x), то команд-

ная строка отображается на стандартное устройство регистрации ошибок

перед тем, как она будет фактически выполнена. Если это командная

строка, то она выводится с префиксом "+", если же это просто присвое-

ние значения переменной, префикса нет.

9. На этом шаге всем переменным присваиваются значения, затем в

соответствии с переменной среды PATH ищется местонахождение команды.

Присвоение значений переменным происходит справа налево вдоль команд-

ной строки. Поиск по переменной PATH, наоборот, происходит слева нап-

раво. Если имя найдено, то полное маршрутное имя заменяет вызов ко-

манды в командной строке. Если переменная PATH имеет пустое значение,

подразумевается текущий каталог. Если в каком-либо месте исходного

имени команды имеется косая черта (/), то переменная PATH не просмат-

ривается, а считается, что указано полное маршрутное имя.

10. Наконец, команда выполняется. Если это встроенная команда,

текущий shell отрабатывает ее. В противном случае делается попытка

загрузить команду в память, как если бы это была скомпилированная

программа. Если эта попытка успешна, команда выполняется посредством

системного вызова exec(2). Если загрузка команды не удалась, то счи-

тается, что это командный файл еще одного интерпретатора shell, и по-

рождаемый shell читает этот командный файл в качестве своих данных.

СПЕЦИАЛЬНЫЕ СИМВОЛЫ SHELL-ПЕРЕМЕННЫХ

Приведенные здесь символы рассматриваются shell-переменными как

специальные, так как они означают завершение слова. Для того чтобы

использовать символ в его обычном значении, а не в качестве специаль-

ной функции, нужно экранировать его обратной косой чертой (\) или

взять в одинарные кавычки.

\b Пробел: код 20 (шестнадцатеричный), ограничитель слов

\n Символ новой строки: ^j, код A (шестнадцатеричный),

ограничитель слов

\t Табуляция: ^i, код 9, ограничитель слов

; Точка с запятой: завершает программный конвейер

( Левая скобка: ограничивает подчиненный shell

) Правая скобка: ограничивает подчиненный shell

| Вертикальная черта, или символ программного конвейера:

разделяет команды

^ Стрелка вверх, знак вставки: старый символ,

используемый в качестве |

> Правая угловая скобка (знак больше): переназначает

стандартный вывод

< Левая угловая скобка (знак меньше): переназначает

стандартный ввод

& Амперсанд: вызывает асинхронное (фоновое) выполнение

{ Левая фигурная скобка: очерчивает слово для

первоначального разбора слова

} Правая фигурная скобка: завершает знак очерчивания

слова

СПЕЦИАЛЬНЫЕ СИМВОЛЫ SHELL-ОПЕРАТОРОВ

Эти символы встречаются в синтаксисе операторов языка shell. Их

следует рассматривать как зарезервированные. Отдельные символы могут

использоваться по-разному. Например, символ # является комментарием в

операторе, а также может быть параметром, как в записи $#, означающей

количество аргументов в командной строке.

&& Двойной амперсанд: выполнить список, если программный

конвейер отработал успешно

|| Двойная вертикальная черта: выполнить список в случае

неудачи программного конвейера

` Знак ударения: перехватить стандартный вывод в команде

* При использовании в качестве параметра соответствует

всем позиционным параметрам; является также символом

генерации имен файлов, соответствующим любой строке

# Комментарий до конца строки; соответствует также

количеству позиционных параметров в командной строке

? При использовании в качестве параметра соответствует

статусу завершения последней синхронно выполненной

команды; используется также при генерации имен файлов

и означает при этом любой одинарный символ

- Обозначает флаги, влияющие на функционирование

интерпретатора shell

$ Вводит заменяемые параметры; соответствует также

идентификатору процесса

! При использовании в качестве параметра соответствует

идентификатору процесса последнего фонового задания;

применяется также в команде проверки, где означает "не"

" Двойная кавычка: окаймляет символы и разрешает

производить подстановку параметров

' Одинарная кавычка: окаймляет символы, но запрещает

подстановку параметров

\ Обратная наклонная черта: экранирует одиночный символ,

чтобы снять его специальное значение

[] Альтернативное использование для вызова команды

проверки. Применяется также при генерации имен файлов,

означая при этом диапазон символов

@ Соответствует каждому позиционному параметру

командной строки

>> Дополнить стандартный вывод

<< Переназначить стандартный ввод на вводимые строки

текста

& Используется как символ фонового процесса;

соответствует также "файловому дескриптору",

если используется в переадресации

ВСТРОЕННЫЕ ОПЕРАТОРЫ ЯЗЫКА SHELL

Перечисленные ниже команды употребляются в программах на языке

shell. Здесь имеется в виду System V Bourne shell.

В System V.2 - более новой версии System V - интерпретатор shell

имеет некоторые дополнительные команды, перечисленные в отдельном

списке.

Имеется также интерпретатор ksh (фактически это улучшенный

Bourne shell), обладающий возможностями командных строк, характерными

для csh (Си-shell). Интерпретатор ksh здесь не рассматривается.

ПРИМЕЧАНИЕ. Не позволяйте команде exec сбить вас с толку. Это не

то же самое, что команда exec(2). Данная команда exec обрабатывается

интерпретаторм shell, а exec(2) является системным вызовом.

КОМАНДЫ System V Bourne Shell

. Точка: запустить данную команду из текущего

интерпретатора shell, а не из порождаемого

: Двоеточие: ничего не делать, а только возвратить

успешный статус (0)

{} Фигурные скобки: запустить последовательный список

команд

break Оборвать следующую итерацию текущего цикла

case Многократный выбор if-then-else

cd Сменить каталог

continue Перейти на следующую итерацию цикла for, while

или until

eval Выполнить еще раз этап подстановки переменных

exec Выполнить команду с аргументами, перекрывая

текущий shell

exit Остановить выполнение текущего командного файла

export Отправить значение переменной всем подчиненным

интерпретаторам shell

for Управляющее слово в цикле for-do-done

if Управляющее слово в последовательности if-then-else

newgrp Изменить текущий идентификатор группы

read Одну строку стандартного ввода присвоить переменной

в качестве значения

readonly Объявить переменную только для чтения, ее значение

изменять нельзя

set Включение и выключение флагов конфигурации shell

shift Убрать позиционный параметр из командной строки

test Вычислить взаимосвязи между строками и целыми числами

times Печатать время работы процессов, запущенных

из shell

trap Определить обработчики прерываний для конкретных

сигналов

ulimit Установить предел размера файлов в 512-байтных блоках

umask Маска прав доступа к файлам, используемая при их

создании

until Управляющее слово в цикле until-do-done

wait Shell ждет завершения указанных порожденных

процессов

while Управляющее слово в цикле while-do-done

ДОПОЛНИТЕЛЬНЫЕ КОМАНДЫ System V.2

hash При поиске команд использовать хэширование

name Определить имя shell-функции

pwd Сообщить текущий каталог; теперь это встроенная

команда для ускорения

return Выйти из shell-функции и возвратить значение

set -f Запретить фазу генерации имен файлов

set -h Сохранить, а не выполнять функциональные команды,

если они определены

type Определить, каким образом можно интерпретировать

имя в качестве команды

unset Удалить shell-переменные и функции

Соседние файлы в папке материалы к собеседованию