Введение в CLI
Мир FOSS не обделён визуальными, или графическими (по нашему, по бразильскому, -- Гуёвым) интерфейсами. Однако роль CLI от этого меньше не становится. Ибо CLI а) исконен в Unix'ах, б) универсален, и в) представляет собой базу, для которой GUI всякого рода являют лишь оболочку.
Поясню последнюю мысль. Всякое действие в POSIX-системе может быть выполнено прямой командной директивой (что это -- станет понятно чуть позже). И его же можно осуществить путем манипулирования объектами. Например, копирование файлов выполняется соответствующей командой -- cp
, это первый способ. Но его же можно осуществить перетаскиванием мышью объекта, представляющего наш файл зрительно, из того места, где он находился ранее, туда, где мы хотим видеть его копию, а это уже второй способ.
И так почти во всем. Так вот, манипуляция объектами в GUI -- это обычно более или менее опосредованное выполнение соответствующих данному действию команд. Почему основные навыки работы с CLI не помешают даже тому пользователю, который не вылезает из графической среды.
Важно также, что сфера применения CLI не ограничивается "голой" консолью. Он же используется в эмуляторах терминала в графическом режиме оконной среды X. Более того, в настоящее время это основная среда для применения командного интерфейса -- к текстовой консоли обычно обращаются только в аварийных ситуациях.
А теперь пора перейти собственно к командам. Интерфейс пользователя с POSIX-системой обеспечивается в большинстве случаев классом программ, именуемых командными интерпретаторами, командными процессорами, командными оболочками или по простому шеллами (shell
) -- это термин будет предпочтительным в дальнейшем изложении.
Как легко догадаться по одному из определений, кроме предоставления пользовательского интерфейса, шеллы выполняют и вторую функцию -- служат интерпретаторами собственных языков программирования. Сам по себе этот момент для нас сейчас не существенен. Однако именно на нем основывается классификация шеллов. Ибо программ таких существует изрядное множество, которое можно разделить на две группы, обычно именуемые -- Bourne-shell совместимые и C-shell совместимые. В силу ряда причин в качестве стандарта POSIX принята одна из оболочек первой группы -- так называемый POSIX-шелл. Правда, он представляет собой чистую абстракцию, однако большинство используемых в Unix'ах оболочек декларируют ту или иную степень совместимости с ним.
Собственно описанию шеллов посвящена специальная рубрика. В рубрике же настоящей я попробую совместить роскошное -- понимание принципов командного интерфейса, -- с необходимым -- изучением базовых команд. А заодно -- и с полезным. то есть описанием особенностей того самого мифического POSIX-шелла, наиболее последовательно воплощенных в стандартных оболочках Free- и NetBSD (т.н. /bin/sh
и /bin/ash
, соответственно -- на самом деле это практически одно и то же).
И потому все примеры, иллюстрирующие принципиальные вопросы CLI, будут базироваться на наиболее используемых командах, построенных в соответствие с правилами POSIX-шелла. Однако при описании интерактивных возможностей командной строки рамки POSIX-шелла окажутся тесными -- и тут придётся обращаться к более "продвинутым" представителям этого семейства, например, bash
и zsh
, а также к tcsh
.