IZONE - http://www.izcity.com/ - бесплатный софт, вэб-сервисы, ресурсы для раскрутки, свежие номера журнала "Internet Zone".

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

Пользователь как процесс...

Алексей Федорчук

Остается общим местом, что Linux — система в изучении весьма сложная. По крайней мере, такое мнение бытует в кругах пользователей Windows, даже весьма опытных. Почему они и избегают 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 (а также классово близких к ней MacOS и BeOS) аппроксимируется понятием плоскости — не зря же пресловутая метафора рабочего стола столь популярна. Конечно, по плоскости можно двигаться не только вперед и назад, но также влево и вправо, но не более, что также накладывает ограничения. Естественный путь их преодоления — придание плоскости глубины, что время от времени и проделывается в системах из рода Windows и ее идеологических собратьев, однако ни один из экспериментов по созданию 3D-интерфейсов пока успехом не увенчался.

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

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

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

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

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

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

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

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

recursion.gif

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

Источник - SoftТерра, http://www.softerra.ru

 


Copyright © "Internet Zone", http://www.izcity.com/, info@izcity.com