Классические утилиты Unix обеспечивают базовую функциональность любой POSIX-совместимой системы. Собственно говоря, в свободных POSIX-системах они в чистом виде не встречаются из-за лицензионных соображений. Однако тут обнаруживаются их аналоги, разработанные в рамках проекта GNU (их обычно так и называют - GNU-утилиты) или различных BSD-проектов. Причем ни те, ни другие ничуть не уступают своим проприетарным прототипам в функциональности, а зачастую и превосходят их во многих отношениях.
По секрету скажу, что в большинстве коммерческих Unix'ов уже давно не используются собственно утилиты из собственно Unix (то есть System V) - обычно они заменены на BSD-аналоги, благо лицензия последних это позволяет. И потому это семейство программ мы будем называть далее базовыми утилитами, без различия их происхождения. Хотя в некоторых случаях придется оговаривать особенности BSD- или GNU-утилит.
Как уже было замечено, базовые утилиты служат для обеспечения базовой функциональности системы (в частности, они - неотъемлемая часть всех общесистемных сценариев). С этим, надеюсь, спорить никто не будет. Однако этим значение базовых утилит не исчерпывается: среди них содержится достаточное количество инструментов для решения самых различных задач пользователя, администратора, разработчика. Именно они символизируют собой целостность POSIX-систем, делая их самодостаточными. Не то чтобы в реальной жизни можно обойтись без различных дополнительных приложений, в том числе и тяжелых. Но базовый инструментарий, при должном его знании, позволяет легко и просто (подчас проще, чем специализированные программы) решить множество вполне реальных пользовательских задач.
В обоснование этого тезиса и начат цикл статей о возможностях базовых утилит, входящих в base-комплект любой BSD-системы (во FreeBSD это называется Distributions) или в стандартный набор Base Linux (о котором говорится в соответствующем разделе).
Речь в этом цикле пойдет, в сущности, о тех самых командах, список которых выдается в ответ на нажатие клавиши табуляции в командной строке bash
свежеустановленной базовой Linux-системы. И которые можно обнаружить в каталогах /bin
, /sbin
, /usr/bin
и /usr/sbin
BSD-системы.
Количество этих команда (а в свежеустановленном Gentoo, например, их более 670) способно обескуражить. Если, конечно, хоть как-то не упорядочить (в уме) это богачество. И упорядочивание это, в почти соответствие с заветами председателя Мао, можно провести в двух стилях (великий кормчий, правда, говорил о трех стилях, но меня, не столь великого, на это не хватило).
Первый стиль упорядочивания - по назначению. Здесь можно выделить команды пользовательские, административные и разработческие. И не нужно думать, что первые нужны только пользователю, вторые - только сисадмину, а третьи - лишь программеру.
Под пользовательскими можно понимать команды управления данными (файлами и их содержимым). А ведь и самые крутые админы или программеры время от времени копируют свои файлы или просматривают их содержимое. Административные команды предназначены для управления системой. Но на настольной машине каждый пользователь обычно - сам себе root, и проблему подключения нового диска (и даже монтирования дискеты) за него никто не решит. Ну а разработческие команды нужны не только для создания нового гениального софта, но и для сборки уже созданного. И как это делать - неплохо понимать любому юзеру.
Именно такой способ реализуется во Free- и прочих BSD. Где все компоненты базового набора размещаются в корневом каталоге и основных ветвях каталога /usr
(а весь дополнительно устанавливаемый софт - исключительно в каталоге /usr/local
).
Второй стиль упорядочивания, ортогональный первому, реализуется в Linux (и особенно последовательно проводится в source based его дистрибутивах). Это - упорядочивание по принадлежности к именованным наборам утилит, которые часто именуются пакетам (packages); в частности, именно как packages они фигурируют в Linux from Scratch Герарда Бикманса.
И еще одна оговорка. Стили упорядочивания по назначению и по принадлежности - ортогональны, но не в Евклидовом пространстве. И потому одни команды из некоего пакета могут попасть в юзерскую группу, некоторые - в админскую. А иногда одна и та же команда может выступать в разных ипостасях.
Таким образом, в этом цикле необходимо рассмотреть, как соотносятся именованные наборы базовых утилит с командами, классифицированными по их назначению. Как и положено пользователю, начну с той рубашки, что ближе моему телу - с пользовательских возможностей.
Конечно, для пользователя (как и администратора, и разработчика, и кого угодно еще) базовые утилиты начинаются с командной оболочки, сиречь шелла. Однако дело это столь сложно, что выделено в отдельное производство. Как и дело о базовых текстовых редакторах - этот разговор пойдет в соответствующем разделе, а куда он способен завести - я и сам не знаю. И потому пока ограничусь только описанием некоторых отдельных пользовательских из состава базовых утилит.
Задач перед пользователем стоит великое множество. Однако две из них встают с неизбежностью Рагнарека: манипулирование файлами и манипулирование их контентом.
Под манипулированием файлами понимается, ясное дело, их:
- создание,
- копирование, перемещение и переименование,
- удаление,
- разделение,
- архивирование и компрессия.
Однако любая файловая операция начинается с просмотра текущего состояния файловой системы и (или) поиска необходимого файла. Несколько позже начнем с этого и мы - ближайшая из статей цикла будет посвящена именно командам управления файлами.
А пока вспомним, что файлы создаются (и хранятся) не ради самих себя, а ради того контента, который в них содержится. И потому вторая из вековечных пользовательских задач - просмотр содержимого файлов, его модификация, а главное - поиск файла по его (весьма приближенно запомненному) содержимому. Так что следующий (после предыдущего) материал - об управлении контентом файлов (для определенности - текстовых, ибо их в POSIX-системах подавляющее большинство).
Наконец, есть у пользователя и третья группа задач - ее можно объединить понятием всякая всячина. Именно всяким полезным (как мне кажется) утилитам самого разного назначения и будет посвящена заключительная из юзерских статей о базовых утилитах.