Различия между версиями 1 и 4 (по 3 версиям)
Версия 1 от 2008-07-17 20:15:30
Размер: 10513
Редактор: eSyr
Комментарий:
Версия 4 от 2008-07-26 12:25:52
Размер: 23580
Редактор: DmitryChistikov
Комментарий: Поабзацный перевод
Удаления помечены так. Добавления помечены так.
Строка 3: Строка 3:
Ппытка прилепиться к конкр. граф болочке приводит к тому, что a) вы не понимаете, чт такое линукс, б) ... == Основы использования командной строки ==
Строка 5: Строка 5:
Для начала, надо ответить на вопрос --- хорошо, в течение часа расск. не про линукс. А что же такое линукс? Из вчерашнего разг. значем, чт линукс в первую очередь сбщество, то, что мы видим --- результат работы сообщества. Но эт не ответ на вопрос. Кгда линукс должен отв. задачам ОС, то чем явл. ..., что явл польз. приложениями? Тут можн потеоретиз. на тему чел-маш взаимодействия (см. первые лекции посл. семестра). ... Линукс как некаяОС, кк некий комплекс средств, бесп. униф, разд. и разгр. ресурсов, базируется на двух принципах:
 * Любые сист. бъекты, которые требуется как-то идентиф, для упр. системой --- файлы. Речь чём --- никаких тинственных кнопк, никаких рабочих столов нет. Оно всё взаимозаменяеме. Чт есть --- есть ФС, сст. из каталгов и фалов, и структура ФС в линуксе весьма стандартизвана.
Излишняя привязка к конкретной графической оболочке --- дело весьма сомнительное:
 * во-первых, графическая оболочка сама по себе не дает понимания, "что такое Линукс";
 * во-вторых, может наступить момент, когда придется переходить на другую графическую оболочку, с другими принципами организации.
Строка 8: Строка 9:
Файлы эти, если они треб. модиф. со стороны польз или автомат. модиф, должны быть текстовыми, и это второй принцип. Т есть, с чтки зрения польз, структура ОС предст. в виде дерева файлов, в каждом из которых хранится какая-то информация, которые можно глазами прочитать. Искл. составляют файлы, которые не предназаначены для чтения пользователей --- прграммы, библиотеки... Любые другие файлы длжны быть п возм. текстовые. Ответим наконец на вопрос: что же такое Линукс? Мы уже знаем, что Линукс это в первую очередь сообщество, а то, что мы видим, --- результат работы сообщества. Но это не ответ на вопрос. Понятно, что Линукс должен отвечать перечисленным требованиям к ОС, но ведь пока мы видели лишь пользовательские приложения? Ответ базируется на принципах человеко-машинного взаимодействия. Человек должен не просто управлять компьютером, а обладать инструментом для решения (и изобретения решения) любой задачи. Сформулируем теперь ключевое утверждение: Линукс как ОС (комплекс программных средств, обеспечивающий унификацию, разделение и разграничение ресурсов для пользовательских программ), базируется на трех принципах:
Строка 10: Строка 11:
Третий принцип сост. в том, каким обр. орг. человекомаш. взаимодействие, если всё есть текствые файлы. В этм случае инстр. упр. должен рабтать с текст. файлами. Что это за инструмент? При этом сам инстр не должен выходить из этй парадигмы: челвек и машина бм. текстом, и в результате этого должны мдиф. файлы. Неким следствием этг принципа будет то, что основным инт. упр. unix-подобной системы в этй парадигме явл. инт. командной строки. В любм случае очевидно, что он очень подходит для этой прадигмы: вы набираете текстовые команды, компбьютер команды интерпретирует, исполняет и в кчестве результата выдаёт обратно текст. Понятно, что задачи могут выходить за рамки этго, но ... . Лектор сразу говорит, чт подробнее можно прчитть в книжке МК, на почти полн. этму посвязена, там далеко не вся, тема большая обширная и её необязх. всю охватывать рахзумм, если тема большая. Основной совет --- если не знаете инстр. для задачи, то поищите его, н наверняка есть. В результате окажется, что вы накопили багаж знаний, дост. для решения всех своих задач.  1. "Все --- файл". Любые системные объекты, использующиеся для управления этой самой системой, приложениями и их взаимодействием --- файлы. "Таинственные" кнопки, рабочие столы --- все взаимозаменяемо. Таким образом, одним из центральных объектов нашего изучения становится файловая система (ФС). Заметим, что у этого термина два основных значения: (1) способ хранения файлов на диске и (2) способ представления файлов для пользователя. Речь в данном случае идет, разумеется, о втором значении. С достаточной степенью точности можно считать, что ФС состоит из выстроенных в древовидную структуру каталогов и файлов. Собственно структура ФС в Линуксе стандартизована и умопостижима --- разобраться, что, где и для чего нужно, обыкновенно не составляет труда.
 2. "Все --- текст". Файлы, если они требуют ручной или автоматической модификации, --- текстовые. С точки зрения пользователя, структура ФС (и, в некотором смысле, всей ОС!) представляется в виде дерева файлов, в каждом из которых хранится информация в пригодном для чтения человеком виде. Исключение составляют файлы, не предназначенные для чтения и модификации пользователем: программы в бинарном виде, библиотеки и пр.
 3. Управление системой есть работа со специальным инструментом, манипулирующим текстовыми файлами (строго говоря, файлами и текстом вообще). Сам инструмент также не выходит за рамки парадигмы "файл --- текст": человек и машина обмениваются текстами, в результате чего модифицируются файлы. Следствием данного принципа является то, что основным интерфейсом управления Линуксом (на самом деле, Unix-подобной системы вообще) является интерфейс командной строки. Понятно, что он очень хорошо подходит для описанной парадигмы: пользователь набирает текстовые команды, компьютер команды интерпретирует, исполняет и в качестве результата выдает обратно текст.
Строка 12: Строка 15:
Чуть более формальн, что такое ИКС. Мы все знаем, что есть прграмма, шелл, интерпретатор командной строки. Т есть не линукс разговаривает, а при логине запускается мнго прграмм, одна из них --- спеец. прграмма, в задачи которй входит орг. ИКС. Именно эта программа яитает воод с ком. стрки, интерп., выводит результаты (свои или других программы). Существует неск. прграмм, реализ эту праадигму, не только шеллв, н и, например, клиент mysql, python... Нетрудно понять, что существуют выходящие за рамки описанной парадигмы пользовательские задачи. Заметим, однако, что речь в данном случае идет об управлении системой как таковой. Чтобы пользоваться компьютером как точкой запуска Интернет-браузера, аудиоплеера и почтового клиента, не обязательно разбираться во всех тонкостях: все нужные приложения легко найти в меню. Если же мы захотим изучать Линукс как операционную систему, то разумно пользоваться следующей схемой. Допустим, мы хотим решить задачу, а инструментов перед собой видим недостаточно: у нас есть микроскоп, а нам нужно забить девятнадцать гвоздей. Не следует пытаться решить задачу имеющимися инструментами (как максимум --- один гвоздь забить микроскопом, чтобы убедиться в нецелесообразности такого подхода). Вместо этого имеет смысл пошарить в ящике с инструментами, выбрать подходящий (молоток) и в дальнейшем пользоваться (именно для забивания гвоздей!) именно им. Иными словами, если решение задачи представляется малоэффективным, то это значит, что используется плохо подходящий инструмент. ОС Линукс предоставляет очень богатый инструментарий, так что скорее всего, нужный инструмент попросту не найден или недостаточно освоен. Чтение в случае необходимости пользовательской документации позволяет накопить багаж знаний, достаточных для решения всех своих, в том числе довольно изощренных, задач.
Строка 14: Строка 17:
Как выглядит команда, которую вы даёте шеллу: команды вводятся построчно, строка разбивается на слова по принц. любых симвлов, подряд идущих, не явл. разделителем, и разделители. Первое слво --- кманда, стальные слва --- параметры команды. Надо понять, ткуда это взникла. Можно было конечно придумать на каждый случай жизни специадльную команду ()нарисовать розовую мышку --- одна кманда, нарисовать голубого слова --- другая команда, и так далее. Но понятно, что склова быстр кончатся и станет грустно, кроме того, запоминать эт невозможно. Поэтму ис.п лсде. принцип --- программа решает нек. задачу, и все ньюнсы пведения (файлы, параметры) передются в виде неск. слова. Пример --- кманда скрипт с двумя параметрами. Т, чт дальше обрабатывается шеллом и команде это не передаётся. Расскажем теперь об интерфейсе командной строки чуть более формально. Этот интерфейс на самом деле предоставляется специальной программой --- Shell'ом, или интерпретатором командной строки. Другими словами, это не Линукс с нами "разговаривает", а специальный процесс --- один из запускаемых при логине (входе в систему). Чем занимается эта программа? Она читает то, что мы вводим с клавиатуры, анализирует, выполняет соответствующие задачи и выводит результаты --- как свои, так и других программ --- в виде текста. Отметим, что данная парадигма реализуется не только Shell'ом: подобный интерфейс имеют, скажем, интерпретатор языка программирования python, клиент базы данных mysql.
Строка 16: Строка 19:
Как это происходит --- пользователь набирает строку, шелл её обрабатывает строку, есть два варианта --- команда встренная или внешняя (ищется по спец. алгоритму). Ещё до этого шелл обрабатывает строку на нличие спецсимволов (на самм деле, там есть третий тип --- упр. символы). После того, как н их находит, он их обр., в данном случае, stderr будет перенапр. не на экран, а в файл. Более того, script этго даже не заметит, если не присматриваться. После тго, как будет перенапр. вывод, этт кусок строки удалится, и script будет запущен с двумя параметрами. Как же выглядит подаваемая Shell'у команда? Обыкновенно команды вводятся построчно, каждая строка разбивается на слова в соответствии со следующим простым правилом: последовательность любых символов, идущих подряд и не являющихся разделителями --- это слово, а последовательность разделителей --- это не слово, а промежуток между словами. Разделители --- это пробел, символ табуляции и символ перевода строки. (Заметим, что заставить Shell воспринимать символ перевода строки как разделитель довольно непросто: перевод строки --- это управляющая клавиша, поэтому при ее нажатии Shell'у передается вся набранная строка, которую он воспринимает как законченную команду.)
Строка 18: Строка 21:
По этому примеру видно ещё одно: ключи и содерж. параметры. Содерж. параметры --- имена объектов, строки, какая-о инф, которая исп. в прграмме. Ключи --- спец. параметры, которые изм. пведение программы. Нпример, -t заставляет вывдить время на stderr, а 1.script --- чодерж. параметр --- имя файла, в ктором сохр. Итак, введенная строка разбивается на слова. Первое слово является командной, а все остальные --- параметрами этой команды. Откуда взялось такое соглашение? Можно, конечно, было придумать на каждый случай жизни специальную команду (нарисовать розовую мышку --- одна команда, нарисовать голубую мышку --- другая). Понятно, однако, что слова при таком подходе быстро закончились бы и команды бы в конце концов стали выглядеть довольно странно. Запомнить такой букет было бы, ясное дело, совершенно невозможно. Поэтому при работе с командной строкой применяется следующий принцип: команда (на самом деле --- скорее утилита, но об этом далее) решает ту или иную пользовательскую подзадачу, а все параметры этой подзадачи (имена файлов, нюансы работы) передаются при вводе команды в виде слов (второго и последующих).
Строка 20: Строка 23:
Кманда ls показывает списк файлв в тек. каталоге. В частности, если звёзы сложились удачно (при наличии алиаса и сотв. терминала), то они будут раскрашены. Если вызвать /bin/ls, то раскраски не будет. Если сказать -F, то увидим в конце директорий "/" (и изменили поведение программы). Если указать -s, то можн увидеть ещё и размер. При этом собл. принцип аббревиативности, по возм. --- вместо полных назхваний ключей (--size) исп. сокращения (-s). Кроме того, однобукв. ключи могут прилипать друг к другу: ls -Fs. Достинсмтво однобукв. ключей --- их быстр набирать, недостаток --- их надо помнить. И когда ключей много или ни исп. редко, то исп. плнословная нотация, когда ключи нач. с двухз минусов и тогда идёт полное название параметра. Надо учитиывать, чт это соглашения, и они могут не выполняться (dd, ps, tar) Рассмотрим следующую команду:

{{{
#script -t 1.script 2>1.script.time
}}}

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

Каким образом эта команда была разобрана? Если бы символа комментария в начале строки не стояло, интерпретатор выделил бы имя команды ("script") и два параметра ("-t" и "1.script"). В данном случае последнее введенное слово параметром команды не является: оно содержит символ "больше" (">") и является указанием Shell'у выполнять перенаправление вывода. К моменту запуска команды это слово было бы уже обработано интерпретатором (для простоты можно считать, что эта группа символов просто исчезнет).

Фактически, диалог пользователя и системы при помощи командной строки происходит следующим образом. Пользователь набирает команду в командной строке, Shell эту строку обрабатывает. Обратим внимание на два этапа обработки:

 * Shell определяет, что за команда была введена (в данном случае --- script). Есть небольшой набор встроенных в Shell команд (к примеру, cd, изменяющая текущий каталог). Если команда является встроенной, то с ней все ясно, в противном же случае Shell по специальному алгоритму ищет утилиту (программу) с таким названием (именем).

 * Shell обрабатывает строку на наличие специальных управляющих символов. Когда ранее шла речь об обыкновенных символах и разделителях, была допущена некоторая неточность: есть и третий тип символов --- управляющие. После того, как Shell находит управляющие символы, он их обрабатывает в соответствии с их значением. В данном случае стандартный вывод (поток) ошибок утилиты script перенаправляется не на терминал, а в файл. Сама утилита script этого даже не заметит, если не будет специально "присматриваться". После того, как вывод будет перенаправлен, этот фрагмент строки будет считаться обработанным ("удалится"), а утилита script будет запущена с двумя параметрами.

Из нашего примера видно также следующее: параметры обыкновенно разбиваются на две категории --- ключи и содержательные параметры. Содержательные параметры --- это имена объектов, строки, специальная передаваемая информация. Ключи --- это особого вида параметры, начинающиеся обычно с минуса ("-"). Наличие в командной строке ключей означает, что команда будет выполняться приблизительно так же, но с некоторыми нюансами (изменениями). Ключ -t в нашем случае заставляет утилиту script выводить время (time), а 1.script --- это содержательный параметр (имя файла, с которым script будет работать).

Осталось лишь сказать, чем занимается утилита script. Она протоколирует все действия, производимые пользователем: записывает в специальный файл вводимые команды и получаемые результаты. Именно эта утилита и использовалась для написания наших примеров.

Будем теперь рассматривать вместо команды script команду ls, показывающую список файлов в текущем (если не указано иного) каталоге. При выполнении некоторых специальных условий (к примеру, при наличии алиаса и соответствующего терминала --- но на этом мы останавливаться не будем) она выделяет объекты различными цветами. Это, однако выполняется не всегда. Если вызвать команду ls не просто как "ls", а как "/bin/ls" (это полный путь к соответствующему файлу в дереве каталогов), то выделения цветом не произойдет:

{{{
$ /bin/ls
DirDir File
}}}

Обратим внимание, что отличить имя файла от имени каталога в выводе ls без раскраски невозможно. Можно, однако, указать "ключ" -F, который после имен каталогов будет рисовать символ "/". Это типичный пример использования ключа, который модифицирует работу программы. Передаваемый параметр не соответствует никакому объекту: это не файл и не имя. С этим ключом, однако, поведение программы несколько изменяется:

{{{
$ ls -F
DirDir/ File
}}}

Если указать ключ -s, то мы увидим и размер объектов. Каталог в данном случае имеет размер 4 блока, а файл --- 0 (он пуст).

{{{
$ ls -F -s
итого 4
4 DirDir/ 0 File
}}}

Для ключей по возможности соблюдается принцип аббревиативности: вместо полных названий ключей используется одна буква, с ним как-то связанная. Для ключа -F эта связь неочевидна (от слова classiFy), а вот -s означает size (размер). Принцип аббревиативности нужен вот зачем: когда используется сразу несколько ключей, появляется возможность уменьшить количество набираемых символов. Например, команда "ls -F -s" и так не слишком длинная, однако ее можно еще сократить, поскольку однобуквенные ключи могут прилипать друг к другу: "ls -Fs". Мы ставим один общий минус, а дальше перечисляем все однобуквенные ключи. Достоинство однобуквенных ключей --- их быстро набирать. Недостатков у них два. Во-первых, их надо помнить. Заняты при этом как маленькие, так и большие буквы. Ключ -a (all) показывает все объекты в текущем каталоге:

{{{
$ ls -a
. .. DirDir File .FileFile
}}}

Ключ -A (almost all) выводит все объекты, за исключением . и .. (они есть в любом каталоге, и смотреть на них, возможно, нам неинтересно):

{{{
$ ls -A
DirDir File .FileFile
}}}

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

{{{
$ ls --all
. .. DirDir File .FileFile
$ ls --almostr-all
DirDir File .FileFile
}}}

Важно понимать, что описанные принципы работы с ключами --- это всего лишь соглашения, которые, увы, соблюдаются не всеми. Никто не мешает написать программу, с ключами не работающую вовсе или использующую другие принципы их написания. Несколько таких программ --- dd, ps, tar --- были написаны давно, когда этого соглашения не было, и потому этим правилам (частично или полностью) не подчинаются.
Строка 28: Строка 96:
|| 0 || 1 || 1 || 1 || || 1 || ConstantinYershow, DmitryChistikov, VsevolodKrishchenko || || || || 40 || 1 || 1 || 1 || || 1 || ConstantinYershow, DmitryChistikov, VsevolodKrishchenko || || ||

Основы использования командной строки

Основы использования командной строки

Излишняя привязка к конкретной графической оболочке --- дело весьма сомнительное:

  • во-первых, графическая оболочка сама по себе не дает понимания, "что такое Линукс";
  • во-вторых, может наступить момент, когда придется переходить на другую графическую оболочку, с другими принципами организации.

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

  1. "Все --- файл". Любые системные объекты, использующиеся для управления этой самой системой, приложениями и их взаимодействием --- файлы. "Таинственные" кнопки, рабочие столы --- все взаимозаменяемо. Таким образом, одним из центральных объектов нашего изучения становится файловая система (ФС). Заметим, что у этого термина два основных значения: (1) способ хранения файлов на диске и (2) способ представления файлов для пользователя. Речь в данном случае идет, разумеется, о втором значении. С достаточной степенью точности можно считать, что ФС состоит из выстроенных в древовидную структуру каталогов и файлов. Собственно структура ФС в Линуксе стандартизована и умопостижима --- разобраться, что, где и для чего нужно, обыкновенно не составляет труда.
  2. "Все --- текст". Файлы, если они требуют ручной или автоматической модификации, --- текстовые. С точки зрения пользователя, структура ФС (и, в некотором смысле, всей ОС!) представляется в виде дерева файлов, в каждом из которых хранится информация в пригодном для чтения человеком виде. Исключение составляют файлы, не предназначенные для чтения и модификации пользователем: программы в бинарном виде, библиотеки и пр.
  3. Управление системой есть работа со специальным инструментом, манипулирующим текстовыми файлами (строго говоря, файлами и текстом вообще). Сам инструмент также не выходит за рамки парадигмы "файл --- текст": человек и машина обмениваются текстами, в результате чего модифицируются файлы. Следствием данного принципа является то, что основным интерфейсом управления Линуксом (на самом деле, Unix-подобной системы вообще) является интерфейс командной строки. Понятно, что он очень хорошо подходит для описанной парадигмы: пользователь набирает текстовые команды, компьютер команды интерпретирует, исполняет и в качестве результата выдает обратно текст.

Нетрудно понять, что существуют выходящие за рамки описанной парадигмы пользовательские задачи. Заметим, однако, что речь в данном случае идет об управлении системой как таковой. Чтобы пользоваться компьютером как точкой запуска Интернет-браузера, аудиоплеера и почтового клиента, не обязательно разбираться во всех тонкостях: все нужные приложения легко найти в меню. Если же мы захотим изучать Линукс как операционную систему, то разумно пользоваться следующей схемой. Допустим, мы хотим решить задачу, а инструментов перед собой видим недостаточно: у нас есть микроскоп, а нам нужно забить девятнадцать гвоздей. Не следует пытаться решить задачу имеющимися инструментами (как максимум --- один гвоздь забить микроскопом, чтобы убедиться в нецелесообразности такого подхода). Вместо этого имеет смысл пошарить в ящике с инструментами, выбрать подходящий (молоток) и в дальнейшем пользоваться (именно для забивания гвоздей!) именно им. Иными словами, если решение задачи представляется малоэффективным, то это значит, что используется плохо подходящий инструмент. ОС Линукс предоставляет очень богатый инструментарий, так что скорее всего, нужный инструмент попросту не найден или недостаточно освоен. Чтение в случае необходимости пользовательской документации позволяет накопить багаж знаний, достаточных для решения всех своих, в том числе довольно изощренных, задач.

Расскажем теперь об интерфейсе командной строки чуть более формально. Этот интерфейс на самом деле предоставляется специальной программой --- Shell'ом, или интерпретатором командной строки. Другими словами, это не Линукс с нами "разговаривает", а специальный процесс --- один из запускаемых при логине (входе в систему). Чем занимается эта программа? Она читает то, что мы вводим с клавиатуры, анализирует, выполняет соответствующие задачи и выводит результаты --- как свои, так и других программ --- в виде текста. Отметим, что данная парадигма реализуется не только Shell'ом: подобный интерфейс имеют, скажем, интерпретатор языка программирования python, клиент базы данных mysql.

Как же выглядит подаваемая Shell'у команда? Обыкновенно команды вводятся построчно, каждая строка разбивается на слова в соответствии со следующим простым правилом: последовательность любых символов, идущих подряд и не являющихся разделителями --- это слово, а последовательность разделителей --- это не слово, а промежуток между словами. Разделители --- это пробел, символ табуляции и символ перевода строки. (Заметим, что заставить Shell воспринимать символ перевода строки как разделитель довольно непросто: перевод строки --- это управляющая клавиша, поэтому при ее нажатии Shell'у передается вся набранная строка, которую он воспринимает как законченную команду.)

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

Рассмотрим следующую команду:

#script -t 1.script 2>1.script.time

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

Каким образом эта команда была разобрана? Если бы символа комментария в начале строки не стояло, интерпретатор выделил бы имя команды ("script") и два параметра ("-t" и "1.script"). В данном случае последнее введенное слово параметром команды не является: оно содержит символ "больше" (">") и является указанием Shell'у выполнять перенаправление вывода. К моменту запуска команды это слово было бы уже обработано интерпретатором (для простоты можно считать, что эта группа символов просто исчезнет).

Фактически, диалог пользователя и системы при помощи командной строки происходит следующим образом. Пользователь набирает команду в командной строке, Shell эту строку обрабатывает. Обратим внимание на два этапа обработки:

  • Shell определяет, что за команда была введена (в данном случае --- script). Есть небольшой набор встроенных в Shell команд (к примеру, cd, изменяющая текущий каталог). Если команда является встроенной, то с ней все ясно, в противном же случае Shell по специальному алгоритму ищет утилиту (программу) с таким названием (именем).
  • Shell обрабатывает строку на наличие специальных управляющих символов. Когда ранее шла речь об обыкновенных символах и разделителях, была допущена некоторая неточность: есть и третий тип символов --- управляющие. После того, как Shell находит управляющие символы, он их обрабатывает в соответствии с их значением. В данном случае стандартный вывод (поток) ошибок утилиты script перенаправляется не на терминал, а в файл. Сама утилита script этого даже не заметит, если не будет специально "присматриваться". После того, как вывод будет перенаправлен, этот фрагмент строки будет считаться обработанным ("удалится"), а утилита script будет запущена с двумя параметрами.

Из нашего примера видно также следующее: параметры обыкновенно разбиваются на две категории --- ключи и содержательные параметры. Содержательные параметры --- это имена объектов, строки, специальная передаваемая информация. Ключи --- это особого вида параметры, начинающиеся обычно с минуса ("-"). Наличие в командной строке ключей означает, что команда будет выполняться приблизительно так же, но с некоторыми нюансами (изменениями). Ключ -t в нашем случае заставляет утилиту script выводить время (time), а 1.script --- это содержательный параметр (имя файла, с которым script будет работать).

Осталось лишь сказать, чем занимается утилита script. Она протоколирует все действия, производимые пользователем: записывает в специальный файл вводимые команды и получаемые результаты. Именно эта утилита и использовалась для написания наших примеров.

Будем теперь рассматривать вместо команды script команду ls, показывающую список файлов в текущем (если не указано иного) каталоге. При выполнении некоторых специальных условий (к примеру, при наличии алиаса и соответствующего терминала --- но на этом мы останавливаться не будем) она выделяет объекты различными цветами. Это, однако выполняется не всегда. Если вызвать команду ls не просто как "ls", а как "/bin/ls" (это полный путь к соответствующему файлу в дереве каталогов), то выделения цветом не произойдет:

$ /bin/ls
DirDir  File

Обратим внимание, что отличить имя файла от имени каталога в выводе ls без раскраски невозможно. Можно, однако, указать "ключ" -F, который после имен каталогов будет рисовать символ "/". Это типичный пример использования ключа, который модифицирует работу программы. Передаваемый параметр не соответствует никакому объекту: это не файл и не имя. С этим ключом, однако, поведение программы несколько изменяется:

$ ls -F
DirDir/  File

Если указать ключ -s, то мы увидим и размер объектов. Каталог в данном случае имеет размер 4 блока, а файл --- 0 (он пуст).

$ ls -F -s
итого 4
4 DirDir/  0 File

Для ключей по возможности соблюдается принцип аббревиативности: вместо полных названий ключей используется одна буква, с ним как-то связанная. Для ключа -F эта связь неочевидна (от слова classiFy), а вот -s означает size (размер). Принцип аббревиативности нужен вот зачем: когда используется сразу несколько ключей, появляется возможность уменьшить количество набираемых символов. Например, команда "ls -F -s" и так не слишком длинная, однако ее можно еще сократить, поскольку однобуквенные ключи могут прилипать друг к другу: "ls -Fs". Мы ставим один общий минус, а дальше перечисляем все однобуквенные ключи. Достоинство однобуквенных ключей --- их быстро набирать. Недостатков у них два. Во-первых, их надо помнить. Заняты при этом как маленькие, так и большие буквы. Ключ -a (all) показывает все объекты в текущем каталоге:

$ ls -a
.  ..  DirDir  File  .FileFile

Ключ -A (almost all) выводит все объекты, за исключением . и .. (они есть в любом каталоге, и смотреть на них, возможно, нам неинтересно):

$ ls -A
DirDir  File  .FileFile

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

$ ls --all
.  ..  DirDir  File  .FileFile
$ ls --almostr-all
DirDir  File  .FileFile

Важно понимать, что описанные принципы работы с ключами --- это всего лишь соглашения, которые, увы, соблюдаются не всеми. Никто не мешает написать программу, с ключами не работающую вовсе или использующую другие принципы их написания. Несколько таких программ --- dd, ps, tar --- были написаны давно, когда этого соглашения не было, и потому этим правилам (частично или полностью) не подчинаются.


Сведения о ресурсах

Готовность (%)

Продолжительность (ак. ч.)

Подготовка (календ. ч.)

Полный текст (раб. д.)

Предварительные знания

Level

Maintainer

Start date

End date

40

1

1

1

1

ConstantinYershow, DmitryChistikov, VsevolodKrishchenko


CategoryLectures CategoryPspo CategoryMpgu CategoryUneex

PspoClasses/080717/03ConsoleBasics (последним исправлял пользователь eSyr 2009-03-22 21:52:24)