Запуск программ в интерактивном режиме
После прохождения процедуры аутентификации пользователя система запускает экземпляр командного интерпретатора, который обеспечивает диалоговый режим человека и машины. Как уже указывалось, существует три основных типа интерпретаторов, работающих в режимах командной строки, текстовом меню или графического интерфейса. В любом случае система ожидает от зарегистрированного пользователя ввода команды.
Программа, которая общается с пользователем и выполняет введенные им команды, называется командным интерпретатором или оболочкой (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