Почему она такая
То спереди и сзади,
Читая во все дни
Исправи, правды ради,
Писанья ж не кляни.
А.К.Толстой
Форма книги связана с одним из фундаментальных понятий Unix - рекурсией. В собственном смысле слова это - специальный программистский термин, и означает он определение функции через саму себя (что такое функция - надеюсь, станет понятным из ).
Однако в Unix-сообществе понятие рекурсии широко применяется в бытовом, так сказать, смысле. Известным чему примером является акроним проекта GNU - GNU is Not Unix.
Так вот, весь процесс изучения POSIX-систем пронизан рекурсией. Возьмем для примера три фундаментальных понятия мира Unix - понятие файла, процесса и пользователя, о которых будет говориться в главах 6-8. Отношения между ними неизбежно определяются друг через друга: каждый файл принадлежит какому-либо пользователю в силу того, что он (файл) порожден процессом, запущенным этим пользователем (на самом деле все еще сложнее, но это пока не важно).
То есть: чтобы понять, что такое файл и его атрибуты, нужно предварительно разобраться в том, что такое процесс и атрибуты оного. Что, в свою очередь, невозможно без представления об атрибутах исполняемого файла этого процесса, и атрибутах пользователя, запускающего этот процесс на исполнение. А если вспомнить, что для получения информации о файлах, процессах и пользователях необходимо использовать команды, каковые и сами представляют собой файлы с определенными атрибутами, и файлы же, атрибуты которых также существенны, используют в качестве своих аргументов, то становится ясным: пользователь, начинающий изучение POSIX-систем, сталкивается не с чем иным, как с рекурсией. Что в простонаречии именуется сказкой про белого бычка, а по наукообразному - проблемой яйца и курицы. Ведь для того, чтобы осознать базовые понятия Unix, необходимо обладать навыками работы с командами, а чтобы понять, как работают команды и использовать их осмысленно, а не чисто механически, требуется знание базовых понятий.
Именно в такой рекурсивной связи и кроется, на мой взгляд, основная сложность изучения POSIX-систем для начинающего пользователя, и трудность написания книг, этому пользователю адресованных, - для авторов.
И в рамках традиционной книжной структуры противоречие это неразрешимо. Ведь книга по определению - линейна, и читается, как правило, с начала и до конца (по крайней мере, авторам книг обычно хочется, чтобы их произведения читали именно так). И как, при линейной-то структуре, прикажете обращаться с рекурсивным определением понятий? Отсылать (так и хочется сказать - посылать) читателя к еще непрочитанным главам, возможно, через многие сотни страниц? Этак он быстро мозоли на пальцах натрет - от листания...
Поэтому я, после долгих размышлений, и отказался от линейного стиля изложения в этой книге, придав ей иерархическую структуру, подобную таковой древовидной файловой системы Unix (о которой будет говориться в ). Каркас этой структуры (то есть подобие корня файловой системы) образуют главы, содержание которых было вкратце охарактеризовано в предыдущем параграфе. Они представляют собой своего рода введение в POSIX'ивизм, рассчитанное, в том числе, и на совсем начинающего пользователя. Главы чередуются с интермедиями, каждая из которых посвящена детализации понятий, рассмотренных в соответствующей главе.
Предполагается, что совсем начинающий пользователь сначала ознакомится с элементами каркаса - главами, после чего перейдет к изучению материала, представленного в интермедиях. Пользователь же, обладающий определенным опытом работы в Unix-подобных системах, возможно, обнаружит в "корневом разделе" мало нового для себя, и обратится сразу к интермедиям.
Последовательность интермедий определяется таковой для глав, с которыми они логически связаны. И потому порядок их прочтения может отличаться от того, в котором они размещены. Для облегчения установки этого порядка я в начале каждой интермедии даю перечень материалов, знакомства с которыми они требуют.
Важно также, что материал из "корневого раздела" книги, за редкими, специально оговоренными, исключениями имеет силу для любой POSIX-совместимой системы. Аспекты же, специфичные для Linux, отдельных его дистрибутивов или какого-либо представителя BSD, по возможности сосредоточены в интермедиях.Кроме того, в них же мне показалось уместным собрать все конкретные примеры и рекомендации - в том числе на уровне "делай, как приказано" (если, конечно, сам не знаешь, как делать).