UNИX, весна 2008, 02 лекция (от 20 февраля)

Материал из eSyr's wiki.

Перейти к: навигация, поиск

Диктофонная запись: http://esyr.org/lections/audio/uneex_2008_summer/uneex_08_02_20.ogg

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

Концепция здесь будет одна: может быть, полезно вспомнить ...

Концепция след.: у нас есть сложный прибор, компьютер. С помощью этого прибора можно решать много разных задач, и его функционирование зависит от того, как мы на него повоздействуем, то с помощью компьютера можно решать практически любые задачи по обр. и передаче обраб. инф. Подавл. большинство приборов устроено иначе, у них есть перечень функций, у этого перечня есть интерфейс, тем не менее, идея состоит в том, что каков перечень функций, таков и интерфейс. Например, у стир. машиниы есть главная функция стирка, у функции есть опции. Стирка как таковая как раш. задачи состоит в том, что выбираем один из видов стирки, после чего нав=ешиваем опции. Так устроен практ. любой бытовой прибор, если не проще, нарпример, чайник.

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

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

Лектор проходил мимо стенда компьютерных курсов, и обнаружил четыре специализации: Фотошоп, Веб-дизайн, программирование. Такой вот странный набор. Теперь можно сопост. эти задачи и список возм. решаемых задач.

Ещё одна причина: попробуем просмотреть все пункты любого меню графического в дистр.

Но эта не главная задача. Главная задача: способ упрю. компьютером позволит решать задачи, если они не решены. Идея в том, что компьютер предсть. инстр. для решения частых задач и способ комбинир этих задач. Лектор говорит таким способом, чтобы не гворить, что мы программируем, тем не менее, другого способа нет, поттому что другие способы --- выбор и конструирование из готовых решений.

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

Первыя концепция:

  • Решение задач (обработка и передача информации). Есть ещё мультимедийные задачи, но тем не менее. Ключевое слово --- решение.

Во что выливается решение задач: способ упралвять компьютером. Есть бытовой прибор, которым надо как-то управлять. Если стиральная машинка, то это например колесо и 4 кнопки. Нужно выделить функц. элементы.

Задача номер два: построение решений. Что лектор имеет в виду: что-то вроде функц. полноты. Если мы хотим, чтобы задачи действительно решались, у нас в руке должен быть некий инструментариф, который позволяет эти задачи решать. Пример: рпедположим, что мы хотим написать некую программу, которая перекладывает и переименовывает файлы, и пытаемся сзелать это средстваи COMMAND.COM. И упираемся в то, что мы не можем эту задачу решить, инструментарий неполный.

Третье, что важно в этом случае: воспроизводимость решения. Если мы задачу как0то решили, то было бы здорово, чтобы в следующий раз задачу решали не ы, а компьютер. Поттому что работать должен компьютер, а человек --- думать. Если мы сами создали решение, то оно должно обладать некой гибскостью, чтобы можно было его применять для ожнотипных задач. Готовые решения должны как-то оформлять, причём эти решения должны быть по возм. удобными.

В ворде есть запись макросов. Для лектора эта штука была как минимум раздражающей. Записываешь действия, а потом записи такие странные...

Давайте на эти пожелания наложим нкекоторые требования, что мы хотим при этом соблюсти:

  • Давным давно было требование минимаизации апп. зависимости. При мер: пусть у нас есть аппарат для счтения мыслей, он стоит дороже куомпьютера, но он позволяет упраылять компьютером волеизьявлением. Было бы неплохо организовать работу с компьютером таким образом, но он дорогой и не существует. Более того, любая привязка к конкретике, например, к количеству цветов, которое может вывести графустройство, очень нехорошее огарничение, коиторое может повредить в будующем. Те мне менее, сейчас можно запланировать, какое должно быть железо. Тем не менее, это условие очень хорошее, поскольку сейчас линукс начинает применяться на разных мобильных устройствах.
  • Не требование, а некое предположение. Пусть задачу мы поставили, попробуем наметить пути решения. Попробуем заглянуть на пункты посроение решений и воспроизводимость. Давайте в пункт "управление": это взаимодействие компьютера и человека. Мы говорим о чёём: мы сами управляем компьютером. И когда лектор говорит про управление, он гооврит про то, что придёт он и будет имеющимися у него средствами взаимодействовать с компьютером. Отсюда требование, какими мы бкудем пользоваться каналами данных .Есть человек, существо с ограниченными каналами данным и с 5 чувствами. Если конкрет. вопрос, и понять, как орг. взаимод, то выяснится, что не так уж много способов орг. взаимод, как им командовать. Мы должны команды поставлять, а он их --- интерпретировать. И вводится допущение, что команда это текст. Это связано вот с чем: связано с решением двух след. наших задач: постр и формализ решений. На сегодняшний день мы просто идём к этому, на сегодняшниц день ничего, кроме прогр., не придумано. Можно конечно обойтись без предолож, но пострю. будет несколько другим. Чёткую и однознач. команду можно предстваить в виде текста. Никакого другого метода, как лектору кажется, не существует. В случае, когда вып. функций мало, когда каждому элементу упр. обозн. отдельное действие, если функций много, то мы получаем беск. много эл-тов упр, и надо как-то их конструировать, естественным образом это текст. Сейчас практически единственным способом является ввод по клавиатуре. А что касается поиска этого текста среди вариантов, то увидим, что этот текст используется. Команда --- это то, что дают. Основываясь на этом допущении, сделаем ещё ряд допущений.

Предположение номер два: взаимодействие --- команда-результат. Лектор не рассм. другие варианты. Речь идёт о взаимодействии: человек даёт команду, машина даёт реззультат, человек анализирует, даёт другую команду, машина даёт другой результат. Второе предп.: диагностика (обратная связь) --- тоже текст. Эта самая диагностика тоже может быть предметом анализа, и не исключено, что мы её будем передавать обратно компьютеру.

Утвержд. 3: более строгое. Данные --- текст. Тут надо говорить, что такое текст. Надо дать некоторе опред. Текст: послед. символом, коотрые человек может прочитать глазами и понять. Смысл третьего утвержд: раз взаимод. осущ. текстовым способом, то и данные должны иметь тестовую форму. В том случае, когда картинки имеют содерж. знач, то неплохо и её выводить в текстовом виде.

Идея: обмен предпочтительно делать текстовым.

Теперь посмотрим, как этак концепция.... какие дополнительные идеи могут сюда быть навешены.

Допустим, наша мечта сбылась: мы нашли место в ОС, в котором всё можно представить в виде текста.

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

Это упростит понимание ситуации и упростит управление.

Следующее предположение: как нам теперь идти дальше. Где-то здесь, когда лектор говорил про постр. решений, лектор проговорился, что наша система будет устроена по проинципу чемоданчика/сундучка. В нашем случае это сундук чемоданов. Подход точно такой же функциональный, как и в этих принципах. Мы делаем упор не на конечные задачи, а некие подзадачи. Мы создаём в первую очередь интсрументарий.

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

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

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

Интерфейс Командной Строки

Речь идёт о чём: речь идёт о таких вещах, которые некоторым и объяснять-то не надо. Это место, которое совмещает интерфейс данных и инт. упр., причём интерфейс текстовый.

Процесс состоит в том, что мы подаём некий текст, в ответ приходит текстовая же диагностика. Текст этот представляет собой апелляцию к имеющемуся инструментарию. Единый терминал, объекд инт. упр. и данных.

Команда --- представляет собой апелляцию к имеющемуся инстр. В случае, кода речь идёт о ИКС, то вид у неё <утилита> <параметры>. Что такое утилита? утилита --- некая программа, которая где-то там лежит, и когда вводится имя, то интерпретатор понимает, что надо её запустить. Команды могут быть встроенными.

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

Остаётся суперпозиция. Можно объединять команды, имеетсч алгоритмически полный язык, кроме того, он насыщен возможностями, специфичными для интерпретаторы командной строки.

Пример: попробовать написать программу, которая деалет ls | wc. Что делает эта команда: ls выдаёт список файлов, а wc считает количество строк в выдаче.

Вё это будет впереди.

Наконец, чтобы работать с шеллом было эффективно, мы не забываем, что эта штука обсепечивает взаимодействие человека и компьютера, и в таком устройстве должно быть предусмотрены функции для эффективной работы.

Помимо того, что шелл является ЯП, он является средством редактирования командной строки.

Для тех, кто совсем не в танке: для того, чтобы управление происходило компьютером, некоторые вводимые с клавиатуры символы должны воспр. не как текст, а как упр. символы. Например: вводим командную строку, как понять, когда он должен начать интерпретировать. Для этого есть специальный символ: перевод строки. Обычно эти спецсимволы пердн. для упр. интерпретаторам, иногда, для управления системой. Пример: запустили что-то, интерпретатор ждёт, программа работает, тогда посылаем Ctrl-C.

... Тем самым мы придерживаемся условия, что интерфейс управления --- текстовый.

Это было краткое введение по всему этому многообр., по нему будем расск. в ближайшее время.

Осталось 15 минут, и лектор хочет посвятить их проблемам, которые интересны меньшинству:

terminal capabilities

Год нзаад была лекция, где описывались виды инт., и там разделялся ИКС и терминальный.

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

... и Интерфейсом терминальным, который предст. собой матрицу знакомест. Вопрос: мы вроде только что договорились, что наше терм. устройство умеет передавать байты, то эсть, что это точчка, а не матрица. Мы ничего не говорили про координаты. КАк нам теперь от этого избавиться: избавиться можно, введя две хитрых сущности: первая сущность называется курсор. Что такое курсор: это индикатор того места, куда введётся символ. Второе: помимо наличия курсора, договариваемся, как некоторые символы являются упр для компьютера, так и некоторые выводимые символы управляют терминалом. То есть, есть символы двух родов: управляют компьютером и терминалом. Например, перевод строки он не символ, он переводит строку. Существуют гораздо более хитрые символы: переместить курсор в координаты 20,10. Зачем это нужно: устройство продолжает оставаться тупым. Тем самым, вводя понятие упр. символов терминала, мы избегаем дополнительных апп. ухищрений за искл. того, что терминал должен уметь распознавать символы. Но поскольку байтов разных мало, то есть управляющие последовательности. Есть специальный символ "начало упр. посл.", а за ним могут идти обыкновенные символы, но они интерп. как упр. послед. И вывод упр. последовательности приведёт, например, к изменению цвета или к перемещению курсора. Таких последовательностей чёртова прорва. Хуже всего, что за время сущ. терминалов их накопилось несколько сотен, и в каждом из них упр. посл. разные. Для того, чтобы этим как-то управлять, есть две БД терминалов, termcap и terminfo, в них описаны всевозможные функции терминалов, и какие можно выполнять дейтсвия. Кроме того, у термкапа есть язык программирования свой. Для того, чтобы посмотреть, что умеет конкретно ваш терминал, есть infocmp ,tset. Для того, что бы непоср. в шелле спозиц. курсор, то есть tput, после которого идёт termnfo/termcap capability. Терминал определён в $TERM. Для использования этого в программировании есть библиотека ncurses.


UNИX, весна 2008


Лекции

01 02 03 04 05 06 07 08 09 10 11 12 13 14


Календарь

Февраль
13 20 27
Март
05 12 19 26
Апрель
02 09 16 23 30
Май
07 14
Семинары

01 02 03 04 05 06 07


Календарь

Март
21
Апрель
04
Май
16 30
Июль
11 18
Август
15


Эта статья является конспектом лекции.

Эта статья ещё не вычитана. Пожалуйста, вычитайте её и исправьте ошибки, если они есть.
Личные инструменты
Разделы