CRYPT(3X)
НАЗВАНИЕ
crypt - функции шифровки пароля и файла
СИНТАКСИС
cc [flag ...] file ... -lcrypt
char *crypt (key, salt)
char *key, *salt;
void setkey (key)
char *key;
void encrypt (block, flag)
char *block;
int flag;
char *des_crypt (key, salt)
char *key, *salt;
void des_setkey (key)
char *key;
void des_encrypt (block, flag)
char *block;
int flag;
int run_setkey (p,key)
int p[2];
char *key;
int run_crypt (offset, buffer, count, p)
long offset;
char *buffer;
unsigned int count;
int p[2];
int crypt_close (p)
int p[2];
ОПИСАНИЕ
des_crypt - это функция шифровки пароля. Она основана
на алгоритме шифровки перемешиванием, назначение которого, помимо всего прочего - затруднить использование
аппаратных средств контекстного поиска.
Аргумент key представляет собой пароль, введенный пользователем. Salt - это двухсимвольная строка, выбираемая
из множества [a-zA-Z0-9./]. Она настраивает алгоритм
перемешивания на один из 4096 вариантов, после чего пароль используется как ключ для циклической шифровки некоторой строковой константы. Возвращаемое значение указывает на зашифрованный пароль. Его первые два символа
равны salt.
Функции des_setkey и des_encrypt обеспечивают доступ
(на довольно примитивном уровне) к алгоритму перемешивания. Аргумент функции des_setkey - это символьный
массив длиной 64, содержащий только символы с числовым
значением 0 и 1 и изображающий битовую строку. В каждой
из восьми груп по 8 символов-"битов" наименее значащий
"бит" игнорируется. Полученный 56-битовый ключ передается компьютеру и используется в алгоритме перемешивания для шифровки строки block в функции des_encrypt.
Аргумент функции des_encrypt - символьный массив длиной
64, содержащий только символы с числовым значением 0 и
1. Аргумент преобразуется на месте в массив того же вида, изображающий биты аргумента после применения алгоритма перемешивания с ключом, установленным в функции
des_setkey. Если flag равен 0, аргумент зашифровывается, в противном случае расшифровывается.
Следует заметить, что международная версия crypt(3X) не
обеспечивает расшифровку. Международная версия входит в
состав Утилит языка программирования С, а национальная
версия - в состав Утилит управления защитой. Попытка
использовать международную версию crypt для расшифровки
вызовет сообщение об ошибке.
Функции crypt, setkey и encrypt являются "фасадными".
Они вызывают функции des_crypt,des_setkey и des_encrypt
соответственно.
Программы run_setkey и run_crypt разработаны для приложений, использующих криптографические средства [таких,
как ed(1) и vi(1)], и требующих совместимости с утилитой пользователя crypt(1). Run_setkey образует два канала p[0] и p[1], соединяющих с crypt(1), при этом аргумент key используется как пароль. Run_crypt преобразует текст из открытого в зашифрованный (и наоборот),
обращаясь к crypt(1) через каналы p[0] и p[1]. Аргумент
offset указывает позицию относительно начала файла, с
которой начинается текст, заданный аргументом buffer;
аргумент count указывает длину текста. По завершении
шифровки используется функция crypt_close, закрывающая
каналы.
Run_setkey возвращает -1, если соединение с crypt(1) не
установлено (это возможно в международной версии UNIX,
где утилита crypt(1) недоступна). Если функции передан
пустой ключ, возвращается 0, в остальных случаях возвращается 1. Run_crypt возвращает -1 при неуспешном чтении или записи по каналу, образованному run_setkey, в
противном случае возвращается 0.
ДИАГНОСТИКА
В международной версии crypt(3X) недопустимо значение аргумента flag функции des_encrypt, равное 1. Оно
вызывает сообщение об ошибке.
СМ. ТАКЖЕ
getpass(3C), passwd(4), crypt(3C).
crypt(1), login(1), passwd(1) в Руководстве пользователя.
ПРЕДОСТЕРЕЖЕНИЯ
Возвращаемое значение функции crypt указывает на статические данные, изменяемые при каждом вызове.
ежду данными.
Символ ~ в начале имени файла используется для ссылки
на основной каталог пользователя. Если указан только
этот символ, то есть ~, он заменяется на имя основного
каталога пользователя, хранящееся в переменной home.
Если после символа ~ указано имя, состоящее из букв,
цифр и символов -, csh ищет пользователя с указанным
именем и подставляет его основной каталог; так, ~guest
будет расширено до /usr/guest, а ~guest/chmach до
/usr/guest/chmach. Если за символом ~ идет символ, отличный от буквы и от /, или ~ появляется не в начале
слова, этот символ остается неизменным.
Выражение a{b,c,d}e является сокращением для abe ace
ade. При подстановке сохраняется порядок слева направо,
результаты поиска имен файлов сортируются отдельно на
нижнем уровне. Эта конструкция может быть вложенной.
Так, ~guest/s1/{oldls,ls}.c будет расширено до /usr/
guest/s1/oldls.c /usr/guest/s1/ls.c (даже если эти файлы и не существуют), если основной каталог пользователя
guest есть /usr/guest. Аналогично, ../{memo,*box} будет
расширено до ../memo ../box ../mbox (обратите внимание,
что memo не было отсортировано вместе с результатами
сопоставления с шаблоном *box). Как частный случай,
конструкции {, } и { } остаются неизменными.
Ввод/вывод
Стандартый ввод и вывод команды может быть переназначен
следующим образом:
- < имя
-
Открыть файл с данным именем (к имени вначале применяются подстановка переменных, подстановка результатов выполнения команд и генерация имен файлов) как стандартный ввод.
- << слово
-
Читать с ввода csh до тех пор, пока не встретится
строка, совпадающая со словом. К слову не применяются подстановка переменных, подстановка результатов выполнения команд и генерация имен файлов,
каждая считываемая строка сравнивается со словом
перед выполнением подстановок всех типов. Если в
слове не встречаются символы \, ", ', `, то в промежуточных строках производятся подстановки переменных и подстановки результатов выполнения команд, символ \ при этом экранирует символы $, ` и
\. В подставляемых результатах выполнения команд
сохраняются все пробелы, табуляции и переводы
строк, а последний перевод строки удаляется. Получившийся текст помещается в некий временный файл,
который передается команде в качестве стандартного
ввода.
- > имя
>! имя
>& имя
>!& имя -
Имя файла, который будет использоваться в качестве
стандартного вывода. Если файл не существует, он
создается, если существует, то очищается, старое
содержимое при этом теряется.
Если определена переменная noclobber, то файл обязан не существовать или являться байториентированным устройством (например, терминалом или
/dev/null), иначе фиксируется ошибка. Такое соглашение предохраняет от случайного разрушения файлов. В этом случая использование ! служит для подавления контроля.
Использование & приводит к назначению на указанный
файл не только стандартного вывода, но и стандартного протокола. Имя подвергается тем же подстановкам, что и в случае < имя.
- >> имя
>>! имя
>>& имя
>>!& имя -
Аналогично >, но с двумя отличиями: информация помещается в конец файла и, если определена переменная noclobber, то в случае отсутствия файла фиксируется ошибка, если только не использовалась форма
записи с !.
Команде передается окружение, которое было в момент запуска csh, модифицированное переназначениями ввода/вывода и предыдущими командами конвейера. Так, команды,
читаемые из файла, по умолчанию не имеют доступа к этому файлу, в качестве стандартного ввода им передается
стандартный ввод csh. Для использования данных из того
же файла необходимо использовать <<. Этот механизм позволяет использовать в конвейерах командные файлы csh и
дает возможность csh читать со стандартного ввода с помощью блочного ввода/вывода. Обратите внимание, что
стандартный ввод команды, выполняемой асинхронно, не
назначается на /dev/null, а остается тем же, что и
стандартный ввод csh. Если это терминал, то при попытке
чтения со стандартного ввода процесс будет заблокирован
и пользователю будет выдано сообщение (см. выше Сообщения о состоянии процесса).
Стандартный протокол может быть направлен туда же, куда
и стандартный вывод, с помощью |& вместо |.
Выражения
Некоторые из встроенных команд (которые будут описаны
ниже) понимают выражения, операции в которых сходны с
имеющимися в языке C, с теми же приоритетами. Выражения
могут быть использованы в командах @, exit, if и while.
Имеются следующие операции, перечисленные в порядке
возрастания приоритетов:
|| && | ^ & == != =~ !~ <= >= < >
<< >> + - * / % ! ~ ( )
Укажем группы операций, имеющих одинаковый приоритет:
== != =~ !~
<= >= < >
<< >>
+ * / %
Операции ==, !=, =~ и !~ сравнивают свои аргументы как
цепочки символов; все остальные оперируют с числами.
Операции =~ и !~ похожи на != и ==, но правый операнд в
них является шаблоном (содержащим, например *, ?,
[...]) с которым сопоставляется левый операнд. Это
уменьшает необходимость в использовании оператора
switch в командных файлах, когда на самом деле требуется сопоставление с шаблоном.
Цепочки, начинающиеся с 0, рассматриваются, как восьмеричные числа. Пустые и пропущенные аргументы рассматриваются, как 0. Результатами выражений являются цепочки
символов, представляющие десятичные числа. Важно отметить, что никакие два компонента выражения не могут появиться в одном слове; во всех случаях, кроме тех, когда они граничат с символами &, |, <, >, (, ) они должны
быть окружены пробелами.
Операндами в выражениях могут выступать также результаты завершения команд, взятых в скобки { и }, а также
запросы информации о файлах в виде -отношение файл, где
отношение может быть следующим:
r | Файл доступен на чтение.
| w | Файл доступен на запись.
| x | Файл доступен на выполнение.
| e | Файл существует.
| o | Пользователь является владельцем файла.
| z | Файл имеет нулевой размер.
| f | Файл является обычным.
| d | Файл является каталогом.
|
К указанному имени применяется подстановка результатов
выполнения команд и генерация имен файлов, затем проверяется, верно ли указанное отношение для реального
пользователя. Если файл не существует или недоступен,
все запросы возвращают ложь (0). Результатом завершения
команды будет истина (1), если команда завершилась с
кодом 0, иначе возвращается ложь. Если требуется более
детальная информация о завершении, команду следует выполнять вне выражения и проверять код завершения.
Передачи управления
Csh содержит набор команд, которые могут быть использованы для передач управления внутри командных файлов, их
можно с успехом использовать и при вводе с терминала,
правда при этом возникают некоторые ограничения. Команды передачи управления требуют от csh повторного чтения
или пропуска файла ввода поэтому, из соображений реализации, имеются некоторые ограничения на расположение
ряда подобных команд.
Команды foreach, switch и while, а также форма
if-then-else команды if требуют, чтобы главное слово
находилось на отдельной строке, как показано ниже.
Если ввод csh не является адресуемым, csh при появлении
цикла буферизует ввод и для реализации цикла адресуется
к этому внутреннему буферу. (Пока позволяет размер
внутреннего буфера, можно выполнять передачи управления
назад и в неадресуемом вводе.)
Встроенные команды
Встроенные команды выполняются в рамках csh. Если
встроенная команда является не последним компонентом
конвейера, она выполняется в порожденном процессе.
- alias
alias кличка
alias кличка список_слов -
Первая форма выводит все клички и соответствующие
им списки слов. Вторая печатает список слов, имеющий указанную кличку. Последняя форма присваивает
кличку списку_слов; список_слов при этом подвергается подстановке результатов выполнения команд и
генерации имен файлов. В качестве кличек нельзя
использовать слова alias и unalias.
- alloc [аргумент]
-
Показывает размер отведенной динамической памяти,
как занятой, так и свободной. Если указан произвольный аргумент, показывается количество занятых
и свободных блоков различных размеров. Первый размер блока равен 8, каждый следующий равен удвоенному предыдущему. Вывод этой команды может отличаться от описанного в тех системах, в которых
применена схема управления памятью, отличная от
применяемой на компьютерах VAX.
- break
-
Приводит к передаче управления на конец самого
внутреннего цикла foreach или while. Оставшиеся на
текущей строке команды тем не менее выполняются.
Таким образом, написание нескольких команд break
на одной строке может быть использовано для выхода
сразу из нескольких циклов.
- breaksw
-
Приводит к выходу из переключателя (switch), передает управление за endsw.
- case метка:
-
Метка условия в операторе switch, описанном ниже.
- cd
cd имя
chdir
chdir имя -
Изменяет текущий каталог пользователя на указанный. Если аргумент не указан, устанавливается основной каталог пользователя. Если имя в текущем
каталоге не найдено (и не начинается с /, ./ или
../), то поиск имени производится во всех компонентах значения переменной cdpath. Наконец, если и
этот поиск безуспешен, а имя является именем переменной csh, значение которой начинается с /, делается попытка установить текущий каталог, равный
этому значению.
- continue
-
Приводит к передаче управления на начало самого
внутреннего цикла foreach или while. Оставшиеся на
текущей строке команды тем не менее выполняются.
- default:
-
Помечает случай по умолчанию в операторе switch.
Он должен находиться после всех меток условия.
- dirs Печатает стек каталогов; вершина стека расположена
слева, первый каталог в стеке является текущим.
- else
end
endif
endsw -
См. ниже описания операторов foreach, if, switch,
и while.
- eval аргумент ...
-
[Аналогично sh(1).] Аргументы читаются, как если
бы они поступали со стандартного ввода, и рассматриваются как команды, которые выполняются в текущем контексте. Обычно используется для выполнения
команд, сгенерированных как результаты подстановки
переменных и результатов выполнения команд, так
как грамматический разбор выполняется до этих
подстановок. См. также test(1).
- exec команда
Указанная команда подменяет текущий csh.
- exit
exit(выражение) -
Csh завершается либо с кодом, хранящемся в переменной status (первая форма) либо с кодом, равным
значению выражения (вторая форма).
- foreach имя (список_слов)
...
end -
Переменной имя последовательно присваиваются все
слова из списка_слов и каждый раз выполняется последовательность команд между foreach и end. (И
foreach, и end должны быть единственными командами
на своих строках.) Встроенная команда continue может быть использована для принудительного перехода
к следующей итерации, а встроенная команда break
- для принудительного завершения цикла. Если
foreach вводится с терминала, все тело цикла сначала считывается с приглашением ?, а затем начинается выполнение цикла.
- glob список_слов
-
Аналогично echo(1), но управляющие последовательности, заданные как \0n, не интерпретируются, и
слова при выводе разделяются пустыми символами (то
есть символами с нулевым кодом), что удобно для
программ, которые хотят использовать csh для генерации имен файлов из списка слов.
- goto слово
-
Указанное слово подвергается подстановке результатов выполнения команд и генерации имен файлов.
Формируется цепочка символов метка. Csh ищет в
предыдущем вводе строку формата метка:, возможно,
начинающуюся с пробелов и табуляций. Выполнение
продолжается после найденной строки.
- history
history n
history -r n
history -h n -
Показывает список команд из протокола; если указано n, показываются последние n команд. Опция -r
инвертирует порядок вывода команд, первыми показываются самые последние команды. Опция -h приводит
к печати команд без их номеров. Это используется,
чтобы сделать файл для команды source -h.
- if (выражение) команда
-
Если указанное выражение истинно, выполняется команда (со своими аргументами). Подстановка переменных в команду if производится рано, тогда же
происходит подстановка и в команду. Команда должна
быть простой, не допускаются ни конвейеры, ни
списки команд, ни списки команд в скобках. Обратите внимание: переназначение ввода/вывода осуществляется даже если выражение ложно, то есть команда
не выполняется.
- if (выражение) then
...
else if (выражение2) then
...
else
...
endif -
Если указанное выражение истинно, то выполняются
команды до первого else; иначе если выражение2 истинно, выполняются команды до второго else и т.д.
Допустимо любое количество пар else-if; требуется
ровно один endif. Часть else может быть опущена.
(Слова else и endif должны появляться в начале
строк; конструкция if-then должна быть одна на
строке или после else.)
- jobs
jobs -l -
Выводит активные задания; опция -l добавляет к информации идентификаторы процессов.
- kill %задание
kill -сигнал %задание ...
kill идентификатор_процесса
kill -сигнал идентификатор_процесса ...
kill -l -
Посылает сигнал завершения (15) или указанный сигнал указанным заданиям или процессам. Сигналы задаются номером или названием (как указано во включаемом файле <sys/signal.h>, только без приставки
SIG). Названия сигналов выводятся по kill -l. В
этой команде нет умолчания, то есть просто kill не
посылает сигнала текущему заданию.
- login
-
Завершить "входной" csh, заменив его на
/bin/login. Это один из способов закончить работу,
сделанный для совместимости с sh(1).
- logout
Завершить "входной" csh. Используется, если установлена переменная ignoreeof.
- notify
notify %задание ... -
Информировать пользователя асинхронно, сразу же,
как изменится состояние текущего или указанного
заданий; обычно информация выдается перед приглашением. Информация всегда выдается асинхронно, если установлена переменная notify.
- onintr
onintr onintr метка -
Управляет действиями при прерываниях. Первая форма
восстанавливает действия по умолчанию, которые
заключаются в завершении выполнения командных файлов и возврате на уровень ввода команд с терминала. Вторая форма onintr приводит к игнорированию
всех прерываний. Последняя форма приводит к выполнению команды goto метка при получении прерывания
или завершении по прерыванию порожденного процесса.
В любом случае, если csh запущен асинхронно и прерывания уже игнорируются, все формы onintr не имеют смысла и прерывания продолжают игнорироваться
как в csh, так и во всех запускаемых командах.
- popd
popd +n -
Вытолкнуть элемент из стека каталогов, перейдя к
новому каталогу. С аргументом +n удаляет n-ый элемент стека. Элементы стека нумеруются от вершины,
начиная с 0.
- pushd
pushd имя
pushd +n -
Без аргументов pushd меняет два верхних элемента
стека каталогов. Если аргумент указан, pushd изменяет текущий каталог (как cd) и помещает старый
текущий каталог (из переменной cwd) в стек каталогов. С числовым аргументом, извлекает n-ый аргумент стека каталогов, помещает его на вершину стека и устанавливает его в качестве текущего каталога. Элементы стека нумеруются от вершины, начиная
с 0.
- rehash
-
Переустановить внутреннюю хэш-таблицу содержимого
каталогов, содержащихся в переменной path. Это
требуется, если в эти каталоги добавлены новые команды после того, как был запущен csh. Команду
rehash необходимо выполнить, если Вы добавили какую-нибудь команду в свой каталог или системный
программист изменил содержимое системных каталогов.
- repeat число команда
-
Команда, к которой применимы те же ограничения,
что и в команде оператора if (см. выше), выполняется заданное число раз. Переназначение ввода/вывода осуществляется ровно один раз, включая случай, когда число равно 0.
- set
set имя
set имя=слово
set имя[индекс]=слово
set имя=(список_слов) -
Первая форма команды показывает значения всех переменных csh. Значения, размер которых более одного слова, заключаются в скобки. Вторая форма присваивает переменной пустую цепочку. Третья форма
присваивает переменной одно слово. Четвертая форма
заменяет значение указанного компонента; этот компонент обязан существовать. Последняя форма присваивает переменной список слов. Во всех случаях к
значению применяется подстановка результатов выполнения команд и генерация имен файлов.
Аргументы могут повторяться, позволяя одной командой set изменить значения нескольких переменных.
Отметим, что подстановка значений переменных производится для всех аргументов до выполнения присваиваний.
- setenv
setenv имя
setenv имя значение -
Первая форма выводит текущие значения всех переменных окружения. Последняя форма присваивает значение (цепочку символов) переменной окружения.
Вторая форма присваивает переменной окружения пустую цепочку. Наиболее часто используемые переменные окружения USER, TERM и PATH автоматически импортируются и экспортируются из csh-переменных
user, term, и path соответственно; использовать
для них setenv не нужно.
- shift
shift переменная -
Слова, составляющие значение переменной argv сдвигаются влево, удаляя argv[1]. Если значение argv
не определено или имеет в качестве значения менее
одного слова, фиксируется ошибка. Вторая форма выполняет те же действия над указанной переменной.
- source имя
source -h имя -
Csh читает команды из файла имя. Команды source
могут быть вложены, однако слишком большая вложенность может привести к исчерпанию дескрипторов
файлов в csh. Ошибка на любом уровне вложенности
прерывает сразу все команды source. Обычно вводимые по source команды не помещаются в протокол,
опция -h вызывает помещение команд в протокол без
выполнения.
- switch (цепочка)
case метка1:
...
breaksw
...
default:
...
breaksw
endsw -
Каждая метка условия сопоставляется с цепочкой, к
которой применяется подстановка результатов выполнения команд и генерация имен файлов. В метке условия могут использоваться символы *, ? и [...], к
меткам применяется подстановка значений переменных. Если ни одна из меток условий не соответствует цепочке, выполнение продолжается после метки
default. Каждая метка условия, в том числе метка
default, должна располагаться с начала строки. Команда breaksw приводит к передаче управления за
endsw. Иначе управление проходит по последующим
меткам (как в языке C). Если ни одна из меток условий не соответствует цепочке, а метка default
отсутствует, управление передается за endsw.
- umask
umask значение
-
Маска режима создания файлов выводится (первая
форма) или устанавливается (вторая форма). Маска
задается восьмеричными цифрами. Обычные значения
маски 002 (дает все права доступа группе и доступ
на чтение и выполение остальным) или 022, (дающий
все права, кроме записи, всем пользователям).
- unalias шаблон
Все клички, имена которых соответствуют указанному
шаблону, удаляются. Так, командой unalias * удаляются вообще все клички. Ситуация, когда нечего
удалять, ошибкой не считается.
- unhash
-
Запретить использование внутренней хэш-таблицы для
ускорения поиска выполняемых программ.
- unset шаблон
-
Все переменные, имена которых соответствуют указанному шаблону, удаляются. Так, командой unset *
удаляются вообще все переменные; это приводит к
очень неприятным последствиям. Ситуация, когда нечего удалять, ошибкой не считается.
- unsetenv шаблон
-
Все переменные, имена которых соответствуют указанному шаблону, удаляются из окружения. См. также
выше команду setenv.
- wait
- Ожидание завершения всех фоновых процессов. Если
csh интерактивный, то по прерыванию ожидание прекращается, а csh печатает имена и номера всех заданий.
- while (выражение)
...
end -
Пока вычисление выражения дает ненулевой результат, выполняются команды между while и end. Для
принудительного завершения цикла или перехода к
следующей итерации можно использовать команды
break и continue. И while, и end должны быть
единственными командами на своих строках. При вводе цикла с терминала происходит то же, что и в
случае цикла foreach.
- @
@ имя = выражение
@ имя[индекс] = выражение -
Первая форма печатает значения всех переменных
csh. Вторая форма присваивает переменной значение
выражения. Если выражение содержит знаки операций
<, >, & или |, то они должны обязательно оказаться
внутри скобок ( ). Третья форма заменяет значение
указанного компонента; этот компонент обязан существовать.
Как и в языке C, доступны операции *=, += и т.д.
Отделять имя от знака = пробелом не обязательно.
Пробелы, однако, обязательно должны разделять компоненты выражения, иначе они будут трактоваться
как одно слово.
Специальные постфиксные операторы ++ и -- соответственно увеличивают и уменьшают значения переменной, например @ i++.
Предопределенные переменные и переменные окружения
Следующие переменные имеют для csh специальное значение. Переменные argv, cwd, home, path, prompt, shell и
status при инициалиализации устанавливаются всегда. Переменные cwd и status изменяются автоматически, остальные - только по указанию пользователя.
Csh копирует значение переменной окружения USER в свою
переменную user, TERM - в term и HOME - в home, при изменении значения этих переменных csh производится обратное копирование. То же происходит с переменной окружения PATH; не надо все время заботиться о присваивании
этих переменных, достаточно их определить в файле
.cshrc; порожденные процессы импортируют значение path
из окружения и реэкспортируют его в случае изменения.
Итак, опишем значения специальных переменных csh.
argv - Значение этой переменной устанавливается равным
значению аргументов запуска csh. Именно из этой
переменной подставляются позиционные параметры,
то есть $1 заменяется на $argv[1] и т.д.
- cdpath
-
Список каталогов, в которых производится поиск
подкаталогов командой chdir.
- cwd
- Полное маршрутное имя текущего каталога.
- echo
- Устанавливается, если при вызове csh указана опция
-x. Вызывает выдачу каждой команды перед выполнением. Для невстроенных команд все подстановки производятся перед выдачей. Встроенные команды выдаются перед применением подстановок результатов выполнения команд и генерацией имен файлов, так как эти подстановки проводятся затем избирательно.
- histchars
-
Этой переменной можно присвоить цепочку из двух
символов, которые задают подстановки из протокола.
Первый символ замещает используемый по умолчанию
символ !. Второй символ замещает символ ^ в быстрых подстановках.
- history
-
Может быть задано числовое значение, управляющее
размером протокола. Слишком большое значение может
привести к переполнению памяти. Последняя выполненная команда всегда сохраняется в протоколе.
- home
- Основной каталог пользователя, инициализируемый из
окружения. Символ ~ при генерации имен файлов ссылается на эту переменную.
- ignoreeof
-
Если значение этой переменной установлено, то csh
игнорирует конец файла для вводных устройств-терминалов. Это предохраняет от случайного завершения
csh с помощью CTRL+D.
- mail
- Имена файлов, в которых csh ищет письма. Поиск писем производится с некоторым временным интервалом
перед выдачей приглашения после завершения команд.
Если найден файл, имеющий время доступа меньшее
или равное времени модификации, выдается сообщение
You have new mail.
Если первое слово значения переменной mail является числом, оно задает интервал опроса писем, в секундах. Значение по умолчанию равно 10 минутам.
Если указано несколько файлов для поиска, сообщение будет выглядеть, как New mail in имя_файла,
если письмо обнаружено в файле имя_файла.
- noclobber
-
Как уже упоминалось в разделе "Ввод/вывод", на переназначение вывода накладываются ограничения, дающие гарантию, что файлы не будут случайно разрушены и что >> ссылаются на существующие файлы.
- notify
-
Если эта переменная установлена, csh асинхронно
информирует о завершениях заданий. По умолчанию
информация выдается перед приглашением.
- path
- Каждое слово переменной path задает каталог, в котором ищутся команды для выполнения. Пустое слово
означает текущий каталог. Если переменная path не
определена, все маршрутные имена должны быть полными. Обычное значение для переменной path - это
., /bin и /usr/bin, но в разных системах могут
быть разные соглашения. Для суперпользователя список поиска по умолчанию - /etc, /bin и /usr/bin.
Если при запуске csh не указаны опции -c и -t, содержимое каталогов из переменной path хешируется
после чтения файла .cshrc и при каждом изменении
переменной path. Если в указанные каталоги добавляются новые команды, требуется выполнить rehash,
иначе команды могут быть не найдены.
- prompt
-
Цепочка символов (приглашение), которая выводится
перед каждым чтением команд с терминального ввода.
Если в цепочке появляется символ !, он будет заменен на текущий номер команды (если он не экранирован предшествующим \). Значения по умолчанию: "% "
для обычного пользователя и "# " для суперпользователя.
- savehist
-
Задаваемое числовое значение управляет количеством
элементов протокола, которые сохраняются в файле
~/.history, когда пользователь выходит из системы.
Все команды, на которые были ссылки из этих команд, также сохраняются. При запуске csh помещает
файл ~/.history в протокол (аналогично команде
source), позволяя сохранять протокол между сеансами. Слишком большие значения переменной savehist
замедляют запуск csh.
- shell
-
Файл, в котором находится shell. Используется в
порожденных процессах для интерпретации файлов, у
которых установлен бит выполнения, но которые являются для системы неисполняемыми. (См. ниже описание выполнения внешних команд.) Инициализируется
в (зависящий от системы) файл, хранящий csh.
- status
-
Код завершения последней команды. Если она завершилась аварийно, к коду добавляется 128. Встроенные команды при аварийном завершении возвращают 1,
при нормальном - 0.
- verbose
-
Устанавливается опцией -v при запуске csh; вызывает печать каждой команды после завершения подстановок из протокола.
Выполнение внешних команд
Если сгенерированная для выполнения команда оказывается
не внутренней, csh пытается выполнить ее с помощью
execve(2). Каждое слово переменной path обозначает каталог, из которого csh пытается выполнить команду. Если
при запуске не указаны опции -c и -t, csh хеширует содержимое каталогов из переменной path, поэтому попытка
выполнения делается только для имеющихся команд, что
сильно ускоряет поиск выполняемой команды, если список
поиска очень длинный. Если этот механизм выключен (с
помощью unhash), или если при запуске не указаны опции
-c или -t, а также во всех случаях для каждой компоненты переменной path, которая не начинается с символа /,
csh конкатенирует компоненту path с именем команды,
формируя маршрутное имя файла, и пытается этот файл выполнить.
Команды, заключенные в скобки, всегда выполняются в порожденном процессе. Так, (cd; pwd); pwd печатает основной каталог пользователя, оставляя текущий каталог неизменным и печатая его вслед за основным, а cd; pwd делает текущим основной каталог пользователя. Команды,
заключенные в скобки, обычно используются, чтобы предохранить текущий csh от изменения текущего каталога
командами chdir.
Если к файлу есть права доступа на выполнение, но он не
является двоичным выполняемым файлом, то предполагается, что это командный файл и для его чтения запускается
новый csh.
Если слово shell является кличкой, то соответствующие
ей слова при формировании команды будут подставлены перед списком аргументов. Первое слово при этом должно
быть полным маршрутным именем командного интерпретатора
(например, $shell). Обратите внимание, что это специальный случай подстановки клички, который выполняется
очень поздно и позволяет только подставить слова перед
списком аргументов без всякой модификации.
Обработка аргументов
Если аргумент 0 csh равен -, то csh считается "входным". Опции интерпретируются следующим образом:
-b | Вызывает прерывание процесса обработки опций, оставшиеся аргументы не будут обрабатываться, как
опции. Используется для передачи опций командному
файлу, без опасения, что их обработает запускаемый
csh.
|
---|
-c | Команды читаются из (одного) файла, имя которого
следует за -c и обязано присутствовать. Все остальные аргументы помещаются в переменную argv.
|
---|
-e | Csh завершается, если хотя бы одна из команд завершается аварийно или выдает ненулевой код завершения.
|
---|
-f | Более быстрый запуск csh, без поиска и выполнения
файла .cshrc из основного каталога пользователя.
|
---|
-i | Csh является интерактивным и выдает на верхнем
уровне приглашения, даже если стандартный ввод не
является терминалом. Без этой опции csh является
интерактивным, только если стандартный ввод и
стандартный вывод назначены на терминал.
|
---|
-n | Происходит грамматический разбор команд, без выполнения. Эта опция используется для синтаксической проверки командных файлов.
|
---|
-s | Исходная информация для команд берется со стандартного ввода.
|
---|
-t | Из файла ввода считывается и выполняется ровно одна строка. В ней может использоваться символ \ для
экранирования перевода строки и продолжения команды на следующей строке.
|
---|
-v | Устанавливает переменную verbose; вызывает печать
каждой команды после завершения подстановок из
протокола.
|
---|
-x | Устанавливает переменную echo. Вызывает выдачу
каждой команды перед выполнением.
|
---|
-V | Устанавливает переменную verbose до выполнения
файла .cshrc.
|
---|
-X | То же для -x, что -V для -v.
|
---|
После обработки опций, если остались еще аргументы и не
было опций -c, -i, -s, или -t, первый из оставшихся аргументов берется в качестве имени файла с выполняемыми
командами. Csh открывает этот файл, сохраняя его имя
для возможной последующей подстановки вместо $0. Так
как многие системы используют стандартный shell, командные файлы которого несовместимы с csh, то csh будет
выполнять стандартный shell, если первый символ командного файла не есть #, то есть если командый файл не начинается с комментария. Оставшиеся аргументы инициализируют переменную argv.
Обработка сигналов
Обычно csh игнорирует сигналы выхода (3). Задания, запущенные асинхронно, не получают сигналов, сгенерированных с клавиатуры, в том числе сигнал 1. Реакция на
остальные сигналы наследуется от родительского процесса. Обработка прерываний и сигналов завершения в командных файлах управляется командой onintr. "Входной"
csh перехватывает сигнал завершения, остальные передают
реакцию на него порожденным процессам в том же состоянии, что получили от родителей. В любом случае прерывания запрещены во время чтения "входным" csh файла
.logout.
ФАЙЛЫ
~/.cshrc Читается в начале выполнения каждым csh.
~/.login Читается "входным" csh после чтения
.cshrc.
~/.logout Читается "входным" csh при завершении.
/bin/sh Стандартный shell для командных файлов, не
начинающихся с #.
/tmp/sh* Временные файлы для <<.
/etc/passwd Источник информации об основных каталогах
пользователей для подстановки ~имя_файла.
ОГРАНИЧЕНИЯ
Слова не могут быть длиннее 1024 символов. Система ограничивает список аргументов 10240 символами. Число аргументов в команде, к которой применяется генерация
имен файлов, ограничено 1/6 от числа символов, допустимых в списке аргументов. Подстановка результатов выполнения команд не может подставить больше символов, чем
допустимо в списке аргументов. Для обнаружения зацикливания csh ограничивает число подстановок вместо кличек
в одной строке двадцатью.
|
|