Свежий номер №32 (409) / Рекурсивное правоведение Дата публикации: 27.08.2001 Алексей Федорчук, alv@newmail.ru
Попробуем разобраться - в чем же главная сложность изучения 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]
|