Брайан Керниган - UNIX — универсальная среда программирования
- Название:UNIX — универсальная среда программирования
- Автор:
- Жанр:
- Издательство:Финансы и статистика
- Год:1992
- Город:Москва
- ISBN:5-289-00253-4
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Брайан Керниган - UNIX — универсальная среда программирования краткое содержание
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями shell.
Для программистов-пользователей операционной системы UNIX.
UNIX — универсальная среда программирования - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Введите
$ nohup команда &
и команда будет продолжать выполняться, даже если выйти из системы. Любой результат выполнения команды будет сохранен в файле, называемом nohup.out
. После запуска программы никакая команда nohup
уже не поможет.
Если ваш процесс требует много процессорного времени, вы можете облегчить участь тех, кто работает вместе с вами, запустив его с приоритетом ниже обычного. Это можно сделать с помощью программы nice
:
$ nice большая-команда &
Команда nohup
автоматически вызывает nice
, поскольку раз уж вы собираетесь выйти из системы, то можете позволить, чтобы ваша команда выполнялась дольше.
Наконец, вы можете дать указание системе запустить ваш процесс в необычное время, скажем, утром, когда все нормальные люди снят, а не работают на машине. Команда называется at(1)
:
$ at
время любые команды
какие угодно...
ctl-d
$
Это пример типичного использования команды at
, но, конечно, команды можно брать и из файла:
$ at 3am < файл
$
Время можно задавать исходя из 24-часового цикла как 2130
или 12-часового как 930pm
.
Одним из достоинств системы UNIX является то, что вы можете легко адаптировать ее по своему вкусу либо в соответствии с местными традициями программистского мира. Например, как отмечалось выше, существуют разные стандарты для символов стирания и удаления; по умолчанию используются #
и @
. Вы можете изменить их в любой момент с помощью команды
$ stty erase е kill k
где 'e'
обозначает нужный вам символ стирания, а 'k'
— символ удаления. Однако задавать эти символы при каждом входе в систему — довольно нудное занятие.
На помощь здесь приходит shell
. Если в вашем начальном каталоге есть файл .profile
, интерпретатор будет запускать команды из него при каждом входе в систему перед выдачей первого приглашения. Поэтому можно поместить команды в .profile
для установки требуемой среды, и они будут выполняться всякий раз при входе в систему.
Большинство пользователей первым делом помещают в свой файл .profile
команду
$ stty erase ←
Мы использовали ←, чтобы сделать символ стирания видимым, но вы должны поместить в .profile
настоящий символ "шаг назад". Команда stty
воспринимает также обозначение ^x
в качестве ctl-x
, поэтому тот же результат можно получить, вводя:
$ stty erase '^h'
поскольку ctl-h и есть шаг назад. (Символ '^'
ранее применялся для операции программного канала |
, поэтому его следует экранировать с помощью кавычек.) Если на вашем терминале нет возможности задать интервалы табуляции, можно добавить к строке с stty
аргумент -tabs
:
stty erase '^h' -tabs
Если у вас есть желание посмотреть, как загружена система, при входе в нее добавьте для подсчета пользователей конвейер
who | wc -l
Если имеется служба новостей, можно добавить команду news
. Те, кому нравится игра fortune
, могут добавить
/usr/games/fortune
Спустя некоторое время вы обнаружите, что период входа в систему существенно возрос, и выберете для себя оптимальный вариант.
Некоторыми возможностями системы можно управлять с помощью так называемых shell-переменных, значения которых пользователь может и посмотреть, и установить. Например, строка-приглашение, обозначаемая ранее как $
, на самом деле хранится в shell-переменной, называемой PS1
, и можно присвоить ей любое значение:
PS1='Yes, dear ?'
Да, дорогой?
Кавычки необходимы, поскольку в строке-приглашении есть пробелы, а в этой операции пробелы перед и после "="
не допускаются.
Интерпретатор также выделяет переменные НОМЕ
и MAIL
. НОМЕ
представляет собой имя вашего начального каталога; переменная обычно имеет правильное значение даже без установки ее в .profile
. Переменная MAIL
содержит имя стандартного файла, в котором хранится ваша почта. Если вы переопределите ее для интерпретатора, то будете в случае появления новой почты получать извещение после ввода каждой команды. [4] Эта возможность плохо реализована в shell . Просмотр файла после ввода каждой команды сказывается на времени работы системы. Кроме того, если вы достаточно долго работаете в редакторе, то не узнаете о новой почте, поскольку не задаете новых команд в начальном интерпретаторе shell . Лучшим решением была бы проверка через каждые несколько минут, а не после очередной команды. В гл. 5 и 7 будет показано, как реализовать такую проверку получения почты. Третьим решением, хотя и не для всех доступным, может быть извещение, посылаемое самой программой mail , — она точно "знает", когда появится почта.
MAIL=/usr/spool/mail/you
(В вашей системе файл для почты может быть другим; распространенным является и имя /usr/mail/you
.)
Наиболее полезной переменной интерпретатора shell
, вероятно, считается та, которая определяет, где проводится поиск команд. Вспомните, что, когда вы вводите имя команды, интерпретатор обычно вначале ищет его в текущем каталоге, затем в /bin
и далее в /usr/bin
. Эта последовательность каталогов называется путем поиска и хранится в переменной интерпретатора с именем PATH
. Если определенный по умолчанию путь поиска вас не устраивает, то его можно изменить (опять в файле .profile
). Например, строкой ниже к стандартному пути поиска добавляется /usr/games
:
PATH=.:/bin:/usr/bin:/usr/games/
Один способ…
Синтаксис может показаться вам несколько странным: последовательность имен каталогов разделяется двоеточием. Напоминаем, что обозначает текущий каталог. Можно опустить имя '.'
, пустой компонент в PATH
обозначает текущий каталог.
Другой способ установить значение PATH
— просто добавить к предыдущему значению
PATH=$PATH:/usr/games
… Другой способ
Можно получить значение любой переменной интерпретатора, предварив ее имя символом $
. В приведенном примере выражение $PATH
выбирает текущее значение, к которому добавляется новый компонент, и результат вновь присваивается PATH
. Можно проверить это с помощью команды echo
:
$ echo PATH is $PATH
PATH is :/bin:/usr/bin:/usr/games
$ echo $HOME
Ваш начальный каталог
/usr/you
$
Если у вас есть свои собственные команды, то, возможно, вы захотите собрать их в свой каталог и добавить его к пути поиска. В таком случае переменная PATH
может принять подобное значение:
PATH=:$HOME/bin:/bin:/usr/bin:/usr/games
Вопрос создания своих собственных команд мы обсудим в гл. 3.
Существует еще одна переменная, часто используемая текстовыми редакторами, более популярными, чем ed
, — TERM
, которая указывает тип используемого терминала. Эта информация позволяет программам более эффективно работать с экраном. Поэтому можно в .profile
добавить, например, следующее:
Интервал:
Закладка: