Опубликован: 14.12.2004 | Уровень: для всех | Доступ: платный | ВУЗ: Компания ALT Linux
Лекция 7:

Интерфейс

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >

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

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

Интерпретатор командной строки в UNIX - shell (в русских переводах - "оболочка") - типичная программа этого рода. Вернее, семейство программ, потому что (как это часто бывает в UNIX) на разные вкусы существуют по-разному оформленные решения. Можно даже сказать, что терминал плюс командный интерпретатор UNIX и есть интерфейс командной строки, прочие же системы лишь с той или иной долей остроумия пародируют его.

Было бы нерационально для каждого элементарного пользовательского действия заготавливать еще одну команду (как непременно случится, если пользовательские действия будут наглядно представлены в виде изображений). Это означало бы нарушение У в самой грубой форме. Проективная система ориентирована на создание решений, а не на поиск, и гораздо правильнее давать человеку в руки инструмент решения класса задач, тогда свою задачу человек решит, управляя этим инструментом.

Таково понимание командной строки в shell и UNIX. Вводимая пользователем строка (напомним, что обмен данными - только текстовый) воспринимается интерпретатором как последовательность "слов", разделенных пробелами и/или символами табуляции; об этом подробнее рассказано в лекции 8. Первое слово строки - собственно команда (ей может предшествовать несколько присвоений переменным окружения этой команды каких-нибудь значений, подробнее о переменных окружения рассказано в лекции 11), последующие - передаваемые ей параметры (arguments). Часто вместо " параметры " говорят "аргументы". Выходит, что мы не просто командуем машиной, но и аргументируем свои решения. Параметры видоизменяют работу команды ; иными словами, при помощи параметров пользователь выделяет из всего класса решаемых командой задач одну, а также описывает конкретные исходные данные. Например, команда shutdown выполняет остановку системы. Если не указывать никаких параметров, остановка начнется через пять минут, в течение которых shutdown предупреждает об этом всех работающих в системе пользователей. А вот команда shutdown now приступит к останову системы немедленно.

Чтобы не запутаться в терминологии, припомним главу 5, в которой говорилось об утилитах. Командный интерпретатор самостоятельно выполняет только небольшое число подаваемых ему команд ; это, как правило, команды, связанные с изменением свойств самого интерпретатора: его настройка, смена текущего каталога, элементы программирования и т. п. Подавляющее большинство команд - это имена утилит, т. е. специально для этого написанных программ. Если команда не опознана как внутренняя команда shell, она интерпретируется как имя утилиты. Система эту утилиту запускает и передает ей все параметры из командной строки.

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

Договоренности о формате командной строки

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

Существует две договоренности по формату ключей. Первая - так называемый UNIX style, или односимвольный формат. Чтобы отличаться от параметра, ключ должен начинаться с символа " - ". Второй символ - собственно ключ, он указывает, как именно видоизменяется работа команды. Например, утилита ls показывает список файлов в текущем каталоге. Команда ls имя-каталога воспринимает второй аргумент как параметр и показывает список файлов, находящихся в каталоге имя-каталога. Команды ls -l или ls -l имя-каталога покажут соответствующие списки в "длинном" (long) формате: вдобавок к именам файлов будет выведено немало дополнительной информации. Очень неплохо, если при именовании ключа соблюдается принцип аббревиативности: имя ключа - буква, с которой начинается имя производимого им действия.

Если так случилось, что параметр начинается с символа (например, параметр - отрицательное число), то существует специальный ключ " -- " (" - " - это имя ключа, перед которым, по договоренности, должен стоять признак ключа, т. е. еще один " - "), который означает, что все последующие аргументы, как бы они ни выглядели, будут параметрами, а не ключами. Например, утилита cat занимается выводом на стандартное устройство вывода (терминал) всего того, что считала со стандартного устройства ввода. (Если вы запустили cat без параметров, нажмите клавишу Ctrl и одновременно D). В виде " cat имя-файла " cat выводит содержимое файла имя-файла. Поэтому для вывода на терминал содержимого файла -minus-first нужно ввести что-то вроде cat -- -minus-first.

Вторая договоренность по формату ключей носит название GNU style (или полнословный формат), так как зародилась она в недрах сообщества GNU, занимающегося свободным программным обеспечением (см. [ 14 ] ). Причина появления этой более новой договоренности проста. Если команда имеет слишком широкие возможности, у нее появляется слишком много ключей. Запомнить или хотя бы отыскать в документации однобуквенный ключ (скорее всего, уже не аббревиативный, потому что букв на всех не хватает) непросто. Налицо явное нарушение У. Отчасти компенсировать это нарушение можно, если не слишком жестко придерживаться З и разрешить команде использовать ключи, имена которых говорят сами за себя. Полнословный ключ начинается с двух минусов и далее содержит одно (или чуть больше) слов-описателей, разделенных также знаком "-". Например, ключ -A (All) предписывает утилите ls вывести имена всех, в том числе "скрытых" файлов (файл, чье имя начинается на . считается скрытым; именно такие имена бывают у файлов и каталогов, создаваемых утилитами UNIX автоматически для своих нужд), кроме " .." и " .", имеющих специальный смысл. В нотации GNU этот ключ выглядит как --almost-all. Гораздо понятнее, но в шесть раз длиннее.

Часто используются так называемые параметрические ключи, т. е. ключи, которым самим требуются параметры. Например, в очень многих утилитах ключ -o означает перенаправление вывода в файл, поэтому следующий за ним параметр должен быть именем этого выходного файла. Скажем, утилита постраничного просмотра файлов less может записывать протокол работы пользователя в файл. Для этого ее надо вызвать с параметрами less что-смотрим -o протокол или, в нотации GNU, less что-смотрим --log-file=протокол. Обратите внимание на символ =, именно так в полнословном формате указывается параметр ключа.

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >
Andranik Avakian
Andranik Avakian

41. УК РФ и Комментарии (ст. 273)

М. 2000 г. Издательство: ALT Linux, Институт Логики

Уголовный Кодекс РФ и комментарии к нему?

По ссылке открывается сайт документации Linux, раздел Linux Installation and Getting Started

Сергей Петровский
Сергей Петровский

У Вас написано:

ls -dt1 `grep -il отчет *` | head -1

если знания по шелу мне не изменяют, то должно быть:

ls -dt | `grep -il отчет *` | head -1

Светлана Мишланова
Светлана Мишланова
Россия, Волгоград
Илдар Аллаяров
Илдар Аллаяров
Россия