Полезная информация

ГЛАВА 1

ОБЗОР UNIX - КОМАНДЫ

И ОСНОВНЫЕ ПОНЯТИЯ

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

Хорошей иллюстрацией является командная строка, позволяющая вам сказать компьютеру, что же вы хотите сделать. Если вы не знакомы с UNIX, то, возможно, будете напуганы странным символом на экране:

$

Это символ называется приглашением командной строки и

показывает, что система готова к приему команд. Конечно, если вы не имеете опыта работы с UNIX, вы испытаете в этот момент смущение. Но после того как вы узнаете, что символ $ является приглашением к вводу и означает, что система ожидает команд от вас, всемогущего пользователя, UNIX уже не будет такой пугающей. (В качестве приглашения могут использоваться различные символы, в зависимости от того, какой интерпретатор командной строки вы используете. Если вы пользуетесь Korn shell или Bourne shell, то в качестве приглашения будет использоваться символ $; в С shell используется %. Но мы забегаем вперед. Пока вам достаточно обратить внимание на существование приглашения; также запомните, что вам не нужно вводить символ приглашения, когда он появляется в наших примерах.)


Команды

Польза просвещения становится понятной, когда вы впервые учитесь обращаться с компьютером. Запомните: компьютер не умнее вас. Объективно говоря, компьютер значительно тупее. Без инструкций, называемых командами, компьютер может разве что стоять на месте и потреблять электроэнергию. Все, что делает компьютер, - это точное выполнение ваших инструкций. Главное - убедиться, что инструкции, которые вы ему даете, приведут к желаемому результату.

Запомнив это, вы можете уверенно, широким шагом подойти к вашему терминалу и ввести команду. После символа приглашения вы вводите как команду (или несколько команд), так и необходимые для нее параметры и аргументы; вместе это называется командной строкой. В UNIX все является командой, вне зависимости от того, что вы делаете. Чтобы запустить программу, вы даете соответствующую команду. Чтобы получить список файлов в каталоге, вы вводите команду. Чтобы запустить текстовый редактор, вы используете команду.

Если вы заглянули вперед, вы уже знаете, что UNIX имеет сотни команд. Некоторые из этих команд используются очень часто, например, текстовые редакторы наподобие vi или ed удобны для создания небольших файлов или заметок. Некоторые команды встречаются только в определенной версии UNIX, в то время как другие можно найти в любой UNIX-системе. Эта книга описывает как раз такие, наиболее общие команды.

Обычная командная строка выглядит примерно так:

$ Is -1

Вторая часть командной строки, -1, называется параметром.

Параметры и аргументы меняют действие команды, как правило, в достаточно узких рамках. Например, один из параметров команды Is (выводящей список файлов в каталоге) указывает команде на необходимость произвести вывод в один столбец, а не в несколько. Очень малое количество команд не использует параметров. Умение правильно использовать параметры необходимо, если вы хотите обращаться с UNIX с легкостью.


(Примеры из главы 5, содержащей описания большинства команд UNIX, иллюстрируют значение параметров.)

Когда вы введете командную строку, показанную выше, на экране появится что-нибудь вроде этого:

$ Is -1

data

financials

personnel

misc

newdata

Какие именно имена файлов будут выведены - неважно, главное для нас в настоящий момент то, что они выведены в один столбец. Без параметра -1 вывод, производимый командой Is, выглядел бы так:

$ Is

data figures newdata personnel

misc expences financials

Это очень простой пример применения параметров. Как вы увидите, когда начнете работать с UNIX, большинство параметров влияют на результат выполнения команды, а не только на формат вывода на экран.

Файлы

Большинство команд UNIX не делают ничего заслуживающего внимания, если не указано имя файла. (Есть несколько исключений, но вы будете редко использовать такие команды, если, конечно, ваша работа с UNIX не сводится к получению текущей даты и времени при помощи команды date.) В UNIX <все есть файл>. Да, мы имеем в виду действительно все. Каталог - это файл, представляющий группу файлов. Принтер представлен файлом. Устройства, такие, как накопитель на магнитной ленте, также представлены соответствующими файлами.

С одной стороны, такая структура делает работу с UNIX удивительно простой. Команды работают с файлами вне зависимости от того. что представляют собой эти файлы. С другой сторо-


ны, положение усложняется тем, что обязанность следить за тем, что это за файл, ложится на вас.

Файлом называется структура, позволяющая сохранять информацию в электронном формате, который понимает компьютер, - проще говоря, в виде последовательности бит. Бит - это ноль или единица. При помощи битов могут быть записаны используемые нами символы. Файл - это метод хранения битов в логическом порядке; без файлов биты были бы раскиданы по всему жесткому диску, и не было бы никакой возможности извлечь записанную информацию.

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

Вы уже запутались? Вполне возможно, но не переживайте. По мере приобретения опыта работы с UNIX вы во всем этом разберетесь.

Всего существует четыре типа файлов:

 Обычные файлы.

 Каталоги.

 файлы устройств.

 Ссылки.

Каждый тип подразделяется на подтипы:

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


 Каталоги содержат информацию о других файлах. Мы обсудим каталоги ниже.

 Файлы устройств управляют взаимодействием операционной системы с физическими устройствами. Например, когда вы используете команду tar для создания файлового архива на магнитной ленте, вы записываете архив в файл, представляющий устройство накопления на магнитной ленте (как правило - /dev/rmtO).

 Ссылки позволяют поместить один файл в несколько каталогов под разными именами. Поскольку UNIX является многопользовательской операционной системой, имеет смысл экономить пространство на диске, создавая ссылки. Несколько пользователей могут использовать один и тот же файл вместо того, чтобы хранить копии файла в своих домашних каталогах.

Каталоги

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

Как мы уже отметили выше, каталог - не что иное, как файл, содержащий ссылки на другие файлы. Вы можете представлять себе каталог как папку, которая содержит файлы и другие каталоги (называемые подкаталогами), которые, в свою очередь, также могут содержать файлы и каталоги, и т. д. Каждый каталог является подкаталогом какого-то другого, за исключением одного каталога, обозначаемого / и называемого корневым каталогом.

Это объясняет, почему имя файла всегда начинается с символа косой черты. Дело в том, что полное имя файла должно указывать положение файла в дереве каталогов. Вершиной этого дерева является корневой каталог /. Корневой каталог содержит некоторое количество подкаталогов (обычно среди них присутствуют users, etc. usr и tmp). Если вы работаете в большой системе с хорошим системным администратором, то вам, вероятно, будет выделен домашний каталог. Он бу-


дет вашим текущим каталогом после входа в систему. Домашний каталог, скорее всего, будет находиться где-нибудь в каталоге users.

UNIX предоставляет вам множество команд для создания, удаления и управления каталогами. По мере вашей работы с UNIX вам захочется создать подкаталоги в домашнем каталоге. Основная идея состоит в том, чтобы создавать подкаталоги, соответствующие выполняемым вами задачам: например, вы можете создать каталог reports для хранения отчетов, которые вы представляете начальнику.

Стандартный ввод и стандартный вывод

Теперь, когда вы знаете, что такое команды и что такое файлы, пришло время объяснить, как ими пользоваться.

В одной командной строке может быть введено более одной команды. Это значит, что вы можете после имени команды и ее параметров ввести инструкции, указывающие на необходимость передачи результата выполнения команды другой команде. В царстве UNIX это называется перенаправлением стандартного вывода и стандартного ввода. Давайте рассмотрим типичный пример.

Команда cat - одна из часто используемых в UNIX команд. Если вы запустите эту команду саму по себе, результат будет следующим:

$ cat

После этого каждая введенная вами строка после нажатия клавиши Enter будет дублироваться на экране. Строки не будут сохранены на диске. После того как они будут выведены на экран, они исчезнут навсегда.

Как и большинство команд, cat использует в качестве стандартного ввода клавиатуру, а в качестве стандартного вывода - экран монитора. Вот почему после запуска этой команды без параметров строки, вводимые с клавиатуры, просто выводятся на экран. Команда cat сама по себе абсолютно бесполезна, если, конечно, вы не получаете удовольствие, наблюдая, как компьютер повторяет то, что вы вводите.


При указании в командной строке имени файла команда cat становится более полезной. Она позволяет вывести на экран содержимое файла:

$ cat kevin.report

В связи со снижением объема продаж, я предлагаю немедленно остановить производство окон диалога 1190-ААА.

В этом примере, задав имя файла в командной строке, мы указываем cat, что данные должны быть получены не с клавиатуры, а из соответствующего файла. Поэтому на экран выводится содержимое файла, а не набираемые вами символы.

При помощи команд переназначения ввода/вывода вы можете использовать команду cat для решения различных задач. Например, если вы хотите сохранить вводимую вами с клавиатуры информацию в файле, вы можете использовать cat. В следующем примере вводимая вами с клавиатуры информация будет направлена в файл report.1997:

$ cat > report.1997

В этом примере cat выступает в роли простейшего текстового редактора. Вы можете вводить текст строка за строкой. Закончив ввод, нажмите на клавиатуре Ctrl-D. (Сочетание клавиш Ctrl-D сообщает UNIX, что ввод закончен.)

Вы также можете использовать cat в качестве альтернативного метода копирования файлов:

$ cat report.1997 > report.1998

В этом примере указаны файлы как для стандартного ввода (report.1997), так и для стандартного вывода (report.1998). файл report.1997 не изменяется, а его содержимое копируется в новый файл report.1998. (Кстати, это способ, которым в UNIX производится печать. Принтер представлен файлом. Помните, мы вас предупреждали, что в UNIX все есть файл? Когда вы печатаете документ, вы направляете вывод команды на принтер, то есть в соответствующий файл.)

Наконец, вы можете дописать несколько строк в конец существующего файла или присоединить один файл к другому:

cat report.1998 > report.1997


Эта команда присоединит содержимое файла report.1998 к содержимому файла report.1997. Если вы хотите дописать несколько строк в конец файла с клавиатуры, используйте такую команду:

$ cat > report.1997

Описанные выше операции перенаправления приведены в табл. 1.1.

Таблица 1.1. Операции перенаправления ввода/вывода

Символ Использование Результат

> команда > файл Вывод команды

записывается в файл

< команда < файл Файл используется в качестве стандартного ввода команды

> команда > файл Вывод команды

дописывается в конец файла команда! [ команда2 Выполняется команда!, затем ее стандартный вывод подается на стандартный ввод команды2

Внимательный читатель может заметить, что символ <, описываемый в табл. 1.1, может быть использован аналогично разобранному нами ранее примеру:

$ cat kevin.report

Тот же результат даст выполнение команды

$ cat < kevin.report

Разница заключается в том, каким образом командный интерпретатор UNIX обрабатывает эти команды. В первом примере имя файла kevin.report является аргументом команды cat. Во втором случае интерпретатор командной строки производит перенаправление стандартного ввода команды cat.


Вы можете использовать несколько операций перенаправления в одной командной строке. Например, многие команды UNIX (особенно сценарии интерпретатора командной строки) вызываются следующим образом:

$ команда < файл! > файл2

При этом стандартный ввод команды берется из файла файл1, а стандартный вывод записывается в файл файл2.

Потоки

Все преимущества возможности перенаправления ввода/вывода становятся ясны при использовании еще одного мощного инструмента UNIX- потоков. Потоком называется использование стандартного вывода одной команды в качестве стандартного ввода другой. Выглядит это так:

$ команда! │ команда2

Например, вы можете отсортировать содержимое файла перед печатью. Вам нужно использовать команду sort и отправить ее вывод на ввод команды Ip, осуществляющей печать. Подробное описание этих команд вы можете найти в главе 5. Командная строка для печати отсортированного файла будет выглядеть так:

$ sort textfile I Ip

В одной командной строке можно указать несколько потоков, например:

$ cat *.1994 │ grep profits I Ip

Эта командная строка произведет поиск в текущем каталоге файлов, имена которых заканчиваются на 1994, отправит список таких файлов на ввод команды grep, которая произведет поиск в этих файлах слова profits. Затем строки, содержащие это слово, будут напечатаны.