\chapter{Несколько общих принципов}
\label{principles}
\section{Стимул --- реакция}
\label{stimul}
В отличие от многих других устройств, изобретенных человеком, компьютер
предназначен именно для того, чтобы избавить человека от рутинных
действий. Поэтому, если вы выполняете одну и ту же последовательность
из трех-четырех операций больше трех раз подряд, и нигде в процессе этой
последовательности не принимаете никаких решений, вы неправы. Эту
последовательность действий надо поручить компьютеру --- записать как
\itshape{скрипт} или \itshape{макрос}\footnote{сокращение от
макрокоманда~--- <<большая>> команд, объединяющая несколько более
элементарных операций}, и в дальнейшем выполнять как единое действие.

Поэтому просьбы <<покажи мне последовательность действий, требующуюся,
чтобы сделать это\dots>>, с которыми новички часто обращаются к опытным
пользователям, вообще говоря, бессмыслены. Выполнять заранее заданную
последовательность действий~--- дело компьютера. Дело человека~---
анализировать возникающую в результате этих действий ситуацию, и решать,
какие действия выполнять в следующий момент. 

Отсюда следуют два основных принципа работы с компьютером:
\begin{enumerate}
\item Осознавайте, что происходит с вашим сеансом работы в данный момент
(в какой программе вы работаете, в каком режиме она находится и так
далее)
\item Если компьютер вас о чём-то спрашивает, постарайтесь понять~--- о
чём. Не жмите бездумно на кнопку Ok, даже если в появившемся диалоговом
окне нет больше никаких кнопок. Если компьютер что-то сообщает вам по
своей инициативе, то весьма вероятно, что это жизненно важный факт,
требующий либо принятия решения сейчас, либо учёта при принятии
какого-то из последующих решений.
\end{enumerate}
Как бы ни кичились сторонники Unix-подобных систем тем, что их системы
ориентированы на общение с компьютером на некоем языке, в отличие от
MacOS-подобных систем, устроенных по принципу игры-стрелялки~---
появилась цель~--- дави гашетку, интерактивная работа пользователя за
компьютером все равно устроена по принципу стимул-реакция, даже если
реакция это не один <<выстрел>> мышью, а короткая команда, по которой в
<<бой>> вступает целый десяток программ. Вас просто повысили из
снайперов в комвзвода.
\section{Немного об устройстве компьютера}
\label{hardware}
Все компьютерные книжки для начинающих обычно посвящают целый десяток
страниц описанию устройства компьютера. На мой взгляд, это совершенно
излишне. Компьютер это такой черный (чаще светло-серый) ящик. Снаружи у
него есть экран на котором появляются буквы и разнообразные изображения,
и клавиатура, посредством которой этими буквами и изображениями можно
управлять. Впрочем, рядом с клавиатурой обычно есть маленькая подвижная
коробочка с тремя кнопками - мышь, которой гораздо удобнее управлять
изображениями, но которая жутко мешает при работе с текстами, особенно
если при этом нельзя совсем не прибегать к ее помощи. Еще у современных 
компьютеров обычно есть звуковые колонки, а иногда даже и микрофон,
который практически бесполезен, если только вы не собираетесь серьезно
заниматься звукозаписью (впрочем, в этом случае \emph{такой} микрофон
тем более бесполезен}.

Этот комплекс устройств для общения с пользователем называется
терминалом.

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

Здесь следует предостеречь от одной даже не совсем ошибки, а оговорки,
которая никакого вреда не приносит, но может сильно уронить вас в глазах
специалиста, к которому вы обратитесь за консультацией. Никогда не
называйте диски  памятью. Хотя и диски и память~--- это устройства
хранения информации, более того именно диски используются для
долговременного хранения информации, соответствующему памяти у человека,
в современном русском компьютерном жаргоне памятью почему-то называют
только оперативную память, в которой данные живут не дольше, чем
выполняется конкретная обрабатывающая их программа. У человека это
скорее соответствует <<вниманию>> чем <<памяти>>.

Поэтому, если вы заявите вашему системному администратору, что вам не
хватает памяти для хранения ваших данных, он вас скорее всего поймет
неправильно. Памяти, в его понимании, может не хватать для выполняющихся
программ (что, как правило, проявляется в том что программы начинают
работать невообразимо медленно), а для данных не хватает <<места на
диске>> или <<дискового пространства>>\footnote{Печальный опыт
показывает, что и того, и другого не хватает всегда.}. 

По той же причине никогда не используются термины <<запомнить>> и
<<вспомнить>>. Говорят о <<сохранении>> (англ. save) данных (из памяти
на диск) и об их <<загрузке>> (load). Могут встретиться также термины
<<прочитать>> (read) и <<записать>> (write), которые часто являются
синонимами <<загрузки>> и <<сохранения>>, поскольку, как мы увидим в
дальнейшем, диск с точки зрения пользователя, очень похож на большой
шкаф с документами. 

Еще одна пара, которую не следует путать, это питание и сеть. В
повседневной жизни мы часто говорим про какой-то электроприбор, что он
<<работает от сети>> имея в виду силовую сеть 220 вольт. В области
компьютеров, когда говорят <<компьютер подключен к сети>> имеют в виду
не то что он работает не от аккумуляторов, а то что он подсоединен к
информационной сети (возможно даже глобально Сети) по которой он может
обмениваться данными с другими компьютерами. В английском языке этой
путаницы нет. Там жаргонным словом для силовой сети является <<power>>,
а слово <<net>> остается для сети информационной. 

В дальнейшем говоря о <<сетевом кабеле>> или <<сетевом разъеме>> мы
будем иметь в виду сеть передачи данных, а говоря о подключении к 220
вольт, будем использовать термины <<разъем питания>>, <<шнур питания>>.

Впрочем, опасность подсоединить сетевую карту компьютера к розетке 220
вольт вам, пожалуй, не грозит. В компьютерной индустрии стараются
избегать использования одинаковых разъемов для разных целей, особенно
там, где это может привести к повреждению оборудования.
\section{Компьютер - это аквариум для программ}
\label{aquarium}
Ещё один факт, который необходимо усвоить пользователю~--- человек
никогда не работает с компьютером. Он всегда взаимодействует с
какой-нибудь программой, выполняющейся на этом компьютере. 

Первая программа~--- загрузчик, или на большинстве современных
персональных компьютеров BIOS\footnote{Base Input-Output System~---
базовая система ввода-вывода} запускается автоматически при включении
питания и занимается в основном тем, что загружает \emph{операционную
систему} - программу которая обеспечивает взаимодействие всех остальных
программ с различными устройствами, в том числе с терминалами на которых
работают пользователи и дисками, хранящими данные.

Операционная система~--- программа-невидимка. Она никогда не
взаимодействует с пользователем напрямую, а только выполняет запросы от
других программ. Вот эти \emph{прикладные} программы или
\emph{приложения} (англ application) и занимаются общением с
пользователем. Даже такие, казалось бы глубоко системные вещи, как
аутентикация пользователя, выполняются отдельными программами, а не
самой операционной системой. В общем, от ядра операционной системы вы
скорее всего не услышите (точнее, не прочитаете) ничего, если только оно 
не <<впадет в панику>>, например в результате выхода из строя
какого-нибудь важного устройства. Вот тогда-то ядро постарается
рассказать об этой ситуации как можно больше, не обращая внимания на то,
хотите вы этого или нет~--- ведь ситуация критическая и требует
незамедлительных действий человека.

В нормально функционирующем компьютере обычно выполняется десяток-другой
программ, о существовании которых пользователь может и не подозревать.
Это программы обслуживающие вход пользователей в систему, выполнение
каких-либо действий по расписанию, обслуживание очереди печати,
различные сетевые сервисы. В
общем, присматривание за порядком в доме. Почему-то в unix-подобных
системах эти программы, выполняющие функции добрых сказочных домовых,
получили грозное название \emph{демоны}. Демоны~--- тоже
программы-невидимки. Собственно, по определению демон~--- программа не
связанная ни с каким терминалом. Хотя в этом случае термин <<терминал>>
понимается несколько более узко, чем его понимаем мы~--- как любое
устройство для взаимодействия компьютера с пользователем (точнее как
комплект таких устройств, имеющий по крайней мере устройство для вывода
информации~--- не обязательно экран, лет тридцать назад встречались
терминалы, печатавшие буквы на бумажной ленте, и клавиатуру), тем не
менее понятно, что с программой, не соединенной ни с каким терминалом,
пообщаться непосредственно нельзя. Понадобится какая-нибудь 
программа-клиент, например web-браузер. Демоны обычно не выводят
сообщений на терминал даже если что-то не так~--- они пишут сообщения об
ошибках в системый журнал или посылают по электронной почте письма
системному администратору. В этом случае считается более безопасным узнать 
о проблеме с некоторым опозданием, чем рассказывать о ней первому
попавшемуся пользователю, который возможно, даже не имеет полномочий
что-то с этой проблемой делать.

И наконец, те программы, с которыми имеете дело вы, как пользователь.
Если ваш терминал~--- текстовый, то таких программ обычно не больше
десятка, даже если вы отправляете медленно работающие программы в
\emph{фоновый режим}. И есть ровно одна программа \emph{переднего
плана}~--- та, которая будет обрабатывать клавиши, которые вы нажимаете
на клавиатуры. В графической оконной среде десяток программ может
понадобится всего лишь для создания привычного вида <<рабочего
стола>>~--- одна показывает часы в углу экрана, вторая следит за открытыми
окнами и отображает их список, третья следит за вашим электронным
почтовым ящиком и показывает поднятый флажок если пришла новая почта, и
это не считая нескольких (возможно, десятков) открытых окон, с которыми
вы, собственно, работаете.

\section{Персональных компьютеров не бывает}
\label{userroles}
Последнее десятилетие XX века прошло под знаком персональных
компьютеров. Большие ЭВМ прошлого были вытеснены отдельными компьютерами
на каждом рабочем столе. Но уже в разгаре следующий виток прогресса~---
объединение этих компьютеров в сети и возврат к многозадачным
многопользовательским системам. Мощность современного <<персонального>>
компьютера превосходит во много раз мощность <<малых ЭВМ>> 15--20 летней
давности, которые обслуживали 5--10 пользователей одновременно. А задача
обеспечить каждого сотрудника фирмы или каждого члена семьи мощным
современным компьютером экономически бессмыслена даже при современной
дешевизне электронных компонент. Выгоднее иметь один--два мощных
компьютера, ресурсами которых смогут при необходимости воспользоваться
все, и менее мощные компьютеры на каждом рабочем месте, позволяющие
решать большую часть повседневных задач.

Все современные операционные системы позволяют совместно использовать%
\footnote{Дать корректный перевод английскому слову to share, которое
используется для обозначения совместного доступа к ресурсам, довольно
тяжело. В литературе прижился термин <<разделять>>, <<разделяемый>>, 
но он не передает точного смысла. Разделять в русском языке~--- это
разбивать на части, а не пользоваться совместно. Скорее подошел бы
глагол <<делиться>>, но попробуйте образовать от него прилагательное.}
содержимое дисков и такие устройства, как принтеры. А Unix-подобные
операционные системы, в частности Linux позволяют еще более гибко
перераспределять нагрузку, запуская программу на той машине на которой
это удобнее, и наблюдая результаты ее работы на своем терминале.

Аналогичные средства появились и в Windows-2000, которая наконец
переросла нишу <<графической оболочки для однопользовательских машин>>.
Там, правда, для того чтобы воспользоваться этими возможностями
требуется покупать отдельную лицензию.

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

Поэтому не стоит пренебрегать встроенными в операционную систему
средствами разграничения доступа. Поставив Linux или другую
Unix-подобную систему на домашний компьютер,
обязательно заведите по логину для каждого из членов семьи и всю обычную
работу выполняйте от своего имени. Это, в частности, позволит каждому
члену семьи настроить себе рабочую среду так, как ему удобно. Ведь
практически все программы в Unix позволяют каждому пользователю иметь
индивидуальный файл настроек. То же самое стоит сделать и при работе в
разнообразных Windows. Хотя эти системы обладают гораздо меньшими
возможностями в плане настройки на нескольких пользователей (например,
Windows 95 и 98 не отслеживают владельцев файлов), пользователи будут
гораздо меньше мешать друг другу.

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

Для второй роли во всех полноценных операционных системах предусмотрено
специальное имя пользователя~--- root в Unix и Administratior в Windows
NT. В правильно настроенной системе только root может изменять файлы
программ и жизненно важные файлы конфигурации. Именно поэтому стоит как
можно меньше работать в этой роли~--- ведь любая ошибка может привести к
гораздо более серьезным последствиям чем ошибка простого пользователя.

Именно отсутствие выделенной роли системного администратора в широко
распространенных системах Windows 95 и 98 (вернее~--- их предке DOS)
привело к возникновению проблемы компьютерных вирусов, которая до сих
пор приносит многомиллионные убытки. А ведь от этой проблемы есть одно
простое лекарство~--- перестать относиться к своему компьютеру как к
персональному, и дать ему право защищаться от ваших некорректных
действий с помощью тех механизмов разграничения доступа, которые
встроены в его операционную систему. Тогда вирусы, которые проникают на
компьютер по электронной почте или вместе с файлами, принесенными на
дискете, не смогут причинить большого вреда. Ведь они выполняются с
правами пользователя, который запустил зараженный файл. И если прав у
этого пользователя будет ровно столько, сколько необходимо для
выполнения работы, то ни случайные ошибки, ни злонамеренные действия (не
самого пользователя, а случайно проникших вирусов) не смогут нанести
системе большого вреда.

Поэтому надо очень осторожно относиться к тем действиям, которые требуют 
привилегий root, и выполняя команду su, мысленно мыть руки до локтя и
надевать стерильные перчатки. Современный компьютер~--- достаточно
сложный организм, и выполняя работы по его конфигурированию и настройке
стоит придерживаться медицинского принципа <<не навреди>>. Это относится
в частности, и к установке новых программ в системе. Ни в одной из
современных ОС установка и удаление программы не проходит бесследно
(если только удаление не было произведено путем восстановления с
резервной копии, сделанной до установки). В Unix-подобных системах
следов обычно остается меньше, в Windows~--- несколько больше, но в
любом случае изменения накопившиеся в результате установки/удаления
нескольких сотен программ могут легко привести систему в
неработоспособное состояние.

Кстати, именно этим в сильной степени объясняется мнение о большей
устойчивости Linux по сравнению с Windows. Любитель экспериментов,
который до этого доводил свою Windows до необходимости переустановки за
месяц, путем постоянной установки всё новых и новых программ <<на
поиграться>>, установив принципиально другую систему, получает настолько
обширное поле для экспериментов в виде программ, входящих в стандартный
комплект системы, что в течение первых нескольких месяцев работы просто
не успевает предпринять никаких действий, приводящих к нестабильности.

Если же задаться целью создать себе стабильную и удобную среду для работы
с несколькими действительно нужными программами, и возникающие трудности
решать путем изучения возможностей этих программ, а не путем установки
новых, про которые от кого-то что-то хорошее услышал, то даже Windows 95
оказывается вполне надежной системой. Просто Unix-подобные системы
провоцируют именно на такой стиль работы, а Windows, вернее та
субкультура, которая вокруг неё сложилась (живущая в основном за счет
рекламы производителей программ и аппаратуры)~--- на противоположный.

