Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Cadence / dsd21.doc
Скачиваний:
26
Добавлен:
16.04.2013
Размер:
4.2 Mб
Скачать

Volcheck [ -V ]имя (путь) _к_устройству

Примеры использования volcheck

Допустим, мы желаем посредством volume managementузнать, есть ли в дисководе дискета. Для этого надо выполнить:

$volcheck-v/dev/diskette

Команда volcheckвыдаст одно из следующих сообщений:

• Если в дисковод вставлена дискета, volcheckвыдаст сообщение:

/dev/diskette has media

• Если дисковод пуст, появится следующее:

/dev/diskette has no media

Если опустить параметр device_pathname,volcheckвыдаст одно из двух сообщений:

media was found (носитель найден);

no media was found (носитель не обнаружен).

Доступ к сменным носителям

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

Работа с CD-ROM

Обнаружив присутствие CD-ROM,volume managerавтоматически располагаетCD-ROMв стандартный каталог: /cdrom.

Чтобы немедленно получить доступ к файлам CD-ROM, достаточно перейти в каталог /cdromкомандойcd.

Вот все шаги, которые требуются, чтобы получить доступ к файлам, находящимся на локальном устройстве CD-ROM:

1.ВставьтеCD-ROMв устройство этикеткой вверх.

CD-ROMбудет автоматически размещен в каталоге /cdrom.

Замечание —Если работает Диспетчер файлов графической средыCDE(CommonDesktopEnvironment), откроется новое окно, в котором будет представлено содержимоеCD-ROM. К этим файлам можно обращаться как из командной строки, так и через упомянутое окно.

2.В окне терминала введите:cd/cdrom/cdromO, затем нажмите ввод (клавишаReturn).

3.ВведитеIsи снова нажмите ввод (Return).

Вы увидите содержимое каталога /cdrom/cdromO.

Работа с дискетами

Служба volume managementне проверяет автоматически, присутствует ли дискета в дисководе. Чтобы заставить её выполнить проверку, используйте командуvolcheck.

При обнаружении дискеты volume managerразмещает информацию об устройстве в стандартный каталог: /floppy. Чтобы получить доступ к файлам, хранящимся на дискете, достаточно перейти в указанный каталог командой cd.

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

1.Вставьте отформатированную дискету в дисковод этикеткой вверх.

2.Введитеvolcheckи нажмите клавишуReturn.

Служба volume managementразместит содержимое дискеты в каталоге /floppy.

Замечание —Если дискета не вставлена в дисковод, будет выведено сообщение об ошибке, после чего командаvolcheckвновь выдаст приглашение.

3.В окне терминала введитеcd/floppy/floppyO, затем нажмите ввод (клавишаReturn).

4.ВведитеIs, затем нажмите клавишуReturn.

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

Замечание —Доступ к файлам на дискете можно получить не только из командной строки, но и через окно Диспетчера файлов. Для этого служит пункт меню File "Open Floppy".

Извлечение дискеты и CD-диска

Когда работа с CD-ROMили дискетой завершена, можно использовать командуeject, чтобы извлечь их из устройства.

Извлечение CD-диска

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

1.Выполните одну из приведенных ниже последовательностей действий:

• в окне Диспетчера файлов, где отображено содержание CD-ROM, щелкните на менюFile, затем выберите пунктEject,

• закройте окно Диспетчера файлов, которое использовалось для работы с CD-ROM.

2.Введитеcd, затем нажмите клавишуReturn, чтобы выйти из каталога /cdrom.

3.Введитеejectcdrom, затем нажмите клавишуReturn.

Через несколько секунд CD-ROMбудет извлечён из устройства, или же появится окно с сообщением о том, что пользователь должен вынуть его вручную.

Замечание —Если неизвестно специфическое имя устройства чтенияCD-ROM, введите в командной строкеeject-q, чтобы узнать, имеется ли в системе сменный носитель.

Извлечение дискеты

Для извлечения дискеты из дисковода:

1.Выполните одну из приведенных ниже последовательностей действий:

• выберите Fileв меню Диспетчера файлов, затем —пунктEject,

• закройте окно Диспетчера файлов, отображавшее диск.

2.Введите cd,затем нажмите клавишуReturn, чтобы выйти из каталога /floppy.

3. Введите eject floppy и нажмите Return.

Через несколько секунд дискета будет извлечена из дисковода, или появится окно с приглашением вынуть её вручную.

Сообщение "Device Busy"

Если CD-ROMили дискета не выходит из устройства, и при этом возникает сообщение "Devicebusy" (устройство занято), то, скорее всего это означает, что вы не вышли из рабочего каталогаCD-ROMили дискеты.

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

Чтобы проверить, не находитесь ли вы в каталоге /cdromили /floppy ,введитеpwd. Если один из указанных каталогов является текущим, введите cd,чтобы перейти в свой домашний каталог, после этого вновь дайте командуeject.

Системные процессы

Введение в процессы

В ОС Solarisзапуск любой программы порождаетпроцесс.Вход в систему и открытие оболочки —это процесс. Выполнение команды, запуск приложения -тоже процессы.

Процессом является любая программа, выполняющаяся в системе.

Процессы вызываются не только действиями пользователя. Система запускает свои процессы, так называемые демоны.Демоны —это программы, которые работают непрерывно, обрабатывая периодические служебные запросы. Например, демон входа в систему (dtlogin) предоставляет графический интерфейс, запрашивающий учётное имя и пароль.

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

UID и GID процесса

Ядро, управляющее выполнением процессов, должно "знать", что каждому процессу позволено, а что нет. Для этого требуются сведения о владельце процесса. С этой целью используются UIDиGID.

DIDи GIDпроцесса совпадают с UIDи GIDпользователя, запустившего процесс.

Родительский процесс

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

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

Просмотр процессов и их PID

Команда ps(processstatus) выводит список процессов, выполняющихся в системе в текущий момент.

Для каждого процесса указываются: идентификатор PID, идентификатор терминалаTTY, суммарное время выполненияTIME, а также команда, которой он был вызван:CMD.

Формат команды

ps параметры

Параметры

С командой psиспользуются следующие параметры:

-е Выводится информация о каждом процессе в системе: PID,TTY,TIMEи CMD.

-fВыдается подробный вывод, куда, помимо стандартной информации, включается UID (владелец процесса),PPID(IDродительского процесса) иSTIME(время запуска).

Подробный список всех процессов

В следующем примере выводится список всех процессов.

$ ps –ef | more

UID PID PPID С STIME TTY TIME CMD

root 0 0 0 16 46 41 ? 0 01 sched

root I 0 0 16 46 44 ? 0 40 /etc/init -

root 2 0 0 16 46 44 ? 0 00 pageout

root 3 0 0 16 46 44 ? 4 33 fsflush

root 236 1 0 16 48 08 ? 0 01 /usr/lib/saf/sac

root 844 1 0 12 12 10 ? 0 00 /usr/lib/lpsched

--More--

В Табл. 10-1поясняются заголовки столбцов.

Табл. 10-1Таблица, которая выводится в результатеps–ef

Столбец Описание

uid Имя владельца процесса.

PIDУникальный идентификатор процесса.

PPIDУникальный идентификатор родительского процесса.

С Использование процессорного времени. Это поле не используется.

STIMEВремя запуска процесса(hh: mm: ss).

tty Терминал, с которого был запущен процесс (у системных демонов здесь всегда стоит знак вопроса[?]).

time Суммарное время работы процесса.

CMD Имя команды.

Поиск нужного процесса

Если необходимо быстро найти какой-либо процесс, вывод команды psможно перенаправить на вход команды grep, задав имя искомой команды. Допустим, среди действующих процессов требуется отыскать всё, что связано с печатью. Выполните следующее:

$ ps-e | grep lр

217 ? 0:00lpsched

$

Замечание —lpsched —это демон, заведующий службами печати в системе.

Команда pgrep

Команда рgrер предлагает еще более эффективный способ отыскать процесс по имени.

По умолчанию рgrер отображает PIDлюбого процесса, который соответствует критериям, заданным в командной строке. Например:

$ рgrер lр

217

$

Формат команды

pgrep параметры шаблон

Параметры

С командой рgrер используются следующие параметры.

-х Выводятся только те идентификаторы PID,которые в точности совпадают с шаблоном.

-п Выводятся только более новые (т.е. созданные позже) идентификаторы PID,чем тот, что соответствуетшаблон.ВыводитсяIDкаждого процесса, содержащего

шаблон.

-UПоказываются лишь те идентификаторы PID,что принадлежат заданному пользователю. Требуется задатьлибо имя пользователя, либо его номерDID.

-1Наряду с PIDпроцесса выводится его имя.

Замечание —У команды рgrер имеется несколько других полезных параметров. Загляните на страницуman, посвященную этой команде, чтобы ознакомиться со списком всех доступных параметров.

В следующих примерах благодаря использованию параметра -lмы получаем как имена, так иPIDпроцессов:

$ pgrep -l lр

217 lpsched

$ рgrер -1 mail

230 sendmail 13453 dtmail

Комбинация -lи -х дает возможность просмотреть только те процессы, чьи имена в точности соответствуют заданным критериям:

$ рgгер -lx dtmail

12047 dtmail

Управление процессами при помощи сигналов

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

Например, если вы нажали Control-C, чтобы остановить какую-либо команду, то процессу отправляется стоп-сигнал, в ответ на который он должен завершить свою работу.

Сигнал представляет собой сообщение, несущее определённый номер. Процесс считывает этот номер. В ОС Solarisопределен набор стандартных сигналов. Каждый из них сопоставлен с уникальным номером, именем и действием.

С полным перечнем стандартных сигналов и назначением каждого вы можете ознакомиться на следующей man-странице:

$man-s3signal

В Табл. 10-2представлены некоторые сигналы.

Табл. 10-2Номера и названия сигналов

Номер сигнала Название Действие Ответ

1 SIGHUP Hangup Exit

2 SIGINT Interrupt Exit

9 SIGKILL Kill Exit

15 sigterm Terminate Exit

• 1,SIGHUP —сигнал "повесить трубку" (hangup) используется, когда необходимо прервать связь по телефонной линии или через терминал.

• 2,SIGINT —стоп-сигнал, посылаемый с клавиатуры, —чаще всего нажатием Control-C.

• 9,SIGKILL— сигнал, который используется, когда необходимо уничтожить процесс. Ни один процесс не может проигнорировать его.

• 15,SIGTERM— сигнал "мягкого" завершения процесса. Некоторые процессы его игнорируют.

Завершение процессов

Далее речь пойдет о завершении процессов командой kill.

Команда kill

Команда killпредназначена для отправки сигнала одному или нескольким процессам. Она часто используется для завершения процесса.

Замечание —Рядовым пользователям разрешено уничтожать только собственные процессы. Пользовательrootимеет право ликвидировать почти любой процесс.

Формат команды.

kill [-сигнал] PID ...

Уничтожение процесса

Прежде чем уничтожать процесс, необходимо определить его PID. Для этого используется либоps, либо рgгер.

Чтобы уничтожить процесс, выполните:

$ kill PID

Пример:

$рдгер -1mail

215 sendmail 12047 dtmail $ $ kill 12047

$

Если требуется уничтожить сразу несколько процессов:

$ kill PID PID PID PID

Если ввести killбез указания сигнала, процессу отправляется сигнал по умолчанию, а именно: 15.Как правило, это приводит к завершению процесса.

Какие-то процессы могут проигнорировать Сигнал 15.Например, это может быть связано с тем, что процесс дожидается тех или иных ресурсов. Скажем, для продолжения работы ему нужно, чтобы стриммер завершил свои операции.

Процессы, не реагирующие на Сигнал 15,могут быть завершены принудительно. Для этого с командойkillнеобходимо использовать Сигнал 9.

Пример:

$ kill -9 PID

или:

$ kill -KILL PID

Предупреждение— Использоватьkill -9илиkill-KILLследует лишь как последнее средство. Применениеkill -9илиkill-kill к процессу, управляющему работой базы данных или программой обновления файлов, способно привести к губительным последствиям !Процесс уничтожается немедленно, не имея никакого шанса корректно завершить свою работу.

Команда pkill

Команда pkillпозволяет завершить названный процесс. По умолчанию процессу посылается Сигнал 15.

Процесс может быть задан по имени.

Формат команды

pkill{-параметры} маска

Параметры, применяемые с pkill, — те же, что и для команды рgгер.

Если нужно завершить процесс, связанный с почтовым сеансом, и при этом использовать имя процесса, выполните следующие действия:

$ рgrер -1 mail

215 sendmail 470 dtmail

$ pkill dtmail

Чтобы завершить сеанс dtmail, указав егоP1D, используйте командуkill.

$kill 470

Завершение процессов через удаленный сеанс

Бывает, рабочая станция не реагирует ни на ввод с клавиатуры, ни на мышь. Оконный сеанс при этом оказывается полностью недоступным. Справиться с такой ситуацией можно следующим образом. Войдите на свою рабочую станцию с удаленной системы, используя rlogin(илиtelnet). Соединившись, выполните командуpkill,чтобы завершить вышедший из-под управления сеанс на своей рабочей станции, например:

$ riogin host1 Password:

Last login: Fri Feb 04 16:50:30 from hosti

Sun Microsystems Inc. SunOS 5.8 Generic February 2000

$ pkill -9 shell

или:

$ pkill -KILL shell

Управление заданиями

Заданием (job) называется процесс, выполняющийся под управлением терминала и связанный с IDпроцесса. Каждому заданию командный интерпретатор присваивает уникальный номер. Управление рядом заданий через командный интерпретатор называется управлением заданиями(job control).

Командный интерпретатор даёт возможность выполнять одновременно ряд заданий. Открытие приложения, отправка материала на печать, выполнение команды Is— всё это примеры заданий.

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

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

Контролировать задания через их номера IDможно при помощи команд, представленных в Табл. 10-ЗТабл. 10-3.

Табл. 10-3Команды по управлению заданиями

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

jobsИнформация о выполняющихся в текущий момент заданиях

bg%nУказанное задание помещается на выполнение в фоновом режиме (п соответствуетTDзадания)

fg %nУказанное задание выносится на передний план(п соответствуетIDзадания^

^Z Остановка задания, выполняющегося на переднем плане

stop %nОстановка указанного задания, выполняющегося в фоновом режиме(псоответствуетIDзадания^)

Замечание —Контроль над выполнением задания осуществляется только в том окне, где оно было запущено.

Если необходимо запустить задание в фоновом режиме, введите команду с амперсандом (&)на конце.

В следующем примере команда findзапускается в фоновом режиме. Она ищет все файлы под названиемcoreв текущем каталоге. Затем печатает полный маршрут к каждому файлу с именемcoreв новый файл, называющийсяlist.

$ find . -name core > list &

[1] 3028

$

В квадратных скобках оболочка возвращает номер задания (ID);

далее следует номер команды (PID). Через номер задания пользователь может контролировать его выполнение. Номер PID используется ядром.

Если нажать в окне клавишу Return, выводится сообщение о завершении работы фонового задания.

[1] + Done find . -name core > list & $

• Команда jobsиспользуется, когда нужно получить список текущих заданий.

$ jobs [1] + Running find . -name core > list &

• Команда fgиспользуется для перенесения фонового задания на передний план.

$ fg %1 find. -namecore >list

Замечание —Указанная операция приводит к тому, что окно оказывается занятым до тех пор, пока задание не завершится само или не будет остановлено пользователем; оно также может быть приостановлено и снова отправлено на задний план.

• Чтобы перевести задание на задний план, сперва приостановите его, используя сочетание клавиш Control-Z, затем примените командуbg.

$ find . -паmе core > list "Ч.

[1] + Stopped (SIGTSTP'1 find . -name core > list &

$ jobs [1] + Stopped (SIGTSTP) find . -name core > list &

$ bg %1

[1] find . -name core > list &

Замечание- Если переместить задание на передний или на задний план, оно начинает выполняться с того места, на котором было приостановлено.

• Чтобы остановить фоновое задание, следует использовать команду stopс номером задания в качестве аргумента.

$ stop %1

[1] + Stopped (SIGSTOP) script1 &

$

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

Интерпретаторы команд

В любой UNIX-средеshellрассматривается как командный интерпретатор, дающий пользователю возможность отправлять ядру инструкции. Инструкции вводятся поочерёдно в командной строке, а кроме того, могут быть помещены в выполняемый скрипт.

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

Интерпретаторы команд взаимозаменяемы, то есть вы можете в любой момент сменить версию, выбрав Bourneshell, Сshell,Kornshell,TCshell,Zshell,BASHshellили какую-то иную доступную версию.

Будучи посредником между пользователем и ядром, командный интерпретатор выполняет также ряд других важных функций (см. Рис. 11-1).

Рис. 11-1 Задачи командного интерпретатора

За что отвечает интерпретатор команд

Рассмотрим, за что отвечает интерпретатор команд.

• Интерпретатор команд ищет доступные команды в каталогах, на которые указывает специальная переменная окружения: PATH. Эта переменная содержит перечень каталогов, разделённых двоеточием. Интерпретатор просматривает каждый каталог из этого списка слева направо в поисках команды, которую ему следует выполнить.

• Интерпретатор команд обеспечивает работу конвейеров (pipes), даёт возможность перенаправлять ввод/вывод и выполнять задания в фоновом режиме.

• Интерпретатор команд может быть настроен в соответствии с предпочтениями каждого отдельного пользователя. Позволяет создавать псевдонимы (aliases) — сокращённые имена, заменяющие одну или несколько команд. Когда для выполнения какой-то задачи одного псевдонима оказывается недостаточно, можно создать shell-функции.

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

• Интерпретатор команд способен автоматически дописывать введённые пользователем слова. Такой механизм носит название "завершение слов".

• Интерпретатор команд сохраняет выполненные ранее команды в хронологически упорядоченном списке; любая команда, хранящаяся там, может быть запущена вновь, а также отредактирована.

• Интерпретатор команд может быть настроен под любого пользователя системы. С этой целью используются конфигурационные файлы.

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

В данном разделе рассматривается перенаправление ввода/вывода, в том числе через конвейер.

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

Как правило, интерпретатор команд получает (считывает) команды с клавиатуры и отображает результаты операций на экране терминала (см. Рис. 11-2).

Имеется возможность перенаправить как ввод, так и вывод. Для этого используются символы перенаправления: '<'и '>'.

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

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

Перенаправление вывода —это возможность направлять вывод команды (через конвейер) во внешний файл, а не на экран терминала.

Рис. 11-2Стандартные ввод и вывод

Дескрипторы файла

Каждый процесс, созданный с помощью интерпретатора, связан с файловыми дескрипторами, которые перечислены в Табл. 11-1.

Табл. 11-1Файловые дескрипторы

Дескриптор Значение

О stdinСтандартный ввод

1stdoutСтандартный вывод

2stderrСтандартная ошибка

По файловому дескриптору интерпретатор команд определяет, откуда исходят получаемые командой входные данные и куда следует направлять вывод, а также сообщения об ошибках.

Что представляют собой стандартный ввод и стандартный вывод команды?

• Стандартный ввод (stdin)всегда соответствует файловому дескриптору 0(ноль).

• Стандартный вывод (stdout) всегда соответствует файловому дескриптору 1.

• Стандартная ошибка (stderr) всегда соответствует файловому дескриптору 2.

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

Продемонстрируем это. Введите команду catбез аргументов, а за ней —две строки текста. Для выхода нажмите Control-D.

$cat(чтение со стандартного потокаstdin)Firstline(чтение со стандартного потока stdin) Firstline(запись в стандартный потокstdout)What'sgoingon? (чтение со стандартного потокаstdin)What'sgoingon? (запись в стандартный потокstdout) ^d(чтение со стандартного потока stdin) $

Команда catпринимает стандартный ввод с клавиатуры и передает стандартный вывод в окно терминала.

Перенаправление stdin, stdout и stderr

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

Перенаправление stdin

Ниже показано перенаправление stdin:

команда < имя_файла;

команда 0< имя_фамла.

Команда читает входные данные из файла по имени имя_ файла вместо того, чтобы обращаться к клавиатуре, например:

$mailx user1 < -/dante

Перенаправление stdout

В следующем примере показано перенаправление stdout:

команда > имя_файла;

команда 1> имя_файла.

Команда направляет свой вывод во внешний файл по имени имя_фаила.Если файл отсутствует, то он создается. Если файл существует, то команда переписывает его полностью, например:

$ ps -ef > process_list

Перенаправление stdout с записью в конец файла

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

команда » имя_файла

Вывод команды перенаправляется в файл, названный имя_файла;

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

$ cat /etc/passwd > my_file;cat my_file

$ echo "That's my passwd file" » my_file;cat my_file

That's my passwd file

$

Перенаправление stderr

В следующем примере показано перенаправление stderr:

команда 2>/dev/null

Любые сообщения об ошибках перенаправляются в файл /dev/null.

Иногда бывает полезно отсечь сообщения о незначительных ошибках, то есть предотвратить их вывод на экран. Пример:

$ find /etc -type f -exec grep PASSREQ {} \; -print 2> /dev/null

ft PASSREQ determines if login requires a password.

PASSREQ=YES

/etc/default/login$

Перенаправление stdin в stdout

В следующем примере показано, как перенаправляются stdout и stderr:

команда 1> имя_ файла 2>&1

Синтаксис 2>&1 воспринимается интерпретатором команд как инструкция перенаправить stderr (2)в тот же файл, куда записывает свои результаты stdout (1),например:

$ ls /var /no 1> dat 2>&1 $ more dat

/no: No such file or directory (stderr)

/var: (stdout)

adm (stdout)

audit (stdout)

cron (stdout)

<вывод опущен>

Возможности конвейера

Интерпретатор команд позволяет эффективно связывать две команды вместе. Такое соединение называется конвейером (|,pipe). Когда в командной строке применяется конвейер, вывод первой команды непосредственно передается на вход второй.

Конвейер обозначается знаком '' .Этот знак ставится между двумя командами.

Формат

команда\команда

Несколько простых примеров

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

$ who | wc -1

5

$

Стандартный вывод первой команды направляется непосредственно на стандартный ввод второй команды.

Результат команды whoне появляется на экране, поскольку он непосредственно передается через конвейер командеwc.

Чтобы получить список всех каталогов, расположенных в каталоге /etc,выполните:

$ Is -F /etc I grep "/"

acct/

cron.d/

default/

Цепочка конвейеров

Конвейеры можно объединять в цепочки. Такая цепочка будет состоять из целой серии команд.

Не существует ограничений на количество команд, которые могут быть объединены через конвейеры.

Пример 1

$ head -10 dante | tail -3 | lp

request id is printerA-177 (Стандартный ввод)

Пример 2

$ ps -ef I tail +2 I we -l

74

Завершение слов в Korn Shell

Завершение слов, которое иногда называют "расширением имён файлов" (не путать с "расширениями" в DOS —прим. перев.), представляет собой механизм, благодаря которому пользователю достаточно ввести лишь первые буквы имени файла, а затем нажать определенное сочетание клавиш, чтобы интерпретаторKornShellавтоматически дописал недостающие символы.

Замечание —Интерпретатор командKornshellкак редактор командной строки способен работать в двух режимах. В дальнейших примерах подразумевается режимvi. Обратитесь к встроенному руководству (man)ksh(l),чтобы узнать о режимахemacsиgmacs.

Практические примеры

Чтобы завершение слов производилось встроенным редактором vi, введите команды:

$ set -о vi

или

$ export EDITOR=/bin/vi

или

$exportVISUAL=/bin/vi

Теперь проверьте, как работает завершение слов. Наберите команду ls, а за ней —одну или несколько начальных букв имени файла. Затем нажмите последовательно:Escape(Esc) и обратную косую черту (\).

Замечание —Сочетание клавиш, о котором шла речь, работает только в режиме vi.

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

Например, чтобы автоматически дописалось имя файла, лежащего в каталоге /usrи начинающегося с "de", наберите:

$ cd /usr

$ ls de нажмите Esc и ‘\’

Командный интерпретатор допишет оставшуюся часть имени файла, и в результате получится:

$lsdemo/

Можно запросить список всех доступных вариантов завершения заданной последовательности символов, чтобы затем выбрать нужный. Для этого используется сочетание клавиш: Escape(Esc) и знак равенства (=).

Чтобы запросить список всех файлов, начинающихся с "g" и находящихся в каталоге /etc ,наберите:

$ cd /etc

$catgнажмите Esc,затем клавишу'='

1) getty

2) group

3) grpck

4) gss/ $ cat g

Курсор будет помещен над буквой 'g'.

Переменные Коrn Shell

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

Командный интерпретатор даёт возможность пользователю определять значения переменных.

При программировании в Коrn shellиспользуются переменные двух типов: во-первых, те, что экспортируются в дочерние процессы, и, во-вторых, те, которые используются лишь в той среде, где они были определены.

В Табл. 11-2приведён перечень командKornshell, которые используются для установки, удаления, а также просмотра переменных.

Табл. 11-2КомандыKornShellдля работы с переменными

Действие Команда

Определение переменной VAR=value

export VAR=value

Очищение переменной unsetVAR

Вывод всех имеющихся set,env, илиexportпеременных

Вывод значения переменной echo$VARилиprint$var

Когда за символом '$'следует имя существующей переменной окружения, командный интерпретатор воспринимает это как инструкцию заменить указанное имя переменной её значением.

Обращение к значениям переменных

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

$ echo$SHELL

/bin/ksh

Просмотр переменных

Команда setпозволяет вывести список всех переменных окружения и их значений, например:

$ set

DISPLAY»:0.О

EDITOR= /usr/bin/vi

ERRNO=13

FCEDIT=/bin/vi

HELPPATH=/usr/openwin/lib/locale:/usr/openwin/lib/help

HOME=/export/home/userl

HZ=100

IPS=

LANG=C

LINENO-1

LOGNAME=userl

MAIL=/var/mail/userl

MAILCHECK=600

MANPATH=:/usr/man:/usr/openwin/share/man

OLDPWD=/export/home/userl

OPENWIMHOMEs/usr/openwin

PATH=/usr/openwin/bin:/bin:/usr/bin:/usr/ucb:/usr/sbin

PPID-=596

PS1='$ '

PS2='> •

PS3='tt7 1

PS4='+ '

PWD=/tmp

SHELL-/bin/ksh

TERM-dttenn

TERMINAL_EMULATOR=dttel-[n

TMOUT-0

TZ=MET

USER=userl

_=set

off ices/export/home/userl/office

private-/export/home/userl/private

Команда export делает переменную доступной для дочернего интерпретатора команд.

Используя команду export без аргументов, можно вывести список всех таких (доступных вне оболочки) переменных вместе с их значениями.

$ export

DISPLAY=:0.О

EDITOR=/usr/bin/vi

HELPPATH=/usr/openwin/lib/locale:/usr/openwin/lib/help

HOME=/export/home/userl

LAMG=C

LOGNAME=userl

MAIL=/var/mail/userl

MANPATH=/usr/openwin/share/man:/usr/man

OPENWIMHOME=/usr/openwin

PATH=/usr/openwin/bin:/bin:/usr/bin:/usr/ucb:/usr/sbin

PWD=/etc

SHELL=/bin/ksh

TERM=dttenn

TERMINAL_EMULATOR=dttem

TZ=MET

USER=userl

_=export

office=/export/home/userl/office

$

Установка переменных окружения

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

var=value

или

VAR=value

Ни слева, ни справа от знака равенства (=)не должен стоять пробел, например:

$ privates/export/home/user1/private

$ set | grep private

private=/export/home/userl/private

$ cd

$private; pwd

/export/home/user1/private

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

export VAR=value

Например:

$ export office=/export/home/user1/office

$ echo

$office

/export/home/userl/office

Удаление переменных окружения

Переменные окружения могут быть уничтожены (clear) следующими выражениями:

unset VAR или unset var

Например, если нужно применить unset к переменой по имени private, наберите:

$ unset private

$ echo

$private

$

Теперь, как видно из последней строки только что представленного примера, команда echo выводит пустую строку.

Замечание —Чаще всего имена в верхнем регистре присваиваются переменным, которые имеют отношение к общим настройкам среды, а имена в нижнем регистре —тем, которые являются локальными по отношению к определённому процессу.

Стандартные переменные

В Табл. 11-3приведены переменные, чьи значения командный интерпретатор инициализирует автоматически при входе пользователя в систему.

Табл. 11-3Переменные, устанавливаемые при входе в системуПеременная Значение

EDITORРедактор для процессора команд.

FCEDITРедактор, который используется с командойfc. Это связано с историей команд —так называется механизм, позволяющий редактировать введённые ранее команды.

home Каталог, который становится текущим, когда командаcdвводится без аргументов.

LOGNAMEУчётное имя пользователя.

PATHСписок каталогов, в которых командный

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

PS1 Основная часть приглашения в командной строкеKornshell: $.

PS2 Вторичное приглашение в командной строке; по умолчанию: >.

SHELLИмя командного интерпретатора (/Ып/ksh).

Замечание —Для переменных PS1и PS2указаны значения по умолчанию. Пользователь может переопределить их.

Настройка переменных Korn Shell

Далее речь пойдет о настройке переменных Kornshell.

Приглашение psi

Строка приглашения задаётся в переменной окружения PS1.Каждый пользователь может переопределить её по своему усмотрению.

$ PS1="$LOGNAME@'uname -n '$ "

user1@host1

$

Теперь в приглашении выводится учётное имя пользователя, символ "at", а также имя текущей системы.

Учётное имя читается из переменной окружения LOGNAME, а имя машины берётся из результата выполнения командыuname-n.

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

В приглашении будет отображена правильная информация даже в том случае, если пользователь откроет сеанс на другой машине.

Далее будет показано, как при определении приглашения командной строки может быть использовано значение другой переменной. (Имейте ввиду: после выполнения этих команд вместо стандартного приглашения '$'в командной строке будет фигурировать "ILikeUNIX >").

$ ILU="I Like UNIX"

$ PS1="$ILU > "

I Like UNIX > echo $ILU

I Like UNIX

ILikeUNIX >

Замечание— Чтобы новое приглашение появлялось в каждом сеансе командного интерпретатора, необходимо включить его в конфигурационный файл Котshell, который обычно называется.kshrc.

Переменная PATH

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

Выполняется первая найденная таким образом команда.

Если команда не обнаруживается ни в одном из указанных каталогов, выводится сообщение об ошибке:

ksh:command_name:notfound

Командный интерпретатор ограничивает свой поиск только теми каталогами, которые заданы в path. Если какая-то команда не найдена, это не означает, что ее нет в системе. Возможно, путь к ней просто не был указан в переменнойPATH.

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

$/usr/bin/id

Если после этого команда благополучно выполняется, следует проверить переменную PATH. Может оказаться, что путь к команде задан некорректно. Проверить переменнуюPATHможно следующим способом:

$echo$path

/usr/dt/bin:/usr/openwin/bin:/usr/bin:/usr/ucb

$

Дополнение переменной PATH

В следующем примере показано, как дополнить переменную PATH, включив в неё домашний каталог пользователя.

$ echo $PATH

/usr/dt/bin:/usr/openwin/bin:/usr/bin:/usr/ucb

$

$ PATH=$PATH:~

$

$ echo $PATH

/usr/dt/bin:/usr/openwin/bin:/usr/bin:/usr/ucb:/export/home/user1

$

Переменная PATHавтоматически передается всем дочерним интерпретаторам команд.

Метасимволы Korn Shell

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

Это достигается способом, который называется квотирование {quoting).

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

Квотирование с использованием обратной косой черты

Если поместить обратную косую черту (\) непосредственно перед метасимволом, то командный интерпретатор не будет воспринимать его как метасимвол.

Допустим, в имени файла присутствует "звездочка" (*).Чтобы удалить этот и только этот файл, "звездочку" следует замаскировать косой чертой (\) —иначе она будет воспринята как метасимвол.

$ ls

dat1 dat2 dat3 dirl dir2 *

$ rm \*

Квотирование с использованием одинарных и двойных кавычек

Символы, помещенные внутрь кавычек, в большинстве случаев не интерпретируются как метасимволы.

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

• Одинарные кавычки (' ')инструктируют командный

интерпретатор игнорировать все заключенные между ними символы.

• Двойные кавычки ("")инструктируют командный интерпретатор игнорироватьбольшую частьзаключённых между ними символов.

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

• обратная косая черта(\),

• знак доллара ($),

• обратные кавычки (' ').

Простые примеры квотирования

$ echo '$SHELL'

$ SHELL

$ echo "$SHELL"

/bin/ksh

$ echo "\$SHELL"

$ SHELL

Подмена команд

Любая команда UNIX, заключённая в обратные кавычки, выполняется командным интерпретатором. Отображается при этом результат выполнения команды, например:

$echodate

date$ echo 'date'

Tue May 2 14:10:05 MDT 2000

$

Такое применение обратных кавычек распространяется на все командные интерпретаторы UNIX. Между тем,Kornshellпредоставляет еще один способ подмены команд:

$ echo pwd

pwd

$ echo $(pwd)

/export/home/user1

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

Интерпретатор Кот хранит список последних команд, введенных пользователем. Можно обратиться к этому механизму, чтобы просмотреть, повторить или отредактировать любую из этих команд.

Замечание —Все экземплярыKornshellиспользуют одну и ту же историю команд.

Команда history

Командный интерпретатор Kornхранит историю команд в файле, название которого содержится в переменнойhistfile. По умолчанию это: $НОМЕ/.sh_history.

Есть возможность задать максимальное количество хранимых таким образом команд. Для этого используется переменная HISTSIZE. Если она не определена, список не превысит 128команд.

Отредактировать список введённых ранее команд можно встроенным редактором Кот shell.

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

$ set -о vi или:

$ export EDITOR=/bin/vi или:

$exportVISUAL=/bin/vi

По умолчанию команда historyпоказывает последние 16команд (при этом используется стандартный вывод), пример:

$ history

157 date

158 cd /etc

159 touch dati dat2

160 ps -ef

161 history

Команда r

Команду rможно использовать, чтобы вызвать последнюю инструкцию, отредактировать её, а затем выполнить модифицированную команду:

$ history

157 date

158 cd /etc

159 ps -ef

$

$ r с

cd /etc

$ r etc=tmp

cd/tmp

В этом примере при помощи rв командную строку была вызвана последняя команда, начинавшаяся с символа "с". После этого мы заменили etcнаtmpи выполнили измененную таким образом команду.

Редактирование выполненных ранее команд при помощи vi

Вы можете открыть историю команд, отредактировать редактором vi нужную инструкцию, а затем выполнить её новую версию.

  1. Убедитесь, что в качестве редактора командной строки используется встроенный редактор vi.

$ set -о | grер "^vi'

vi on

2.Введите командуhistory, чтобы просмотреть историю команд.

$ history

3.Нажмите клавишуEscape, чтобы получить доступ к списку команд.

Чтобы перемещаться по списку вверх и вниз, используйте клавиши:

• k— к предыдущей строке

• j— к следующей строке Чтобы перемещаться по списку вправо и влево, используйте клавиши:

• 1 —на символ вправо

• h— на символ влево

Замечание —Для перемещения курсора не используются стрелки на клавиатуре. При работе с хроникой команд из командной строки применяются клавиши h, j, kи 1.

4.Пользуясь командами редактора vi,отредактируйте любую из команд.

5.Чтобы выполнить модифицированную команду, нажмите клавишуReturn.

Псевдонимы в Korn Shell

Псевдоним {alias)в Котshell— это своего рода сокращённая запись, позволяющая настраивать командыUNIX, а также вводить их в сокращенном виде. Псевдоним создается командойalias.

Формат команды

aliasdir=строка_команды

Пример:

$alias dir='ls -IF'

Когда пользователь вводит какую-либо команду, командный интерпретатор ищет её в существующем списке псевдонимов. Если первым словом в командной строке является псевдоним, он заменяется соответствующей командой из этого списка. Создаются псевдонимы по следующим правилам:

• с обеих сторон знака равенства не должно быть пробелов,

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

• если один псевдоним относится к нескольким командам, то эти команды должны быть разделены знаками "точка с запятой".

Предопределённые псевдонимы Korn Shell

Командный интерпретатор Kornпредоставляет ряд предопределенных псевдонимов. Просмотреть их можно командойalias. При этом также выводятся все псевдонимы, созданные пользователем.

Пользовательские псевдонимы

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

$ alias h=history

$ $ h

278 cat /etc/passwd

279 pwd

280 cp /etc/passwd /tmp

281 Is ~

282alias h=history

283h

Неосторожное применение команд rm,cpиmvможет привести к потере данных. В качестве меры предосторожности можно создать псевдонимы этих команд, которые выполняют все то же самое, но в интерактивном режиме.

Пример:

$ alias rm='rm -i' $ rm dat1

rm: remove dat1: (yes/no)? no $

Поскольку cpтеперь выполняетcp-i,amv—mv -i,командный интерпретатор задаёт вопрос, следует ли перезаписывать существующий файл.

Псевдоним можно временно отключить. Для этого перед ним нужно поставить обратную косую черту.

Обратная косая черта дает командному интерпретатору инструкцию игнорировать список псевдонимов. В результате выполняется исходная команда rm,например:

$rm filel

rm: remove filel (yes/no)? no

$

$ rm \filel

$ Is filel

filel: No such file or directory

Последовательности команд

Одному псевдониму может соответствовать последовательность из нескольких команд. Каждая команда должна отделяться от соседней символом "точка с запятой", например:

$ alias info='uname -a; id; date'

$ info

SunOS hosti 5.8 Generic sun4u spare SUNW,Ultra-5 10

uid=102(user2) gid=10(staff)

Fri Jun 30 15:22:47 MST 2000

$

В следующем примере псевдоним создается с применением конвейера (|),благодаря которому результат командыIs -1 передается командеmore. При выполнении вновь созданного псевдонима длинный список каталогов разбивается на несколько экранов.

$ alias 11='ls -I | more' $ cd /usr $ 11

total 136

drwxrwxr-x 2 root bin 1024 May 13 18:33 41ib

drwx------ з root bin 512 May 13 18:14 aset

drwxrwxr-x 2 root bin 7168 May 13 18:23 bin drwxr-xr-x 4 bin bin 512 May 13 18:13 ccs drwxrwxr-x 5 root bin 512 May 13 18:28 demo --More--

Для удаления псевдонима используется команда unalias.

Формат команды

unaliasимя_псевдонима

Пример:

$ unalias h

$ h ksh: h: not found

Замечание- Чтобы новые псевдонимы были доступны всем командным интерпретаторам, которые могут быть вызваны в ходе сеанса, разместите их в инициализационном файле Котshell, который называется .kshrc.

Функции

Функции служат мощным средством shell-программирования.Они используются при создании пользовательских команд.

Функцией называется группа команд UNIX, которые организованы в виде отдельных подпрограмм. Чтобы использовать функцию, необходимо:

• во-первых, определить её,

• во-вторых, вызвать созданную функцию.

Как определить функцию

При определении функции применяется следующий обобщенный формат:

functionимя { команда; . . . команда; }

Замечание —После открывающей и перед закрывающей скобкой обязательно должен стоять пробел.

Примеры функций

В следующем примере создается функция по имени num. Она выполняет командуwho. Результат указанной команды передается командеwc, чтобы подсчитать количество пользователей, работающих в текущий момент с системой.

$ function num { who | wc -1; )

$ num

9

Далее будет создана функция list, которая выполняет командуlsи передает результат командеwc, чтобы отобразить общее число подкаталогов и файлов в текущем каталоге.

$ function list { Is -al I wc -l; }

$ list

34

Замечание— Если имена функции и псевдонима совпадают, командный интерпретатор отдает предпочтение псевдониму

Конфигурирование среды Коrn Shell

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

• -/.profile

• -/.kshrc

Командный интерпретатор Kornпри первом запуске всегда ищет в пользовательском каталоге конфигурационный файл .profile,aтакже файл окружения, который по принятому соглашению носит имя .kshrc.Вначале выполняются команды из указанных файлов и только потом на экране появляется приглашение ($),иKornначинает ждать команды.

Файл ~/. profile

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

Как правило, переменные окружения и установки, влияющие на работу терминала, помещаются именно в этот файл. Если требуется автоматически запустить какое-либо приложение, соответствующую команду, имеет смысл также разместить здесь.

Если файл .profileсодержит специальную переменнуюENV, то файл, имя которого хранится в этой переменной, выполняется сразу же после того, как отработает конфигурационный файл.

Замечание —Файл /etc/profile, в отличие от ~/.profile, относится ко всей системе. Здесь системный администратор определяет задачи, которые выполняются командным интерпретатором Коrnпри входе в систему каждого пользователя.

Файл ~/. kshrc

Файл, на который указывает переменная ENV, принято называть. kshrc.В нём хранятся специфические переменные интерпретатора Коrn, а также псевдонимы. Файл, на который указывает переменнаяENV, выполняется заново при старте каждого дочернего командного интерпретатораksh-

Замечание —Файл, на который указывает переменная ENV,может быть назван как угодно.

В файле -/.kshrc, как правило, хранятся следующие установки:

• установки, определяющие приглашения командной строки (PS1,

PS2),

• определения псевдонимов,

• функции,

• переменные, связанные с историей команд,

• параметры командного интерпретатора Korn(set-опараметр}.

Повторное считывание инициализационных файлов

Когда пользователь меняет свои инициализационные файлы, изменения вступают в силу при следующем входе в систему.

Между тем, есть способ включить новые установки немедленно. Для этого необходимо обратиться к файлам .profile и .kshrc,поставив перед именем каждого точку (.).

$ . ~/.profile

$

$ . ~/.kshrc

Замечание —Результат выполнения обеих указанных выше команд затрагивает только текущий командный интерпретатор.

Конфигурирование окружения CDE

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

Файл ~/.dtprofile

Если вы работаете в среде CDE,в вашем распоряжении еще один конфигурационный файл: .dtprofile. Он расположен в вашем домашнем каталоге и содержит как общие, так и настраиваемые установки среды CDE.Имейте в виду, что переменные, которые содержатся в файле .dtprofile,переопределяют другие переменные, заданные по умолчанию.

Существует стандартный, общесистемный файл sys .dtprofile, хранящийся в каталоге /usr/dt/config. В его конце определяется переменнаяdtsourceprofile=true. Так называется стандартный файл, который CDEиспользует как шаблон при автоматическом создании файла .dtprofile.Когда пользователь впервые входит в среду CDE,в его домашний каталог помещается новый .dtprofile.

При очередном входе в CDEвначале считывается .dtprofile. Затем интерпретатор Kornсчитывает файл пользовательского профиля •profile, а после этого —.kshrc.

Файлы .profileи .kshrcсчитываются заново при открытии каждого нового окна консоли. Файл . kshrcсчитывается при открытии каждого нового терминального окна в среде CDE.

Соседние файлы в папке Cadence