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

Основы работы с клавиатурой, командной строкой и оболочкой (интерпретатор команд)

Статья включает:

Командная строка или графический интерфейс?
Обработка команды
Драйверы символьных устройств
Командный интерпретатор
Утилиты
Основные команды
ЗОСРВ «Нейтрино» для пользователей MS-DOS
Устранение неполадок

Командная строка или графический интерфейс?

Так же, как и QNX4, UNIX и DOS, ЗОСРВ «Нейтрино» строится на интерфейсе командной строки. Хотя ЗОСРВ «Нейтрино» включает в себя простой в использовании графический интерфейс, иногда, особенно системному администратору, требуется ввести команды. Рекомендации по выбору подходящего режима — оконного окружения Photon или командной строки — содержатся в Управление запуском ЗОСРВ «Нейтрино».

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

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

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

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

  1. драйвер устройства символьного ввода/вывода распознает нажатия таких клавиш, как <Backspace> и <Ctrl> + C;
  2. командный интерпретатор (command interpreter или shell) разбивает командную строку на лексемы (token), интерпретирует их и затем запускает те или иные утилиты;
  3. утилиты анализируют командную строку, полученную от командного интерпретатора, и выполняют соответствующие действия.

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

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


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

Режимы ввода

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

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

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

Служба telnet

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


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

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

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


Note: Отклик системы на работу пользователя с клавиатурой может отличаться от описанного далее, если:
  • драйвер функционирует в режиме "сырых", а не редактируемых входных данных;
  • приложение устанавливает особые условия взаимодействия с пользователем (например, специальные правила обработки нажатий клавиш);
  • терминал имеет ограниченные возможности клавиатуры.

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

Действие Клавиша или комбинация клавиш
Переместить курсор влево <Клавиша влево>
Переместить курсор вправо <Клавиша вправо>
Переместить курсор в начало строки <Home>
Переместить курсор в конец строки <End>
Удалить символ слева от курсора <Backspace>
Удалить символ в месте расположения курсора <Del>
Удалить все символы в строке <Ctrl> + U
Переключение между режимами вставки и замещения символов (если приложение их поддерживает) <Ins>
Завершить ввод строки или начать новую строку <Enter>
Вызвать команду повторно <Клавиша вниз> или <Клавиша вверх>
Приостановить отображение вывода <Ctrl> + S
Возобновить отображение вывода <Ctrl> + Q
Попытаться прекратить выполнение процесса <Ctrl> + C или <Ctrl> + <Break>
Указать на конец ввода (end of input, EOF) <Ctrl> + D
Очистить терминал <Ctrl> + L

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

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


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

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

При запуске драйвера devc-con параметр -n задает количество включаемых виртуальных консолей. В настольной системе файл построения образа (buildfile) задает создание четырех консолей при запуске diskboot. Более подробные сведения см. в описании diskboot в Управление запуском ЗОСРВ «Нейтрино». Максимальное количество виртуальных консолей равно девяти.

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


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

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

Действие Комбинация клавиш
Перейти на следующую активную консоль <Ctrl> + <Alt> + <Enter> или <Ctrl> + <Alt> + +
Перейти на предыдущую активную консоль <Ctrl> + <Alt> + -


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

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

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

После того как драйвер устройства символьного ввода/вывода обработал введенную пользователем информацию, командная строка передается командному интерпретатору (shell). По умолчанию командным интерпретатором является утилита sh, которая на самом деле в среде ЗОСРВ «Нейтрино» представляет собой ссылку на командный интерпретатор Korn ( ksh). Кроме того, могут использоваться и другие командные интерпретаторы, в том числе компактные, подходящие для встраиваемых систем.

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

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

После нажатия клавиши <Enter> командный интерпретатор выполняет следующие действия для обработки введенной командной строки:

  1. разбивает командную строку на лексемы, разделенные пробелами или специальными символами;
  2. из введенных слов командный интерпретатор формирует два вида команд:
  3. обрабатывает псевдонимы (aliases) рекурсивно;
  4. выполняет все необходимые подстановки (substitutions), в том числе для параметров, команд и имен файлов;
  5. производит необходимые перенаправления потоков;
  6. остальные команды выполняются по следующим приоритетам: специальные встроенные команды (special builtins), функции, регулярные встроенные команды (regular builtins), исполняемые модули.
Для изменения порядка обработки командной строки применяются кавычки (quoting), которые изменяют значение специальных символов. В следующих разделах вы найдете краткие описания вышеперечисленных этапов обработки командной строки. Тем не менее нужно сказать, что оболочка ksh является очень мощным командным интерпретатором.

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

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

Действие Комбинация клавиш
Перейти в начало строки <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. Более подробно о файлах настройки ksh также см. в Настройка командного интерпретатора.

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

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

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

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 этого ключа, то укажите путь к исполняемому файлу или поставьте перед ней символ \ (обратный слэш). Псевдонимы расширяются на месте, поэтому вы не можете установить аргумент в середину расширяемой формы; если вы хотите сделать это, используйте функцию командного интерпретатора. Например, если вы хотите, чтобы версия команды cd дополнительно сообщала вам где, какой каталог является текущим, наберите приблизительно следующее в ksh:
function my_cd
{
cd $1
pwd
}
Псевдонимы можно добавлять в файл настроек (более подробную информацию см. в Файл запуска ksh).

Подстановки

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

Каталоги (символ "тильда")

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


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

Параметры

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

echo $PATH

Команды

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

$(команда)
или в устаревшей форме, с использованием обратной кавычки (backquote):
`команда`
Например, для поиска заданной цепочки символов string во всех С-файлах введите следующее:
grep string $(find . -name "*.c")
Команда find в заданном каталоге (в данном случае .) и во всех его подкаталогах файлы, имена которых заканчиваются символами .c. В результате подстановки команда grep поиск заданной цепочки символов в файлах, найденных командой find.

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

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

$((выражение))
Например:
echo $((5 * 7))


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

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

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

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

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

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

Значение Групповой символ
Искать совпадение с любым количеством символов *
Искать совпадение с любым одним символом ?
Искать совпадение с любым из символов, перечисленных в квадратных скобках (или из диапазона символов, заданного с помощью дефиса) []
Исключить символы, заданные в скобках !


Note: Скрытые файлы, т.е. файлы, имена которых начинаются с точки (например, .profile), не включаются в поиск по групповым символам, если символ точки не задан. Например, поиск по * не выдает .profile, в отличие от .*. Примеры в таблице ниже иллюстрируют использование групповых символов для копирования групп файлов в каталог /tmp с помощью утилиты cp.

Если ввести Утилита 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

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

Большинство команд:

При необходимости вы можете отступить от этих правил и применить другие.

Если необходимо Используйте символ
Прочитать из файла или с другого устройства (перенаправление ввода) <
Записать stdout в файл (перенаправление вывода) >
Дописать stdout в конец файла >>

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

ls > filelist

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

my_command 2> /dev/null

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

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

grep 'some term' *.html | sort -u | wc -l
Такие программы, как grep, sort и wc (утилита для подсчета символов, слов и строк), которые производят чтение из стандартного потока ввода и запись в стандартный поток вывода, носят название фильтров (filter).

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

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

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

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

* ? [ # ˜ = %

Для отмены особого значения Действие
Одиночного символа Поставить перед ним один символ обратного слэша (\)
Всех специальных символов внутри цепочки символов Заключить всю цепочку символов в одинарные кавычки
Всех специальных символов внутри цепочки символов, кроме $, ` и обратного слэша Заключить всю цепочку символов в двойные кавычки

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

grep ZOSRV\ Neutrino chapter1.html
grep 'ZOSRV Neutrino' chapter1.html
grep "ZOSRV Neutrino" chapter1.html

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

grep ZOSRV Neutrino chapter1.html

будет выполнять поиск цепочки символов "ZOSRV" в файлах Neutrino и chapter1.html. Сложные команды могут потребовать применения вложенных кавычек. Например:

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

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

Более подробные сведения см. в разделе "Заключение в кавычки" в документации по ksh.

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

Командный интерпретатор позволяет повторно вызывать ранее введенные команды. Для перемещения по истории сохраненных команд (history buffer) используйте клавиши <↑> и <↓>. Вы можете отредактировать команду, если необходимо, и затем нажать клавишу <Enter>, чтобы выполнить ее снова. Командный интерпретатор также имеет встроенную команду fc, которая предназначена для отображения и редактирования ранее введенных команд, а также псевдоним r команды fc, который служит для повторного выполнения ранее использованной команды. Например:

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

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

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

Утилиты

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

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

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

echo $PATH


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

Для получения сведений о задании переменной PATH см. Типы терминалов. Чтобы определить, какую именно версию команды выберет командный интерпретатор, используйте команду 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 (встроенная команда ksh) отображает информацию о том, как заданная команда или псевдоним интерпретируется командным интерпретатором. Например, если существует псевдоним для ls, то результат может быть, например, следующим:

$ whence ls
'ls -F'

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

Команда сопровождается синтаксическим описанием, поясняющем, как пользоваться командой. Для большинства команд это описание состоит из следующих частей:

имя_команды (command_name)
имя команды, которая должна быть выполнена. Это может быть имя выполняемой программы (например, утилиты) или имя команды, встроенной в командный интерпретатор;
ключи (options)
с помощью ключей можно изменять условия выполнения команды. Ключи обычно состоят из буквенно-цифрового символа, перед которым стоит дефис (например, -c). Некоторые ключи должны иметь аргумент (например, -n число). Если вы применяете ключ, который предполагает аргумент, то должны его указать;
операнды (operands)
это данные, которые требуются для выполнения команды (например, имя файла). Если команда допускает множество операндов, они обычно обрабатываются в порядке их перечисления. В отличие от ключей, операнды не должны начинаться с дефиса (например, more my_file).

Для описания синтаксиса команд используются некоторые специальные символы:

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

more myfile1 myfile2

[]
элемент, заключенный в квадратные скобки, является необязательным;
|
этот символ используется для разделения альтернативных элементов (например, -a|-f).

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

more [-ceisu] [-n number] [-p pattern] [-/ pattern] [-t tag] [-x tabstop] [file...]

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

ls -l -- -my_file

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

Подробные описания утилит можно найти в данной документации. Однако, если вам нужно получить краткую подсказку по синтаксису и допустимым ключам команды, вы можете воспользоваться командой use (аналогична команде man в UNIX и Linux), чтобы получить справочную информацию в интерактивном режиме (online usage message) по использованию утилиты. Например, для получения сведений о команде more введите:

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

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

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

on -n /net/dasher date
где /net/dasher означает имя узла, на котором команда должна быть выполнена. Когда вы вызываете команду на другом узле, ее стандартные потоки ввода, вывода и ошибок отображаются на экране консоли (или терминале), за исключением случаев, когда эти потоки явно перенаправлены на другое устройство. Для выполнения команды на tty-устройстве следует задать ключ -t и имя терминала. Например:
on -t con3 login root
Более подробные сведения см. в описании команды on.

Приоритеты

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

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

В таблице приведен список наиболее часто используемых команд ЗОСРВ «Нейтрино».

Действие Команда
Определить текущий каталог 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 создания новой раскладки. Некоторые схемы клавиатур (например, для французского и немецкого языков) включают клавиши для добавления знаков акцента, которые не создают отдельных символов. В ЗОСРВ «Нейтрино» такие клавиши считаются "слепыми". При нажатии "слепой" клавиши, после которого следует нажатие другой клавиши, происходит модификация, в результате которой второй символ получает знак акцента. Например, для ввода символа Ü во французской схеме клавиатуры следует нажать <Shift> + [ и затем <Shift> + U. Кроме того, сложные символы можно создавать путем нажатия и отпускания клавиши <Alt> с последующим нажатием двух клавиш или сочетания клавиш. Например, для ввода символа Ü в английской (США) схеме клавиатуры вы можете нажать и отпустить клавишу <Alt> и затем применить комбинацию клавиш <Shift> + <двойная кавычка> и после него – <Shift> + U.

ЗОСРВ «Нейтрино» для пользователей MS-DOS

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

Команды DOS и их эквиваленты в ЗОСРВ «Нейтрино»

В таблице ниже приведены некоторые основные команды MS-DOS и их эквиваленты в ЗОСРВ «Нейтрино».

Команда DOS Команда ЗОСРВ «Нейтрино»
attrib ls -l, chmod и ls -a
Командные файлы Сценарии командного интерпретатора (см. Написание сценариев командного интерпретатора или документацию по командному интерпретатору ksh)
cacls ls -l
call сценарий ksh сценарий
Если сценарий начинается с #!/bin/sh, его можно вызывать как обычную программу; например, сценарий (без добавления префикса sh или ksh)
chdir cd (встроенная команда интерпретатора ksh)
chkdsk Для дисковой файловой системы QNX4 (Нейтрино) используется команда 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 См. Устранение неполадок
fc cmp или diff
find grep -i
findstr grep
format fdformat и dinit
ftype Ассоциирование типов файлов выполняется программой pfm. См. Просмотр файлов с помощью администратора файлов
getmac См. ifconfig, netstat; а также ls /dev/io-net
help use
logman tracelogger
lpq lprq
lpr lpr
md mkdir
mode stty
move mv
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

Следующие команды ЗОСРВ «Нейтрино» являются эквивалентом команды DOS diskcomp:

  1. скопировать исходный диск в файл:
    cp /dev/fd0 referencecopy
  2. сравнить другие диски с созданной копией файла:
    cmp referencecopy /dev/fd0
  3. скопировать эталонный файл на новую дискету:
    cp referencecopy /dev/fd0

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

В таблице ниже приведены некоторые встроенные локальные переменные командного интерпретатора MS-DOS и их эквиваленты (переменные окружения и команды) в ЗОСРВ «Нейтрино».

Переменные командного интерпретатора DOS Эквивалент в ЗОСРВ «Нейтрино»
CD% Переменная окружения PWD, pwd
COMPUTERNAME% Переменная окружения HOSTNAME
COMSPEC% Переменная окружения SHELL
DATE% Запуск утилиты date: $(date)
ERRORLEVEL% $? (см. ksh)
HOMEDRIVE% В ЗОСРВ «Нейтрино» обозначения дисков не используются. См. HOMEPATH%
HOMEPATH% Переменная окружения HOME
OS% Запуск утилиты uname: $(uname)
PATH% Переменная окружения PATH
PATHEXT% В ЗОСРВ «Нейтрино» расширения файлов рассматриваются как часть имени файла. Разрешение на выполнение определяется правами доступа к файлу. См. chmod
PROCESSOR_ARCHITECTURE% Запуск утилиты uname: $(uname -p)
PROCESSOR_IDENTIFIER% Запуск утилиты sin: $(sin info)
PROMPT% Переменные окружения PS1, PS2 (см. ksh)
RANDOM% Переменная окружения RANDOM
SYSTEMDRIVE% В ЗОСРВ «Нейтрино» обозначения дисков не используются. Корнем системы всегда является /
SYSTEMROOT% Корнем системы всегда является /
TEMP% Переменная окружения TMPDIR
TMP% Переменная окружения TMPDIR
TIME% Запуск утилиты date: $(date)
USERNAME% Переменная окружения LOGNAME

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

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

почему я не могу запустить мою программу с именем test?
Командный интерпретатор имеет встроенную команду с именем test. При анализе командной строки командный интерпретатор в первую очередь производит поиск по встроенным командам, а затем среди исполняемых файлов. Переименуйте вашу программу либо укажите путь к ней (например, ./test).
почему при попытке запуска моей программы я получаю сообщение "not found" ("не найдено")?
Возможно, каталог, где находится ваша программа, не указан в переменной окружения PATH. Например, по соображениям безопасности в ней не указан текущий каталог. Для решения проблемы включите каталог с вашей программой в переменную окружения PATH либо укажите путь к команде (например, ./my_program). Более подробные сведения см. в подразделе "Утилиты" ранее в этой статье.
почему пользователь root имеет иной набор доступных команд?
Привилегированный пользователь (root) имеет другое значение переменной окружения PATH, которое включает в себя такие каталоги, как /sbin и /usr/sbin. Эти каталоги содержат исполняемые модули и администраторы, которые, как правило, может использовать только root. Если вы вошли в систему не как привилегированный пользователь, вы, тем не менее, можете запускать некоторые утилиты из каталога /sbin, если имеете соответствующие разрешения, но при этом вы должны либо указать полный путь (например, /sbin/logger), либо добавить каталог в переменную окружения PATH.
когда я просматриваю список файлов в каталоге, то не вижу файлы, имена которых начинаются с точки.
Файлы, имена которых начинаются с точки (.), называются скрытыми файлами (hidden files). Для того чтобы они появились в списке, используйте команду ls с ключом -a.
почему я получаю сообщение "No such file or directory" ("Не найден файл или каталог с таким именем")?
Командный интерпретатор не может найти заданный файл или каталог. В этом случае попробуйте проверить следующее:
как работать с файлом, имя которого начинается с дефиса?
В ЗОСРВ «Нейтрино» дефис (-) служит для обозначения ключей (например, head -n 10 имя_файла). Если вы создаете файл, имя которого начинается с дефиса, и передаете это имя утилите в качестве аргумента, то она рассматривает это имя как один или несколько ключей. Большинство утилит распознает двойной дефис (--) как признак "конца цепочки ключей" ("end of options"), поэтому вы можете указать его перед именем вашего файла:

head -- -my_file

почему я получаю сообщение "Unrecognized TERM type" ("Неизвестный тип терминала") при запуске программ (например, vi)?
Либо переменная окружения TERM задана некорректно, либо нет записи о данном типе терминала в базе данных терминалов /usr/lib/terminfo (или, возможно, /etc/termcap). См. подраздел "Поддержка терминалов" ранее в этой статье.




Предыдущий раздел: перейти