Работа с наиболее часто используемыми компонентами
6.3.1. Командные оболочки (интерпретаторы)
Как было сказано выше, для управления ОС используется командные интерпретаторы (shell).
Зайдя в систему, Вы увидите приглашение — строку, содержащую символ «$» (далее этот символ будет обозначать командную строку). Программа ожидает ваших команд. Роль командного интерпретатора — передавать ваши команды операционной системе. По своим функциям он соответствует command.com в DOS, но несравненно мощнее. При помощи командных интерпретаторов можно писать небольшие программы — сценарии (скрипты). В Linux доступны следующие командные оболочки:
- bash — самая распространенная оболочка под linux. Она ведет историю команд и предоставляет возможность их редактирования;
- pdksh — клон korn shell, хорошо известной оболочки в UNIX™ системах.
Оболочкой по умолчанию является «Bash» (Bourne Again Shell). Чтобы проверить, какая оболочка используется в данный момент выполните команду:
echo $SHELL
У каждой оболочки свой синтаксис. Мы рекомендуем Вам использовать Bash. В дальнейшем мы будем строить свои примеры с использованием этой оболочки.
6.3.2. Командная оболочка Bash
В bash имеется несколько приемов для работы со строкой команд. Например, используя клавиатуру, вы можете:
- Ctrl+A — перейти на начало строки;
- Ctrl+U — удалить текущую строку;
- Ctrl+C — остановить текущую задачу.
Вы можете использовать «;» для того, чтобы ввести несколько команд одной строкой. Клавиши Стрелка вверx и Стрелка вниз, позволяют вам перемещаться по истории команд. Для того чтобы найти конкретную команду в списке набранных, не пролистывая всю историю, нажмите Ctrl+R.
Команды, присутствующие в истории, отображаются в списке пронумерованными. Для просмотра истории можно воспользоваться командой history. Для того чтобы запустить конкретную команду наберите:
!номер команды
Если вы введете:
!!
запустится последняя из набранных команд.
Иногда имена программ и команд слишком длинны. К счастью, Bash сам может завершать имена.
Нажав клавишу Tab, вы можете завершить имя команды, программы или каталога. Например, предположим, что вы хотите использовать программу декомпрессии bunzip2. Для этого наберите:
bu
затем нажмите Tab. Если ничего не происходит, то, вероятно, существует несколько возможных вариантов завершения команды.
Нажав клавишу Tab еще раз, вы получите список имён, начинающихся с «bu».
Например, у вас есть:
$ bu
buildhash builtin bunzip2
Наберите: n (bunzip — это единственное имя, третьей буквой которого является «n»), а затем нажмите клавишу табуляции. Оболочка дополнит имя, и вам остается лишь нажать Enter, чтобы запустить команду.
Заметим, что программу, вызываемую из командной строки, Bash ищет в каталогах, определяемых в системной переменной PATH. По умолчанию в этот перечень каталогов не входит текущий каталог, обозначаемый ./ (точка слеш) (если только вы не выбрали один из двух самых слабых уровней защиты, см. об этом ниже), поэтому, для запуска программы prog из текущего каталога, надо дать команду: ./prog.
6.3.3. Базовые команды оболочки Bash
Все команды, приведенные ниже, могут быть запущены в режиме консоли. Для получения более подробной информации используйте команду man. Пример:
man ls
6.3.3.1. Команда su
Позволяет вам получить права администратора. Когда вы набираете su, оболочка запрашивает у вас пароль суперпользователя (root). Введите пароль и нажмите Enter: теперь вы получили привилегии суперпользователя. Чтобы вернуться к правам вашего пользовательского бюджета, наберите exit.
6.3.3.2. Команда cd
Позволяет сменить каталог. Она работает как с абсолютными, так и с относительными путями. Предположим, что Вы находитесь в своем домашнем каталоге и хотите перейти в его подкаталог docs. Для этого введите относительный путь:
cd docs
Чтобы перейти в каталог /usr/bin, наберите (абсолютный путь):
cd /usr/bin/
Некоторые варианты команды:
cd ..
позволяет вам сделать текущим родительский каталог (обратите внимание на пробел между cd и ..);
cd -
позволяет вам вернуться в предыдущий каталог. Команда cd без параметров переводит вас в ваш домашний каталог.
6.3.3.3. Команда ls
ls (list) выдает список файлов в текущем каталоге. Две основные опции:
- -a — просмотр всех файлов, включая скрытые;
- -l — отображение более подробной информации.
6.3.3.4. Команда rm
Эта команда используется для удаления файлов.
Предупреждение
Удалив файл, вы не сможете его восстановить!
Синтаксис:
rm [параметры] имя_файла
У данной программы существует ряд параметров. Самые часто используемые: -i — запрос на удаление файла, -r — рекурсивное удаление (т.е. удаление, включая подкаталоги и скрытые файлы).
Пример:
rm -i ~/html/*.html
удаляет все файлы html в вашем каталоге html.
6.3.3.5. Команды mkdir и rmdir
Команда mkdir позволяет создать каталог, тогда как rmdir удаляет каталог, при условии, что он пуст.
Синтаксис:
mkdir имя_каталога
rmdir имя_каталога
Команда rmdir часто заменяется командой rm -rf, которая позволяет вам удалять каталоги, даже если они не пусты.
6.3.3.6. Команда less
less позволяет вам постранично просматривать текст.
Синтаксис:
less имя_файла
Крайне полезно просмотреть файл перед тем, как его редактировать. Для выхода нажмите q.
6.3.3.7. Команда grep
Данная команда имеет много опций и предоставляет возможность поиска символьной строки в файле.
Синтаксис:
grep шаблон_поиска файл
6.3.3.8. Команда ps
Отображает список текущих процессов. Колонка команд указывает имя процесса, колонка PID (идентификатор процесса) — номер процесса (этот номер используется для операций с процессом, например, чтобы завершить его командой kill).
Синтаксис:
ps аргументы
Аргумент u предоставляет вам больше информации, ax позволяет вам просмотреть те процессы, которые не принадлежат вам (такие, как те, что были запущены во время процесса загрузки.).
6.3.3.9. Команда kill
Если программа перестала отвечать или зависла, используйте данную команду, чтобы её завершить.
Синтаксис:
kill PID_номер
Иногда необходимо будет использовать команду kill с параметром -9 (kill -9 PID_номер), когда обычная команда kill не дает желательного эффекта. Номер PID выясняется при помощи команды ps.
6.3. Использование многозадачности
AltLinux — это многозадачная система. Продемонстрируем на двух примерах, как это можно использовать.
Первый пример — запуск программы в фоновом режиме. Для того чтобы это сделать, вам нужно лишь набрать «&» после имени программы. После этого оболочка дает вам возможность запускать другие приложения. Будьте осторожны, так как некоторые программы интерактивны и их запуск в фоновом режиме бессмысленен. Подобные программы просто остановятся, будучи запущенными в фоновом режиме. Для того чтобы вернуть их в обычный режим, наберите:
fg имя_программы
Второй метод представляет собой запуск нескольких независимых сеансов. В консоли нажмите Alt и одну из клавиш, находящихся в интервале от F1 до F6. На экране появится новое приглашение системы, и вы сможете открыть новый сеанс. Этот метод также позволяет вам работать на другой консоли, если консоль, которую вы использовали до этого, не отвечает или вам необходимо остановить зависшую программу.
7. Использование терминала
В операционной системе Linux пользователю доступны два режима работы: графический и текстовый. Наряду с графическим, текстовый режим — это полнофункциональный способ управления системой с помощью интерфейса командной строки.
Умение найти командную строку и выполнить в ней команду пригодится любому пользователю Linux, даже если он работает исключительно в графической среде. Дело в том, что графические интерфейсы в Linux очень многообразны, кроме того, пользователь имеет возможность существенно поменять конкретный вид и расположение частей интерфейса по своему вкусу. Найти общие для всех и неизменные свойства графического интерфейса в Linux весьма непросто (если вообще возможно). В то же время командная строка доступна всегда и всюду выглядит практически одинаково. Поэтому очень часто в документации, рассчитанной на широкую аудиторию и общие случаи, в пример приводятся именно фрагменты командной строки. Нередко к командной строке апеллируют люди, к которым обратились за советом по Linux: процитировать команду, которая даст нужный результат, гораздо проще и лаконичнее, чем словами описывать действия, которые нужно произвести для достижения того же эффекта в графической среде.
8. Командная строка
Командная строка — способ организации интерфейса, в котором каждая строка, введённая пользователем, — это команда системе, которую она должна выполнить. Термин «командная строка» происходит от способа ввода команд в одну строку, который завершается нажатием клавиши Ввод (Enter). В Linux этот вид интерфейса всегда был основным, а потому хорошо развитым.
Первое слово в строке — это имя исполняемого файла — программы, все остальные — параметры. Программа выполняет нужные пользователю действия и может делать это по-разному, в зависимости от полученных параметров. Параметры бывают общими (например, имя файла, который нужно обработать) или специфическими для конкретной программы.
Чтобы получить командную строку, пользователь должен войти в систему и запустить программу, принимающую команды и передающую их на выполнение — командную оболочку (интерпретатор командной строки — по-английски «shell»).
Терминал
Устройство последовательного ввода и вывода символьной информации, способное воспринимать часть символов как управляющие для редактирования ввода, посылки сигналов и т. п. Используется для взаимодействия пользователя и системы.
Вызвать командную строку можно несколькими способами. Из графической среды можно получить командную строку при помощи эмулятора терминала — обычно, они перечислены в главном меню в разделе Терминал. В неграфическом режиме вам доступны несколько виртуальных консолей. Каждая консоль запускается одновременным нажатием Ctrl+Alt и функциональной клавиши с номером этой консоли (от F1 до F6). Далее запустится командная оболочка и появится приглашение командной строки. Зарегистрировавшись, можно работать в системе из выбранной консоли. Переключение между консолями выполняется нажатием Alt+F1 — Alt+F6. Переход в графический режим осуществляется при помощи комбинации клавиш Alt+F7.
Умение найти командную строку и выполнить в ней команду пригодится любому пользователю Linux, даже если он работает исключительно в графической среде. Дело в том, что графические интерфейсы в Linux очень многообразны, кроме того, пользователь имеет возможность существенно поменять конкретный вид и расположение частей интерфейса по своему вкусу. Найти общие для всех и неизменные свойства графического интерфейса в Linux весьма непросто (если вообще возможно). В то же время командная строка доступна всегда и всюду выглядит практически одинаково. Поэтому очень часто в документации, рассчитанной на широкую аудиторию и общие случаи, в пример приводятся именно фрагменты командной строки. Нередко к командной строке апеллируют люди, к которым обратились за советом по Linux: процитировать команду, которая даст нужный результат, гораздо проще и лаконичнее, чем словами описывать действия, которые нужно произвести для достижения того же эффекта в графической среде.
Примечание
Когда упоминается команда, которую нужно выполнить в Linux, всегда имеется в виду команда, которую нужно ввести в командной строке.
Командная строка начинается приглашением — это подсказка, свидетельствующая о том, что система готова принимать команды пользователя. В процессе выполнения команды система может вывести те или иные сообщения, а когда выполнение завершается — вновь выводится приглашение командной строки. Приглашение может быть оформлено по-разному, но чаще всего оно заканчивается символом $. В примерах документации этим символом условно обозначается командная строка: всё, что следует после него и до конца строки — это и есть команда, которую нужно ввести. Пока не нажат Enter, набранную команду можно редактировать.
8.1. Команда
Простейшая команда состоит из одного «слова», например, команда cal, выводящая календарь на текущий месяц.
$ cal
Март 2012
Вс Пн Вт Ср Чт Пт Сб
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
8.2. Команда и параметры
$ cal 4 2012
Апрель 2012
Вс Пн Вт Ср Чт Пт Сб
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
Команда cal 4 2012 состоит из двух частей — собственно команды cal и «остального». То, что следует за командой называется параметрами (или аргументами) и они вводятся для изменения поведения команды. В большинстве случаев, первое слово считается именем команды, а остальные — её параметрами.
8.3. Команда и ключи
Для решения разных задач одни и те же действия необходимо выполнять по-разному. Например, для синхронизации работ в разных точках земного шара лучше использовать единое для всех время (по Гринвичу), а для организации собственного рабочего дня — местное время (с учётом сдвига по часовому поясу и разницы зимнего и летнего времени). И то, и другое время показывает команда date, только для работы по Гринвичу ей нужен дополнительный параметр -u (он же --universal).
[user@localhost user]$ date
Пнд Мар 12 16:10:02 FET 2012
[user@localhost user]$ date -u
Пнд Мар 12 16:10:02 UTC 2012
Такого рода параметры называются ключами или модификаторами выполнения. Ключ принадлежит данной конкретной команде и сам по себе смысла не имеет. Этим он отличается от других параметров (например, имён файлов, чисел), имеющих собственный смысл, не зависящий ни от какой команды. Каждая команда может распознавать некоторый набор ключей и соответственно изменять своё поведение. Один и тот же ключ может определять для разных команд совершенно разные значения.
Для формата ключей нет жёсткого стандарта, однако существуют договорённости:
- Если ключ начинается на -, то это однобуквенный ключ. За -, как правило, следует один символ, чаще всего буква, обозначающая действие или свойство, которое этот ключ придаёт команде. Так проще отличать ключи от других параметров.
- Если ключ начинается на --, то он называется полнословным ключом. Полнословный формат ключа начинается на два знака --, за которыми следует полное имя обозначаемого этим ключом содержания.
Некоторые ключи имеют и однобуквенный, и полнословный формат, а некоторые — только полнословный.
Информацию о ресурсах каждой команды можно получить, используя ключ --help. К примеру, получить подсказку о том, что делает команда rm, можно, набрав в терминале rm --help.
9. Режим суперпользователя
9.1. Какие бывают пользователи?
Linux — система многопользовательская, а потому пользователь — ключевое понятие для организации всей системы доступа в Linux. Файлы всех пользователей в Linux хранятся раздельно, у каждого пользователя есть собственный домашний каталог, в котором он может хранить свои данные. Доступ других пользователей к домашнему каталогу пользователя может быть ограничен.
Суперпользователь в Linux — это выделенный пользователь системы, на которого не распространяются ограничения прав доступа. Именно суперпользователь имеет возможность произвольно изменять владельца и группу файла. Ему открыт доступ на чтение и запись к любому файлу или каталогу системы.
Среди учётных записей Linux всегда есть учётная запись суперпользователя — root. Поэтому вместо «суперпользователь» часто говорят «root». Множество системных файлов принадлежат root, множество файлов только ему доступны для чтения или записи. Пароль этой учётной записи — одна из самых больших драгоценностей системы. Именно с её помощью системные администраторы выполняют самую ответственную работу.
9.2. Для чего может понадобится режим суперпользователя?
Системные утилиты, например, такие как Центр управления системой или Программа управления пакетами Synaptic требуют для своей работы привилегий суперпользователя, потому что они вносят изменения в системные файлы. При их запуске выводится диалоговое окно с запросом пароля системного администратора.
9.3. Как получить права суперпользователя?
Для опытных пользователей, умеющих работать с командной строкой, существует два различных способа получить права суперпользователя.
Первый — это зарегистрироваться в системе под именем root.
Второй способ — воспользоваться специальной утилитой su (shell of user), которая позволяет выполнить одну или несколько команд от лица другого пользователя. По умолчанию эта утилита выполняет команду sh от пользователя root, то есть запускает командный интерпретатор. Отличие от предыдущего способа в том, что всегда известно, кто именно запускал su, а значит, ясно, кто выполнил определённое административное действие.
В некоторых случаях удобнее использовать не su, а утилиту sudo, которая позволяет выполнять только заранее заданные команды.
Важно
Для того чтобы воспользоваться командами su и sudo, необходимо быть членом группы wheel. Пользователь, созданный при установке системы, по умолчанию уже включён в эту группу.
9.4. Как перейти в режим суперпользователя?
Для перехода в режим суперпользователя наберите в терминале команду su -.
Если воспользоваться командой su без ключа, то происходит вызов командного интерпретатора с правами root. При этом значение переменных окружения, в частности $PATH, остаётся таким же, как у пользователя: в переменной $PATH не окажется каталогов /sbin, /usr/sbin, без указания полного имени будут недоступны команды route, shutdown, mkswap и другие. Более того, переменная $HOME будет указывать на каталог пользователя, все программы, запущенные в режиме суперпользователя, сохранят свои настройки с правами root в каталоге пользователя, что в дальнейшем может вызвать проблемы.
Чтобы избежать этого, следует использовать su -. В этом режиме su запустит командный интерпретатор в качестве login shell, и он будет вести себя в точности так, как если бы в системе зарегистрировался root.
10. Управление пользователями
10.1. Общая информация
Linux, как и любой UNIX — многопользовательская система. Также имеются группы пользователей, основное предназначение которых — облегчить управление большим количеством пользователей, а также более точно распределить права доступа к различным объектам системы. Пользователи и группы внутри системы обозначаются цифровыми идентификаторами — UID и GID, соответственно.
Пользователь может входить в одну или несколько групп. По умолчанию он входит в группу, совпадающую с его именем. Чтобы узнать, в какие еще группы входит пользователь, введите команду id, вывод её может быть примерно следующим:
uid=500(test) gid=500(test) группы=500(test),16(rpm)
Такая запись означает, что пользователь test (цифровой идентификатор 500) входит в группы test и rpm. Разные группы могут иметь разный уровень доступа к тем или иным каталогам; чем в большее количество групп входит пользователь, тем больше прав он имеет в системе.
Примечание
В связи с тем, что большинство привилегированных системных утилит имеют не SUID-, а SGID-бит, будьте предельно внимательны и осторожны в переназначении групповых прав на системные каталоги.
10.2. Обвязка passwd
Обвязка passwd поддерживает традиционные опции passwd и утилит shadow.
Синтаксис: passwd [ОПЦИЯ...] [ИМЯ ПОЛЬЗОВАТЕЛЯ]
Возможные опции:
- -d --delete — удалить пароль для указанной записи;
- -f, --force — форсировать операцию;
- -k, --keep-tokens — сохранить не устаревшие пароли;
- -l, --lock — блокировать указанную запись;
- --stdin — прочитать новые пароли из стандартного ввода;
- -S, --status — дать отчет о статусе пароля в указанной записи;
- -u, --unlock — разблокировать указанную запись;
- -?, --help — показать справку и выйти;
- --usage — дать короткую справку по использованию;
- -V, --version — показать версию программы и выйти.
Код выхода: при успешном завершении passwd заканчивает работу с кодом выхода 0. Код выхода 1 означает, что произошла ошибка. Текстовое описание ошибки выводится на стандартный поток ошибок.
10.3. Добавления нового пользователя
Для добавления нового пользователя используйте команды useradd и passwd:
[root@localhost root]# useradd test1
[root@localhost root]# passwd test1
passwd: updating all authentication tokens for user test1.
You can now choose the new password or passphrase.
A valid password should be a mix of upper and lower case letters,
digits, and other characters. You can use an 8 character long
password with characters from at least 3 of these 4 classes, or
a 7 character long password containing characters from all the
classes. An upper case letter that begins the password and a
digit that ends it do not count towards the number of character
classes used.
A passphrase should be of at least 3 words, 11 to 40 characters
long, and contain enough different characters.
Alternatively, if no one else can see your terminal now, you can
pick this as your password: "holder5dinghy-Arm".
Enter new password:
В результате описанных действий в системе появился пользователь test1 с некоторым паролем. Если пароль оказался слишком слабым с точки зрения системы, она об этом предупредит (как в примере выше). Пользователь в дальнейшем может поменять свой пароль при помощи команды passwd — но если он попытается поставить слабый пароль, система откажет ему (в отличие от root) в изменении.
В AltLinux для проверки паролей на слабость используется модуль PAM passwdqc.
Программа useradd имеет множество параметров, которые позволяют менять её поведение по умолчанию. Например, можно принудительно указать, какой будет UID или какой группе будет принадлежать пользователь.
10.4. Модификация пользовательских записей
Для модификации пользовательских записей применяется утилита usermod:
usermod -G audio,rpm,test1 test1
Такая команда изменит список групп, в которые входит пользователь test1 — теперь это audio, rpm, test1.
usermod -l test2 test1
Будет произведена смена имени пользователя с test1 на test2.
Команды usermod -L test2 и usermod -U test2 соответственно временно блокируют возможность входа в систему пользователю test2 и возвращают всё на свои места.
Изменения вступят в силу только при следующем входе пользователя в систему.
При неинтерактивной смене или задании паролей для целой группы пользователей используйте утилиту chpasswd. На стандартный вход ей следует подавать список, каждая строка которого будет выглядеть как имя:пароль.
10.5. Удаление пользователей
Для удаления пользователей используйте userdel.
Команда userdel test2 удалит пользователя test2 из системы. Если будет дополнительно задан параметр -d, то будет уничтожен и домашний каталог пользователя. Нельзя удалить пользователя, если в данный момент он еще работает в системе.
Утилиты vigr и vipw используются для ручного редактирования файлов /etc/passwd и /etc/group, в которых хранятся основные записи о пользователях и группах в системе.
Не рекомендуется создавать пользователей с правами сверх необходимых. Предпочтительнее создать серию новых групп и включить в них требуемого пользователя. А для данных групп установить соответствующие права на объектах файловой системы (утилиты chmod и chown).
11. Система инициализации systemd и sysvinit
11.1. Запуск операционной системы
11.1.1. Запуск системы
Алгоритм запуска компьютера приблизительно такой:
- BIOS компьютера
- загрузчик системы (например LILO, grub или другой). В загрузчике вы можете задать параметры запуска системы или выбрать систему для запуска
- загружается ядро Linux
- запускается на выполнение первый процесс в системе — init
Ядром запускается самая первая программа в системе init. Её задачей является запуск новых процессов и повторный запуск завершившихся. Вы можете посмотреть, где расположился init в иерархии процессов вашей системы, введя команду pstree.
От конфигурации init зависит, какая система инициализации будет использована.
11.1.2. Система инициализации
Система инициализации — это набор скриптов, которые будут выполнены при старте системы.
Существуют разные системы инициализации, наиболее популярной системой являются sysvinit и ее модификации. systemd разрабатывается как замена для sysVinit.
Примечание
В Альт Линукс Школьный Юниор используется systemd (от system daemon).
11.2. Системы инициализации systemd и sysvinit
11.2.1. sysvinit
System V — классическая схема инициализации, на которой базируются многие дистрибутивы. Привычна и довольно проста для понимания: init описывает весь процесс загрузки в своем конфигурационном файле /etc/inittab, откуда вызываются другие программы и скрипты на определенном этапе запуска.
11.2.2. systemd
systemd является альтернативной системой инициализации Linux, вобравшей в себя достоинства классического System V init и более современных launchd (OS X), SMF (Solaris) и Upstart (Ubuntu, Fedora), но при этом лишенной многих их недостатков. Он разрабатывался для обеспечения лучшего выражения зависимостей между службами, что позволяет делать одновременно больше работы при загрузке системы, и уменьшить время загрузки системы.
systemd (system daemon) реализует принципиально новый подход к инициализации и контролю работы системы. Одним из ключевых новшеств этого подхода является высокая степень параллелизации запуска служб при инициализации системы, что в перспективе позволяет добиться гораздо более высокой скорости, чем традиционный подход с последовательным запуском взаимозависимых служб. Другим важным моментом является контроль над точками монтирования (не-жизненно-важные файловые системы можно монтировать только при первом обращении к ним, не тратя на это время при инициализации системы) и устройствами (можно запускать и останавливать определенные службы и при появлении или удалении заданных устройств). Для отслеживания групп процессов используется механизм cgroups, который также может быть использован для ограничения потребляемых ими системных ресурсов.
Удобство systemd особенно заметно на компьютерах для домашнего пользования — когда пользователи включают и перезагружают компьютер ежедневно. В отличии от sysvinit, подвисание при запуске одного сервиса не приведет к остановке всего процесса загрузки.
11.2.3. О systemd в интернете
Вы можете почитать о systemd на ALT Linux Wiki: http://www.altlinux.org/
11.3. Примеры команд управления службами, журнал в systemd
Обратите внимание, что команды service и chkconfig продолжат работать в мире systemd практически без изменений. Тем не менее в этой таблице показано как выполнить те же действия с помощью встроенных утилит systemctl.
Таблица 56.1. Команды управления службами
Команды Sysvinit | Команды Systemd | Примечания |
service frobozz start | systemctl start frobozz.service | Используется для запуска службы (не перезагружает постоянные) |
service frobozz stop | systemctl stop frobozz.service | Используется для остановки службы (не перезагружает постоянные) |
service frobozz restart | systemctl restart frobozz.service | Используется для остановки и последующего запуска службы |
service frobozz reload | systemctl reload frobozz.service | Если поддерживается, перезагружает файлы конфигурации без прерывания незаконченных операций |
service frobozz condrestart | systemctl condrestart frobozz.service | Перезапускает службу, если она уже работает |
service frobozz status | systemctl status frobozz.service | Сообщает, запущена ли уже служба |
ls /etc/rc.d/init.d/ | systemctl list-unit-files --type=service (preferred) ls /lib/systemd/system/*.service /etc/systemd/system/*.service | Используется для отображения списка служб, которые можно запустить или остановить. Используется для отображения списка всех служб. |
chkconfig frobozz on | systemctl enable frobozz.service | Включает службу во время следующей перезагрузки, или любой другой триггер |
chkconfig frobozz off | systemctl disable frobozz.service | Выключает службу во время следующей перезагрузки, или любой другой триггер |
chkconfig frobozz | systemctl is-enabled frobozz.service | Используется для проверки, сконфигурирована ли служба для запуска в текущем окружении |
chkconfig --list | systemctl list-unit-files --type=service(preferred) ls /etc/systemd/system/*.wants/ | Выводит таблицу служб. В ней видно, на каких уровнях загрузки они (не)запускаются |
chkconfig frobozz --list | ls /etc/systemd/system/*.wants/frobozz.service | Используется, для отображения на каких уровнях служба (не)запускается |
chkconfig frobozz --add | systemctl daemon-reload | Используется, когда вы создаете новую службу или модифицируете любую конфигурацию |
11.4. Журнал в systemd
В systemd включена возможность ведения системного журнала. Для чтения журнала следует использовать команду journalctl. По умолчанию, больше не требуется запуск службы syslog.
Вы можете запускать journalctl с разными ключам:
- journalctl -a - покажет сообщения только с текущей загрузки;
- journalctl -f - покажет только последние сообщения.
Так же вы можете посмотреть сообщения определенного процесса:
- journalctl _PID 1 - покажет сообщения первого процесса (init).
Для ознакомления с прочими возможностями, читайте руководство по journalctl. Для этого используйте команду man journalctl.
12. Работа с оборудованием в Linux. «Сага о Драйверах»
Когда компьютеры назывались «электронно-вычислительными машинами», они были размерами в среднем с кухонный гарнитур и занимались почти исключительно вычислениями. Ввод и вывод данных воспринимался пользователями ЭВМ — учёными-математиками — как нечто необходимое, но к работе ЭВМ имеющее лишь косвенное отношение. Учёного было довольно просто обучить, чтобы он составлял программы и оформлял входные данные для расчётов одним каким-нибудь способом, например, при помощи перфокарт. Подключение к компьютеру какого-нибудь другого устройства было делом трудоёмким, так как требовало усилий и электронщика, и программиста. Да и нужно это было нечасто.
Нынешний компьютер — игрушка не учёного, а любого рядового обывателя. Это бытовой прибор. Мало того, компьютер — это «самый умный» бытовой прибор: если имеется какой-нибудь другой бытовой прибор (скажем, кофеварка), прогрессивный обыватель тут же задумывается, нельзя ли обучить компьютер управлять этим прибором (скажем, варить кофе за минуту до приезда хозяина). В идеале получается «электронный дом», в котором работу любого оборудования можно контролировать, не вставая из-за рабочего места или даже не садясь за него, — посредством сети Интернет.
Самое поверхностное суждение об оборудовании и компьютере — что для подключения прибора нужна волшебная субстанция по имени «драйвер». Есть драйвер — компьютер оборудование «видит», нет драйвера — «не видит».
Это суждение во многом неверно.
12.1. Что такое «оборудование»?
Что и как можно подключить к компьютеру? Во-первых, на поверхности его корпуса обычно наблюдается множество разнообразных отверстий и разъёмов, очевидно, предназначенных для того, чтобы туда что-то подключали. Уже подключены: клавиатура, мышь, монитор, возможно, принтер, наушники или колонки. Много отверстий остаётся неиспользованными, но и аппаратуры в «электронном доме» ещё много — от КПК до той же кофеварки (если на ней есть соответствующий разъём).
Во-вторых, внутри компьютера имеются специальные разъёмы для подключения к ним плат расширения: устройств, выглядящих не как бытовой прибор, а скорее как деталь самого компьютера. Таковы видеоадаптеры, сетевые адаптеры, «внутренние» модемы и т. п. Эти устройства — главный источник «Саги о Драйверах», потому что их много, и создатели каждого такого устройства желают сохранить его устройство втайне от конкурентов, прилагая к ним вместо документации ту самую волшебную субстанцию с пометкой «нажмите кнопку «Пуск» и попытайтесь расслабиться: от вас уже ничего не зависит».
В-третьих, ещё глубже внутри компьютера есть какие-то устройства, которые нельзя ни отключить, ни подключить, однако они используются при работе, имеют какое-то название и на разных компьютерах могут весьма отличаться. Например, звуковые подсистемы могут быть интегрированными, а могут быть выполненными в виде платы расширения, отличаясь редкостным разнообразием моделей и однообразием функций (разъём для микрофона, разъём(ы) для колонок, линейный вход, … что-то ещё?). Или устройство, к которому подключаются жёсткие диски: оно может быть рассчитано на 1 диск, 2, 4, иногда — более, иметь разные дополнительные свойства и тоже требовать «драйвера» — по крайней мере, поддержки со стороны системы.
Что точно отличает один прибор от другого — это внешний вид разъёма, с помощью которого они подключаются к компьютеру. Очевидно, приборами, подключёнными к разъёмам разного типа, машина управляет существенно по-разному. Более того, разъёмы настолько различны, что соединительный кабель одного типа просто не влезет в разъём другого. Но всё равно это не решает проблемы идентификации: например, мышь, подключённая к разъёму (порту) USB, отлично работает, а с цифровой фотокамерой как-то просто не получается. Опять «драйвер» нужен?
Можно добавить, что некоторое оборудование вообще не нуждается в том, чтобы машине объявляли о его существовании: так, что бы ни подключалось к аналоговому звуковому входу, работать оно будет одинаково, компьютер не отличит колонки от наушников, да и отсутствия их не заметит. Словом, наружное наблюдение не даёт достаточно информации о том, как работать с оборудованием. На помощь должна прийти документация, но если в ней опять встретится слово «драйвер», оно может означать что угодно: слишком оно неопределённое.
12.2. Как распознаётся оборудование?
Попробуем внести определённость. Какую информацию относительно подключаемого прибора получает компьютер, и как он её получает?
Очевидно, «с той стороны» каждого разъёма (допустим, USB, в который мы воткнули flash-диск) имеется какое-то оборудование, которое позволяет им пользоваться (как и USB-мышкой, USB- принтером и т.п.). Это оборудование:
- определяет тип подключённого устройства;
- управляет им (может, например, выключить или включить);
- передаёт на это устройство данные и/или принимает их оттуда.
Такое оборудование называется шиной (bus). Этимология этого слова, что русского, что английского, загадочна и восходит к доисторическим временам, когда компьютеры назывались «ЭВМ».
Шин в компьютере несколько (по количеству различных типов разъёмов). Есть совсем «глупые» шины — например, порт последовательного ввода-вывода (к нему подключаются мыши и прочая аппаратура «старого образца»). Глупость их в том, что информацию о типе подключённого оборудования приходится задавать вручную: либо заранее, либо с помощью наводящих вопросов пользователю.
Есть шины весьма «умные», способные опросить и понять множество характеристик подключённого устройства. Такова, например, шина PCI — наиболее распространённое на сегодня оборудование для подключения плат расширения. Любопытный пользователь может посмотреть список устройств, подключённых к шине PCI с помощью команды lspci (от «list PCI», команда из пакета pciutils):
[tmpuser@arnor tmpuser]$ lspci
0000:00:00.0 Host bridge: VIA Technologies, Inc. VT8377 [KT400/KT600 AGP] Host Bridge (rev 80)
0000:00:01.0 PCI bridge: VIA Technologies, Inc. VT8237 PCI Bridge
0000:00:0f.0 RAID bus controller: VIA Technologies, Inc. VIA VT6420 SATA RAID Controller (rev 80)
0000:00:0f.1 IDE interface: VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE (rev 06)
0000:00:10.0 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 81)
0000:00:10.1 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 81)
0000:00:10.2 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 81)
0000:00:10.3 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 81)
0000:00:10.4 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 86)
0000:00:11.0 ISA bridge: VIA Technologies, Inc. VT8237 ISA bridge [KT600/K8T800/K8T890 South]
0000:00:11.5 Multimedia audio controller: VIA Technologies, Inc. VT8233/A/8235/8237 AC97 Audio Controller (rev 60)
0000:00:12.0 Ethernet controller: VIA Technologies, Inc. VT6102 [Rhine-II] (rev 78)
0000:01:00.0 VGA compatible controller: ATI Technologies Inc Radeon R100 QD [Radeon 7200]
Из устройств на иллюстрации только одно — видеокарта Radeon 72002 — в действительности является платой расширения, все остальные интегрированы в системную плату (бывает и по- другому). Тип устройства — «Multimedia audio controller», «Ethernet controller», «VGA compatible controller» и т.п. — лишь небольшая часть информации, которую шине рассказали о себе подключённые к ней устройства.
К шине PCI в качестве устройства подключена другая шина — USB, служащая для подсоединения внешних устройств. Она тоже довольно «умная», а ещё отличается тем, что устройства подключаются к ней и отключаются от неё довольно часто. Существует команда lsusb (из пакета, естественно, usbutils), но ею, как и lspci, приходится пользоваться нечасто (она даже убрана в каталог /usr/sbin):
[tmpuser@arnor tmpuser]$ /usr/sbin/lsusb
Bus 005 Device 001: ID 0000:0000
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 002: ID 046d:c00c Logitech, Inc. Optical Wheel Mouse
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 003: ID 08ec:0012 M-Systems Flash Disk Pioneers
Bus 001 Device 001: ID 0000:0000
Пример показывает пять USB-шин (это совпадает с данными lspci), к первой из которых подключён flash-диск, а ко второй — мышь. Как правило, устройство определяется шиной, после чего специально обученная системная программа производит все действия, необходимые для того, чтобы этим устройством можно было воспользоваться. Например, для flash-диска потребовалось дополнительно загрузить модуль ядра usb_storage, и смонтировать содержимое диска в каталог /media/usbdisk.
Специальный каталог /sys отражает представление системы о присоединённых к ней устройствах. В частности, все найденные на шинах устройства перечислены в виде подкаталогов /sys/bus/шина/devices. Если устройство установлено, а «умная шина», наподобие PCI или USB, его не заметила — скорее всего, неполадка аппаратная (несовместимое или неисправное устройство, таракан в разъёме и т.п.).
Бывает и так: устройство (видеокарта, модем, кофеварка) на шине появилось, а воспользоваться им не удаётся. Видимо, чего-то не хватает… драйвера?
12.3. Что такое «драйвер» и где он находится?
В самом деле, чего может не хватать, если устройство распозналось, марка устройства известна и как передавать данные по шине — тоже известно? Не хватает главного: сведений о том, какие данные надо передавать, чтобы добиться от устройства желаемого эффекта. Что передать по шине USB, чтобы кофеварка выключилась? Какие байты записать в последовательный порт модема, чтобы он повесил трубку? Что сделать с видеокартой, чтобы всё было быстро и непременно 3d!?
Это вот «какие данные» — и есть «драйвер». Драйвер может быть где угодно, на любом уровне системы: от модуля ядра до пользовательской программы и даже её конфигурационного файла.
Типичные варианты:
- Драйвер — модуль ядра, подсказывающий шине, как правильно обращаться с устройством. Это, как правило, относится к PCI-устройствам и стандартным USB-устройствам. Подключается к ядру командой modprobe имя_модуля (или insmod). Распознанные и классифицированные устройства (те, для которых есть драйвер- модуль ядра) отображаются в виде подкаталогов /sys/class/класс_устройства/ .
- Драйвер видеокарты — модуль графической подсистемы X11 (X.Org). Подгружается при старте графической оболочки, достаточно лишь указать его в настройках X.Org (с помощью конфигуратора или вручную в файле /etc/X11/xorg.conf). Часто требуется и специальный модуль ядра (возможно, несколько), организующий доступ к видеопамяти.
- Драйверы принтера и модема — описание характеристик для, соответственно, подсистемы печати и программы-«звонилки». Что с ними делать дальше, расскажет документация.
- Драйвер — прикладная программа или дополнение (plug-in) к ней (например, драйвер сканера — дополнение утилиты sane, а с некоторыми цифровыми проигрывателями звука «iRiver » можно взаимодействовать с помощью утилиты ifp из пакета ifp-line). Здесь главное — название программы, а драйвер, скорее всего, уже включён в дистрибутив.
В последнем случае нет никакой зримой информации о том, что устройством действительно можно пользоваться — до тех пор, пока не запущена соответствующая прикладная программа с соответствующими настройками (особенно это касается «глупых» шин, наподобие последовательного порта). И в любом случае, самостоятельная установка «драйвера» должна сопровождаться вдумчивым чтением документации к нему.
12.4. Опять «устройство»?
В документации Linux термин «устройство» (device) часто используется не в значении «прибор», а в значении «элемент каталога /dev». Что это такое?
Прибор подключается к машине, как правило, для того чтобы передавать на него какие-то данные и/или получать их оттуда. Если задача компьютера — управлять внешним устройством, это всё равно можно рассматривать как передачу управляющих данных и приём диагностических. Во многих случаях передачу данных проще всего вести в синхронном (поточном) режиме, точно так же, как это делается при работе с файлом: открыть файл — записать данные — закрыть файл или открыть — прочитать — закрыть. Если бы можно было представить внутренность прибора в виде файла, работа с ним пошла бы легче. Это означало бы, что система знает, как и куда передавать данные, а дело пользовательской программы — эти данные понимать.
В большинстве случаев именно так и устроено в Linux. После того, как система распознала внешнее устройство, а служба hotplug, при необходимости, загрузила соответствующий модуль ядра, в каталоге /dev заводится новый «файл», содержимое которого отражает содержимое подключённого устройства, не занимая при этом места на жёстком диске. Такой файл называется файлом-дыркой, его можно представить как отверстие в файловой системе, через которое видно не содержимое жёсткого диска, а данные, попадающие туда с «другой стороны» — со стороны подключённого внешнего устройства. Например, гибкий диск в дисководе представляется в виде файла-дырки /dev/fd0, (от floppy disk 0), а мышь — в виде /dev/mouse (строго говоря /dev/mouse — это обычно символьная ссылка на актуальный файл- дырку — скажем /dev/psaux, порт PS/2).
В документации вместо «файл-дырка» чаще всего пишут просто «устройство» (device), а устройство-прибор — «внешним устройством». Если соответствующего устройства в каталоге /dev/ нет, значит, в цепочке его распознавания есть слабое звено.
Стоит напомнить, что файл-дырка, однако, не обязан существовать и непременно соответствовать одному внешнему устройству. Устройства, подключаемые ко второму последовательному порту, например, всегда видны как /dev/ttyS1 (а к первому — как ttyS0). Фактически, ttyS — это файл-дырка шины, настолько простой, что дальнейшее выяснение типа устройства перекладывается на программу пользователя.
Другой пример — это работа с аппаратурой по шине USB. USB-шин в системе зарегистрировано несколько, и к каждому можно подключить одно или несколько устройств. Для них, независимо от типа устройства, заводятся файлы-дырки вида usbdev.шина.номер, где каждому новому подключённому устройству просто выдаётся очередной номер. Некоторые звуковые проигрыватели и цифровые фотокамеры распознаются как flash-диски; тогда в дополнение к нетипизированному файлу-дырке создаётся одна или даже несколько дисковых (допустим, само дисковое устройство /dev/sda и единственный раздел с файловой системой на нём /dev/sda1, который и монтируется в /media/usbdisk). Другие фотокамеры умеют больше, чем обычный диск: например, транслировать изображение и/или звук. И для них существуют специальные утилиты, например, gphoto2. В этом случае никакого дополнительного файла-дырки, за исключением /dev/usbdev.шина.номер, не создаётся, и о типе подключённого аппарата догадывается сама gphoto2.
12.5. Кто виноват и что делать?
Итак, новый подключённый к компьютеру прибор не распознался «сам собой», и программы, которые должны были с ним работать, не работают.
Неполадки могут быть аппаратными (проверяется в /sys/bus или с помощью lspci, как сказано выше).
Hotplug или другая программа автораспознавания может не знать про конкретный подключённый прибор (придётся в режиме суперпользователя вручную загрузить модуль с помощью modprobe, а чтобы не делать этого каждый раз — отредактировать /etc/modules.conf).
Возможно, внешнее устройство распозналось и модуль для него есть, но служба udevd, которая заводит файлы-дырки в /dev, выбрала другое название или вовсе не завела нужного устройства (надо проанализировать содержимое /dev и, возможно, настроить udev или саму прикладную программу).
Ваше устройство может быть слишком новым, а дистрибутив Linux может оказаться слишком старым. В этом случае рекомендуется обновить части системы, содержащие «драйвер» (в зависимости от ситуации — модуль ядра, само ядро, графическую оболочку или её библиотеку, прикладную программу и т.п.).
Стоит проверить, что сказано о вашем устройстве в сетевых информационных ресурсах (здесь поможет lspci или подобные ей утилиты, а также http://www.google.com). Вполне вероятно, там посоветуют загрузить некий заранее собранный модуль ядра (назовут его, конечно, «драйвером») либо подскажут, какую именно программу следует использовать.
Наконец, ваше устройство может просто не поддерживаться. Печально, но факт: некоторые производители аппаратуры настолько дорожат своими мелкими секретами, что не только не документируют устройство своих устройств, но тщательно скрывают его. Как следствие, Linux- сообщество не в состоянии быстро обеспечить поддержку таинственного прибора. Производители предпочитают писать «драйверы» (хорошие ли, плохие) за свои деньги, а некоторые ограничиваются только одной, самой распространённой на сегодня, пользовательской программной платформой. И это пока, к сожалению, не Linux.
Сказанное выше означает, что после каждого обновления системы устройство, ранее распознававшееся с трудом или вовсе не распознававшееся, может преспокойно заработать, особенно если это устройство относительно новое. Кроме того, стоит со всем вниманием относиться к ситуации, когда производитель прибора не просто анонсирует совместимость с Linux, а предлагает «драйверы» собственного изготовления. И последнее: если вы не в силах справиться с «драйвером» в одиночку, обращайтесь к Linux-сообществу! Вы или получите решение задачи, или в очередной раз подтвердите, что её стоит решать — и тем самым приблизите решение.
13. Документация
Каждый объект системы Linux обязательно сопровождается документацией, описывающей их назначение и способы использования. От пользователя системы не требуется заучивать все возможные варианты взаимодействия с ней. Достаточно понимать основные принципы её устройства и уметь находить справочную информацию.
Не пренебрегайте чтением документации: она поможет вам избежать многих сложностей, сэкономить массу времени и усилий при установке, настройке и администрировании системы, поможет найти нужное дл работы приложение и быстро разобраться в нём.
13.1. Экранная документация
Почти все системы семейства UNIX, включая систему Linux, имеют экранную документацию. Её тексты содержат документацию по системным командам, ресурсам, конфигурационным файлам и т. д., а также могут быть выведены на экран в процессе работы.
13.1.1. Man
Для доступа к экранной документации используется команда man (сокращение от manual). Каждая страница руководства посвящена одному объекту системы. Для того чтобы прочесть страницу руководства по программе, необходимо набрать man название_программы. К примеру, если вы хотите узнать, какие опции есть у команды date, вы можете ввести команду:
$ man date
Большинство экранной документации написано для пользователей, имеющих некоторое представление о том, что делает данная команда. Поэтому большинство текстов экранной документации содержит исключительно технические детали команды без особых пояснений. Тем не менее, экранная документация оказывается очень ценной в том случае, если вы помните название команды, но её синтаксис просто выпал у вас из памяти.
Поиск по описаниям man осуществляется командой apropos. Если вы точно не знаете, как называется необходимая вам программа, то поиск осуществляется по ключевому слову, к примеру, apropos date или при помощи ввода слова, обозначающего нужное действие, после команды man -k (например, man -k copy). Слово, характеризующее желаемое для вас действие, можно вводить и на русском языке. При наличии русского перевода страниц руководства man результаты поиска будут выведены на запрашиваемом языке.
«Страница руководства» занимает, как правило, больше одной страницы экрана. Для того чтобы читать было удобнее, man запускает программу постраничного просмотра текстов. Страницы перелистывают пробелом, для выхода из режима чтения описания команд man необходимо нажать на клавиатуре q. Команда man man выдаёт справку по пользованию самой командой man.
Документация в подавляющем большинстве случаев пишется на простом английском языке. Необходимость писать на языке, который будет более или менее понятен большинству пользователей, объясняется постоянным развитием Linux. Дело не в том, что страницу руководства нельзя перевести, а в том, что её придётся переводить всякий раз, когда изменится описываемый ею объект! Например, выход новой версии программного продукта сопровождается изменением его возможностей и особенностей работы, а следовательно, и новой версией документации.
Тем не менее, некоторые наиболее актуальные руководства существуют в переводе на русский язык. Свежие версии таких переводов на русский язык собраны в пакете man-pages-ru. Установив этот пакет, вы добавите в систему руководства, для которых есть перевод, и man по умолчанию будет отображать их на русском языке.
13.1.2. Info
Другой источник информации о Linux и составляющих его программах — справочная подсистема info. Страница руководства, несмотря на обилие ссылок различного типа, остаётся «линейным» текстом, структурированным только логически. Документ info — это настоящий гипертекст, в котором множество небольших страниц объединены в дерево. В каждом разделе документа info всегда есть оглавление, из которого можно перейти к нужному подразделу, а затем вернуться обратно (ссылки для перемещения по разделам текста помечены *). Для получения вспомогательной информации о перемещении по тексту используйте клавишу h. Полное руководство info вызывается командой info info. Команда info, введённая без параметров, предлагает пользователю список всех документов info, установленных в системе.
13.2. Документация по пакетам
Дополнительным источником информации об интересующей вас программе, в основном на английском языке, является каталог /usr/share/doc — место хранения разнообразной документации.
Каждый пакет также содержит поставляемую вместе с включённым в него ПО документацию, располагающуюся обычно в каталоге /usr/share/doc/имя_пакета. Например, документация к пакету foo-1.0-alt1 находится в /usr/share/doc/foo-1.0-alt1. Для получения полного списка файлов документации, относящихся к пакету, воспользуйтесь командой rpm -qld имя_установленного_пакета.
В документации к каждому пакету вы можете найти такие файлы как README, FAQ, TODO, СhangeLog и другие. В файле README содержится основная информация о программе — имя и контактные данные авторов, назначение, полезные советы и пр. FAQ содержит ответы на часто задаваемые вопросы; этот файл стоит прочитать в первую очередь, если у вас возникли проблемы или вопросы по использованию программы, поскольку большинство проблем и сложностей типичны, вполне вероятно, что в FAQ вы тут же найдёте готовое решение. В файле TODO записаны планы разработчиков на реализацию той или иной функциональности. В файле СhangeLog записана история изменений в программе от версии к версии.
Для поиска внешней информации о программе, например, адреса сайта программы в сети Интернет можно использовать команду rpm -qi имя_установленного_пакета. В информационном заголовке соответствующего пакета, среди прочей информации, будет выведена искомая ссылка.
Возможно, будет полезно знать расположение собрания практических рекомендаций по самым различным вопросам, связанным с использованием Linux. Файлы HOWTO в формате HTML (от англ. how to — «как сделать») каталога /usr/share/doc/HOWTO/ (при условии их наличия в системе) содержат многообразную информацию о работе Linux-систем.
13.3. Документация к программам, имеющим графический интерфейс
Каждая программа, имеющая графический интерфейс, как правило, сопровождается справочной информацией, вызываемой из меню программы. Обычно, это разделы меню Справка.
По обыкновению, это меню предоставляет информацию о программе, её версии, лицензии и авторах. В большинстве случаев, справка содержит встроенное руководство, ссылки на локальные сведения и интернет-страницы документации на официальных сайтах программ (традиционная кнопка F1), информацию о сочетании клавиш, а также сообщения о процедурах и отладке в программе.