Брайан Керниган - UNIX — универсальная среда программирования
- Название:UNIX — универсальная среда программирования
- Автор:
- Жанр:
- Издательство:Финансы и статистика
- Год:1992
- Город:Москва
- ISBN:5-289-00253-4
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Брайан Керниган - UNIX — универсальная среда программирования краткое содержание
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями shell.
Для программистов-пользователей операционной системы UNIX.
UNIX — универсальная среда программирования - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Познакомьтесь с другими файлами каталога /dev
, прочитав разд. 4 справочного руководства. В чем состоит разница между /dev/mt0
и /dev/rmt0
? Прокомментируйте возможную пользу применения вложенных каталогов в /dev
для дисков, магнитных лент и т.п.
Магнитные ленты, записанные в других системах, обычно имеют другие размеры блоков, такие, как 800 байт — десятикратный образ перфокарты из 80 символов, но устройство /dev/mt0
предполагает блоки из 512 байт. Обратитесь к команде dd
( dd(1)
), чтобы узнать, как читать такую ленту.
Почему /dev/tty
не является просто связью с терминалом, с которого вы вошли в систему? Что бы произошло, если бы права доступа для него были rw--w--w-
, как на вашем терминале?
Как работает write(1)
? Подсказка: см. в utmp(5)
.
Как узнать, использует ли человек терминал в данный момент?
Файловой системе посвящена часть статьи К. Томпсона "UNIX implementation" (BSTJ, July, 1978). Статья Д. Ритчи ""The evolution of the UNIX time-sharing system" (Symposium on Language Design and Programming Methodology", Sydney, Australia, Sept., 1979) содержит завораживающее описание того, как разрабатывалась и была реализована на исходной PDP-7 файловая система UNIX и как она приобрела нынешнюю форму.
При создании файловой системы UNIX были заимствованы некоторые идеи из системы файлов МАЛТИКС. Содержательное описание последней содержится в книге И. Органика "The MULTICS System: An Examination of its Structure" (MIT Press, 1972).
Статья Б. Морриса и К. Томпсона "Password security: a case history" посвящена интересным сравнениям механизмов паролей во многих системах. Ее можно найти в т. 2В справочного руководства программиста системы UNIX. В том же томе есть статья Д. Ритчи "On the security of UNIX", в которой поясняется, что безопасность системы в большей степени зависит от мер, принимаемых администрацией, чем от деталей таких программ, как crypt
.
Глава 3
Возможности интерпретатора shell
Интерпретатор shell
— это наиболее важная программа для пользователей UNIX, быть может, за исключением вашего любимого текстового редактора. Она исполняет ваши запросы на запуск программ и занимает гораздо больше вашего времени, чем любая другая программа системы. Значительная часть настоящей главы и гл. 5 будут посвящены описанию возможностей интерпретатора. Основная мысль, к которой мы хотим подвести вас, состоит в том, что если вы научитесь работать с интерпретатором, то сможете достичь многого и без особого труда, не прибегая к традиционным языкам программирования типа Си.
Как уже отмечалось, описание интерпретатора разделено на две части. В этой главе от простейших возможностей, показанных в гл. 1, мы перейдем к рассмотрению некоторых необычных, но широко используемых конструкций, таких, как метасимволы, кавычки, новые команды с переданными им аргументами, переменные shell
и отдельные структуры управления. Все это понадобится вам для эффективной работы с интерпретатором. Материал гл. 5 более сложный. Изучив его, вы сможете писать настоящие программы на языке shell
и даже предоставлять их другим пользователям. Такое деление темы, конечно, во многом произвольно, поэтому мы рекомендуем вам прочитать обе главы.
3.1 Структура командной строки
Прежде чем продолжить рассмотрение, нужно уточнить, что такое команда и как она интерпретируется shell
. Этот раздел содержит более формальное описание и некоторую информацию об основных возможностях интерпретатора, описанных в первой главе.
Самая простая команда состоит из одного слова, обычно имени файла, предназначенного для выполнения (позднее вы познакомитесь с другими типами команд):
$ who
Выполняем файл /bin/who
you tty2 Sep 28 07:51
jpl tty4 Sep 28 08:32
$
Команда, как правило, завершается символом перевода строки, но может завершаться и точкой с запятой:
$ date;
Wed Sep 28 09:07:15 EDT 1983
$ date; who
Wed Sep 28 09:07:23 EDT 1983
you tty2 Sep 28 07:51
jpl tty4 Sep 28 08:32
$
Однако выполнение команды не начнется, пока вы не нажмете клавишу RETURN . Обратите внимание на то, что интерпретатор выдает только одно приглашение после нескольких команд, но если не учитывать этого, то ввод
$ date; who
идентичен вводу двух команд в разных строках. В частности, команда who
не будет выполняться до завершения date
. Попробуйте послать результат выполнения этих команд по программному каналу:
$ date; who | wc
Wed Sep 28 09: 08:48 EDT 1983
2 10 60
$
Возможно, вы получите не то, что ожидали, поскольку только результат команды who
передается команде wc
. При связывании who
и wc
через программный канал образуется единая команда, называемая конвейером, которая выполняется после date
. В процессе разбора командной строки shell
считает приоритет операции '|'
выше, чем операции ';'
. Для группирования команд следует использовать скобки:
$ (date; who)
Wed Sep 28 09:11:09 EDT 1983
you tty2 Sep 28 07:51
jpl tty4 Sep 28 08:32
$ (date; who) | wc
3 16 89
$
Результат выполнения команд date
и who
конкатенируется в один поток, который можно передать по программному каналу.
Информацию, поступающую по программному каналу, можно с помощью команды tee
собрать и поместить в файл (но не в другой программный канал). Команда tee
является частью интерпретатора shell
, но тем не менее удобна и при манипулировании программными каналами. Ее можно использовать для сохранения промежуточного результата в файле:
$ (date; who) | tee save | wc
3 16 89
Результат команды wc
$ cat save
Wed Sep 28 09:13:22 EDT 1983
you tty2 Sep 28 07:51
jpl tty4 Sep 28 08:32
$ wc
3 16 48
$
Команда tee
переписывает свой входной поток в поименованный файл (или файлы), а из него — точно так же без изменений в выходной поток, поэтому wc получает те же самые данные, как если бы команда tee
не присутствовала в конвейере.
В качестве еще одного символа, завершающего команду, применяют амперсанд ( &
). Действие его аналогично действию символа перевода строки и точки с запятой, но он еще и указывает интерпретатору, что не нужно ждать завершения команды. Обычно &
используется для запуска фоновых, долго выполняющихся команд, в то время как вы продолжаете вводить новые команды в диалоге:
$ long-running-command &
5273
Номер процесса длительной команды
$
Приглашение появляется сразу
Имея возможность группировать команды, получаем некоторые интересные способы применения фоновых процессов. Команда sleep
ожидает указанное число секунд, прежде чем закончить свое выполнение:
Интервал:
Закладка: