4. Командная строка

Командная строка или графический пользовательский интерфейс (GUI)?

Так же, как и QNX 4, UNIX и DOS, ОСРВ QNX Neutrino строится на интерфейсе командной строки. Хотя ОСРВ QNX Neutrino включает в себя простой в использовании графический интерфейс (см. п. 5), иногда, особенно системному администратору, требуется ввести команды. Рекомендации по выбору подходящего режима — графической оболочки Photon или командной строки — содержатся в п. 8.

В процессе разработки программ не всегда возникает потребность в использовании командной строки, т. к. комплект разработчика QNX Momentics Professional Edition содержит интегрированную среду разработки (т. н. IDE-среду), которая графически отображает средства для написания, построения и тестирования программного кода. В процессе работы IDE-среды часто используются утилиты ОСРВ QNX Neutrino, но при этом командная строка остается "скрытой" от пользователя. Более подробные сведения см. в руководстве "IDE Users Guide".

Для использования командной строки в графической оболочке Photon следует запустить терминал pterm посредством щелчка мыши по пиктограмме Terminal:  в группе инструментов графической оболочки Photon (расположенной у правой границы рабочего пространства пользователя).

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

Обработка команды

После ввода команды она последовательно интерпретируется несколькими процессами:
  1. Драйвер устройства символьного ввода/вывода распознает нажатия таких клавиш, как <Backspace> и <Ctrl>+<C>.

  2. Командный интерпретатор (command interpreter или shell) разбивает командную строку на лексемы (token), интерпретирует их и затем запускает те или иные утилиты.

  3. Утилиты анализируют командную строку, полученную от командного интерпретатора, и выполняют соответствующие действия.

Драйверы символьных устройств

При вводе команды поток символов в первую очередь интерпретируется драйвером символьного устройства. Какой именно драйвер работает, в каждом случае зависит от используемого оборудования (более подробные сведения см. в «Описании программы. Часть 1. Справочник по утилитам» КПДА.10964-01 13 01).

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

Режимы ввода

Драйверы устройств символьного ввода/вывода могут функционировать либо в режиме необрабатываемых ("сырых") входных данных (raw input mode), либо в каноническом режиме (canonical mode), или режиме редактируемых входных данных (edited input mode). В режиме "сырых" входных данных все символы передаются приложению по мере их ввода. В режиме редактируемых входных данных приложение получает символы только после завершения ввода всей строки (о чем, как правило, свидетельствует символ возврата каретки).

Поддержка терминалов

Некоторым программам (например, vi) требуется информация о том, какие действия может выполнять ваш терминал (возможно ли перемещение курсора, очистка экрана и т. д.). Переменная окружения TERM указывает на тип используемого терминала, а каталог /usr/lib/terminfo представляет собой базу данных терминалов. В этом каталоге содержится набор подкаталогов (от a до z), в которых хранится информация для соответствующего терминала. Некоторые приложения вместо каталога /usr/lib/terminfo используют каталог /etc/termcap, представляющий собой устаревшую однофайловую модель базы данных.

Терминалом по умолчанию является qansi-m (QNX-версия терминала ANSI). Более подробные сведения об установке типа терминала см. в подразд. "Типы терминалов" раздела 9.

Служба telnet

При использовании сетевой службы telnet для связи между двумя QNX-машинами (под управлением QNX 4 или QNX Neutrino), для активизации восьмибитового тракта данных следует задавать параметр -8. Если вы подключаетесь к машине с QNX Neutrino из машины, управляемой какой-либо другой ОС, и терминал при этом не работает надлежащим образом, завершите telnet и запустите эту утилиту снова с параметром -8.

Примечание. При запуске telnet из ОС Windows пользуйтесь режимом ansi или vt100, в зависимости от типа терминала.

Общие сведения о клавиатуре

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

Примечание. Отклик системы на работу пользователя с клавиатурой может отличаться от описанного далее, если:
При нажатии клавиши <> или <> драйвер устройства символьного ввода/вывода передает командному интерпретатору команду "назад" или "вперед", а он, в свою очередь, выполняет предыдущую или последующую команду.

Таблица 4.1

Действие

Клавиша или комбинация клавиш

Переместить курсор влево

<>

Переместить курсор вправо

<>

Переместить курсор в начало строки

<Home>

Переместить курсор в конец строки

<End>

Удалить символ слева от курсора

<Backspace>

Удалить символ в месте расположения курсора

<Del>

Удалить все символы в строке

<Ctrl>+<U>

Переключение между режимами вставки и замещения символов (если приложение их поддерживает)

<Ins>

Завершить ввод строки или начать новую строку

<Enter>

Вызвать команду повторно

<> или <>

Приостановить отображение вывода

<Ctrl>+<S>

Возобновить отображение вывода

<Ctrl>+<Q>

Попытаться прекратить выполнение процесса

<Ctrl>+<C> или <Ctrl>+<Break>

Указать на конец ввода (end of input, EOF)

<Ctrl>+<D>

Очистить терминал

<Ctrl>+<L>



Физические и виртуальные консоли

Адаптер дисплея, дисплей и системная клавиатура в совокупности носят название физической консоли, управляемой драйвером консоли.

Примечание. Некоторые системы не содержат драйвера консоли. Например, встраиваемые системы могут иметь только драйвер последовательного порта (devc-ser*). Драйверы devc-con и devc-tcon в настоящее время поддерживаются только на платформах x86.

Для возможности взаимодействия пользователя сразу с несколькими приложениями ОСРВ QNX Neutrino позволяет запускать несколько сеансов одновременно посредством виртуальных консолей. Эти виртуальные консоли обычно именуются /dev/con1, /dev/con2 и т. д. Графическая оболочка Photon обеспечивает виртуальные консоли даже при отсутствии драйвера консоли в системе (см. раздел 5).

При запуске драйвера devc-con параметр -n задает количество включаемых виртуальных консолей. В настольной системе файл построения образа (buildfile) задает создание четырех консолей при запуске diskboot. Более подробные сведения см. в описании diskboot в разделе 8. Максимальное количество виртуальных консолей равно девяти. Встраиваемый драйвер консоли devc-tcon поддерживает только одну консоль.

Привилегированный пользователь (root) может указать программу, которая должна первоначально запускаться на каждой консоли. Утилита инициализации терминала (tinit) читает содержимое каталога /etc/config/ttys, чтобы определить, какие программы нужно запустить на консоли. По умолчанию утилита tinit выполняет команду login только на первой консоли, но может запустить login и на любой другой выбранной пользователем консоли. Это означает, что консоль 1 доступна всегда, в то время как другие консоли остаются неактивными, пока пользователь не переключится на одну из них и не нажмет какую-нибудь клавишу.

Примечание. При увеличении числа виртуальных консолей не забудьте отредактировать файл /etc/config/ttys, чтобы утилита tinit получила информацию о том, какие программы должны запускаться на добавленных консолях.

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


Таблица 4.2

Действие

Комбинация клавиш

Перейти на следующую активную консоль

<Ctrl>+<Alt>+<Enter> или <Ctrl>+<Alt>+<+>

Перейти на предыдущую активную консоль

<Ctrl>+<Alt>+<–>


Примечание. Для этих комбинаций клавиш используйте + (плюс) и − (минус) на цифровой клавиатуре.

Для быстрого перехода на любую консоль можно использовать комбинации клавиш <Ctrl>+<Alt>+<n>, где n — цифра, которая соответствует номеру виртуальной консоли. Например, чтобы перейти к консоли /dev/con2 (если она существует), следует нажать <Ctrl>+<Alt>+<2>.

Когда пользователь завершает сеанс работы с консолью посредством ввода logout или exit или нажатия комбинации клавиш <Ctrl>+<D>, эта консоль опять становится нерабочей; она не появляется при циклическом переключении между консолями с помощью сочетаний клавиш. Исключением является консоль 1, на которой по завершении сеанса система обычно производит перезапуск login.

Более подробные сведения см. в описании devc-con в «Описании программы. Часть 1. Справочник по утилитам» КПДА.10964-01 13 01 и в разд. "Консольные устройства" главы 11 в «Описание применения. Часть 1. Системная архитектура» КПДА.10964-01 31 01

Командный интерпретатор

После того как драйвер устройства символьного ввода/вывода обработал введенную пользователем информацию, командная строка передается командному интерпретатору (shell).

По умолчанию командным интерпретатором является утилита sh, которая на самом деле в среде ОСРВ QNX Neutrino представляет собой ссылку на командный интерпретатор Korn (ksh). Кроме того, могут использоваться и другие командные интерпретаторы, в том числе компактные, подходящие для встраиваемых систем (см. "Shells (командные интерпретаторы)" в «Описание программы. Часть 1. Справочник по утилитам» КПДА.10964-01 13 01.

Если описывать в общих чертах, командный интерпретатор разбивает командную строку на лексемы, интерпретирует их и затем вызывает запрошенные пользователем программы. Детали зависят от используемого командного интерпретатора. В данном разделе описывается работа ksh.

Когда пользователь вводит данные через клавиатуру, командный интерпретатор Korn сразу же обрабатывает нажатия клавиш и редактирует командную строку, в том числе выполняет автоматическое завершение набора команд и имен файлов. После нажатия клавиши <Enter> командный интерпретатор выполняет следующие действия для обработки введенной командной строки:
  1. Разбивает командную строку на лексемы, разделенные пробелами или специальными символами.

  2. Из введенных слов командный интерпретатор формирует два вида команд:

В одной командной строке можно задать несколько команд.
  1. Обрабатывает псевдонимы (aliases) рекурсивно.

  2. Выполняет все необходимые подстановки (substitutions), в том числе для параметров, команд и имен файлов.

  3. Производит необходимые перенаправления потоков.

  4. Остальные команды выполняются по следующим приоритетам: специальные встроенные команды (special builtins), функции, регулярные встроенные команды (regular builtins), исполняемые модули.

Для изменения порядка обработки командной строки применяются кавычки (quoting), которые изменяют значение специальных символов.

В следующих разделах вы найдете краткие описания вышеперечисленных этапов обработки командной строки. Тем не менее нужно сказать, что оболочка ksh является очень мощным командным интерпретатором. Более подробные сведения см. в описании ksh в «Описании программы. Часть 1. Справочник по утилитам» КПДА.10964-01 13 01.

Редактирование командной строки

Для редактирования командной строки командный интерпретатор Korn поддерживает команды в стиле редактора emacs (табл. 4.3).

Таблица 4.3

Действие

Комбинация клавиш

Перейти в начало строки

<Ctrl>+<A>

Перейти в конец строки

<Ctrl>+<E>

Перейти в конец текущего слова

<Esc> <F>

Перейти в начало текущего слова

<Esc> <B>

Удалить символ в месте расположения курсора

<Ctrl>+<D>

Удалить символ слева от курсора

<Ctrl>+<H>

Удалить символы от места расположения курсора до конца текущего слова

<Esc> <D>

Удалить символы от места расположения курсора до конца строки

<Ctrl>+<K>

Вставить текст

<Ctrl>+<Y>


Как и в редакторе emacs, если для ввода команды применяется клавиша <Ctrl>, то, кроме нее, должна быть нажата и какая-то другая клавиша (что в целом образует сочетание одновременно нажатых клавиш). Если же для ввода команды применяется клавиша <Esc>, то в этом случае остальные клавиши нажимаются последовательно, одна после другой. Более подробно см. в разделе "emacs interactive input-line editing" в документации по ksh.

Для обработки этих команд командный интерпретатор ksh использует устройство символьного ввода/вывода в режиме необрабатываемого ввода, но при этом полностью эмулирует работу драйвера по обработке нажатий клавиш. Другие командные интерпретаторы (например, esh) взаимодействуют с устройством символьного ввода/вывода в каноническом режиме (редактируемый ввод данных).

Завершение набора команд и имен файлов


Пользователь может сократить количество нажатий клавиш благодаря механизму завершения набора команд (command completion) и имен файлов (filename completion). Для этого нужно ввести несколько символов, которые однозначно идентифицируют команду или имя файла, и затем дважды нажать клавишу <Esc>. Система автоматически завершит набор, если это возможно. Например, если вы ввели последовательность символов appb и затем дважды нажали клавишу <Esc>, то система завершит набор имени команды: appbuilder.

Если вы хотите применять клавишу <Tab> для автоматического завершения набора, следует изменить настройку командного интерпретатора посредством ввода следующей команды:

bind 'ˆI'=complete


либо в командной строке, либо в файле настроек
ksh.

Более подробные сведения о команде bind и назначении клавиш см. в разделе "emacs interactive input-line editing" в документации по ksh в «Описание программы. Часть 1. Справочник по утилитам» КПДА.10964-01 13 01. Более подробно о файлах настройки ksh также см. в разд. "Настройка командного интерпретатора" раздела 9.

Зарезервированные слова

Командный интерпретатор Korn распознает следующие зарезервированные слова и символы (табл. 4.4).

Он использует их для построения составных команд. Например, можно организовать выполнение команд в цикле:

for i in *.c; do cp $i $i.bak; done

Таблица 4.4

case

else

function

then

!

do

esac

if

time

[[

done

fi

in

until

{

elif

for

select

while

}



Ввод нескольких команд

Пользователь может ввести сразу несколько команд, отделяя их друг от друга точкой с запятой (;). Например, для определения текущего рабочего каталога используется команда pwd, а для просмотра содержимого каталога — команда ls. Обе команды можно объединить следующим образом:

pwd; ls


Кроме того, для объединения нескольких команд в одной командной строке можно использовать неименованные программные каналы (|) — см. в подразд. "Неименованные программные каналы" далее в этом разделе.


Псевдонимы

Командный интерпретатор позволяет создавать новые команды или назначать часто применяемые ключи с помощью псевдонимов (alias). Например, ключ –F команды ls позволяет отобразить в конце имен определенные символы, указывающие на то, что файл является исполняемым или представляет собой ссылку, каталог и т. д. Если вы хотите, чтобы команда ls всегда использовалась с этим ключом, создайте псевдоним:

           alias ls='ls –F'

   
Если же вам понадобится выполнить команду ls без этого ключа, то укажите путь к исполняемому файлу или поставьте перед ней символ \ (обратный слэш): \ls.

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

function my_cd

{

cd $1

pwd

}

Псевдонимы можно добавлять в файл настроек (более подробную информацию см. в подразд. "Файл запуска ksh" раздела 9).

Подстановки


Командный интерпретатор позволяет использовать сокращенные обозначения вместо различных элементов командной строки. Обработка подстановок производится в следующем порядке:
Каталоги (символ "тильда")

Символ тильды (˜) интерпретируется командным интерпретатором как ссылка на личный каталог пользователя. Ряд символов (если они есть) между тильдой и следующим слэшем интерпретируется как имя пользователя. Например, строка ˜mary/some_file отсылает к файлу some_file в личном каталоге пользователя с именем mary.

Если имя пользователя не указано, то подразумевается имя текущего пользователя. Например, строка ˜/some_file отсылает к файлу some_file в личном каталоге текущего пользователя.

Примечание. Ваш личный каталог определен в соответствующей записи в базе паролей (см. описание /etc/passwd в разделе 3).

Параметры

Чтобы включить значение параметра в командную строку, поставьте символ доллара ($) перед именем параметра. Например, для вывода значения переменной окружения PATH следует ввести:

echo $PATH


Команды

Иногда может понадобиться выполнить команду и использовать результат ее выполнения для другой команды. Это можно сделать таким образом:

$(команда)


или в устаревшей форме, с использованием обратной кавычки (backquote):

`команда`


Например, для поиска заданной цепочки символов string во всех С-файлах введите следующее:

grep string $(find . -name "*.c")


Команда
find ищет в заданном каталоге (в данном случае .) и во всех его подкаталогах файлы, имена которых заканчиваются символами .c. В результате подстановки команда grep выполняет поиск заданной цепочки символов в файлах, найденных командой find.


Арифметические выражения

Арифметические выражения задаются в командной строке следующим образом:

$((выражение))


Например:

echo $((5 * 7))


Примечание. В арифметических выражениях допустимы только целочисленные значения.

Фигурные скобки

Фигурные скобки служат для добавления префикса, суффикса или того и другого к нескольким цепочкам символов, например:

[prefix]{str1,...,strN}[suffix]

где запятые (,) служат для разделения цепочек символов. Например, my_file.{c,o} преобразуется в my_file.c my_file.o.


Групповые символы для имен файлов


Групповые символы позволяют применять команды не к одному, а к множеству файлов или каталогов (табл. 4.5).

Таблица 4.5

Значение

Групповой символ

Искать совпадение с любым количеством символов

*

Искать совпадение с любым одним символом

?

Искать совпадение с любым из символов, перечисленных в квадратных скобках (или из диапазона символов, заданного с помощью дефиса)

[]

Исключить символы, заданные в скобках

!


Примечание. Скрытые файлы, т. е. файлы, имена которых начинаются с точки (например, .profile), не включаются в поиск по групповым символам, если символ точки не задан. Например, поиск по * не выдает .profile, в отличие от .*.

Примеры в табл. 4.6 иллюстрируют использование групповых символов для копирования групп файлов в каталог /tmp с помощью утилиты cp.

Таблица 4.6

Если ввести

Утилита cp скопирует

cp f* /tmp

Все файлы, имена которых начинаются с символа f (например, frd.c, flnt)

cp fred? /tmp

Все файлы, имена которых начинаются с fred и заканчиваются одним любым символом (например, freda, fred3)

cp fred[123] /tmp

Все файлы, имена которых начинаются с fred и заканчиваются символами 1, 2 или 3 (т. е. fred1, fred2 и fred3)

cp *.[ch] /tmp

Все файлы, имена которых заканчиваются символами .c или .h (например, frd.c, barn.h)

cp *.[!o] /tmp

Все файлы, имена которых не заканчиваются символами .o (Кроме тех файлов, имена которых не совпадают с шаблоном по количеству символов (в данном случае не будут скопированы файлы с именами, в которых после точки более одного символа, например .o1, .os или .oo)

cp *.{html,tex}

Все файлы, имена которых заканчиваются символами .html или .tex


Перенаправление ввода и вывода

Большинство команд:
При необходимости вы можете отступить от этих правил и применить другие (табл. 4.7).

Таблица 4.7

Если необходимо

Используйте символ

Прочитать из файла или с другого устройства (перенаправление ввода)

<

Записать stdout в файл (перенаправление вывода)

>

Дописать stdout в конец файла

>>


Например, команда ls выводит список файлов каталога. Если требуется перенаправить вывод ls в файл с именем filelist, введите следующее:

ls > filelist


Также для перенаправления данных можно указать файловый дескриптор. Например, если вы не хотите выводить на экран сообщения об ошибках, перенаправьте stderr в dev/null (специальный файл, так называемое "нуль-устройство" (bit bucket), которое поглощает любые записываемые в него данные и при чтении возвращает символ конца файла (end-of-file)):

my_command 2> /dev/null


Более подробные сведения см. в разделе "Input/output redirection" в «Описание программы. Часть 1. Справочник по утилитам» КПДА.10964-01 13 01.


Неименованные программные каналы


Также можно использовать неименованные программные каналы (pipe) (
|) для формирования составных команд, например:

grep 'some term' *.html | sort –u | wc -l

Такие программы, как grep, sort и wc (утилита для подсчета символов, слов и строк), которые производят чтение из стандартного потока ввода и запись в стандартный поток вывода, носят название фильтров (filter).

Применение кавычек со специальными символами

Некоторые символы могут принимать особый смысл для командного интерпретатора в зависимости от контекста. Для того чтобы командный интерпретатор обработал включенные в командную строку специальные символы как обычные, скорее всего, потребуется отменить их особое значение с помощью кавычек (quote), см. также табл. 4.8.

Следующие символы должны быть заключены в кавычки, если необходимо исключить их специальный смысл:

| $ ( " ) & ` ; \ ' табуляция новая_строка пробел

Следующие символы могут потребовать применения кавычек в зависимости от контекста:

* ? [ # ˜ = %

Таблица 4.8

Для отмены особого значения

Действие

Одиночного символа

Поставить перед ним один символ обратного слэша (\)

Всех специальных символов внутри цепочки символов

Заключить всю цепочку символов в одинарные кавычки

Всех специальных символов внутри цепочки символов, кроме $, ` и \

Заключить всю цепочку символов в двойные кавычки


Например, следующие команды производят поиск всех экземпляров цепочки символов "QNX Neutrino" в файле
chapter1.html:

grep QNX\ Neutrino chapter1.html

grep 'QNX Neutrino' chapter1.html

grep "QNX Neutrino" chapter1.html


Однако команда:

grep QNX Neutrino chapter1.html


будет выполнять поиск цепочки символов "QNX" в файлах
Neutrino и chapter1.html.

Сложные команды могут потребовать применения вложенных кавычек. Например:

find -name "*.html" | xargs grep -l '"QNX.*Neutrino"' | less


Эта команда выдает список всех HTML-файлов, содержащих символы QNX, за которыми следует цепочка любых символов, завершающаяся символами Neutrino. Команда find формирует список всех файлов с расширением html и передает его команде xargs, которая, в свою очередь, выполняет команду grep с каждым файлом из списка. Весь вывод команды xargs передается команде less, которая постранично отображает информацию на дисплее.

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

xargs grep -l '"QNX.*Neutrino"'

find -name "*.html" | xargs 'grep -l "QNX.*Neutrino" | less'


передает команду:

grep -l "QNX.*Neutrino" | less


команде
xargs, которая будет давать совершенно иные результаты (если она вообще будет работать).

Более подробные сведения см. в разделе "Заключение в кавычки" в документации по
ksh «Описание программы. Часть 1. Справочник по утилитам» КПДА.10964-01 13 01.

Повторный вызов ранее введенных команд

Командный интерпретатор позволяет повторно вызывать ранее введенные команды. Для перемещения по истории сохраненных команд (history buffer) используйте клавиши <> и <>. Вы можете отредактировать команду, если необходимо, и затем нажать клавишу <Enter>, чтобы выполнить ее снова.

Командный интерпретатор также имеет встроенную команду fc, которая предназначена для отображения и редактирования ранее введенных команд, а также псевдоним r команды fc, который служит для повторного выполнения ранее использованной команды. Например:

r последовательность_символов


повторно выполняет последнюю команду, имя которой начинается с последовательности_символов.

Сценарии командного интерпретатора

Команды командного интерпретатора можно сохранить в текстовом файле (называемом сценарием (shell script)), предназначенном для исполнения в пакетном режиме (batch mode). Более подробные сведения см. в разделе 10.

Утилиты

После обработки специальных символов командным интерпретатором остается информация, которая, как правило, состоит из команд и их аргументов. Большинство команд реализуется с помощью соответствующих системных исполняемых файлов, но некоторые команды (например, cd) встроены в командный интерпретатор.

Пользователь может хранить в системе несколько исполняемых файлов с одним именем. С помощью переменной окружения PATH командный интерпретатор определяет, какую версию следует использовать.

Переменная PATH содержит список каталогов, разделенных двоеточиями (:) и расположенных в том порядке, в котором вы хотите, чтобы командный интерпретатор выполнял поиск исполняемых файлов. Для просмотра значения переменной PATH следует ввести:

echo $PATH


Предупреждение.

В переменную PATH можно включить текущий каталог (.), но это может привести к уязвимости перед вирусами типа "троянский конь". Например, если . стоит в начале списка, хранимого в PATH, то командный интерпретатор будет выполнять поиск в первую очередь в текущем каталоге. Злонамеренный пользователь может записать в каталог программу-ловушку с именем ls.

Если вы хотите включить текущий каталог в переменную PATH, поместите его после каталогов, содержащих часто используемые утилиты.

Для получения сведений о задании переменной PATH см. подразд. "Типы терминалов" раздела 9.

Чтобы определить, какую именно версию команды выберет командный интерпретатор, используйте команду which. Например:

$ which ls

/bin/ls

Чтобы получить более подробные сведения, можно использовать ключи командной строки:

$ which –laf ls

-rwxrwxr–x 1 root root 19272 May 03 2002 /bin/ls


Если же применить это к команде, которая встроена в интерпретатор, то
which не сможет найти ее:

$ which cd

which: no cd in /bin:/usr/bin:/usr/photon/bin:/opt/bin


Команда
whence отображает информацию о том, как заданная команда или псевдоним интерпретируется командным интерпретатором. Например, если существует псевдоним для ls, то результат может быть, например, следующим:

$ whence ls

'ls –F'


Синтаксис команд


В «Описании программы. Часть 1. Справочник по утилитам» КПДА.10964-01 13 01 каждая команда сопровождается синтаксическим описанием, поясняющем, как пользоваться командой. Для большинства команд это описание состоит из следующих частей:
В «Описании программы. Часть 1. Справочник по утилитам» КПДА.10964-01 13 01 для описания синтаксиса команд используются некоторые специальные символы:

more myfile1 myfile2


Конечно, при вызове команды вам не нужно вводить эти символы. Например, команда
more имеет следующее описание синтаксиса:

more [-ceisu] [-n number] [-p pattern]

[-/ pattern] [-t tag] [-x tabstop] [file...]


Ключи, которые не требуют аргумента, можно объединять. Например, вышеприведенная цепочка
-ceisu означает сокращение от -c -e -i –s -u.

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

ls -l -- -my_file


Получение справочной информации в интерактивном режиме


Подробные описания утилит можно найти в «Описании программы. Часть 1. Справочник по утилитам» КПДА.10964-01 13 01. Однако если вам нужно получить краткую подсказку по синтаксису и допустимым ключам команды, вы можете воспользоваться командой use (аналогична команде man в UNIX и Linux), чтобы получить справочную информацию в интерактивном режиме (online usage message) по использованию утилиты. Например, для получения сведений о команде more введите:

use more


Если вы запрашиваете сведения об использовании программы, которая не находится ни в одном из каталогов, перечисленных в переменной PATH или не содержит в себе справочное сообщение, команда use выдаст сообщение об ошибке. Чтобы получить более подробные сведения о команде use, воспользуйтесь руководством «Описание программы. Часть 1. Справочник по утилитам» КПДА.10964-01 13 01 или просто введите use use.

Выполнение команд на другом узле или tty-устройстве


Если машины работают в сети Qnet (см. раздел 12), вы можете выполнять команды на другой машине, т. е. применять удаленное выполнение. Например:

on -n /net/dasher date


где
/net/dasher означает имя узла, на котором команда должна быть выполнена.


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

Для выполнения команды на tty-устройстве следует задать ключ -t и имя терминала. Например:

on -t con3 login root


Более подробные сведения см. в описании команды
on в «Описании программы. Часть 1. Справочник по утилитам» КПДА.10964-01 13 01.


Приоритеты

По умолчанию запускаемая пользователем утилита или другая программа получает тот же приоритет, что и родительский процесс. (В действительности приоритеты назначаются не процессам, а потокам.) Определить приоритет какого-либо потока можно с помощью команды pidin (сокр. от Process ID INformation).

Чтобы задать приоритет вручную, используйте команду on с ключом -p. Чтобы задать относительный приоритет, используйте команду nice.

Основные команды

В табл. 4.9 приведен список наиболее часто используемых команд ОСРВ QNX Neutrino.

Таблица 4.9

Действие

Команда

Определить текущий каталог

pwd (встроенная команда интерпретатора ksh)

Изменить каталог

cd (встроенная команда интерпретатора ksh)

Вывести список содержимого каталога

ls

Переименовать (переместить) файлы и каталоги

mv

Удалить файлы

rm

Копировать файлы и файловые иерархии

cp или pax

Создать каталоги

mkdir

Удалить каталоги

rmdir

Объединить и отобразить файлы

cat

Отобразить вывод постранично

less или more

Найти файлы в соответствии с заданным критерием поиска

find

Изменить права доступа/атрибуты файла

chmod

Создать жесткую или символьную ссылку

ln

Создать "архив на магнитной ленте" ("tape archive")

tar или pax

Извлечь файлы из файла .tar

tar

Извлечь файлы из файла .tar.gz или .tgz

gunzip имя_файла | pax –r или tar –xzf имя_файла


Языковые раскладки клавиатуры

Для изменения языковой раскладки клавиатуры в графической оболочке Photon вы можете использовать команду phlocale (которая также позволяет изменять некоторые другие настройки языковой поддержки). В каталоге /usr/photon/keyboard находятся раскладки для разных языков (например, немецкого, французского), а также разных версий клавиатуры Дворжака (некоторые считают эту схему клавиатуры более эффективной, чем стандартная схема QWERTY).

Если необходимая раскладка не поддерживается, вы можете воспользоваться командой mkkbd для создания новой раскладки.

Некоторые схемы клавиатур (например, для французского и немецкого языков) включают клавиши для добавления знаков акцента, которые не создают отдельных символов. В ОСРВ QNX Neutrino такие клавиши считаются "слепыми". При нажатии "слепой" клавиши, после которого следует нажатие другой клавиши, происходит модификация, в результате которой второй символ получает знак акцента. Например, для ввода символа Ü во французской схеме клавиатуры следует нажать <Shift>+<[> и затем <Shift>+<U>.

Кроме того, сложные символы можно создавать путем нажатия и отпускания клавиши <Alt> с последующим нажатием двух клавиш или сочетания клавиш. Например, для ввода символа Ü в английской (США) схеме клавиатуры вы можете нажать и отпустить клавишу <Alt> и затем применить комбинацию клавиш <Shift>+<"> и после него — <Shift>+<U>.

QNX Neutrino для пользователей MS-DOS

Пользователю, знакомому с Microsoft Windows, может быть, полезно знать эквиваленты основных команд и переменных DOS, существующих в ОСРВ QNX Neutrino.

Команды DOS и их эквиваленты в QNX Neutrino

В табл. 4.10 приведены некоторые основные команды MS-DOS и их эквиваленты в ОСРВ QNX Neutrino. Более подробные сведения о командах ОСРВ QNX Neutrino см. в «Описании программы. Часть 1. Справочник по утилитам» КПДА.10964-01 13 01.

Таблица 4.10

Команда DOS

Команда QNX Neutrino

attrib

ls -l, chmod и ls -a

Командные файлы

Сценарии командного интерпретатора (см. раздел 10 или документацию по командному интерпретатору ksh)

cacls

ls -l

call сценарий

ksh сценарий

Если сценарий начинается с #!/bin/sh, его можно вызывать как обычную программу; например, сценарий (без добавления префикса sh или ksh)

chdir

cd (встроенная команда интерпретатора ksh)

chkdsk

Для дисковой файловой системы QNX 4 (Neutrino) используется команда chkfsys; для файловой системы FAT в DOS применяется команда chkdosfs

cls

clear

cmd

ksh

command

ksh

comp

cmp или diff

copy

cp или pax

date

date и rtc

Для изменения даты и времени аппаратных часов следует использовать команду rtc

del

rm

dir

ls

erase

rm

diskcomp

См. далее

diskpart

fdisk [команда]

driverquery

См. подразд. "Устранение неполадок" раздела 6

fc

cmp или diff

find

grep -i

findstr

grep

format

fdformat и dinit

ftype

Ассоциирование типов файлов выполняется программой Photon File Manager (pfm). См. подразд. "Просмотр файлов с помощью администратора файлов" раздела 5

getmac

См. ifconfig, netstat; а также ls /dev/io-net

help

use

logman

tracelogger

lpq

lprq

lpr

lpr

md

mkdir

mode

stty

move

mv

msiexec

qnxinstall

path

echo $PATH, export PATH=новый путь (см. подразд. "Утилиты" ранее в этом разделе или документацию по командному интерпретатору ksh)

print

lpr

query

sin, pidin и ps

rem

#

rename

mv

replace

cp -x

runas

su

schtasks

crontab

shutdown

shutdown

sort

sort

taskkill

kill или slay

tasklist

sin, pidin и ps

time

date и rtc

tracerpt

traceprinter

tracert

traceroute

type

cat

ver

uname -a

xcopy

cp или pax


diskcomp

Следующие команды ОСРВ QNX Neutrino являются эквивалентом команды DOS diskcomp:

cp /dev/fd0 referencecopy

cmp referencecopy /dev/fd0

cp referencecopy /dev/fd0


Эквиваленты локальных переменных командного интерпретатора MS-DOS


В табл. 4.11 приведены некоторые встроенные локальные переменные командного интерпретатора MS-DOS и их эквиваленты (переменные окружения и команды) в QNX Neutrino.

Таблица 4.11

Переменные командного интерпретатора DOS

Эквивалент в QNX Neutrino

%CD%

Переменная окружения PWD, pwd

%COMPUTERNAME%

Переменная окружения HOSTNAME

%COMSPEC%

Переменная окружения SHELL

%DATE%

Запуск утилиты date:

$(date)

%ERRORLEVEL%

$? (см. раздел "Parameters" в документации по командному интерпретатору ksh)

%HOMEDRIVE%

В QNX Neutrino обозначения дисков не используются. См. %HOMEPATH%

%HOMEPATH%

Переменная окружения HOME

%OS%

Запуск утилиты uname:

$(uname)

%PATH%

Переменная окружения PATH

%PATHEXT%

В QNX Neutrino расширения файлов рассматриваются как часть имени файла. Разрешение на выполнение определяется правами доступа к файлу. См. chmod

%PROCESSOR_ARCHITECTURE%

Запуск утилиты uname:

$(uname -p)

%PROCESSOR_IDENTIFIER%

Запуск утилиты sin:

$(sin info)

%PROMPT%

Переменные окружения PS1, PS2 (см. раздел "Parameters" в документации по командному интерпретатору ksh и разд. "Файл .kshrc" приложения)

%RANDOM%

Переменная окружения RANDOM

%SYSTEMDRIVE%

В QNX Neutrino обозначения дисков не используются. Корнем системы всегда является /

%SYSTEMROOT%

Корнем системы всегда является /

%TEMP%

Переменная окружения TMPDIR

%TMP%

Переменная окружения TMPDIR

%TIME%

Запуск утилиты date:

$(date)

%USERNAME%

Переменная окружения LOGNAME


Устранение неполадок

Далее приводятся ответы на некоторые вопросы из тех, которые могут у вас возникнуть при работе с командной строкой.
Командный интерпретатор имеет встроенную команду с именем test. При анализе командной строки командный интерпретатор в первую очередь производит поиск по встроенным командам, а затем среди исполняемых файлов.

Переименуйте вашу программу либо укажите путь к ней (например, ./test).
Возможно, каталог, где находится ваша программа, не указан в переменной окружения PATH. Например, по соображениям безопасности в ней не указан текущий каталог.

Для решения проблемы включите каталог с вашей программой в переменную окружения PATH либо укажите путь к команде (например, ./my_program). Более подробные сведения см. в подразд. "Утилиты" ранее в этом разделе.
Привилегированный пользователь (root) имеет другое значение переменной окружения PATH, которое включает в себя такие каталоги, как /sbin и /usr/sbin. Эти каталоги содержат исполняемые модули и администраторы, которые, как правило, может использовать только root.

Если вы вошли в систему не как привилегированный пользователь, вы, тем не менее, можете запускать некоторые утилиты из каталога /sbin, если имеете соответствующие разрешения, но при этом вы должны либо указать полный путь (например, /sbin/logger), либо добавить каталог в переменную окружения PATH.
Файлы, имена которых начинаются с точки (.), называются скрытыми файлами (hidden files). Для того чтобы они появились в списке, используйте команду ls с ключом -a.
Командный интерпретатор не может найти заданный файл или каталог. В этом случае попробуйте проверить следующее.
Для изменения роли специальных символов применяйте маскирование с помощью кавычек (например, less "my file" или less my\ file). Более подробные сведения см. в разд. "Применение кавычек со специальными символами" ранее в этом разделе.

В ОСРВ QNX Neutrino дефис (-) служит для обозначения ключей (например, head -n 10 имя_файла). Если вы создаете файл, имя которого начинается с дефиса, и передаете это имя утилите в качестве аргумента, то она рассматривает это имя как один или несколько ключей.

Большинство утилит распознает двойной дефис (--) как признак "конца цепочки ключей" ("end of options"), поэтому вы можете указать его перед именем вашего файла:

head -- -my_file

Либо переменная окружения TERM задана некорректно, либо нет записи о данном типе терминала в базе данных терминалов /usr/lib/terminfo (или, возможно, /etc/termcap). См. подразд. "Поддержка терминалов" ранее в этом разделе.