Архивы: по дате | по разделам | по авторам

Рекурсивное правоведение

Архив
автор : Алексей Федорчук   27.08.2001

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

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

Попробуем разобраться - в чем же главная сложность изучения Linux’а (или, если угодно, обучения Linux’у)? Первый напрашивающийся ответ: в командах и интерфейсе командной строки. Не могу с этим согласиться, потому что команды Linux (а также ONIX и прочих Unix), как правило: а) коротки и мнемонически прозрачны, б) на элементарном уровне просты в использовании и в) хорошо документированы help’ами, man’ами и прочими info.

Кроме того, любому не забывшему еще, как страшный сон, командной строки DOS работа в командных средах Linux покажется райским наслаждением: не нужно помнить длинных путей - всегда к услугам клавиша Tab (в bash) или Esc (в csh), не приходится мучительно вспоминать, какие опции использовались вчера - в вашем распоряжении история команд, всегда можно пролистать экранный буфер на предмет ранее выведенного help’а, в ожидании вывода результатов поиска можно на другой консоли поиграть в тетрис. А безнадежно зависшую (или просто осточертевшую) программу можно безжалостно истребить командой kill. Словом, не жизнь, а сказка.

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

Нет, основная сложность Linux’а для мигранта с DOS или Windows - в резком топологическом отличии модели мироустройства. Действительно, DOS - строго линейна: из пункта А можно добраться в пункт Б посредством команды В. Более того, линейна она однонаправленно: вернуться назад можно в лучшем случае на один шаг. Из чего и проистекает ограниченность DOS: шаг в сторону - побег (ошибка), прыжок на месте - провокация (зависание).

Модель мира Windows (а также классово близких к ней Mac OS и BeOS) аппроксимируется понятием плоскости - не зря же пресловутая метафора рабочего стола столь популярна. Конечно, по плоскости можно двигаться не только вперед и назад, а еще влево и вправо, но не более, что также накладывает ограничения. Естественный путь их преодоления - придание плоскости глубины, что время от времени и проделывается в системах из рода Windows и ее идеологических собратьев, однако ни один из экспериментов по созданию 3D-интерфейсов пока успехом не увенчался.

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

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

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

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

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

Однако, теоретически рассуждая, можно представить себе и другой путь - нелинейное и разнонаправленное движение внутри цикла, подобно инкарнациям Вечного Воителя в романах Майкла Муркока. И помочь на этом пути может понимание того, что над всем в Linux - и над процессами, и над файлами, и над пользователями - стоит Право, неотчуждаемое и неделимое, как древненорвежский одаль.

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

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

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

[i40934]

© ООО "Компьютерра-Онлайн", 1997-2019
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.