Лекторий не хорош для тематики «использование компьютера», вместо лекций лучше тренинги: правильный ответ на вопрос «С чего начать?» — начинать с лёгкой практики. Но времени на это требуется больше.

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

Сеанс взаимодействия с системой

Есть опробованный десятилетиями алгоритм, с чего начинать работу с UNIX-подобной системой.

  1. Начальный интерфейс Linux — минималистический, так как сначала надо зарегистрироваться, а регистрация — это всего лишь два фрагмента текста: входное имя и пароль.
  2. Запуск оболочки. Как правило — интерпретатора командной строки (ИКС), программы, с которой пользователь работает всё оставшееся время. Это может быть любая программа. Чаще всего — т. н. shell, «оболочка» + профиль. Профиль shell-а — набор полноценных программ, т. к. shell — полноценный в.у. я.п. Например, существует курс обучения программированию, начинающийся с shell (достоинства: ИКС, те же команды, что и в системе, работа с файлами и текстом)
  3. Пользователь запускает программы, анализирует результаты работы
  4. Все программы останавливаются, в т. ч. и оболочка, вып. проц-ры дерегистрации

Из п.2 следует, что множество задач не требует графической оболочки.

На LiveCD — автоматический вход в систему, за пользователя проделали п. 1, 2 и отчасти 3. О безопасности речь не идёт и считается, что удобства LiveCD удобны для всех.

Вопрос из зала: «Я слышал, что есть какой-то броузер, работающий в командной строке. Это что, шутка?» Отчего же? Есть Links, ELinks, Lynx и т. п. Отличаются неподдержкой нестандарта.

Матрёшка интерфейсов

Четыре уровня представления информации.

  1. Командная строка — строка символов. Вводится строка, первое слово — название команды все остальные слова — параметры.
  2. Терминал — матрица символов. Например, текстовый броузер использует всю плоскость экрана.
  3. Графическая подсистема — матрица точек. Она умеет рисовать, поддерживать окна и всё. Но этого совсем недостаточно для «рабочего стола».
  4. Рабочий стол — объекты, из которых конструируется решение задач пользователя.

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

Терминал не использует понятия команды.

Графсистема полностью оторвана от КС.

Рабочий стол может быть реализован любой граф. подсистемой плюс ещё чем угодно.

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

Командная строка — нечто погонное. Она набирается в одну строку, что находится до этой строки не принимается во внимание. Нечто вроде телетайпа. Главная идея — в том, что компьютер и пользователь общаются на каком-то языке. Даже сегодня устройство, которое распознаёт звуковую речь, ненадёжно и мало распознаёт.

Принцип объединения потока данных и потока управления под единым интерфейсом — по-видимому, реализация принципа фон Неймана: объединение программ и данных.

Обмен текстами => есть потребность в утилитах (т. е. «удобностях») для обработки текста: найти подстроку, отсортировать, преобразовать размеченный текст. В любом учебнике по Linux/UNIX много посвящено работе с файлами и работе с текстом, т. к. это основные объекты Linux, чем больше вы в этом разбираетесь, тем быстрее вы решите свои задачи.

Чтение и письмо — наиболее формализованная способность человека, трудно выбрать лучший способ взаимодействия (если выбирать единственный).

Shell триедин: язык программирования высокого уровня, ИКС и оболочка. Я. П. — ориентирован на систему, файлы и тексты, алгоритмич. полный. Работать с ИКС. должно быть удобно: напр. поиск по истории команд, а не повторный набор длинной команды, много другого. Оболочка: shell — не просто ИКС (напр, python — тоже ИКС), а интегратор возможностей системы, средство удобного запуска программ, манипуляции ими, анализа результатов и т. п.

«Универсальной оболочки», лучшей shell, не придумано: если и есть какие-то «конструкторы» другого типа, они либо сами велики, либо минимальная конструкция в них насчитывает десятки объектов, либо и то, и другое.

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

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

Терминал

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

Но сама идея идеальной пишмашинки с последней страницей бесконечной ленты (можно даже отматывать назад!) — хорошая, так как накладывает очень мало ограничений.

Бумага ничего не помнит, также не помнит и терминал: есть вывод на экран и ввод с клавиатуры, и то, и другое происходит независимо и последовательно. Можно работать в терминах «потоки данных» т. е. файлы (а не «устройства представления данных» с собственными законами). Несмотря на незнание содержимого экрана, мы можем вывести текст в определённое место, перекрашивать, и т. п., используя управляющие последовательности.

Строки, меню, прямоугольные регионы граф. интерфейсов — текстовые элементы.

Разумная организация текста: ограничения на текст (один шрифт и размер, пара-тройка начертаний) достаточные, больше — перебор.

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

Ориентировано на чтение+письмо, но не на поиск+выбор. Поиск есть, но это не мгновенный визуальный, а поиск, основанный на чтении, медленный.

Графическая среда X11

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

Отличие от текстового режима: рисованные (не-текстовые) элементы. У лектора на собственном рабочем столе единственный значимый рисованный элемент — часы без цифр (tclock).

Двухчастная, клиент-серверная архитектура. Сервер — это программа, которая регистрирует программу-клиент в виде «окна», организует рисование по запросу со стороны клиента и поток событий (от мыши, клавиатуры и т. п.) к клиенту.

Клиент — программа, регистрирующаяся на сервере, подаёт граф. команды, обрабатывает события.

Архитектура сетевая, взаимодействие может происходить через сеть.

С чего мы начали организацию графической оболочки? Завели там терминал (xterm)1.

Для управления рабочим столом необходимо управлять окнами. Один из клиентов — «окновод» — рисует декорации, меняет наложение, размер и положение. Организует виртуальный рабочий стол. У л. их 4 — основной, для навигатора, для офиса/мультимедиа и для терминалов в режиме суперпользователя.

Окновод если и решает задачи рабочего стола, то не все. Необходимо несколько различных клиентов, каждый делает свою работу. Рабочий стол — задача не для программиста, а для специалиста в области usability (доказательство — Apple и MacOS).

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

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

Даже простой рабочий стол (на основе ctwm2 л. настраивал долго и поэтапно. Чаще бывают программы настройки, меняющие отдельные параметры. Почему это недостаток? Задача «рабочего стола» — подстройка под вкусы и привычки хозяина, и любая мелочь, которую подстроить нельзя, может иметь значение.

Особенности Linux

Ещё один кадр, который следовало разбить на несколько.

Особенности технологические и «социальные» (т. е. в какое состояние вы должны привести себя и окружающих, чтобы удобно работать с Linux). Начинать работать с Linux не стоит без знания особенностей.

Всё строится на командной строке, запуск граф. оболочки и приложений под неё — тоже shell-сценарий. Всё, что делается с системой, делается на shell. Без shell и знания его — тяжело.

Два принципа: «всё — текст» (как минимум одна лекция учебника) и «всё — файл». Нарушаются только вынуждено. Любой объект в системе, если он вообще поддерживает «чтение» и «запись», т. е. потоковую передачу данных, должен быть представлен как файл. Тогда туда можно будет писать и читать оттуда стандартным образом, и именоваться этот объект будет так же, как файл: лежать в каком-то каталоге. Чтоб манипулировать такими объектами, достаточно операций работы с файловой системы (а не БД, классы и объекты я. п.). Если это имеет смысл, файлы должны быть текстовыми. Тогда для изменения внутри файла достаточно программ обработки текстов: например, настроечный файл — это размеченный текст, в нём есть стандартный строки вида переменная=значение или [секция].

Не зная этих принципов тяжело разобраться в работе системы. Настроечные файлы легко править, это «стандартный» способ, а программы-настройщики — «нестандартный», они разные с разным интерфейсом. Даже программы: например, запуск системных служб — это простые сценарии на shell, то есть тексты.

Не просто многопользовательская система, а возможность одновременной работы, потому что терминалов может быть несколько, равно как и программ, обрабатывающих тексты. Есть средства защиты данных при одновременной работе (права доступа и т. п.). Эти проблемы решены ещё в UNIX. Любое «решение на одного» — отступление от такой схемы, формальности многопользовательской работы сложнее отменить, чем выполнить.

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

Если пользоваться системой для решения всех своих задач, надо научиться их решать, а не ждать, пока они решаться сами собой. Недостаток: чем больше внимания инструментам, тем меньше внимания готовым решениям. Возможны «профильные» — под набор конкретных задач, но не «всё для всех».

Самостоятельно решать задачи намного проще, чем с помощью закрытых систем, где нет сообщества и недостаточен инструментарий. И вероятность, что найдётся готовое решение, которое можно доработать очень высока. Не надо делать свой веб-движок, свою службу trouble ticketing, можно посмотреть на sourceforge хотя бы первый десяток подобных проектов.

Самостоятельное решение задачи — норма, так что получить помощь есть где.

Но без нужного багажа знаний работать с системой будет сложно.

Как добывать знания о Linux?

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

Отступление на тему переводов и «новой латыни». Перевод документации (особенно той, что идёт вместе с программой) — стрельба по движущейся мишени: сегодня перевели, а завтра — новая версия, опять переводить. Если бы это была программа, которую вы правили, можно было бы применить старые patch-и к новой версии. А перевод — намного более трудоёмкая работа.

Простой язык, похожий на американский — язык международного общения, особенно в компьютерной области. Русскоязычную компьютерную терминологию вытеснила переводная (по сути — макароническая), когда стали копировать и закупать выч. технику вместо отечественной. Причина — американизация, экспорт субкультуры, имперская стадия развития американского общества, когда распространение технологии приносит с собою единый облегчённый вариант культуры, как это было с Римской империей. Даже слово «компьютер» из этого нового словаря, раньше было «ЭВМ»3.

Первая стадия (ей посвящена лекция учебника): извлечение знаний из самой системы (норма для UNIX). Классические способы:

Чего там нет? Ошибки, сложные ситуации, сложно формализуемые вопросы. Вторая стадия: брожение вкруг дистрибутива:

Нечто вроде кредо

Если нет стремленья «дойти до самой сути», то и разговаривать об обучении, наверное, незачем? Как минимум должно быть такое стремление «в работе». Тогда неудивительно, что


1Отступление: «active icon» xterm — вместо иконки — экранчик самым мелким шрифтом, точка или две на букву, прочесть нельзя, но активность вывода видно

2Отступление: функция pushmove, одно окно двигает другое

3Отступление: почему все программисты говорят «control», а не «control»? Непонятно