Терминал и командная строка
Ключи
Работая в системе и изучая руководства, Мефодий заметил, что параметры команд можно отнести к двум различным категориям. Некоторые параметры имеют собственный смысл: это имена файлов, названия разделов и объектов в 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 20042.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 302.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 tree2.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 имеют и однобуквенный, и полнословный формат, а некоторые - только полнословный. Так обычно и бывает: часто используемые ключи имеют аббревиатуру, а редкие - нет. Значения параметрических полнословных ключей принято передавать не следующим параметром командной строки, а с помощью конструкции " =значение " непосредственно после ключа.