Загрузки системы. В процессе загрузки будет запущена основная управляющая программа ядро



страница3/16
Дата22.11.2016
Размер6.23 Mb.
Просмотров835
Скачиваний0
1   2   3   4   5   6   7   8   9   ...   16

Иллюстрация 1. Интерфейс командной строки. Взаимодействие пользователя с компьютером посредством терминала.

Требования к терминалу как к точке входа пользователя в систему получаются весьма невысокими. Формально говоря, терминал должен удовлетворять трём обязательным требованиям и одному необязательному. Терминал должен уметь:



  1. передавать текстовые данные от пользователя системе;

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

  3. передавать текстовые данные от системы пользователю;

  4. (необязательно) интерпретировать некоторые данные, передаваемые от системы пользователю, как управляющие последовательности и соответственно обрабатывать их.

Ограничения на интерфейс напрямую не сказываются на эффективности работы пользователя в системе. Однако чем меньше требований к интерфейсу, тем важнее разумно его организовать. Любое взаимодействие может быть описано с трёх точек зрения: во-первых, какую задачу решает пользователь (что он хочет от системы); во-вторых, как он формулирует задачу в доступном пониманию системы виде; и, в-третьих, какими средствами он пользуется при взаимодействии с системой. В частности, текстовый интерфейс удобно рассматривать с точки зрения предоставляемого им языка общения с машиной: во-первых, описанием этого языка задаётся диапазон решаемых с его помощью задач, а во-вторых, слова этого компьютерного языка (называемые в программировании операторами) предоставляют способ решения пользовательских задач (в виде небольших программ-сценариев). Команды, помогающие пользователю быстро и эффективно обмениваться с машиной предложениями на этом языке, и будут третьей составляющей интерфейса командной строки.

Командная строка

Основная среда взаимодействия с Linux — командная строка. Суть её в том, что каждая строка, передаваемая пользователем системе, — это команда, которую та должна выполнить. Пока не нажат Enter, строку можно редактировать, затем она отсылается системе.
[methody@localhost methody]$ cal

Сентября 2004

Вс Пн Вт Ср Чт Пт Сб

1 2 3 4


5 6 7 8 9 10 11

12 13 14 15 16 17 18

19 20 21 22 23 24 25

26 27 28 29 30


[methody@localhost methody]$ echo Hello, world!

Hello, world!


Пример 3. Команды echo и cal


Команда cal выводит календарь на текущий месяц, а команда echo просто выводит на терминал всё, что следовало в командной строке после неё. Получается, что одну и ту же команду можно использовать с разными параметрами (или аргументами), причём параметры эти изменяют поведение команды. Здесь Мефодий захотел посмотреть календарь за март 2005-го года, для чего и передал команде cal два параметра — 3 и 2005:


[methody@localhost methody]$ cal 3 2005

Марта 2005

Вс Пн Вт Ср Чт Пт Сб

1 2 3 4 5

6 7 8 9 10 11 12

13 14 15 16 17 18 19

20 21 22 23 24 25 26

27 28 29 30 31


Пример 4. Команда cal с параметрами

В большинстве случаев при разборе командной строки первое слово считается именем команды, а остальные — её параметрами. Более подробно о разборе командной строки и работе с ней рассказано в разделе Интерпретатор командной строки (shell) и в лекции Возможности командной оболочки.

Подсистема помощи

Пока же Мефодий решил, что узнал о командной строке достаточно для того, чтобы воспользоваться главными командами Linux (по частоте их употребления при изучении системы) — man и info.

Работать с Linux, не заглядывая в документацию, практически невозможно. На это способны только седые аксакалы, у которых все нужные знания не то что в голове — в кончиках пальцев, и предубеждённые новички. Всем прочим настоятельно рекомендуется, приступая к работе, а тем более — к изучению Linux, пользоваться всеми доступными руководствами.

Все утилиты, все демоны Linux, все функции ядра и библиотек, структура большинства конфигурационных файлов, наконец, многие умозрительные, но важные понятия системы описаны либо в руководствах, либо в info-страницах, либо, на худой конец, в несистематизированной сопроводительной документации. Поэтому от пользователя системы не требуется заучивать все возможные варианты взаимодействия с ней. Достаточно понимать основные принципы её устройства и уметь находить справочную информацию. Эйнштейн говорил на этот счёт так: «Зачем запоминать то, что всегда можно посмотреть в справочнике?».

Страницы руководства (man)

Больше всего различной полезной информации содержится в страницах руководства (manpages). Каждая страница руководства (для краткости — просто «руководство») посвящена какому-нибудь одному объекту системы. Для того, чтобы посмотреть страницу руководства, нужно дать команду системе man объект:


[methody@localhost methody]$ man cal

CAL(1) BSD General Commands Manual CAL(1)


NAME

cal - displays a calendar


SYNOPSIS

cal [-smjy13] [[month] year]


DESCRIPTION

Cal displays a simple calendar. If arguments are not specified, the cur-

rent month is displayed. The options are as follows:

. . .
Пример 5. Просмотр страницы руководства


«Страница руководства» занимает, как правило, больше одной страницы экрана. Для того, чтобы читать было удобнее, man запускает программу постраничного просмотра текстов — less. Управлять программой less просто: страницы перелистываются пробелом, а когда читать надоест, надо нажать “q” (Quit). Перелистывать страницы можно и клавишами Page Up/Page Down, для сдвига на одну строку вперёд можно применять Enter или стрелку вниз, а на одну строку назад — стрелку вверх. Переход на начало и конец текста выполняется по командам “g” и “G” соответственно (Go). Полный список того, что можно делать с текстом в less, выводится по команде “H” (Help).

Страница руководства состоит из полей — стандартных разделов, с разных сторон описывающих заинтересовавший Мефодия объект — команду cal. В поле NAME содержится краткое описание объекта (такое, чтобы его назначение было понятно с первого взгляда). В поле SYNOPSIS даётся формализованное описание способов использования объекта (с данном случае — того, как и с какими параметрами запускать команду cal). Как правило, в квадратные скобки в этом поле заключены необязательные параметры команды, которые можно ей передать, а можно и опустить. Например, строка “[[month] year]” означает, что в это месте командной строки параметров у команды может не быть вообще, может быть указан год или пара — месяц и год. Наконец, текст в поле DESCRIPTION — это развёрнутое описание объекта, достаточное для того, чтобы им воспользоваться.

Одно из самых важных полей руководства находится в конце текста. Если в процессе чтения NAME или DESCRIPTION пользователь понимает, что не нашёл в руководстве того, что искал, он может захотеть посмотреть, а есть ли другие руководства или иные источники информации по той же теме. Список таких источников содержится в поле SEE ALSO:


[methody@localhost methody]$ man man

. . .

SEE ALSO


apropos(1), whatis(1), less(1), groff(1), man.conf(5).

. . .
Пример 6. Поле SEE ALSO руководства


До этого поля Мефодий добрался с помощью уже известной команды “G”. Не то, чтобы ему неинтересно было читать руководство по man, скорее наоборот: им двигала любознательность. В Поле SEE ALSO обнаружились ссылки на руководства по less, groff (программе форматирования страницы руководства), структуре конфигурационного файла для man, а также по двум сопутствующим командам с такими говорящими названиями2, что Мефодий немедленно применяет одну команду к имени другой, не заглядывая даже в документацию. Так ни в коем случае не следует делать! А что если запущенная Вами программа начнёт с того, что сотрёт все файлы в Вашем каталоге?
[methody@localhost methody]$ whatis apropos

apropos (1) - search the whatis database for strings

[methody@localhost methody]$ man apropos

apropos(1) apropos(1)


NAME

apropos - search the whatis database for strings

. . .
Пример 7. Вызов whatis

На этот раз Мефодию повезло: команда whatis не делает ничего разрушительного. Как и команда apropos, whatis ищет подстроку в некоторой базе данных, состоящей из полей NAME всех страниц помощи в системе. Различие между ними — в том, что whatis ищет только среди имён объектов (в левых частях полей NAME), а apropos — по всей базе. В результате у whatis получается список кратких описаний объектов с именами, включающими в себя искомое слово, а у apropos — список, в котором это слово упоминается. Для того, чтобы это узнать, всё равно пришлось один раз прочесть документацию.

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

[methody@localhost methody]$ whatis passwd

passwd (1) - update a user's authentication tokens(s)

passwd (5) - password file

passwd (8) - manual page for passwd wrapper version 1.0.5
Пример 8. Руководства с одинаковыми именами


Описания объектов, выводимые whatis, отличаются числом в скобках — номером раздела. В системе руководств Linux девять разделов, каждый из которых содержит страницы руководства к объектам определённого типа. Все разделы содержат по одному руководству с именем «intro», в котором в общем виде и на примерах рассказано, что за объекты имеют отношение к данному разделу:


george@localhost:~> whatis intro

intro (1) - Introduction to user commands

intro (2) - Introduction to system calls

intro (3) - Introduction to library functions

intro (4) - Introduction to special files

intro (5) - Introduction to file formats

intro (6) - Introduction to games

intro (7) - Introduction to conventions and miscellany section

intro (8) - Introduction to administration and privileged commands

intro (9) - Introduction to kernel interface


Пример 9. Руководства intro

Вот названия разделов в переводе на русский:



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

  2. Системные вызовы (пользовательские функции ядра Linux; руководства рассчитаны на программиста, знающего язык Си).

  3. Библиотечные функции (функции, принадлежащие всевозможным библиотекам подпрограмм; руководства рассчитаны на программиста, знающего язык Си).

  4. Внешние устройства и работа с ними (в Linux они называются специальными файлами, см. лекцию Работа с внешними устройствами).

  5. Форматы различных стандартных файлов системы (например конфигурационных).

  6. Игры, безделушки и прочие вещи, не имеющие системной ценности.

  7. Теоретические положения, договорённости и всё, что не может быть классифицировано.

  8. Инструменты администратора (часто недоступные обычному пользователю).

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

В частности, пример с passwd показывает, что в системе “Some Linux”, которую использует Мефодий, есть программа passwd (именно с её помощью Мефодий поменял себе пароль на прошлой лекции), файл passwd, содержащий информацию о пользователях и администраторская программа passwd, обладающая более широкими возможностями. По умолчанию man просматривает все разделы и показывает первое найденное руководство с заданным именем. Чтобы посмотреть руководство по объекту из определённого раздела, необходимо в качестве первого параметра команды man указать номер раздела:
[methody@localhost methody]$ man 8 passwd

PASSWD(8) System Administration Utilities PASSWD(8)

. . .

[methody@localhost methody]$ man -a passwd



PASSWD(1) Some Linux PASSWD(1)

. . .


PASSWD(8) System Administration Utilities PASSWD(8)

. . .


PASSWD(5) Linux Programmer's Manual PASSWD(5)

. . .
Пример 10. Выбор среди страниц руководства с одинаковым именем


Если в качестве первого параметра man использовать “-a”, будут последовательно выданы все руководства с заданным именем. Внутри страниц руководства принято непосредственно после имени объекта ставить в круглых скобках номер раздела, в котором содержится руководство по этому объекту: man(1), less(1), passwd(5) и т. д.

Info

Другой источник информации о Linux и составляющих его программах — справочная подсистема info. Страница руководства, несмотря на обилие ссылок различного типа, остаётся «линейным» текстом, структурированным только логически. Документ info структурирован прежде всего топологически — это настоящий гипертекст, в котором множество небольших страниц объединены в дерево. В каждом разделе документа info всегда есть оглавление, из которого можно перейти сразу к нужному подразделу, откуда всегда можно вернуться обратно. Кроме того, info-документ можно читать и как непрерывный текст, поэтому в каждом подразделе есть ссылки на предыдущий и последующий подразделы.


[methody@localhost methody]$ info info

File: info.info, Node: Top, Next: Getting Started, Up: (dir)
Info: An Introduction

. . .


* Menu:
* Getting Started:: Getting started using an Info reader.

* Expert Info:: Info commands for experts.

* Creating an Info File:: How to make your own Info file.

* Index:: An index of topics, commands, and variables.

. . .

--zz-Info: (info.info.bz2)Top, строк: 24 --All------------------------------



Welcome to Info version 4.6. Type ? for help, m for menu item.
Пример 11. Просмотр info-документа

Программа info использует весь экран: на большей его части она показывает текст документа, а первая и две последних строки отведены для ориентации в его структуре.

Одна или несколько страниц, которые можно перелистывать клавишей Пробел или Page Up/Page Down — это узел (node). Узел содержит обычный текст и меню (menu) — список ссылок на другие узлы, лежащие в дереве на более низком уровне. Ссылки внутри документа имеют вид “* имя_узла::” и перемещать по ним курсор можно клавишей Tab, а переходить к просмотру выбранного узла — клавишей Enter. Вернуться к предыдущему просмотренному узлу можно клавишей “l” (oт «Last»). И, главное, выйти из программы info можно, нажав “q” (Quit). Более подробную справку об управлении программой info можно в любой момент получить у самой info, нажав “?”.

Узлы, составляющие документ info, можно просматривать и подряд, один за другим (с помощью команд “n”, Next, и “p”, Previous), однако это бывает нужно нечасто. В верхней строке экрана info показывает имя текущего узла, имя следующего узла и имя родительского (или верхнего) узла, в котором находится ссылка на текущий. Показанные Мефодию имя узла Top и имя верхнего узла (dir) означают, что просматривается корневой узел документа, выше которого — только каталог со списком всех info-деревьев. В нижней части экрана расположена строка с информацией о текущем узле, а за ней — строка для ввода длинных команд (например, для поиска текста с помощью команды “/”).

Команде info можно указывать в параметрах всю цепочку узлов, приводящую к тому или иному разделу документации, однако это бывает нужно довольно редко:
[methody@localhost methody]$ info info "Getting Started" Help-Q

File: info.info, Node: Help-Q, Prev: Help-Int, Up: Getting Started


Quitting Info

. . .
Пример 12. Просмотр определённого узла info-документа


Сам ли Мефодий это придумал, или подсказал кто, но совершенно правильно было заключить в кавычки имя узла «Getting Started» — в этом случае info искала узел по «адресу» “info -> Getting Started -> Help-Q”. Если бы команда имела вид info info Getting Started Help-Q, то «адрес» получился бы неправильный: “info -> Getting -> Started -> Help-Q”. Ничего таинственного в этом нет, и уже к концу лекции станет понятно, в чём здесь дело (Слова и разделители).

RTFM

Оказывается, использование кавычек Мефодий придумал не сам: спросил у товарища, опытного пользователя Linux по фамилии Гуревич. Гуревич охотно показал, где ставить кавычки, а вот объяснять, что они делают, отказался, и заявил: «Там отличное руководство! Читай!». Документация в Linux играет важнейшую роль. Решение любой задачи должно начинаться с изучения руководств. Не стоит жалеть на это времени. Даже если рядом есть опытный пользователь Linux, который, возможно, знает ответ, не стоит беспокоить его сразу же. Вполне возможно, что, даже зная, что нужно сделать, он не помнит как именно — и поэтому (а также потому, что он — опытный пользователь) начнёт с изучения руководства. Это — закон, у которого есть даже собственное название: RTFM, что означает «Read That Fine Manual»


RTFM

Правило, согласно которому решение любой задачи надо начинать с изучения документации.


Слова Гуревича — практически дословный перевод этой фразы, так что её смысл и происхождение очевидны. Linux рассчитан в основном на тех, кто хочет знать, как им пользоваться.

Руководство — это совсем не учебник, это — справочник. В нём содержится информация, достаточная для освоения описываемого объекта, но никаких обучающих приёмов, никаких определений, повторений и выделения главного в нём обычно нет. Тем более не допускается усечение руководства с целью представить небольшие по объёму, но наиболее важные сведения. Так принято в учебниках, причём главные сведения раскрываются и объясняются очень подробно, а остальные присутствуют в виде ссылки на документацию для профессионалов. Страницы руководств — и есть эта самая документация для профессионалов. Руководство чаще всего читает человек, который уже знает, о чём оно.

Это не значит, что из руководства нельзя понять, как, например, пользоваться командой в простейших случаях. Напротив, часто встречается поле EXAMPLES, которое как раз и содержит примеры использования команды в разных условиях. Однако всё это преследует цель не научить, а раскрыть смысл, пояснить сказанное в других полях. Мефодий нашёл описание работы двойных кавычек в руководстве по sh, однако понял из него далеко не всё — главным образом, потому, что встретил слишком много незнакомых терминов.

Система info может содержать больше, чем man, поэтому в неё часто включают и учебники (принято называть учебник термином «tutorial»), и т. н. «howto» (примеры постановки и решения типовых задач), и даже статьи по теме. Таким образом info-документ может стать, в отличие от страницы руководства, полным сводом сведений. Разработка такого документа — дело трудоёмкое, поэтому далеко не все объекты системы им сопровождаются. Кроме того, и прочесть большой info-документ целиком зачастую невозможно. Поэтому имеет смысл начинать именно и руководства, а если его недостаточно — изучать info.

Если некоторый объект системы не имеет документации ни в формате man, ни в формате info, это нехорошо. В этом случае можно надеяться, что при нём есть сопроводительная документация, не имеющая, увы, ни стандартного формата, ни тем более — ссылок на руководства по другим объектам системы. Такая документация (равно как и примеры использования объекта), обычно помещается в каталог /usr/share/doc/имя_объекта.

Документация в подавляющем большинстве случаев пишется на простом английском языке. Если английский — не родной язык для автора документации, она будет только проще. Традиция писать по-английски идёт от немалого вклада США в развитие компьютерной науки вообще и Linux в частности. Кроме того, английский становится языком международного общения во всех областях, не только в компьютерной. Необходимость писать на языке, который будет более или менее понятен большинству пользователей, объясняется постоянным развитием Linux. Дело не в том, что страницу руководства нельзя перевести, а в том, что её придётся переводить всякий раз, когда изменится описываемый ею объект! Например, выход новой версии программного продукта сопровождается изменением его возможностей и особенностей работы, а следовательно, и новой версией документации. Тогда перевод этой документации превращается в «moving target», сизифов труд.

Ключи

Работая в системе и изучая руководства, Мефодий заметил, что параметры команд можно отнести к двум различным категориям. Некоторые параметры имеют собственный смысл: это имена файлов, названия разделов и объектов в man и info, числа и т. п. Другие параметры собственного смысла не имеют, их значение можно истолковать, лишь зная, к какой команде они относятся. Например, параметр “-a” можно передать не только команде man, но и команде who, и команде last, при этом значить для них он будет разное. Такого рода параметры называются модификаторами выполнения или ключами (options).


[methody@localhost methody]$ date

Вск Сен 19 23:01:17 MSD 2004

[methody@localhost methody]$ date -u

Вск Сен 19 19:01:19 UTC 2004
Пример 13. Команда date с ключом

Для решения разных задач одни и те же действия необходимо выполнять слегка по-разному. Например, для синхронизации работ в разных точках земного шара лучше использовать единое для всех время (по Гринвичу), а для организации собственного рабочего дня — местное время (с учётом сдвига по часовому поясу и разницы зимнего и летнего времени). И то, и другое время показывает команда date, только для работы по Гринвичу ей нужен дополнительный параметр-ключ “-u” (он же “--universal”).

Однобуквенные ключи

Для формата ключей нет жёсткого стандарта, однако существуют договорённости, нарушать которые в наше время уже неприлично. Во-первых, если параметр начинается на “-”, это — однобуквенный ключ. За “-”, как правило, следует один символ, чаще всего — буква, обозначающая действие или свойство, которое этот ключ придаёт команде. Так проще отличать ключи от других параметров — и пользователю при наборе командной строки, и программисту, автору команды.

Во-вторых, желательно, чтобы имя ключа было значащим — как правило, это первая буква названия пресловутого действия или свойства. Например, ключ “-a” в man и who происходит от слова «All» (всё), и изменяет работу этих команд так, что они начинают показывать информацию, о которой они обычно умалчивают. А в командах cal и who смысл ключа “-m” — разный:

[methody@localhost methody]$ who -m

methody tty1 Sep 20 13:56 (localhost)

[methody@localhost methody]$ cal -m

Сентября 2004

Пн Вт Ср Чт Пт Сб Вс

1 2 3 4 5

6 7 8 9 10 11 12

13 14 15 16 17 18 19

20 21 22 23 24 25 26

27 28 29 30
Пример 14. Использование ключа “-m” в разных командах

Для who ключ “-m” означает «Me», то есть «Я», и в результате who работает похоже на whoami3. А для cal ключ “-m” — это команда выдать календарь, считая первым днём понедельникMonday»), как это принято в России.

Свойство ключа быть, с одной стороны, предельно коротким, а с другой стороны — информативным, называется аббревиативностью. Не только ключи, но и имена наиболее распространённых команд Linux обладают этим свойством.

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


[methody@localhost methody]$ info info "Expert info" Cross-refs Help-Cross -o text

info: Запись ноды (info.info.bz2)Help-Cross...

info: Завершено.

[methody@localhost methody]$ cat text -n

1 File: info.info, Node: Help-Cross, Up: Cross-refs

2

3 The node reached by the cross reference in Info



4 -----------------------------------------------

. . .



Поделитесь с Вашими друзьями:
1   2   3   4   5   6   7   8   9   ...   16


База данных защищена авторским правом ©nethash.ru 2017
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал