Драйвер устройства символьного ввода/вывода распознает нажатия таких клавиш, как <Backspace> и <Ctrl>+<C>.
Командный интерпретатор (command interpreter или shell) разбивает командную строку на лексемы (token), интерпретирует их и затем запускает те или иные утилиты.
Утилиты анализируют командную строку, полученную от командного интерпретатора, и выполняют соответствующие действия.
драйвер функционирует в режиме "сырых", а не редактируемых входных данных;
приложение устанавливает особые условия взаимодействия с пользователем (например, специальные правила обработки нажатий клавиш);
терминал имеет ограниченные возможности клавиатуры.
Таблица 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> |
Таблица 4.2 |
|
Действие |
Комбинация клавиш |
Перейти на следующую активную консоль |
<Ctrl>+<Alt>+<Enter> или <Ctrl>+<Alt>+<+> |
Перейти на предыдущую активную консоль |
<Ctrl>+<Alt>+<–> |
Разбивает командную строку на лексемы, разделенные пробелами или специальными символами.
Из введенных слов командный интерпретатор формирует два вида команд:
простые команды (simple commands) — как правило, это программы, запускаемые пользователем (например, less my_file);
составные команды (compound commands) — зарезервированные слова, конструкции группировки (grouping constructs) и описания функций.
Обрабатывает псевдонимы (aliases) рекурсивно.
Выполняет все необходимые подстановки (substitutions), в том числе для параметров, команд и имен файлов.
Производит необходимые перенаправления потоков.
Остальные команды выполняются по следующим приоритетам: специальные встроенные команды (special builtins), функции, регулярные встроенные команды (regular builtins), исполняемые модули.
Таблица 4.3 |
|
Действие |
Комбинация клавиш |
Перейти в начало строки |
<Ctrl>+<A> |
Перейти в конец строки |
<Ctrl>+<E> |
Перейти в конец текущего слова |
<Esc> <F> |
Перейти в начало текущего слова |
<Esc> <B> |
Удалить символ в месте расположения курсора |
<Ctrl>+<D> |
Удалить символ слева от курсора |
<Ctrl>+<H> |
Удалить символы от места расположения курсора до конца текущего слова |
<Esc> <D> |
Удалить символы от места расположения курсора до конца строки |
<Ctrl>+<K> |
Вставить текст |
<Ctrl>+<Y> |
bind 'ˆI'=complete
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
Кроме того, для объединения нескольких команд в одной
командной строке можно использовать неименованные
программные каналы (|) — см. в подразд. "Неименованные
программные каналы" далее в этом разделе.
alias ls='ls –F'
function my_cd
{
cd $1
pwd
}
Псевдонимы можно добавлять в файл настроек (более подробную информацию см. в подразд. "Файл запуска ksh" раздела 9).каталоги (символ "тильда");
параметры;
команды;
арифметические выражения;
фигурные скобки;
групповые символы для имен файлов.
echo $PATH
$(команда)
`команда`
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.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 |
производит чтение из стандартного потока ввода (stdin, или файлового дескриптора 0), обычно назначенного клавиатуре;
производит запись в стандартный поток вывода (stdout, или файлового дескриптора 1), обычно назначенный дисплею;
производит запись сообщений об ошибках в стандартный поток ошибок (stderr, или файлового дескриптора 2), обычно также назначенный дисплею.
Таблица 4.7 |
|
Если необходимо |
Используйте символ |
Прочитать из файла или с другого устройства (перенаправление ввода) |
< |
Записать stdout в файл (перенаправление вывода) |
> |
Дописать stdout в конец файла |
>> |
ls > filelist
my_command 2> /dev/null
grep 'some
term' *.html | sort –u | wc -l
| $
( " ) & ` ; \ ' табуляция новая_строка пробел
* ? [ # ˜ = %
Таблица 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
find -name
"*.html" | xargs grep -l '"QNX.*Neutrino"' | less
Если цепочку символов *.html не заключить в кавычки, то командный интерпретатор истолкует символ * и передаст команде find список файлов с расширением html в текущем каталоге. Если цепочку символов *.html заключить в кавычки, то командный интерпретатор передаст ее команде find "как есть" для поиска файла с заданным расширением в данном каталоге и всех его подкаталогах.
Аналогично если не заключить в кавычки цепочку символов QNX.*Neutrino, то командный интерпретатор сгенерирует список файлов, имена которых соответствуют заданному шаблону. При использовании только двойных кавычек ("QNX.*Neutrino") происходит однократный вызов команды grep. Однако приведенный пример, кроме того, усложнен командой xargs.
Команда xargs рассматривает командную строку как аргумент, а командный интерпретатор интерпретирует каждый элемент этой командной строки, передаваемый команде xargs. Если необходимо, чтобы командный интерпретатор не интерпретировал цепочку символов QNX.*Neutrino, следует заключить эту цепочку символов (используемую командой grep в качестве шаблона) во вложенные кавычки:
xargs grep -l '"QNX.*Neutrino"'
Кроме того, кавычки показывают, когда должна выполняться команда less. В данном случае командный интерпретатор передает команде less вывод всех вызовов команды xargs. Наоборот, команда:
find -name "*.html" | xargs 'grep -l "QNX.*Neutrino" | less'
grep -l "QNX.*Neutrino" | less
r последовательность_символов
echo $PATH
/bin/ls
$ which –laf ls
-rwxrwxr–x 1 root root 19272 May 03 2002 /bin/ls
$ which cd
which: no cd in /bin:/usr/bin:/usr/photon/bin:/opt/bin
$ whence ls
'ls –F'
имя_команды (command_name) — имя команды, которая должна быть выполнена. Это может быть имя выполняемой программы (например, утилиты) или имя команды, встроенной в командный интерпретатор;
ключи (options) — с помощью ключей можно изменять условия выполнения команды. Ключи обычно состоят из буквенно-цифрового символа, перед которым стоит дефис (например, -c). Некоторые ключи должны иметь аргумент (например, -n число). Если вы применяете ключ, который предполагает аргумент, то должны его указать;
операнды (operands) — это данные, которые требуются для выполнения команды (например, имя файла). Если команда допускает множество операндов, они обычно обрабатываются в порядке их перечисления. В отличие от ключей, операнды не должны начинаться с дефиса (например, more my_file).
… – этот символ означает, что можно задать один или несколько экземпляров предшествующего элемента. Например, в соответствии с синтаксисом утилиты more, многоточие после операнда file указывает на то, что для этой команды допустимо задать более одного файла, например:
more myfile1 myfile2
[] – элемент, заключенный в квадратные скобки, является необязательным;
| – этот символ используется для разделения альтернативных элементов (например, -a|-f).
more [-ceisu] [-n number] [-p pattern]
[-/ pattern] [-t tag] [-x tabstop] [file...]
ls -l -- -my_file
use more
on -n /net/dasher date
где /net/dasher означает имя
узла, на котором команда должна быть выполнена.
on -t con3 login root
Более подробные сведения см. в описании команды on в «Описании
программы. Часть 1. Справочник по утилитам»
КПДА.10964-01 13 01.
Таблица 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 имя_файла |
Таблица 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) |
|
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 |
скопировать исходный диск в файл:
cp /dev/fd0 referencecopy
сравнить другие диски с созданной копией файла:
cmp referencecopy /dev/fd0
скопировать эталонный файл на новую дискету:
cp referencecopy /dev/fd0
Таблица 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?
Почему при попытке запуска моей программы я получаю сообщение "not found" ("не найдено")?
Почему пользователь root имеет иной набор доступных команд?
Когда я просматриваю список файлов в каталоге, то не вижу файлы, имена которых начинаются с точки.
Почему я получаю сообщение "No such file or directory" ("Не найден файл или каталог с таким именем")?
Верно ли вы указали имя? В QNX Neutrino имена файлов и каталогов зависят от регистра.
Содержит ли имя пробелы или другие специальные символы? Если файл называется my file и смысл пробела не изменен, то командный интерпретатор учитывает этот пробел при разбиении командной строки на лексемы, поэтому производится поиск не одного, а двух файлов с именами my и file.
Как работать с файлом, имя которого начинается с дефиса?
head -- -my_file
Почему я получаю сообщение "Unrecognized TERM type" ("Неизвестный тип терминала") при запуске программ (например, vi)?