Академический Документы
Профессиональный Документы
Культура Документы
1
Интерфейс командной строки (консоль) - это разновидность текстового интерфейса человека и компьютера, в
котором инструкции компьютеру даются только с клавиатуры. Интерфейс командной строки противопоставляется
системам управления программой на основе меню, а также различным реализациям графического интерфейса.
2 Под сеансом командной строки понимается процесс работы пользователя с интерфейсом командной строки.
работы и упражнения будут выполняться именно в этом интерпретаторе. Определение
используемого командного интерпретатора возможно посредством обращения к переменной
окружения $SHELL, которая содержит абсолютный путь к бинарному исполняемому файлу
командного интерпретатора. Для этого можно воспользоваться командой echo, которая выводит
значение переменной, или командой env, отображающей все переменные окружения.
В графической оболочке запуск командного интерпретатора bash осуществляется при открытии
программы terminal из общего меню программ. Если графическая оболочка не установлена, то
пользователь автоматически попадает в консольную программу login, где ему необходимо
аутентифицироваться, а затем приступить к работе в командной строке.
После удачного завершения процесса аутентификации открывается сеанс командного
интерпретатора и появляется первичное приглашение.
Приглашением командного интерпретатора принято называть весь текст, отображаемый слева от
курсора, при условии, что курсор находится в самом начале командной строки. Данный текст
несет полезную информацию и может настраиваться согласно предпочтениям пользователя.
В командном интерпретаторе bash существуют следующие виды приглашений:
• PS1 (первичное приглашение). В данной переменной содержится строка вида [\u@\h
\W]\$, в которой каждому символу соответствует определенное значение. Например,
символу \u соответствует имя текущего пользователя. Допустимые символы, используемые
для формирования первичного приглашения, приведены в таблице 4.1. Примером
первичного приглашения является запись вида [root@localhost Desktop]#, которая
сообщает о том, что сеанс принадлежит пользователю root, выполнившего вход в систему
на компьютер localhost и находящегося в рабочем каталоге Desktop в данный момент
времени.
• PS2 (вторичное приглашение). Данная переменная содержит второстепенное
приглашение (>), которое возникает при многострочном редактировании текста или
незавершенном вводе команды. По умолчанию оно обозначается как >. Пример вторичного
приглашения приведен в следующем примере запуска команды получения информации
DNS:
# nslookup
>
• PS3. Данная переменная содержит приглашение, присутствующее в операторе select,
используемом для организации интерактивных консольных меню. Приглашению PS3 в
операторе select по умолчанию соответствует значение #?. В следующем примере
приведено произвольное консольное меню, в котором пользователю предлагается сделать
определенный выбор:
1) one
2) two
#? 1
One
#? 2
Two
• PS4. Данная переменная используется в основном при отладке сценариев командного
интерпретатора и по умолчанию содержит строковое значение «++». Например,
отладочный вывод сценария, содержащего единственную команду date, будет иметь
следующий вид:
# bash -x /tmp/date.sh
++ date
+ echo Wed Dec 24 14:51:37 MSK 2008
Wed Dec 24 14:51:37 MSK 2008
Таблица 4.1. Формирующие символы первичного приглашения командного интерпретатора.
Символ Значение
\A Текущее время в формате ЧЧ:MM
\h Имя хоста до первой точки
\u Имя пользователя
\w Текущий рабочий каталог
\$ Если эффективный идентификатор
пользователя (UID) равен 0, то отображается #,
в остальных случаях отображается $
\s Название командного интерпретатора
При работе с ОС Linux в данном курсе слушатели будут в основном сталкиваться с первичным и
вторичным приглашениями командного интерпретатора.
3 В оболочке bash тильда (~) используется для быстрого доступа к домашнему каталогу текущего пользователя.
команд. Все это реализовано в ОС Linux для обеспечения наибольшего быстродействия при работе
с командной строкой.
При работе с командами ОС Linux необходимо придерживаться следующих общих требований:
1. Каждая команда имеет следующий синтаксис:
команда [опции] опции [аргументы] аргументы
В квадратных скобках обозначаются необязательные опции и аргументы, без которых
команда будет выполнена. Обязательные опции и аргументы обозначаются без квадратных
скобок. Следует иметь ввиду, что некоторые команды могут вообще не содержать
обязательных опций или аргументов.
2. Каждое слово в строке отделяется от предыдущего пробелом.
3. Опции, состоящие из одного символа, начинаются, как правило, со знака «-» .
4. Опции, состоящие из целого слова, начинаются, как правило, со знака «--».
5. Как правило, каждой опции, состоящей из целого слова, соответствует аналогичная опция,
состоящая из единичного символа, например команда df -k равнозначна команде
df --kilobytes. Для экономии времени рекомендуется использовать сокращенный вариант
опций.
6. Единичные опции можно группировать вместе, например, набор опций «-a -b -с»
соответствует следующей комбинации опций: «-abc».
7. При написании нескольких команд на одной строке их необходимо разделять знаком «;».
8. Для переноса ввода команды на следующую строку, например при написании достаточно
длинных команд, используется символ «\». После ввода символа «\» и нажатия клавиши
ввода <Enter>, отображается вторичное приглашение командного интерпретатора, после
которого можно продолжать ввод команды.
9. Существуют специальные метасимволы, которые имеют особое значение при
интерпретации их командной оболочкой:
• Перенаправление ввода и вывода (<, >).
Вывод любой команды может быть перенаправлен в файл. Каждая команда
считывает данные из стандартного канала ввода или из файла:
# echo $SHELL > /tmp/shell.name
# cat < /tmp/shell.name
/bin/bash
В первой строке листинга осуществляется перенаправление вывода команды echo в
файл /tmp/shell.name. Встроенная команда echo используется для вывода всех своих
аргументов на экран терминала. В качестве аргумента команды echo используется
подстановка значения переменной SHELL, В данной переменной содержащей путь
к программе текущего командного интерпретатора. Во второй строке листинга на
вход команде cat, подается содержимое файла /tmp/shell.name. Команда cat получив
данные на вход из файла /tmp/shell.name, выводит их на экран терминала.
• Перенаправление стандартного вывода одной команды на стандартный ввод другой
команды (|), называемое конвейером. Отличительной особенностью UNIX и Linux в
частности от других систем, является то, что в процессе перенаправления вывода
одной команды на вход другой не создается каких-либо промежуточных файлов.
Основная идеология работы с командами ОС Linux заключается в том, что для решения сложной
задачи используются более простые команды, объединенные между собой каналами
перенаправления |. Рассмотрим следующий листинг.
# echo $SHELL | tr [a-z] [A-Z]
/BIN/BASH
В первой строке вывод команды echo перенаправляется на вход команды tr, которая осуществляет
преобразование всех строчных букв в прописные. В общем случае, в командной оболочке bash
поддерживаются следующие стандартные потоки ввода-вывода:
• stdout – стандартный поток вывода, отображающий результат выполнения команды на
терминале, имеет файловый дескриптор 4 с номером 1.
• stdin – стандартный поток ввода, предоставляет данные на вход команды, имеет файловый
дескриптор с номером 0.
• stderr – стандартный поток ошибок, отображающий результат ошибки выполнения
команды на терминале, имеет файловый дескриптор 2.
Для перенаправления стандартных потоков ввода и вывода используется символ перенаправления
(> или >>) с указанием номера дескриптора потока, например 2>. В слудующем листинге
приведен пример перенаправления стандатных потоков вывода и ошибок в файлы:
# ls
abc abd ade
# ls a* b*
ls: cannot access b*: No such file or directory
abc abd ade
# ls a* b* >stdout.txt 2>stderr.txt
# cat stdout.txt
abc
abd
ade
# cat stderr.txt
ls: cannot access b*: No such file or directory
Как видно из примера, вывод команды ls a* b* был перенаправлен в файл stdout.txt, а ошибка,
возникшая в результате выполнения команды, перенаправлена в файл stderr.txt. Иногда бывает
необходимо перенаправить оба потока в файл для последующего просмотра, например при
выполнении каких-то автоматизированных задач, для этого используются символы &> или &>> (с
сохранением предыдущих данных в файле). Аналогичный результат можно получить, выполнив
перенаправление последовательное перенаправление потоков в виде m>&n или m>>&n, где n и m
– номера стандартных потоков.
# ls
abc abd ade
# ls a* b*
ls: cannot access b*: No such file or directory
abc abd ade
# ls a* b* &>out.txt
# cat out.txt
ls: cannot access b*: No such file or directory
abc
abd
ade
4
Индексный дескриптор файла (инод) - это структура данных, уникально характеризующая каждый файл в рамках
одной файловой системы. Иноды хранят информацию о файлах, такую как принадлежность владельцу (пользователю
и группе), режим доступа (чтение, запись, запуск на выполнение) и тип файла. Каждый инод имеет уникальный
идентификатор в файловой системе.
# ls a* b* >out.txt 2>&1
# cat out.txt
ls: cannot access b*: No such file or directory
abc
abd
ade
# ls a* b* 2>&1 > out.txt
ls: cannot access b*: No such file or directory
# cat out.txt
abc
abd
ade
В команде ls a* b* &>out.txt выполняется одновременное перенаправление потоков вывода и
ошибок в файл out.txt, аналогичный результат достигается при выполнении команды ls a* b*
>out.txt 2>&1, однако при выполнении команды ls a* b* 2>&1 > out.txt, стандартный поток ошибок
перенаправляется строго на терминал, а вывод направляется в файл out.txt. Таким образом, важно
учитывать порядок следования перенаправлений. Каждый из стандартных потоков можно
исключить полностью, перенаправив его на устройство /dev/null, например, при выполнении
следюущей команды:
# ls a* b* >out.txt 2>/dev/null
стандартный поток ошибок будет проигнорирован и не будет направлен в файл out.txt.
Основные команды ОС Linux, как встроенные в командный интерпретатор bash, так и
выполненные в виде отдельных бинарных файлов, условно можно разделить на группы,
представленные в приложении 2.
4.3.1 Автодополнение
Для автоматического завершения названия команды используется клавиша <TAB>. Достаточно
набрать первых 1-3 символа начала названия команды и нажать на клавишу <TAB> и система
автоматически подставит корректное название команды. В случае если имеется несколько команд,
названия которых начинаются с одинаковых символов, система отобразит список всех доступных
для автозавершения команд:
# ifc<TAB><TAB>
ifcfg ifconfig
Автоматическое завершение имен файлов действует по тому же принципу с использованием
клавиши <TAB>. Причем, если после указания команды нажать клавишу <TAB> два раза, то
система отобразит содержимое текущего рабочего каталога или содержимое каталога, указанного
после команды:
# vi /etc/host<TAB><TAB>
host.conf hosts hosts.allow hosts.deny
Следует отметить, что в списке доступных для автозавершения команд будут указаны только те
команды, исполняемые файлы которых присутствуют в путях файловой системы, указанных в
переменной окружения PATH.
5 Количество запоминаемых команд в истории команд по умолчанию задается в переменной окружения HISTSIZE.
6 Если редактор явно не указан, то используется редактор, указанный в переменных FCEDIT и EDITOR.
# set –o vi
Для редактирования команд используются команды редакторов vi или emacs, в зависимости от
указанного параметра команды set. Например, если в командной строке введена следующая
команда:
# echo arg1 arg2 arg3
то для удаления второго аргумента команды необходимо перейти в режим редактора vi, нажав
клавишу <ESC> , а затем последовательно нажать комбинации клавиш 2b и dw. После удаления
второго аргумента необходимо выполнить команду, нажав на клавишу <Enter>.