Запуск программ в интерактивном режиме

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

Программа, которая общается с пользователем и выполняет введенные им команды, называется командным интерпретатором или оболочкой (Shell). Небольшое число команд исполняется самой оболочкой, и эти команды называются внутренними. Подавляющее большинство команд являются внешними, и имя введенной команды тождественно имени какого-нибудь исполняемого файла или сценария. Исполняемые файлы обычно располагаются в двух каталогах: /bin и /sbin, хотя запустить процесс можно из любого каталога, на который у пользователя есть право доступа. Вызывать команды можно, задавая абсолютный путь к ее исполняемому файлу, либо пользуясь коротким именем файла. Найти нужный файл по его короткому имени программе-оболочке помогает переменная окружения PATH (дословно - дорожка, путь). В ней обычно поименованы каталоги /din, /sbin, /usr/bin, /usr/local/bin, разделенные двоеточием. Для администратора в этом перечне должен быть исключен текущий каталог, обозначаемый одной точкой «.», поскольку это потенциально опасно.

Пользователь может управлять системой в режиме командной строки, и в этом случае он работает с одной из оболочек, имеющих название Born shell (/bin/sh), С shell (/bin/csh), Korn shell (/bin/ksh), Bash (/bin/bash). Пользователи, привыкшие к удобству, предпочитают файловый менеджер Midnight Commander. Наконец, современные дистрибутивы систем поддерживают графические оболочки типа Gnom или KDE.

Введенная команда должна состоять из трех частей:

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

ps -e -1 -f = ps -elf

Существует соглашение относительно имен опций. Оно изложено в документе CNU Coding Standarts и является обязательным для программистов, пишущих программы для Linux. Так, обычно символом «1» (long) обозначают длинный (расширенный) вывод данных, символом «a» (all) - отображение всех объектов, а символом "h" (help) - вывод подсказки по синтаксису команды.

Длинные опции состоят из двух дефисов, после которых следует имя из символов нижнего и верхнего регистров. Такие опции легче запоминать и читать. Интерпретаторы понимают и длинные, и короткие опции. Но запускаемая программа тоже должна понимать опции обоих видов.

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

dd if = /dev/fdO of = /mnt/floppy/fda count = 10 skip = 1 conv = noerror,sync

где опции и входные данные чередуются.

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

В одной строке можно ввести несколько команд, разделяя их символом «;», например:

clear; pwd; date

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

grep "ivanow" /etc/passwd && дгер "ivanow" /etc/group

Разделитель II используется, если надо запустить вторую команду при ошибочном завершении первой. Например:

Is -1 /root || Is -1 /home

Если эту строку запустит обычный пользователь, то будет исполнена только вторая команда, т.к. прав на чтение каталога администратора у него нет.

Пользователю нет необходимости многократно вводить одни и те же команды. С помощью клавиши | можно вернуться к предыдущей команде, а нажимая ее многократно, можно «пролистать» список команд в обратную сторону на нужное число позиций. То же самое можно сделать с помощью команды history - при этом выводится перечень ранее введенных команд (по умолчанию запоминается список из 1000 команд). Этот список хранится для каждого зарегистрированного пользователя в отдельном текстовом файле в его домашнем каталоге.

тс

mount

dd if=/dev/hda6 of=/tmp/bootsect.lnx bs=l count=512

mc

lilo cnfig

mount /dev/hdal -vfat /mnt/hdal

dd if=/dev/fd0 of=/tmp/bootsect.lnx bs=l count=512

umount /mnt/floppy

mc

passwd

dd if=/dev/fdO of=floppyl count=2800 conv=noerror,sync

fdisk -1 /dev/hda6

Is -li /

lde -i 131329 /dev/hda6

mc

lde -b 0x00040203 /dev/hda6|more

mc

debugfs /dev/hda6

cd /home

Is

cd /etc

Is -li

debugfs -R stats /dev/hda6

Листинг 4. Фрагмент перечня команд пользователя выведенных командой history