Как стать квалифицированным пользователем.


- Виктор Вагнер, 4.11.2001. -

Введение

Кому это выгодно?

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

Для такого человека научиться грамотно пользоваться компьютером значит - сэкономить десятки рабочих часов в неделю.

Книга будет интересной и тем, кто взявшись за любое дело, стремится разобраться в нем досконально.

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

Почему Linux?

Причин этому несколько. Во-первых, автор уже пять лет работает исключительно с этой операционной системой, и знает её лучше всего. Во-вторых, Linux построен на базе свободного программного обеспечения1, что в частности позволяет совершенно легально распространять вместе с книгой все описываемые программы, и быть уверенным в том, что если кому-нибудь захочется использовать эту книгу в качестве учебника в школе или ВУЗе, ему не составит труда в точности воспроизвести ту среду, в которой выполнены приведенные в книге примеры. В-третьих, Unix-подобные системы значительно лучше подходят для обучения работе с компьютером, чем MacOS и ей подобные, ориенированные на то чтобы некоторые простые действия можно было выполнять совсем без обучения. (практика показала, что это утопия. На обучение начинающего пользователя работе с графическим интерфейсом требуется не меньшее время, чем для освоения принципов работы в командой строке, а не зная базовых принципов работы компьютера, работать эффективно нельзя все равно).

Из всех доступных в настоящее время Unix-подобных систем Linux выбран потому, что он гораздо более распростанен, чем FreeBSD или Solaris-x86, поэтому читателю легче получить помощь при установке системы, под него доступно больше приложений, в том числе и коммерческих, и вообще архитектурно Linux представляет собой нечто среднее между двумя основными ветвями родословного древа Unix-подобных систем - System V и BSD, следовательно, знания полученные в Linux будет легче применить в любой из имеющихся систем.

С чего начать?

Только не с установки системы на компьютер! Вы же не начинаете учиться водить машину с того, что разбираете её по винтику и собираете обратно. Вы садитесь в настроенную квалифицированным механиком машину, и сначала учитесь на ней ездить, а потом уже учитесь определять неисправности, и даже устранять некоторые из них. Я не думаю, что где-нибудь обучают верховой езде с того, что учат подковывать лошадь (хотя умение её седлать без сомнения полезно).

Поэтому в нашей книге описание того, каким образом установить систему не только не открывает книгу, а вообще убрано в приложение .

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

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

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

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

Поэтому мы сосредоточим внимание не только и не столько на описании конкретных программ и инструментов, сколько на тех подходах к решению часто возникающих задач, которые сложились в современном компьютерном деле2.

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

Chapter 1
Зачем вам компьютер?

1.1  Компьютер - инструмент обработки текстов

Начнем с самого главного вопроса: <<Зачем мне учиться работать на компьютере?>>. В такой формулировке ответ почти очевиден - <<Потому что мне приходится это делать>>. Такой ответ совершенно ничего не проясняет. Почему приходится? Ведь большинство людей сейчас выполняет ту же работу, что и двадцать-тридцать лет назад, когда компьютеры были редкость. И ведь без них как-то обходились. Почему же сейчас ни одна интеллектуальная профессия немыслима без компьютера?

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

Фактически, 90% компьютеров используются как усовершенствнванные пишущие машинки. Мне даже приходилось видеть пользователей, которые сидя перед экраном достаточно мощного компьютера (а computer вообще-то означает <<вычислительная машина>>) пользовались для каких-то расчетов карманным калькулятором3.

Эту тенденцию уловила американская писательница Л.М. Буджолд (или ее русский переводчик) - в её мире жаргонным словом для предмета, заменяющего наши персональные компьютеры, служит <<комм>> (от communication) а не <<комп>>.

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

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

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

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

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

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

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

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

В принципе, обработкой текстов и иллюстраций к ним практически исчерпываются потребности гуманитариев (если мы, конечно, посчитаем и такие специфические виды текста, как, например, нотный).

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

Конечно, многим приходится пользоваться и более узкоспециализированными програмами - математическими, инженерными (системами автоматизированного проектирования) и другими. Рассмотреть их все в этой книге мы не сможем, тем более что автор не считает себя компетентным в этих областях, кроме быть может геоинформационных систем (ГИС).

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

  1. Собрать результаты экспериментов и наблюдений;
  2. Проанализировать их, произведя некоторые вычисления;
  3. Представить результаты анализа графически;
  4. Сделать выводы и описать их;
  5. Красиво оформить написанное.

Вот этими операциями мы в основном и займемся, посвятив немного времени обработке нетекстовой информации - изображений и звука.

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

1.2  Компьютер как средство коммуникации

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

Уже очень давно, наверное со времен Гутенберга сложились два основных способа поделиться информацией: послать ее в личном письме конкретному адресату, и опубликовать ее.

И тот, и другой способ имеют аналоги в Internet. Практически всем в наше время знакомо понятие электронной почты, которая позволяет связаться практически с любым пользователем компьютера в мире за считанные часы. В последнее время распространились и еще более оперативные средства коммуникации, такие как IRC и ICQ, позволяющие вести диалог практически в реальном времени.

Аналогом публикации может быть либо размещение информации на страничке World Wide Web (это как бы книга, вышедшая в одном экземпляре и поставленная на полку грандиозной всемирной библиотеки. Информация доступна любому желающему, но её сначала надо найти), либо письмо в дискуссионные группы Usenet (это больше похоже на публикацию в специальном журнале - вашу статью увидят все, кто интересуется данной темой, но если кто-то захочет вернуться к ней через некоторое время, ему придётся долго копаться в старых подшивках на groups.google.com).

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

Chapter 2
Несколько общих принципов

2.1  Стимул - реакция

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

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

Отсюда следуют два основных принципа работы с компьютером:

  1. Осознавайте, что происходит с вашим сеансом работы в данный момент (в какой программе вы работаете, в каком режиме она находится и так далее)
  2. Если компьютер вас о чём-то спрашивает, постарайтесь понять - о чём. Не жмите бездумно на кнопку Ok, даже если в появившемся диалоговом окне нет больше никаких кнопок. Если компьютер что-то сообщает вам по своей инициативе, то весьма вероятно, что это жизненно важный факт, требующий либо принятия решения сейчас, либо учёта при принятии какого-то из последующих решений.

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

2.2  Немного об устройстве компьютера

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

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

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

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

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

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

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

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

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

2.3  Компьютер - это аквариум для программ

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

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

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

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

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

2.4  Персональных компьютеров не бывает

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

Все современные операционные системы позволяют совместно использовать7 содержимое дисков и такие устройства, как принтеры. А 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, вернее та субкультура, которая вокруг неё сложилась (живущая в основном за счет рекламы производителей программ и аппаратуры) - на противоположный.

Chapter 3
Файлы и файловые системы

3.1  Что такое файл

Вся информация на дисках компьютеров хранится в виде файлов. Что же такое файл? По английски file означает картотечный ящик, и пошло, видимо с тех пор, когда основным носителем информации были перфокарты (в русском языке в те времена использовался термин <<колода перфокарт>>).

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

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

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

Существует соглашение что формат файла обозначается суффиксом его имени (этот суффикс часто называют <<расширением имени файла>>, англ extension). Например, если имя файла кончается на .jpg, это картинка в формате JPEG, а если на .tar то это архив, который можно прочитать программой tar. Это не более чем соглашение. Никто не мешает его нарушить, хотя некоторые программы могут такого не понять. Например, программа сжатия gzip обычно отказывается распаковывать файлы, если их имя не кончается на .gz (её, конечно, несложно заставить). Определить настоящий формат файла, если этого нельзя сделать по имени, поможет команда file. Она считывает начало файла, и ищет там определенные <<магические числа>>. Конечно, она не всегда способна определить формат корректно. Например скрипты shell она зачастую считает <<текстом на английском языке>> (что вообще-то не так уж далеко от истины), а русский текст обычно не распознает и выдает универсальное сообщение <<data>> (неопознанные данные).

Особенно активно связь расширения с форматом используется различными визуальными средствами работы с файлами. Например, стандартная программа <<Проводник>> в Windows по умолчанию вообще не показывает расширение файла, заменяя его на иконку, соответствующую формату файла. И при попытке открыть этот файл она вызовет именно ту программу, которая по её мнению, предназначена для работы с файлами такого типа.

До предела этот подход доведен в MacOS где каждый файл имеет атрибут creator (создавшая программа) и заставить систему обработать файл какой-нибудь другой программой - задача нетривиальная.

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

В Unix-подобных системах практически любой объект представляется в виде файла. Даже терминал пользователя это специальный файл /dev/tty, запись в который приводит к появлению символов на экране, а чтение позволяет программе узнать, какие клавиши пользователь нажимает на клавиатуре. Весь диск в целом тоже может рассматриваться как файл. В тех случаях, когда нам неинтересна его внутренняя структура, например при создании резервной копии.

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

3.2  Файловые системы

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

Поэтому файлы организованы в каталоги или директории (directiories). В тех системах, где файл называют документом, обычно говорят о папках (folders). Это достаточно хорошая метафора. Если представить себе, что файл это бумажный лист, то несколько таких листов можно сложить в папку, эту папку вместе с другими папками и листами - в папку побольше, и так до тех пор пока мы не упихаем всю нашу информацию в большой шкаф.

Этот шкаф - корневой каталог файловой системы нашего компьютера, содержащий в себе все, что лежит на его дисках. Сколько бы ни было у компьютера физических дисков, в Unix (и в Windows 2000) пользователю они все представляются как одно большое дерево каталогов.

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

В старых версиях Windows и в DOS операции монтирования не было, там каждый диск получал свою собственную букву (что ограничивало количество дисков 26) и имел свое собственное дерево каталогов. Для дискет и CD-ROM это действительно удобно, но для жестких дисков это только мешает эффективному распределению дискового пространства. Кроме того, отсутствие явной операции монтирования/размонтирования снижает эффективность работы с диском - каждая операция записи должна быть доведена до конца сразу, в то время как при работе с монтированным диском система может отложить реальную запись до того момента, когда это ей будет удобно (это называется кэшированием).

Для CD-ROM это не так важно, поскольку записать на него ничего нельзя. А вот вытаскивание дискеты без размонтирования может привести к порче информации на ней. Поэтому лично я предпочитаю не монтировать дискеты вообще, а пользоваться для доступа к ним программой mtools.

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

Более того, в Unix нет операции уничтожения файла, есть операция уничтожения ссылки в каталоге. И как в любой бюрократической системе, файл, на который не осталось ни одной ссылки, исчезает бесследно (освобождая ранее занятое место). На самом деле ссылкой на файл считается не только запись в каталоге, но и факт работы с файлом какой-нибудь программы. Поэтому если вы удалили файл, который читает или пишет какая-то программа, место на диске не освободится, пока эта программа файл не закроет.

Кроме собственно данных с файлом связана некоторая метаинформация - имя пользователя-владельца, размер файла, права доступа, время последнего изменения и так далее. Эта информация хранится в так называемом индексном узле (i-node) вместе с информацией о том, где физически размещены данные. А запись в каталоге состоит из имени и номера индексного узла. Поэтому разные ссылки на один и тот же файл могут иметь разные имена.

3.3  Права доступа к файлам

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

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

Особый смысл имеет привилегия выполнения для каталога - это право на вход в него, необходимое для доступа к любому файлу в этом каталоге или каком-либо из его подкаталогов.

Традиционно в Unix различаются три категории пользователей - владелец файла, группа и все остальные8. В принципе этого достаточно для описания достаточно сложных способов доступа, поскольку можно создать сколько угодно групп. В современных дистрибуитвах Linux по умолчанию для каждого пользователя создается его собственая группа, куда входит только он, и все вновь создаваемые файлы создаются с правом чтения и записи для владельца и для группы, и только чтения для остальных.

Системный администратор может создать сколько угодно новых групп и включить туда каких угодно пользователей.

Вновь создаваемый файл получает либо основную группу своего владельца, либо группу каталога, в котором создан этот файл. Владелец файла имеет право изменить группу файла с помощью команды chgrp, но только на такую, членом которой он является (узнать список групп, в которые вы входите можно с помощью команды id). Исходно в Unix была возможность <<подарить>> файл другому пользователю, с помощью команды chown но выяснилось, что это открывает слишком много возможностей для злоупотреблений, например если вам не хватает выделенной вам квоты дискового пространства, вы могли назначить нескольким самым большим файлам владельцем кого-нибудь другого. Были и другие, более опасные способы атаки, которые позволяли получить права root, путем хитроумного использования команды chown. Поэтому в совремемнных Unix пользоваться командой chown имеет право только root.

Chapter 4
make и cvs

4.1  Вскипятить воду

Известен такой анекдот: математику и физику предложили задачу: Даны дрова, спички, плита, чайник и водопроводный кран. Требуется вскипятить воду. И математик и физик выдали один и тот же алгоритм решения. После этого условия задачи несколько видоизменили: дан чайник с водой и плита с заложенными дровами. Требуется то же самое. Физик поджёг дрова и поставил чайник на огонь, а математик вынул дрова из печи и вылил воду из чайника, после чего заявил, что задача сводится к предыдущей.

Большая часть начинающих пользователей уверена что компьютер может действовать только как <<математик>>, руководствуясь заранее заданными алгоритмами. Между тем Unix-системы с самого своего рождения достаточно умны, чтобы действовать как <<физик>>. В комплект большинства Unix-систем (во всяком случае всех свободно распространяемых) входит команда make (в переводе с английского <<сделай>>) которая как раз и занимается тем что решает подобного рода задачи.

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

Она читает специальный файл с именем Makefile, в котором описаны цели (target), условия, необходимые для их достижения (которые сами могут быть целями, описанными в том же Makefile) и команды unix, которые необходимо выполнить чтобы достичь цели, если условия выполняются.

Цели (и условия) это обычно имена файлов. Если существуют и файл условие, и файл-цель, но дата изменения файла условия позже, чем файла-цели, цель будет перестроена. Это очень полезно как при написании программ (make позаботится о том, чтобы все изменения были учтены), так и при работе с текстами (собственно говоря, программа это тоже текст).

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

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

tea: горящая_плита чайник_с_водой
	поставить чайник плита
	подождать пока вскипит
горящая_плита: дрова_в_плите
	зажечь дрова
дрова_в_плите: плита дрова
	положить дрова плита
чайник_с_водой: чайник водопровод
	налить вода чайник

Вроде бы все очевидно. Теперь попробуйте представить себе как команда make будет выполнять задачу в первом и во втором случае. Желающие читатели могут попробовать на самом деле написать такой Makefile и попробовать выполнить команду make tea (придется, правда, написать несколько скриптов - <<поставить>>, <<зажечь>>, <<налить>> и т.д, которые будут создавать соответствующие файлы-цели, например командой touch).

Не исключено, что единственной наградой за старательное воспроизведение этого Makefile будет сообщение от программы make <<missing separator. Stop.>>. Не огорчайтесть, это бывает даже с довольно опытными программистами. Дело в том, что make требует, чтобы строки, описывающие действия, обязательно начинались с символа табуляции, а не с нескольких пробелов. Отличить одно от другого на экране довольно тяжело, а многие редакторы часто оказывают медвежью услугу пользователю, заменяя табуляции на пробелы.

Возможности команды make не исчерпываются вышеприведенными. Она позволяет описывать <<общие>> правила вида "если нужен файл что-то-там.o, а есть файл что-то-там.c, то...", писать зависимости вида "от всех файлов *.o в текущем каталоге" и даже строить список зависимостей с помощью такого же правила, как и любой другой файл. Все это подробно описано в info-документации на make.


Footnotes:

1 см. гл.

2 Автор предпочитает именно это словосочетание в качестве перевода английского термина Computer science. Звания <<науки>> это занятие ещё не заслужило

3 Особенно смешно то, что это делалось в процессе подготовки отчета в Excel. А электронная таблица, как мы увидим в главе представляет собой мощнейшее средство для вычислений

4 сокращение от макрокоманда - <<большая>> команд, объединяющая несколько более элементарных операций

5 Печальный опыт показывает, что и того, и другого не хватает всегда.

6 Base Input-Output System - базовая система ввода-вывода

7 Дать корректный перевод английскому слову to share, которое используется для обозначения совместного доступа к ресурсам, довольно тяжело. В литературе прижился термин <<разделять>>, <<разделяемый>>, но он не передает точного смысла. Разделять в русском языке - это разбивать на части, а не пользоваться совместно. Скорее подошел бы глагол <<делиться>>, но попробуйте образовать от него прилагательное.

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