Опубликован: 22.06.2005 | Уровень: для всех | Доступ: свободно | ВУЗ: Компания IBM
Лекция 2:

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

< Лекция 1 || Лекция 2: 12345 || Лекция 3 >

Ключи

Работая в системе и изучая руководства, Мефодий заметил, что параметры команд можно отнести к двум различным категориям. Некоторые параметры имеют собственный смысл: это имена файлов, названия разделов и объектов в 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
2.13. Команда date с ключом

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

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

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

[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
2.14. Использование ключа "-m" в разных командах

Во-вторых, для who ключ " -m " означает " Me ", то есть "Я", и в результате who работает похоже на whoami 3Кстати, с незапамятных времён who поддерживает один нестандартный набор параметров: who am i делает то же, что и who -m.. А для 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 ------------------------------------------------
 . . .
2.15. Использование info -o

Здесь info запустилась не в качестве интерактивной программы, а как обработчик info-документа. Результат работы - текст узла info -> Expert info -> Cross-refs -> Help-Cross4Странное слово "нода" Мефодий решил оставить на совести неизвестного переводчика сообщений info . , программа поместила в файл text. А программа cat вывела содержимое этого файла на терминал, пронумеровав все строки (по просьбе ключа " -n ", "number").

Теперь стало более или менее понятно, что означают неудобочитаемые строки в поле SYNOPSIS руководства. Например [ -smjy13 ] из руководства по cal (5) говорит о том, что команду можно запускать с необязательными ключами " -s ", " -m ", " -j ", " -y ", " -1 " и " -3 ".

В-четвертых, есть некоторые менее жесткие, но популярные договоренности о значении ключей. Ключ " -h " ("Help") обычно (но, увы, не всегда) заставляет команды выдать краткую справку (нечто похожее на SYNOPSIS, иногда с короткими пояснениями). Если указать " - " вместо имени выходного файла в соответствующем параметрическом ключе (нередко это ключ " -o "), вывод будет производиться на терминал5Точнее, на стандартный вывод, см. лекцию 6. . Наконец, бывает необходимо передать команде параметр, а не ключ, начинающийся с " - ". Для этого нужно использовать ключ " -- ":

[methody@localhost methody]$ info -o -filename-with-
info: Запись ноды (dir)Top...
info: Завершено.
[methody@localhost methody]$ head -1 -filename-with-
head: invalid option -- f
Попробуйте `head --help' для получения более 
подробного описания.
[methody@localhost methody]$ head -1 -- -filename-with-
File: dir   Node: Top    This is the top of the INFO tree
2.16. Параметр-не ключ, начинающийся на "-"

Здесь Мефодий сначала создал файл -filename-with-, а потом пытался посмотреть его первую строку (команда head -количество_строк имя_файла выводит первые количество_строк из указанного файла). Ключ " -- " (первый " - " - признак ключа, второй - сам ключ ) обычно запрещает команде интерпретировать все последующие параметры командной строки как ключи, независимо от того, начинаются они на " - " или нет. Только после " -- " head согласилась с тем, что -filename-with- - это имя файла.

Полнословные ключи

Аббревиативность ключей трудно соблюсти, когда их у команды слишком много. Некоторые буквы латинского алфавита (например, " s " или " o ") используются очень часто, и могли бы служить сокращением сразу нескольких команд, а некоторые (например, " z ") - редко, под них и название-то осмысленное трудно придумать. На такой случай существует другой, полнословный формат: ключ начинается на два знака " - ", за которыми следует полное имя обозначаемой им сущности. Таков, например, ключ " --help " (аналог " -h "):

[methody@localhost methody]$ head --help
Использование: head [КЛЮЧ]... [ФАЙЛ]...
Print the first 10 lines of each FILE to standard output.
With more than one FILE, precede each with a header 
giving the file name.
With no FILE, or when FILE is -, read standard input.

Аргументы, обязательные для длинных ключей, обязательны 
и для коротких.
 -c, --bytes=[-]N   print the first N bytes of each file;
                    with the leading '-', print all but 
                    the last N bytes of each file
 -n, --lines=[-]N   print the first N lines instead of 
                    the first 10;
                    the leading '-', print all but 
                    the last N lines of each file
 -q, --quiet, --silent     не печатать заголовки с 
        именами файлов
 -v, --verbose         всегда печатать заголовки с 
                        именами файлов
    --help      показать эту справку и выйти
    --version     показать информацию о версии и выйти
N may have a multiplier suffix: b 512, k 1024, m 1024*1024.
Об ошибках сообщайте по адресу.
2.17. Ключ -help

Мефодий сделал то, о чем просила его утилита head. Обращает на себя внимание то, что некоторые ключи head имеют и однобуквенный, и полнословный формат, а некоторые - только полнословный. Так обычно и бывает: часто используемые ключи имеют аббревиатуру, а редкие - нет. Значения параметрических полнословных ключей принято передавать не следующим параметром командной строки, а с помощью конструкции " =значение " непосредственно после ключа.

< Лекция 1 || Лекция 2: 12345 || Лекция 3 >
Аягоз Имансакипова
Аягоз Имансакипова
Тимур Булатов
Тимур Булатов

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

Дмитрий Матвеев
Дмитрий Матвеев
Россия, Москва, 1100, 2009