Алексей Федорчук
2005.11.28
О Base Linux я на протяжении последних лет написал несколько заметок, эта — последняя по времени. Однако после обсуждений вопроса с Тихоном Тарнавским я несколько изменил свои представления. Тем не менее, заметка размещается лишь с минимальными коррективами, так как а) отражает мои тогдашние представления, и б) содержит некоторый фактический материал, сохраняющий свое значение — в частности, для сборки собственной системы по рецептам Герарда Бикманса.
Содержание
- Введение
- Ядро
- Средства поддержки
- Средства боевого обеспечения
- Средства тылового обеспечения
- Абсолютно необходимые приложения
- Средства локализации
- Средства сборки
Введение
Из чего состоит Linux как операционная система? Во взглядах на этот вопрос бытует две крайние точки зрения. С одной стороны, Linux рассматривается как ядро операционной системы. И это — правильно, так как именно разработанное им ядро назвал Linux’ом Линус Торвальдс, обладатель авторских прав на это имя и владелец соответствующей торговой марки. Однако никакое ядро, сколь бы совершенно оно ни было, само по себе не способно обеспечить решение самой простой пользовательской задачи.
С другой стороны, в статьях и книгах про Linux в него часто включается все, что можно обнаружить на многодисковых наборах, продаваемых под этим именем, вплоть до системы оконной системы X, интегрированных сред типа KDE и GNOME, иразнообразных пользовательских приложений. Однако сама по себе система X не имеет никакого отношения не только к Linux, но, в сущности, и к Unix-системам вообще (за исключением того, что способна работать под управлением любой из них). А интегрированные среды и оконные менеджеры — лишь дополнительные (хотя и необходимые) атрибуты оконной графической системы. Что же касается включаемых в дистрибутивы приложений — более чем на 90 процентов они суть общее достояние всех свободных операционных систем.
Чтобы определить, из чего состоит Linux, зададимся вопросом, что же необходимо ему для функционирования.
Во-первых, это, разумеется, ядро. Во-вторых — средства его загрузки, наборы сценариев начальной загрузки (стартовых скриптов) и инструменты для поддержки файловой системы; вернее, систем — в Linux поддерживается несколько файловых систем, которые с полным правом могут считаться родными (native).
Далее идет общесистемная библиотека и минимум одна библиотека терминальная. Затем — то, чем все это собирается, компилятор и средства его поддержки (линкер, ассемблер и прочее). Следом — пользовательские утилиты для работы с файлами и текстами. И, наконец, командная оболочка, обеспечивающая выполнение всего этого хозяйства, и какой-никакой текстовый редактор для выполнения действий по конфигурированию системы.
С ядром Linux все ясно — это именно то, что делает Линус Торвальдс сотоварищи. Все же прочие компоненты, хотя теоретически и могут варьировать по составу, давно определены традицией: это так называемые средства, разработанные в рамках проекта GNU (из всех возможных переводов этого акронима адекватным мне кажется такой: «Гну — это вам не хрен собачий») и ему соплеменных. И слагаются они из:
- библиотек — общесистемной
glibc
и терминальнойncurses
; - компилятора gcc и средств обеспечения его работы (именуемых binutils и bin86), а также таких дополнительных (но практически необходимых) компонентов, как make, automake, autocomfig;
- утилит разного назначения —
fileutils
,findutils
,textutils
, архиватора и компрессоров, программ типаgrep
,awk
,sed
и т.д., — всего того, что охватывается понятием классических утилит Unix или GNU-утилит (справедливости ради нужно заметить, что некоторые из них в проекту GNU ни малейшего отношения не имеют); - командной оболочки
bash
, выполняющей в Linux роль системной — помимо всего прочего, именно она ответственна за интерпретацию стартовых скриптов.
Теоретически рассуждая, реализации перечисленных компонентов могут быть различными. Так, существовали (а возможно, и существуют) дистрибутивы Linux, в которых в качестве базового компилятора использовался не gcc, а egc или pgcc. Терминальная библиотека ncurses может если не заменяться, то дополняться какой-либо другой. Командный интерпретатор bash можно заменить любым другим shell-совместимым (точнее говоря, любым, способным эмулировать мифический POSIX-shell). Однако в качестве канонического минимального набора для Linux можно рассматривать то, что Герард Бикманс включил в свой набор Linux from Scratch (LFS).
Нужно заметить, что все компоненты этого набора, с одной стороны, настолько тесно связаны взаимозависимостями, что их него практически ничего нельзя удалить. С другой же стороны, включающая их система способна не только загрузиться и работать, но и выполнять пользовательские задачи, причем не только элементарные. Особенно если дополнить ее буквально двумя-тремя прикладными программами. Кроме того, эта система (за счет включения средств разработки) обладает потенциалом к практически неограниченному наращиванию функциональности. И потому набор LFS (плюс несколько программ, о которых я скажу ниже) можно рассматривать как Base Linux. Он включает:
- ядро системы;
- средства поддержки — загрузчики и файловые системы;
- средства боевого обеспечения — утилиты GNU и некоторые другие;
- средства тылового обеспечения — системные библиотеки;
- абсолютно необходимые приложения;
- средства локализации;
- средства сборки всего перечисленного хозяйства (компиляторы и сопутствующие программы).
Все это в виде исходных текстов может быть взято с почти любого полного дистрибутива Linux. Однако можно просто скачать последние (или наиболее удачные) версии указанных компонентов с оригинальных сайтов разработчиков.
Ядро
Бытует мнение, что ядро Linux — одно-единственное. Это правда, но не вся правда. Действительно, ядро Линуса — каноническое. Однако существуют еще т.н. ядра майнтайнеров (наиболее известные из них — ядра Алана Кокса, Эндрю Мортона, Кона Коливаса) и ядра различных дистрибьюторов. Разумеется, в основе всех их — каноническое ядро, но — с патчами, ответственными за реализацию дополнительных функций.
Локация канонического ядра Linux, как нетрудно догадаться, не где-нибудь, а на kernel.org. На современном этапе имеет смысл рассматривать ядра версии 2.6.X — причем имеет смысл запастись несколькими из числа последних, и методом проб и ошибок выбрать наиболее подходящее.
Средства поддержки
В качестве таковых рассматриваем загрузчики, средства инициализации, утилиты поддержки функций ядра и инструменты для работы файловых систем. Из загрузчиков заслуживают рассмотрения два варианта — классический Lilo или GRUB. Первый, как ясно из названия — традиционный загрузчик Linux, справляющийся не только с этой ОС, но и со многими другими (в том числе и с Windows любого рода).
GRUB имеет все шансы стать стандартом для свободных ОС. В отличие от большинства мультисистемных загрузчиков, он не просто передает управление «по цепочке» на загрузочный сектор соответствующего раздела, но работает с несмонтированными файловыми системами (незагруженных ОС!), обеспечивая запуск с них ядра соответствующей системы. Впрочем, при невозможности этого — способен и к загрузке «по цепочке».
Основное средство инициализации — канонический пакет sysvinit
, обеспечивающий инициализацию системы в т.н. стиле System V. Он включает программу init
, обеспечивающую запуск всех остальных процессов в системе, shutdown
, halt
, reboot
, вызывающие останов и рестарт системы, killall
— средство «убиения» процессов, и еще несколько.
Кроме того, для старта полнофункциональной системы требуются и некоторые сценарии инициализации, но они настолько зависимы от конкретной системы, что мы вернёмся к этому разговору позднее. Тем более, что их можно написать (или, по крайней мере, скорректировать) и собственноручно — это обычные сценарии оболочки.
Непосредственное отношение к старту системы и авторизации имеет также пакет shadow, предназначенный для управления пользовательскими паролями.
Важнейшие утилиты поддержки Linux объединены в пакет, который так и называется — util-linux
. В его составе — многие множества команд: agetty
, arch
, blockdev
, cal
, cfdisk
, chkdupexe
, col
, colcrt
, colrm
, column
, ctrlaltdel
, cytune
, ddate
, dmesg
, elvtune
, fdformat
, fdisk
, getopt
, hexdump
, hwclock
, ipcrm
, ipcs
, isosize
, kill
, line
, logger
, look
, losetup
, mcookie
, mkfs
, mkswap
, more
, mount
, namei
, pivot_root
, raw
, rdev
, readprofile
, rename
, renice
, rev
, script
, setfdprm
, setsid
, setterm
, sfdisk
, swapon
, swapoff
, tunelp
, ul
, umount
, vidmode
, whereis
, write
. Они предназначены для создания дисковых разделов (fdisk
, cfdisk
), создания (mkswap
) и активации/дезактивации (swapon
/swapoff
) разделов подкачки, монтирования и размонтирования файловых систем (mount
/umount
) и многого другого. Очень желательно, чтобы версия комплекта util-linux
соответствовала версии ядра.
Взаимодействие с модулями ядра обеспечивает пакет module-init-tools
, жестко привязанный к версии ядра. Он включает команды (depmod
, insmod
, lsmod
, modinfo
, modprobe
, rmmod
), предназначенные для загрузки и выгрузки модулей, просмотра списка загруженных модулей, определения их зависимостей, и т.д.
Средства поддержки файловой системы (систем) включают в себя утилиты для создания их (сиречь форматирования, в терминах DOS/Windows), проверки на целостность, тюнинга, резервного копирования и т.д. Для классической файловой системы Linux, ext2fs, такой набор носит название ext2fsprogs
. В него входят следующие утилиты:
badblocks
для поиска испорченных блоков на дисковых устройствах;chattr
для смены атрибутов файлов;dumpe2fs
для создания дисковых дампов;ext2fs
,mke2fs
иmkfs.ext2
для создания на дисковых разделах файловой системы (сиречь для форматирования разделов);e2fsck
,fsck
иfsck.ext2
, осуществляющие проверку целостности файловой системы;- e2image для создания образа файловой системы в виде файла;
e2label
для создания таблицы разбиения диска;tune2fs
для настройки быстродействия файловой системы.
и еще несколько утилит (compile_et
, debugfs
,
lsattr
, mk_cmds
, mklost+found
, uuidgen
). Ряд утилит из комплекта поддерживают также журналируемый вариант файловой системы Linux - ext3fs (mke2fs, fsck.ext3), а resize2fs
- также и ReiserFS. Однако в принципе для нее, как и для остальных журналируемых файловых систем - XFS и JFS, требуются собственные средства.
В первом случае это будет пакет reiserfsprogs/, включающий
mkreiserfs
для создания файловой системы ReiserFS;reiserfsck
для проверки ее целостности;resize_reiserfs
для изменения размера и размонтирования;
Для поддержки XFS требуется целый комплекс пакетов:
acl
для дополнительных средств управления доступом к файлам;attr
для использования расширенных возможностей атрибутирования файлов;dmapi
;xfsdump
для резервного копирования;xfsprogs
собственно для создания и управления файловой системой XFS.
Впрочем, абсолютно необходимым из этого списка является только последняя программа, xfsprogs
, без всего остального можно обойтись. Что же касается средств поддержки JFS, поиск таковых предлагается проделать самостоятельно заинтересованным лицам (автор к их числу не относится).
Кроме этого, требуются средства для поддержки виртуальной файловой системы proc, обеспечивающей отображение процессов — procinfo, procps и, возможно, средство для трансляции файловой системы устройств — devfs, буде возникнет желание таковую использовать, devfsd. Хотя ныне devfs быстро вытесняется другим механизмом управления устройствами — пакетом udev
, который, таким образом, вместе с тесно связанным с ним пакетом hotplug
, становится необходимым компонентом системы.
Для управления системными журналами служит комплект sysklogd, включающий klogd
— системный демон для журналирования сообщений ядра, и syslogd
.
К этой же группе примыкает комплект psmisc, предназначенный для отслеживания процессов в системе. В его составе — команды:
fuser
, выводящая на экран идентификаторы процессов,killall
, предназначенная для отправки сигналов им,pstree
, показывающая запущенные процессы в виде дерева.
Далее, к средствам поддержки можно отнести программы для работы с консольным драйвером Linux. Таковых ныне используется две — kbd
и console-tools
. Первая включает в себя множество утилит, из которых для начала важнейшими являются:
loadkeys
, предназначенная для загрузки клавиатурных раскладок;setfont
для загрузки экранных шрифтов;mapscrn
для задания карты соответствия кодировки клавиатурного ввода таковой экранного вывода.
Набор console-tools
имеет соответствующие средства — loadkeys
и consolechars
для управления вводом/выводом. Очевидно, что пакеты kbd
и console-tools
не то чтобы исключают друг друга — просто при наличии одного второй делается ненужным. Пакет console-tools
считается более современным, однако и текущие версии kbd
обеспечивают, в частности, работу с кодировкой Unicode и прочие актуальные фичи, так что выбор между ними — дело вкуса. Тем более, что поминаемый ниже комплект console-tools-cyrillic
успешно работает и с тем, и с другим набором.
Последнее из средств поддержки — служба консольной мыши, обеспечиваемая программой gpm. Она рассматривается обычно как сугубо опциональная, но, на мой взгляд, отказываться от дополнительного удобства нет никаких оснований.
Средства боевого обеспечения
В это понятие я включаю пользовательские утилиты, большая часть которых разработана в рамках проекта GNU (и потому именуемых обычно GNU-утилитами). С одной стороны, они обеспечивают минимальную пользовательскую функциональность системы, с другой — играют служебную (но — совершенно незаменимую) роль в процессе ее сборки.
На первом месте здесь должно поставить командную оболочку — без нее никакие вообще действия становятся невозможными: ведь, кроме того что вся установка системы осуществляется (прямо или опосредованно) ее командами, интерпретатор команд необходим и для исполнения стартовых сценариев при загрузке системы.
Традиционно такой, как бы общесистемной, командной оболочкой в Linux является bash
. Хотя обычно стартовыми сценариями в явном виде вызывается некая оболочка /bin/sh
, это — не более чем ссылка на bash
: при этом под /bin/sh
понимается некий виртуальный Posix-shell, в природе не существующий. Однако любая Posix-shell оболочка, будучи запущен таким образом, более или менее его эмулирует.
Оболочка bash
обладает многими достоинствами, но ныне не является наиболее совершенной. Последний титул (в семействе shell-совместимых интерпретаторов, по крайней мере), я отдало бы оболочке Z-Shell (она же zsh). Каковая также способна (и причем очень точно) эмулировать POSIX-shell и потому вполне подходит в качестве общесистемной. Однако на первых порах почти неизбежно потребуется и bash
. Тем более, что текущие версии дополнительного пакета bash-completion
делают ее вполне сопоставимой с zsh
по возможностям.
Исходники всех программ, перечисленных выше (да и всех прочих, о некоторых их них будет говориться ниже) доступны в сети в архивированном (да ещё и компрессированном) виде, и потому первое, что понадобится для их установки — это архиваторы и компрессоры. Список первых ограничивается программой tar
, тогда как компрессоров потребуется не менее двух: gzip
и bzip2, поскольку форматы их несовместимы (иногда встречающиеся архивы вида *.tar.Z
могут быть распакованы программой gzip).
Далее следует базовый пакет пользовательских утилит для манипуляций с файлами и их содержимым, в первую очередь текстовым — coreutils
. Он включает огромное количество отдельных команд, которые можно разделить на три блока — средств для работы с файлами, средств навигации по файловой системе и средств работы с текстовым контентом. Ранее они составляли три отдельных пакета — fileutils
, sh-utils
и textutills
, соответственно.
Средства манипуляции файлами — следующие:
chgrp
,chmod
иchown
для управления атрибутами файлов;cp
,dd
иln
для простого копирования файлов, копирования с преобразованием и создания ссылок, а также install для копирования с установкой атрибутов;touch
,mkdir
,mkfifo
иmknod
— средства создания регулярных файлов, каталогов, специальных файлов и файлов устройств, соответственно;mv
,rm
,rmdir
для переименования/перемещения файлов, их удаления, удаления каталогов;ls
,dir
иvdir
для просмотра списков файлов в каталогах;dircolors
для установки цветовой схемы;df
иdu
для вывода информации о дисковом пространстве;shred
;sync
— для синхронизации файловых операций и состояния файловой системы.
Среди средств навигации, служащих также некоторым иным целям, — такие команды, как basename
, chroot
, date
, dirname
, echo
, env
, expr
, factor
, false
, groups
, hostid
, hostname
, id
, logname
, nice
, nohup
, pathchk
, pinky
, printenv
, printf
, pwd
, seq
, sleep
, stty
, su
, tee
, test
, true
, tty
, uname
, uptime
, users
, who
, whoami
и yes
.
Блок команд для работы с контентом файлов (в первую очередь, разумеется, текстовых), таков:
cat
— многофункциональная команда для создания, просмотра и объединения файлов;cksum
— средство проверки контрольных сумм;comm
— средство построчного сравнения двух сортированных файлов;csplit
— команда для разделения файлов на части, в качестве разделителя будет выступать строка, заданная как шаблон;cut
— «вытягивание» из заданного файла фрагменты строк;expand
— преобразование символов табуляции внутри текстового файла в пробелы;fmt
— нечто вроде форматирования абзацев текстового файла;fold
— разбиение файла на строки заданной длины;head
— вывод первых (10-ти по умолчанию) строк файла;join
— слияние строк двух файлов в общее поле;md5sum
— из области контрольных сумм;nl
— нумерация строк заданного файла;od
— просмотр файла в виде восьмеричных (по умолчанию) или иных других кодов;paste
— построчное объединение файлов;pr
— разбиение файлов на страницы и колонки;ptx
— генерация индекса содержимого файла;sort
— построчная сортировка содержимого файла;split
— разбиение файла на части заданного размера или количества линий;sum
— подсчет контрольной суммы и количества блоков в файле;tac
вывод содержимого файла сзаду наперед (обратно cat);tail
— вывод нескольких (десяти по умолчанию) последних строк файла (обратно head);uniq
— удаление повторяющихся строк в сортированном файле);wc
— подсчет количества строк, слов или символов в файле.
К coreutils
по смыслу тесно примыкает пакет для поиска файлов — findutils. В его составе:
find
— практически универсальное средство для поиска файлов и выполнения над найденным разнообразнейших операций;xargs
, используемая обычно в паре с командойfind, позволяет применить некие команды к списку файлов;
locate
— средство сканирования базы данных файловой системы с целью определения локации заданных файлов;updatedb
— средство обновления базы данных файловой системы, используемой командойlocate
.
Кроме этого, в пакет findutils
входят также команды bigram
, code
и frcode
.
К тому же блоку пакетов можно отнести file. Эта команда позволяет детализовать тип регулярного файла (исполнимого, текстового и т.д) по т.н. «магической последовательности» байтов в его начале.
Далее — пакет less
, включающий единственную одноименную утилиту — постраничного просмотра файлов.
Два взаимодополняющих набора — diffutils
и patch
. Первый включает в себя:
cmp
иdiff
— утилиты сравнения двух файлов;diff3
— то же, но в отношении трех файлов;sdiff
— сравнение двух файлов с записью различий в новом.
А команда patch
предназначена для внесения изменений, выявленных командой diff, в исходный файл.
Совершенно незаменим набор grep
. В его состав входят программы grep
, fgrep
и egrep
), предназначенные для поиска заданного текстового фрагмента (шаблона) в файлах.
Пакеты ed
, gawk
и sed
предназначены для весьма сложной обработки текста, представляя собой, в сущности, потоковые (неинтерактивные) текстовые редакторы. Теоретически, располагая мощным редактором интерактивным (типа упомянутых emacs
или vim
) без них можно было бы обойтись, но они столь широко используются во всякого рода установочных сценариях, так что практически оказываются необходимыми.
Аналогично и положение с комплектом groff
, включающим множество средств сложного неинтерактивного форматирования текста. Вряд ли кто ныне, помимо впитавших привычку с молоком матери, будет использовать их в практической работе. Однако они оказываются необходимыми для функционирования системы документации, о которой речь пойдет чуть ниже.
Сетевые возможности базовой системы обеспечиваются двумя наборами — netkit-base
() и net-tools
(). В первом — демон inetd,
отвечающий за службы Интернет вообще, и команда ping
, для отправки пакетов, определяющих доступ к узлам сети. Команды набора net-tools
определяют конфигурацию сети (ifconfig
), доменные имена, имена хостов и т.д.
Наконец, группа наборов, последняя по счету, но не по значению, — системы документации. Таковых в Linux широко используется две — традиционные для Unix man-страницы разработанная в рамках GNU система info. Они — взаимодополняющие, хотя по содержанию и существенно перекрывают друг друга.
Средства тылового обеспечения
В это понятие я включаю системные разделяемые библиотеки. Пользователю очень редко приходится иметь с ними дело непосредственно, но без них функционирование системы практически невозможно. Конечно, многие приложения могут быть связаны (и подчас действительно связываются) с разделяемыми библиотеками статически. Однако сборка собственной системы без них просто невозможна.
Главной общесистемной библиотекой в Linux является glibc
. Кроме нее, для сборки (и работы) большинства консольных приложений требуется терминальная библиотека ncurses
. Наконец, требуется также инструментарий для связывания программ с библиотечными функциями — libtool
.
Все это — необходимый минимум, отдельные приложения могут потребовать и других библиотек, которые, впрочем, к Base Linux уже не относятся.
Абсолютно необходимые приложения
Пользовательские утилиты GNU (такие, как textutils, awk или sed) не только выполняют функции поддержки системы, но и позволяют решать достаточно сложные пользовательские задачи. Однако для полноценной работы они явно недостаточны и потому должны быть дополнены еще несколькими приложениями. И первым из них идет текстовый редактор — без него трудно было бы хотя бы поправить конфигурационные файлы. В выборе такового возможно три подхода: минималистский, максималистский и промежуточный.
Для обеспечения минимальных возможностей редактирования подойдет любой максимально простой редактор — если не выходить за рамки проекта GNU, в этой роли может выступить редактор nano
. Он очень прост в освоении, не требует запоминания многочисленных команд и обладает базовым набором функций редактирования.
При максималистском подходе предоставляется выбор среди двух монстров мира консольных редакторов — vim
и emacs
. На котором остановиться — дело вкуса, вступать в священную войну vim
vs. emacs
здесь было бы неуместно.
Текстовый редактор трудно представить без функций проверки орфографии, и потому следующий кандидат в абсолютно необходимые дополнения ispell
.
Многие из перечисляемых здесь программ сопровождаются документацией в формате html. И для ее чтения потребуется какой-никакой браузер, способный работать в консольном режиме. Оптимальный выбор здесь — links
.
Кроме браузера, необходимыми средствами для работы с сетью видится ftp-клиент — без него невозможно было бы скачивание необходимых программ. В качестве же кандидата на эту вакансию можно рассмотреть wget
.
Средства локализации
Поскольку мир отнюдь не ограничивается Америкой, и множество людей говорит на языках, отличных от американского, в Base Linux должны входить средства интернационализации. Сама по себе интернациональная поддержка (т.н. NLS — National Languages Support) программ обеспечивается за счет системы gettext
.
Нас, разумеется, в первую очередь интересует поддержка не какого другого языка, а непосредственно русского. Русская локаль (по крайней мере, ru_RU.KOI8-R) — давно уже неотъемлемый компонент системной библиотеки. При необходимости в локали 1251 — ее можно добавить самостоятельно. Для получения базового набора кириллических экранных шрифтов, клавиатурных раскладок и карт соответствия одного другому необходимым и достаточным видится комплект console-tools-cyrillic
, в котором есть все необходимое (и кое-что из роскошного). Он предназначен для работы с набором управления консолью console-tools
, однако прекрасно вписывается и в современные версии kkb
. Ну а для реализации проверки русской орфографии в дополнение к оригинальному ispell
предлагается известный словарь Лебедева — rus-ispell
.
Средства сборки
Наконец, последнее (или, строго говоря, первое), необходимое для того, чтобы собрать все перечисленное выше воедино — это средства сборки. В первую голову это компилятор языка C, на котором написана большая часть ОС Linux и программ для нее gcc
. Для него имеет значение правильный выбор версии, но здесь этот вопрос мы обсуждать не будем.
Далее — средства обеспечения компиляции (линкер, ассемблер и т.д.), объединенные в два пакета bin86
и binutils
.
Затем — программа управления компиляцией, make
и тесно с ней связанные утилиты autoconf
для построения средств автоматического конфигурирования при сборке, и automake
для автоматизации создания make-файлов, описывающих процесс компиляции.
Кроме этого, практически необходимыми оказываются также лексический анализатор flex
, синтаксический анализатор bison (используется также и его прототип yacc
— для сборки некоторых программ требуется именно он) и макропроцессор m4
. И, наконец, в ряде случаев для сборки программ требуется интерпретатор языка perl
.
Набор приложений, объединенный понятием Base Linux, может показаться несколько аскетичным. Однако именно базовую функциональность системы он обеспечивает с успехом. И примерно такой набор программ предлагается в качестве базового (то есть обязательного к установке) в любом Linux-дистрибутиве, претендующем на полнофункциональность. Конечно, набор пакетов (и особенно конкретные представители отдельных групп) варьируют, но можно быть уверенным: 90% всего перечисленного с гарантией обнаружится в любой Linux-системе.