Классические Unix-утилиты. Введение для пользователя

Алексей Федорчук
2002-2005 гг

Классические утилиты 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-системы.

Количество этих команда (а в свежеустановленном дистрибутиве число их колеблется от 700 до 800 и более) способно обескуражить. Если, конечно, хоть как-то не упорядочить (в уме) это богачество. И упорядочивание это, в почти соответствие с заветами председателя Мао, можно провести в двух стилях (великий кормчий, правда, говорил о трех стилях, но меня, не столь великого, на это не хватило).

Первый стиль упорядочивания — по назначению. Здесь можно выделить команды пользовательские, административные и разработческие. И не нужно думать, что первые нужны только пользователю, вторые — только сисадмину, а третьи — лишь программеру.

Под пользовательскими можно понимать команды управления данными (файлами и их содержимым). А ведь и самые крутые админы или программеры время от времени копируют свои файлы или просматривают их содержимое. Административные команды предназначены для управления системой. Но на настольной машине каждый пользователь обычно — сам себе root, и проблему подключения нового диска (и даже монтирования дискеты) за него никто не решит. Ну а разработческие команды нужны не только для создания нового гениального софта, но и для сборки уже созданного. И как это делать — неплохо понимать любому юзеру.

Именно такой способ реализуется во Free- и прочих BSD. Где все компоненты базового набора размещаются в корневом каталоге и основных ветвях каталога /usr (а весь дополнительно устанавливаемый софт — исключительно в каталоге /usr/local).

Второй стиль упорядочивания, ортогональный первому, реализуется в Linux (и особенно последовательно проводится в source based его дистрибутивах). Это — упорядочивание по принадлежности к именованным наборам утилит, которые часто именуются пакетам (packages); в частности, именно как packages они фигурируют в Linux from Scratch Герарда Бикманса.

И еще одна оговорка. Стили упорядочивания по назначению и по принадлежности — ортогональны, но не в Евклидовом пространстве. И потому одни команды из некоего пакета могут попасть в юзерскую группу, некоторые — в админскую. А иногда одна и та же команда может выступать в разных ипостасях.

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

Конечно, для пользователя (как и администратора, и разработчика, и кого угодно еще) базовые утилиты начинаются с командной оболочки, сиречь шелла. Однако дело это столь сложно, что выделено в отдельное производство (см., например, описания bash, tcsh, zsh и настроек последнего). Как и дело о базовых текстовых редакторах — этот разговор пойдет в соответствующем разделе, а куда он способен завести — я и сам не знаю. И потому пока ограничусь только описанием некоторых отдельных пользовательских из состава базовых утилит.

Задач перед пользователем стоит великое множество. Однако две из них встают с неизбежностью Рагнарека: манипулирование файлами и манипулирование их контентом.

Под манипулированием файлами понимается, ясное дело, их:

  • создание,
  • копирование, перемещение и переименование,
  • удаление,
  • разделение,
  • архивирование и компрессия.

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

А пока вспомним, что файлы создаются (и хранятся) не ради самих себя, а ради того контента, который в них содержится. И потому вторая из вековечных пользовательских задач — просмотр содержимого файлов, его модификация, а главное — поиск файла по его (весьма приближенно запомненному) содержимому. Так что следующий (после предыдущего) материал — об управлении контентом файлов (для определенности — текстовых, ибо их в POSIX-системах подавляющее большинство).

Наконец, есть у пользователя и третья группа задач — ее можно объединить понятием всякая всячина. Со временем мы поговорим и о них..