> Вступление Лекторий не хорош для тематики ``использование компьютера'', вместо лекций лучше тренинги: правильный ответ на вопрос ``С чего начать?'' -- начинать с лёгкой практики. Но времени на это требуется больше. С чего начать что? В банкомате (любом однофункциональном приборе) всегда понятно, с чего начать, либо уже написана инструкция. Сложный прибор -- компьютер -- решает много задач, поэтому сперва надо определить, какие задачи решать. > Сеанс взаимодействия с системой Есть опробованный десятилетиями алгоритм, с чего начинать работу с UNIX-подобной системой. 1 Начальный интерфейс Linux -- минималистический, так как сначала надо зарегистрироваться, а регистрация -- это всего лишь два фрагмента текста: входное имя и пароль. 1 Запуск оболочки. Как правило -- интерпретатора командной строки (ИКС), программы, с которой пользователь работает всё оставшееся время. Это может быть любая программа. Чаще всего -- т. н. shell, ``оболочка'' + профиль. Профиль shell-а -- набор полноценных программ, т. к. shell -- полноценный в.у. я.п. Например, существует курс обучения программированию, начинающийся с shell (достоинства: ИКС, те же команды, что и в системе, работа с файлами и текстом) 1 Пользователь запускает программы, анализирует результаты работы 1 Все программы останавливаются, в т. ч. и оболочка, вып. проц-ры дерегистрации Из п.2 следует, что множество задач не требует графической оболочки. На LiveCD -- автоматический вход в систему, за пользователя проделали п. 1, 2 и отчасти 3. О безопасности речь не идёт и считается, что удобства LiveCD удобны для всех. Вопрос из зала: ``Я слышал, что есть какой-то броузер, работающий в командной строке. Это что, шутка?'' Отчего же? Есть Links, ELinks, Lynx и т. п. Отличаются неподдержкой нестандарта. > Матрёшка интерфейсов Четыре уровня представления информации. 1 Командная строка -- строка символов. Вводится строка, первое слово -- название команды все остальные слова -- параметры. 1 Терминал -- матрица символов. Например, текстовый броузер использует всю плоскость экрана. 1 Графическая подсистема -- матрица точек. Она умеет рисовать, поддерживать окна и всё. Но этого совсем недостаточно для ``рабочего стола''. 1 Рабочий стол -- объекты, из которых конструируется решение задач пользователя. Независимость уровней: командная строка работает даже на электрической печатной машинке, с листом бумаги. Терминал не использует понятия команды. Графсистема полностью оторвана от КС. Рабочий стол может быть реализован любой граф. подсистемой плюс ещё чем угодно. > Командная строка Командная строка -- нечто погонное. Она набирается в одну строку, что находится до этой строки не принимается во внимание. Нечто вроде телетайпа. Главная идея -- в том, что компьютер и пользователь общаются на каком-то языке. Даже сегодня устройство, которое распознаёт звуковую речь, ненадёжно и мало распознаёт. Принцип объединения потока данных и потока управления под единым интерфейсом -- по-видимому, реализация принципа фон Неймана: объединение программ и данных. Обмен текстами ^=>^ есть потребность в утилитах (т. е. ``удобностях'') для обработки текста: найти подстроку, отсортировать, преобразовать размеченный текст. В любом учебнике по Linux/UNIX много посвящено работе с файлами и работе с текстом, т. к. это основные объекты Linux, чем больше вы в этом разбираетесь, тем быстрее вы решите свои задачи. Чтение и письмо -- наиболее формализованная способность человека, трудно выбрать лучший способ взаимодействия (если выбирать единственный). Shell триедин: язык программирования высокого уровня, ИКС и оболочка. Я. П. -- ориентирован на систему, файлы и тексты, алгоритмич. полный. Работать с ИКС. должно быть удобно: напр. поиск по истории команд, а не повторный набор длинной команды, много другого. Оболочка: shell -- не просто ИКС (напр, python -- тоже ИКС), а интегратор возможностей системы, средство удобного запуска программ, манипуляции ими, анализа результатов и т. п. ``Универсальной оболочки'', лучшей shell, не придумано: если и есть какие-то ``конструкторы'' другого типа, они либо сами велики, либо минимальная конструкция в них насчитывает десятки объектов, либо и то, и другое. Итак: маленькие программы, удобная работа в КС, манипуляция компонентами системы. Недостаток: человек читает текст не по символам, и даже не по словам. Трудно читать бегущую строку, мы читаем областями. Необходимо организовать текст областями, КС этого не предусматривает. > Терминал Самое легендарное и мистическое место. Имеет очень извилистую историю. Первый терминал полностью копировал печатную машинку, вплоть до табулостопов. Но сама идея идеальной пишмашинки с последней страницей бесконечной ленты (можно даже отматывать назад!) -- хорошая, так как накладывает очень мало ограничений. Бумага ничего не помнит, также не помнит и терминал: есть вывод на экран и ввод с клавиатуры, и то, и другое происходит независимо и последовательно. Можно работать в терминах ``потоки данных'' т. е. файлы (а не ``устройства представления данных'' с собственными законами). Несмотря на незнание содержимого экрана, мы можем вывести текст в определённое место, перекрашивать, и т. п., используя _управляющие последовательности_. Строки, меню, прямоугольные регионы граф. интерфейсов -- текстовые элементы. Разумная организация текста: ограничения на текст (один шрифт и размер, пара-тройка начертаний) достаточные, больше -- перебор. Минимальные технические требования: устройство, которое может принимать и передавать байты, больше ничего: подойдёт и эл. пишмашинка, и программа работы с модемом и т. п. Ориентировано на чтение+письмо, но не на поиск+выбор. Поиск есть, но это не мгновенный визуальный, а поиск, основанный на чтении, медленный. > Графическая среда X11 Здесь должно было быть два слайда, пришлось впихнуть в один. В книжке этому посвящена лекция, но и лекции мало для граф. подсистемы с самом долгой историей. Отличие от текстового режима: рисованные (не-текстовые) элементы. У лектора на собственном рабочем столе единственный значимый рисованный элемент -- часы без цифр (^tclock^). Двухчастная, клиент-серверная архитектура. Сервер -- это программа, которая регистрирует программу-клиент в виде ``окна'', организует рисование по запросу со стороны клиента и поток событий (от мыши, клавиатуры и т. п.) к клиенту. Клиент -- программа, регистрирующаяся на сервере, подаёт граф. команды, обрабатывает события. Архитектура сетевая, взаимодействие может происходить через сеть. С чего мы начали организацию графической оболочки? Завели там терминал (^xterm^) [[Отступление: ``active icon'' xterm -- вместо иконки -- экранчик самым мелким шрифтом, точка или две на букву, прочесть нельзя, но активность вывода видно]]. Для управления рабочим столом необходимо управлять окнами. Один из клиентов -- ``окновод'' -- рисует декорации, меняет наложение, размер и положение. Организует виртуальный рабочий стол. У л. их 4 -- основной, для навигатора, для офиса/мультимедиа и для терминалов в режиме суперпользователя. Окновод если и решает задачи рабочего стола, то не все. Необходимо несколько различных клиентов, каждый делает свою работу. Рабочий стол -- задача не для программиста, а для специалиста в области usability (доказательство -- Apple и MacOS). Меню, иконки и пр. -- это визуальный поиск с выбором. Удобные решения пользовательских подзадач (быстрый доступ, визуализация, оповещение и пр.). Однако утилиты командной строки и терминала можно полностью перенастроить, а весь комплекс программ, реализующий метафору ``рабочего стола'', настраивать от начала до конца очень долго, чаще всего придётся согласиться с готовыми решениями. Даже простой рабочий стол (на основе ^ctwm^[[Отступление: функция pushmove, одно окно двигает другое]] л. настраивал долго и поэтапно. Чаще бывают программы настройки, меняющие отдельные параметры. Почему это недостаток? Задача ``рабочего стола'' -- подстройка под вкусы и привычки хозяина, и любая мелочь, которую подстроить нельзя, может иметь значение. > Особенности Linux Ещё один кадр, который следовало разбить на несколько. Особенности технологические и ``социальные'' (т. е. в какое состояние вы должны привести себя и окружающих, чтобы удобно работать с Linux). Начинать работать с Linux не стоит без знания особенностей. Всё строится на командной строке, запуск граф. оболочки и приложений под неё -- тоже shell-сценарий. Всё, что делается с системой, делается на shell. Без shell и знания его -- тяжело. Два принципа: ``всё -- текст'' (как минимум одна лекция учебника) и ``всё -- файл''. Нарушаются только вынуждено. Любой объект в системе, если он вообще поддерживает ``чтение'' и ``запись'', т. е. потоковую передачу данных, должен быть представлен как файл. Тогда туда можно будет писать и читать оттуда стандартным образом, и именоваться этот объект будет так же, как файл: лежать в каком-то каталоге. Чтоб манипулировать такими объектами, достаточно операций работы с файловой системы (а _не_ БД, классы и объекты я. п.). Если это имеет смысл, файлы должны быть текстовыми. Тогда для изменения внутри файла достаточно программ обработки текстов: например, настроечный файл -- это размеченный текст, в нём есть стандартный строки вида ^{переменная}={значение}^ или ^[{секция}]^. Не зная этих принципов тяжело разобраться в работе системы. Настроечные файлы легко править, это ``стандартный'' способ, а программы-настройщики -- ``нестандартный'', они разные с разным интерфейсом. Даже программы: например, запуск системных служб -- это простые сценарии на shell, то есть тексты. Не просто многопользовательская система, а возможность одновременной работы, потому что терминалов может быть несколько, равно как и программ, обрабатывающих тексты. Есть средства защиты данных при одновременной работе (права доступа и т. п.). Эти проблемы решены ещё в UNIX. Любое ``решение на одного'' -- отступление от такой схемы, формальности многопользовательской работы сложнее отменить, чем выполнить. UNIX был ориентирован на самостоятельное изучение, на людей с высоким уровнем научной культуры. Linux унаследовал не это, но более общее требование: он ориентирован на самостоятельное решение задач. В UNIX-подобных системах для этого достаточно внимательно изучить документацию, в Linux -- не всегда, многое тяжело документировать. Но есть большое структурированное информационное пространство, поиск в котором -- главный инструмент. Тяжело осваивать Linux не как систему для самостоятельного решения задач, а как систему, в которой есть всё готовое. Если пользоваться системой для решения всех своих задач, надо научиться их решать, а не ждать, пока они решаться сами собой. Недостаток: чем больше внимания инструментам, тем меньше внимания готовым решениям. Возможны ``профильные'' -- под набор конкретных задач, но не ``всё для всех''. Самостоятельно решать задачи намного проще, чем с помощью закрытых систем, где нет сообщества и недостаточен инструментарий. И вероятность, что найдётся готовое решение, которое можно доработать очень высока. Не надо делать свой веб-движок, свою службу trouble ticketing, можно посмотреть на sourceforge хотя бы первый десяток подобных проектов. Самостоятельное решение задачи -- норма, так что получить помощь есть где. Но без нужного багажа знаний работать с системой будет сложно. > Как добывать знания о Linux? Попытка запихнуть три слайда в один! Потому что на самом деле это тема целой лекции.С интернетом, так как требование связности информационного пространства. Отступление на тему переводов и ``новой латыни''. Перевод документации (особенно той, что идёт вместе с программой) -- стрельба по движущейся мишени: сегодня перевели, а завтра -- новая версия, опять переводить. Если бы это была программа, которую вы правили, можно было бы применить старые patch-и к новой версии. А перевод -- намного более трудоёмкая работа. Простой язык, похожий на американский -- язык международного общения, особенно в компьютерной области. Русскоязычную компьютерную терминологию вытеснила переводная (по сути -- макароническая), когда стали копировать и закупать выч. технику вместо отечественной. Причина -- американизация, экспорт субкультуры, имперская стадия развития американского общества, когда распространение технологии приносит с собою единый облегчённый вариант культуры, как это было с Римской империей. Даже слово ``компьютер'' из этого нового словаря, раньше было ``ЭВМ''[[Отступление: почему все программисты говорят ``c'ontrol'', а не ``contr'ol''? Непонятно]]. Первая стадия (ей посвящена лекция учебника): извлечение знаний из самой системы (норма для UNIX). Классические способы: . manual pages, т. е. справочное руководство (не учебник!), выполненное в виде одной страницы. . info -- настоящий гипертекст, может быть представлен в виде книги, может содержать и справочник, и учебник, и техническую документацию; иногда тяжелее читать . встроенная помощь -- например, в редакторе vim, опять совмещение данных и управления (помощь по редактору средствами редактора), а man по vim короткий . ^/usr/share/doc^ -- если нет ни man, ни info... хорошо ли это? . Документацию к дистрибутиву пишут авторы дистрибутива, например, ``ALT Linux снаружи / изнутри''. Там могут быть ответы на вопросы ``зачем?'' и ``как?''. Основная информация ``вокруг'' дистрибутива. Чего там нет? Ошибки, сложные ситуации, сложно формализуемые вопросы. Вторая стадия: брожение вкруг дистрибутива: . Ресурсы самого сообщества: www.altlinux.ru, search.altlinux.ru, heap.altlinux.ru и т. п., . в том числе поиск в списках рассылки сообщества . Общие поисковые системы: например, поиск диагностического сообщения об ошибке в google, не надо описывать своими словами . Спросить у знакомого специалиста Linux (гуру). 4 варианта ответа: 00 ``RTFM'' (_R_ead _T_hose _F_unny _M_anuals) / ``Go Google!'' То есть задача решается, а вы где-то не досмотрели. 00 ``Я не знаю''. Может быть, ваш гуру -- не самый великий? Или великий в другой области? 00 Ответит на вопрос -- значит, вопрос непростой, есть хитрости и т. п. 00 ``Я не знаю, а ну-ка покажи, что там'', и сделает. Часто встречающийся вариант: с целью повышения квалификации, по-дружески . Спросить в списке рассылки. Одна голова хорошо, а целый список лучше. Список freeschool -- для задач лектория. . Спросить у специалиста в области. Откуда такого взять? Это -- тот, кто собрал нужную вам программу в дистрибутив, т. е. maintainer, ``сопровождающий''. Есть система отслеживания ошибок, куда можно поместить найденную ошибку или пожелание. > Нечто вроде кредо Если нет стремленья ``дойти до самой сути'', то и разговаривать об обучении, наверное, незачем? Как минимум должно быть такое стремление ``в работе''. Тогда неудивительно, что