Жанр: Учеба
Приемы профессиональной работы в Unix
Рас Сэйдж.
Приемы профессиональной работы в UNIX
* ВВЕДЕНИЕ *
Непрерывное снижение цен, рост производительности в наше время и
ожидаемое появление новых микро- и супер-микрокомпьютеров делают мощь
системы UNIX доступной для все большего круга пользователей. Системы
UNIX или типа UNIX работают на любых машинах, от уровня PC-XT до AT и
выше. Доступность больших объемов оперативной памяти и мощных микропроцессоров
привела к возрастанию интереса к многозадачности, системам
мультипроцессирования - сфере, в которой UNIX имеет солидную репутацию.
Однако применение UNIX с максимальной отдачей - дело нелегкое.
Люди годами высказывали неудовлетворение тем, что она не является
"дружественной" по отношению к пользователю - и это разумная критика,
хотя на самом деле UNIX содержит средства для построения интерфейсов
любого требуемого уровня сложности. Наиболее важная причина трудоемкости
эффективного использования UNIX состоит в том, что в системе
используются очень плодотворные идеи, не знакомые многим людям, работавшим
с более простыми операционными системами. UNIX предоставляет
также гораздо больше инструментальных средств, более гибких и с существенно
большими возможностями, чем, например, популярная MS-DOS (в
чем можно убедиться беглым сравнением соответствующих руководств).
Вероятно, Вы, читатель, начинали с изучения UNIX в объеме, достаточном
для решения конкретных задач в вашей системе, будь то текстовая
обработка и форматирование текстов, программирование или запуск статистических
пакетов. Через некоторое время вы, видимо, накопили (от
других людей или в результате собственной работы) небольшой набор приемов,
включающий, возможно, некоторый опыт простого программирования
для интерпретатора командного процессора.
Хотя это естественный путь развития, принимая во внимание, что в
UNIX более 200 команд, вы можете не заметить или пропустить многие
мощные и полезные идеи. Более важно то, что вы можете лишиться
перспективного взгляда, который приходит с полным пониманием того, как
работают различные части UNIX, и концепций, которые лежат в их основе.
В книге показаны многие полезные инструментальные средства и приемы,
которые вы можете сразу применять в работе, чтобы значительно повысить
производительность UNIX. В отличие от некоторых книг, которые
просто представляют набор командных файлов или других средств, здесь
описываются подробности того, как работает каждая программа, и указываются
некоторые направления адаптации программ для ваших конкретных
нужд. Сочетание инструментальных средств, концепций и техники решения
задач поможет вам стать мастером UNIX.
ЧТО ВЫ ДОЛЖНЫ УЖЕ ЗНАТЬ
Для того, чтобы извлечь пользу из данной книги, вы должны обладать
некоторым базовым опытом работы в системе UNIX. Вы должны знать
общие аспекты файловой системы, такие, как каталоги, вложенность и
маршрутные имена. Вы должны знать, как использовать один из редакторов
UNIX, чтобы вводить командные файлы интерпретатора командного процессора
и, по крайней мере, слегка знать программирование с использованием
командного процессора. Мы сделали мало допущений, касающихся
того, что вы должны знать о данной команде или особенностях UNIX. Каждая
команда или понятие объясняется, когда оно вводится, а периодические
экскурсы в ваши руководства по UNIX могут прояснить все темные
места. Запомните одно: имеется так много команд с таким большим количеством
опций, что даже мы, профессионалы, должны время от времени обращаться
к книге.
Если вы только начинаете использовать UNIX, то книга "UNIX Primer
Plus" ("Расширенный букварь по UNIX") Митчела Уэйта (Mitchell Waite),
Дональда Мартина (Donald Martin) и Стефена Прата (Stephen Prata)
(SAMS, 1983) даст вам исчерпывающее введение в предмет. Если вы уже не
новичок, но все еще не имеете четкого представления о внутренней работе
командного процессора и программировании для него, то вам даст фундаментальные
основы другая книга - "Advanced UNIX - A Programmer's
Guide" ("Руководство программиста по расширенному UNIX") Стефена Прата
(SAMS, 1985). Фактически эта книга является идеальным спутником и
справочником для дополнительных исследований, которые составляют нашу
книгу.
О КАКОЙ СИСТЕМЕ UNIX ИДЕТ РЕЧЬ
Имеется, конечно, много вариантов UNIX. Помимо основных семейств
реализаций UNIX (AT&T System V, Microsoft XENIX и Berkeley [BSD]),
распространено несколько различных командных процессоров, среди которых
наиболее широко используются два - командный процессор Bourne командный
процессор Си. Все командные файлы в данной книге были проверены
и в System V, и в XENIX с использованием командного процессора
Bourne, за исключением тех случаев, которые специально отмечены. БОЛЬШИНСТВО
наших командных файлов работает также под управлением командный
процессор Bourne в BSD, хотя нескольких команд System V нет в
системе BSD и наоборот. Мы пытались указать те места, в которых эти
две системы существенно отличаются, и дать некоторые альтернативные
подходы для пользователей BSD.
Большинство наших командных файлов было также переписано для запуска
под управлением программного процессора Си после учета синтаксических
отличий. Если вы пользуетесь командным процессором Bourne
и хотели бы поэкспериментировать с программным процессором Си, то хорошим
введением является указанная ранее книга "Advanced UNIX - A
Programmer's Guide".
Если один из наших командных файлов не работает в вашей системе,
не впадайте в панику. Проверьте, пожалуйста, следующее:
- Какая у вас версия UNIX? Отмечали ли мы что-нибудь относительно
этой версии?
- Какой командный процессор вы используете (Bourne, Си или дру-
гой)?
- Должны ли вы поменять маршрутное имя в силу того, что в вашей
системе что-то находится в другой части?
- Не утратили ли вы прав доступа к определенному файлу? Не нужно
ли вам применить команду su, чтобы получить другой идентифика-
тор пользователя или стать в корень?
- Использует ли данный командный файл предварительно под-
готовленный командный файл, который вы еще не ввели в
вашу систему?
Большинство из этих советов довольно очевидны, но никогда не мешает
сделать глубокий вдох и внимательно подумать, прежде чем нырять в
отладочные сеансы.
ОБЗОР ГЛАВ
Давайте бросим беглый взгляд на то, что описывается в данной книге,
чтобы вы получили представление о предмете книги и знали, где найти
нужную тему.
способы обращения пользователей к ее различным частям. Вы увидите, каким
образом ваш рост как мастера UNIX позволит вам максимально успешно
применять все аспекты и особенности среды.
В главе 2 рассматривается наиболее важная особенность среды UNIX
- файловая система - и вводятся инструментальные средства для изучения
файловых структур и содержимого файлов.
дач по сопровождению файлов - для копирования и сохранения файлов и
для удаления ненужных файлов.
В главе 4 описываются виды файлов, которые важны для программной
документации, и предоставляются инструментальные средства, которые облегчают
вам сопровождение вашей растущей коллекции программных
средств.
В главе 5 обращено внимание на вашу собственную среду (home-среду)
и личное администрирование. Сюда относится управление вашим планированием
и задачами. Представлено несколько полезных средств, помогающих
вам.
вателях и средства для обеспечения безопасности вашего рабочего пространства
в системе.
В главе 7 рассматриваются некоторые аппаратные части устройств
UNIX, особенно, терминалы и диски с некоторыми примерами инструментальных
программных средств. Включены также инструменты для работы с
файловыми системами.
рой быстро возрастает. Этот материал поможет вам работать с несогласованными
модемами, а также с проблемами безопасности и управления, которые
возникают при работе с командами cu и uucp. Предлагаемые
средства помогут вам в работе как с коммуникациями от UNIX к другой
операционной системе, так и от UNIX к UNIX. Приведены также практические
примеры аппаратных конфигураций.
пасность. Вы можете найти здесь информацию, которую вы могли бы получать
самостоятельно только посредством многолетнего чтения и экспериментирования.
Поскольку UNIX становится более распространенным в "реальном
мире", безопасность становится очень важным вопросом. Мы
представляем концепции, даем информацию о том, за чем необходимо следить,
и инструментальные средства, помогающие следить.
включающих одну-две командные строки, которые действуют неожиданно эффективно.
Набор приложений предоставляет информацию, полезную при программировании
с помощью командного процессора и при отладке.
Поскольку некоторые из инструментальных средств используют командные
файлы, введенные ранее в данной книге, вы должны работать над
книгой в соответствии с последовательностью глав, когда внедряете командные
файлы в вашу систему. Однако вам не помешает сначала перелистать
всю книгу.
* ГЛАВА 1. Среда системы UNIX *
Введение
Многообразие сред системы UNIX
Ваш регистрационный каталог: как сделать его комфортным
Теории относительности a la UNIX
Жизнь системы UNIX: некоторые метафоры
СРЕДА СИСТЕМЫ UNIX
ВВЕДЕНИЕ
В данной главе рассматривается среда, которая существует в системе
UNIX и вокруг нее. Освещение всех аспектов среды UNIX было бы слишком
громоздкой задачей и выходит за пределы данной книги. Даже отдельным
утилитам, таким как fsdb и sdb, нужны свои собственные книги, чтобы
отдать им должное. Мы пытаемся дать читателю начальные сведения,
философию и ощущение системы UNIX, что лежит в основе исследований и
инструментов, представленных в этой книге.
Читая эту главу, вы, возможно, захотите прочитать (или перечитать)
команды profile(4), environ(5), term(5), termcap(5) и termio(7)
в руководствах по UNIX, чтобы ознакомиться с механизмами, которые предоставляет
UNIX для установки рабочей среды.
Внутри системы UNIX существует множество различных подсред. Все
вместе они образуют общую картину, в виде которой мы представляем себе
UNIX. Эта книга посвящена наиболее важным аспектам среды UNIX с целью
закладывания фундамента, необходимого для понимания всей системы. Это
даст вам контекст, в котором можно посмотреть на собственную работу в
системе, независимо от того, являетесь вы пользователем, программистом
или администратором системы.
В данной главе рассматриваются различные среды в компьютерах с
теоретической точки зрения, описывается "домашняя" среда и методы ее
установки, способы использования условных обозначений и глобальная
среда.
"МНОГООБРАЗИЕ СРЕД"
Каждая компьютерная система поддерживает много различных сред.
Эти среды используются как строительные блоки для создания функциональных
рабочих систем. Различные уровни необходимы как для сокращения
объема работы по управлению машиной, так и для построения такого интерфейса,
чтобы мы могли использовать компьютер на относительно высоком,
удобном для человека уровне.
Мы рассматриваем эту модель, так как она помогает выстроить в ряд
уровни, на которых мы можем работать. Имея больше знаний о том, где мы
находимся в системе, и о том, как она функционирует вокруг нас, мы можем
легче строить растущие абстрактные модели на вершине тех моделей,
которые уже имеются. Компьютеры - это фактически рабочие модели
абстракций, так что чем больше мы понимаем модели, тем лучше мы можем
использовать их для упрощения и ускорения нашей работы.
Многообразие моделей на рис.1-1 . демонстрирует различные уровни,
функционирующие внутри компьютера. Нижний слой - это стартовая точка,
от которой многообразие растет вверх. Каждый уровень строится на предыдущем
и используется для поддержки уровня, расположенного над ним.
Для каждого более высокого уровня среда более объемна и более "виртуальна"
в том смысле, что имеет место меньше условных ограничений.
Верхние уровни используют для своей работы нижние и, таким образом,
скрывают подробности, необходимые для работы этих нижних уровней. Мы
можем создать модели высокого уровня, которые работают на машине более
низкого уровня, не зная ничего о нижних уровнях.
Давайте бросим беглый взгляд на уровни модели и поговорим о том,
какими из них оперирует данная книга.
Рис. 1-1
Многообразие компьютерных сред
---------------------------------------------------------------------------
\ L7 / Командные файлы (scripts)
\________________________________/
\ L6 / Прикладные программы,
\____________________________/ интерпретатор команд, языковые генераторы
\ L5 / Компилятор
\________________________/
\ L4 / Операционная система
\____________________/
\ L3 / Ядро
\________________/
\ L2 / Условная машина, ассемблер
\____________/
\ L1 / Микропрограммы
\________/
\ L0 / Логические схемы, аппаратные средства
\____/
---------------------------------------------------------------------------
УРОВЕНЬ 0 - АППАРАТНЫЕ СРЕДСТВА
На самом нижнем уровне находятся аппаратные средства и логические
цепи. Этот уровень определяет способ хранения и обработки данных во
всех аппаратных средствах. Поскольку технология изготовления кремниевых
микросхем продолжает развиваться, этот уровень становится физически
меньше и проще, тогда как скорости запоминания и обработки продолжают
расти. На этом уровне компонентами являются центральный процессор
(ЦП), память, микросхемы поддержки и системная шина.
Отметим, что хотя прогресс на этом уровне продолжается, это вызывает
очень малые изменения на верхнем слое пирамиды. Философия системы
UNIX состоит в том, чтобы изолировать низкоуровневый аппаратный слой и
обеспечить единообразные интерфейсы к нему, которые не нуждаются в изменениях
"наверху". Верхний слой даже не должен знать о нижнем слое.
Это не значит, что события в мире аппаратуры не важны в реальном мире,
ведь противоречия реального мира влияют на скорость и емкость
ресурсов, не говоря уже об их стоимости.
УРОВЕНЬ 1 - МИКРОКОМАНДЫ
Этот уровень во многом похож на язык программирования. Он является
инструментом, который использует архитектор системы для создания
"родного" машинного языка. Машинный язык сообщает аппаратуре, какую
конкретную команду следует выполнить.
В начале эволюции ЦП большинство наборов команд были аппаратно
кодированными. Это значит, что когда ЦП получал команду, декодирование
и выполнение производилось непосредственно цепями в кремниевой микросхеме.
Благодаря прогрессу в технологии ЦП, некоторые микросхемы могут
быть программируемыми на уровне исполнения команд, что позволяет
конструкторам создавать и реализовывать новые наборы команд с минимальными
усилиями.
УРОВЕНЬ 2 - УСЛОВНАЯ МАШИНА
Данный уровень обеспечивает трансляцию из мнемоник языка ассемблера
в коды операций и данные машинного языка. Язык ассемблера - это
некоторая англо-подобная нотация, которая облегчает человеку понимание
и управление работой компьютеров.
Условная машина поддерживается ассемблером. Ассемблер может превращать
идеи более высокого уровня в цепочки чисел, которые могут быть
затем выполнены. Наряду с ассемблером, применяются модели, помогающие
использовать аппаратуру компьютера. Здесь мы можем определить такие
вещи, как стеки, вектора прерываний и периферийный ввод-вывод.
УРОВЕНЬ 3 - ЯДРО
Ядро является следующим логическим продвижением вверх и концепцией,
которую можно теперь реализовать программно на условной машине.
Ядро предоставляет среду, поддерживающую еще большие абстракции, чем
те, что рассматривались до сих пор. Двумя наиболее важными абстракциями
на уровне ядра являются управление процессами для мультипрограммирования
и многозадачности, и файловая система, которая управляет хранением,
форматом, поиском файлов и т.п. Когда эти две области переплетаются,
мы имеем базовую функцию многопользовательской машины и ядро
операционной системы.
Одной из наиболее важных областей, которыми управляет ядро, является
безопасность. Проверки идентификации пользователя выполняются в
системных вызовах внутри ядра. Определенные механизмы используются ядром
для управления безопасностью файлов, устройств, памяти и процессов.
Единственный способ отключить механизмы безопасности состоит
в изменении исходного кода ядра и перекомпиляции всей системы, что
крайне нежелательно.
УРОВЕНЬ 4 - ОПЕРАЦИОННАЯ СИСТЕМА
Данный уровень строится на ядре, чтобы создать полную операционную
среду. Потребность в дополнительных функциях системы можно удовлетворить
созданием автономных программ, имеющих конкретное назначение.
Таким образом, совокупность всех специфических функций определяет
операционную систему.
УРОВЕНЬ 5 - КОМПИЛЯТОРЫ
Компилятор - это инструмент (или программа), построенный на операционной
системе для дальнейшей разработки более совершенных и более
мощных сред. Новые среды могут предполагать еще большие абстракции,
чем на нижнем уровне, и делать больше допущений о том, что уже существует.
Это делает возможным символические конструкции более высокого
уровня, такие как структуры данных и управляющие структуры. Результатом
является прикладная программа.
С помощью компилятора мы можем определить совершенно новый язык и
сделать его рабочим на компьютере, написав компилирующую программу,
которая читает этот новый язык. Это открывает целые новые области во
взаимодействии человека с машиной. Высокоуровневые языки могут воплощать
различные подходы к решению задач, например, процедурную модель
или объектно-ориентированную модель, и в конце концов, очевидно, могут
достичь выразительной мощи разговорного языка типа английского.
УРОВЕНЬ 6 - ПРИКЛАДНЫЕ ПРОГРАММЫ
В наше время прикладные программы могут означать массу разнообразных
вещей. Мы можем предположить, что любая программа, которая сделана
с помощью компилятора, является прикладной программой. Примерами
возможных прикладных программ являются следующее поколение языков, интерпретаторов
и генераторов прикладных программ. Интерпретатор - это
программа, написанная на распространенном языке высокого уровня, которая
может декодировать и исполнять другой синтаксис (или язык). Примером,
который интересует нас в системе UNIX, является командный процессор
shell. Это программа на языке Си, созданная для чтения и исполнения
команд, записанных по правилам синтаксиса, определенных командным
процессором shell.
Генератор прикладных программ - это программа, написанная на языке
высокого уровня. Она предназначена для получения достаточной информации
от пользователя о его приложении и может использовать компиляторный
язык, например Си, для написания прикладной программы, реализующей
то, что требуется. Пользователь ничего не программирует. Выходом
генератора является рабочая программа.
UNIX не делает особых различий между уровнями. Некоторые особенности
системы, например, конвейеры, являются частью ядра на нижнем
уровне. Команда типа cat выполняет довольно простую функцию на уровне
операционной системы. Нечто подобное ls напоминает простую прикладную
программу с относительно малым набором опций. Большие программы, подобные
семейству roff, определенно являются полновесными приложениями,
а средства типа sed и awk являются фактически интерпретаторами небольших
языков программирования. Замечательной особенностью системы UNIX
является единообразие, которое она вносит в этот широкий диапазон
функций.
УРОВЕНЬ 7 - КОМАНДНЫЕ ФАЙЛЫ
Этот верхний уровень является языком, который интерпретирует
программа /bin/sh (в случае командного процессора Bourne shell). Ее
синтаксис поддерживает полный язык программирования. Хотя этот язык
лишен ряда встроенных структур и функций современного языка высокого
уровня, он имеет все необходимое для написания полезных программ.
Большим плюсом является то, что языку командного процессора доступны в
качестве внешних функций любые средства, утилиты и программы, которые
имеются в системе UNIX. Это значит, что алгоритмы, которые могут потребовать
сто или более строк на языке низкого уровня типа Си, язык командного
процессора может выразить в двадцать строк. За счет потери
производительности, разумеется.
ВАШ "РЕГИСТРАЦИОННЫЙ КАТАЛОГ"
Поскольку UNIX создавалась как многопользовательская система,
многое сделано для того, чтобы система была безопасной и удобной для
каждого пользователя. Вам выделяется определенная часть файловой
системы (т.е. область на диске), которая является полностью вашей и
больше ничей. Вы можете заблокировать вашу область так, чтобы никто не
мог заглянуть вовнутрь, или же можете оставить ее открытой, чтобы другие
люди могли читать эту область или писать в нее.
Помимо определения вашего места в системе, можно привязать "домашний"
каталог (home-catalog) к вашим точным спецификациям. "Регистрационный
каталог" - это не только область файловой памяти, но и вся
ваша среда. Можно установить переменные командного языка для определения
путей по системе. Можно создать инструментарий, чтобы помочь вам в
работе.
ЧТО ТАКОЕ СОСЕДСТВО?
Во многих более старых мини- и микрокомпьютерах среда имеет
"плоскую" файловую систему. Это значит, что все файлы размещаются в
одной огромной области хранения и нет логических разделов для их разграничения.
Отсутствие разделов порождает массу файлов, через которые
нужно пробраться, когда вы хотите найти определенный элемент. Некоторые
системы имели в своих файловых системах групповые разделы, но
обычно такие разделы были различными плоскими файловыми системами.
Время показало, что такой тип среды (или модели) - не лучшее решение.
Решение, которое использует UNIX,- перевернутая модель дерева.
Корень системы находится наверху, а ветви растут в стороны и вниз.
Имеется один и только один корень наверху. Ветви могут исходить в любом
направлении и простираться вниз на любую глубину. Кроме того, вы
можете иметь присоединяемые ветви, которые можно изъять из системы, а
затем вернуть обратно. Они монтируются на существующую в системе древовидную
структуру.
Когда вы регистрируетесь в системе, вы можете попасть в любое
место древовидной структуры. Регистрационный каталог определяется в
файле паролей. К ней можно обратиться по имени $HOME, которая является
одной из предопределенных переменных командного языка для вашего
использования. Теперь у вас есть персональная древовидная структура
под этим именем каталога. Она полностью ваша и может быть сделана недоступной
для кого угодно, кроме корня. Вы можете организовать ваш регистрационный
каталог ($HOME) любым приемлемым для вас способом.
ПЛАНИРОВКА РЕГИСТРАЦИОННОГО КАТАЛОГА
Как только ваш регистрационный каталог присоединен к определенному
месту дерева, вы получаете полное управление структурой, которая
существует ниже этого места. Вы можете оставить ее плоской или сделать
подобной дереву. Эта структура зависит фактически от ваших потребностей
и энтузиазма в эксплуатации вашей собственной области. Наибольшая
выгода для нас состоит в том, чтобы использовать вашу "домашнюю"
среду для поддержки ваших работ и максимально уменьшить объем ручной
работы. В следующих двух главах описано множество средств, которые могут
работать с вашей личной файловой системой.
На рис.1-2 показана древовидная структура вашего регистрационного
каталога. Эта планировка представляет каркас среды, который вы можете
заполнить соответствующей информацией.
По мере того, как растет ваше мастерство использования системы,
вам могут понадобиться эти типы областей для размещения в них информации.
Вы обнаружите также, что наш сценарий хранения информации предполагает
движение по деревьям, или их обход, так что вам гарантируется
выгода от использования иерархической конструкции.
Давайте пройдемся по этой примерной структуре и определим, каковы
ее части. Данная структура включает много файлов и каталогов, но все
они имеют определенное назначение. Возможно, вы не захотите использовать
в точности эти имена, но вы получаете совет, какие типы категорий
могут встретиться и как использовать систему для поддержки этой структуры.
Корнем этого дерева является регистрационный каталог, который определен
в пятом поле файла /ets/passwd. Использование файла паролей
описано в passwd(4). Вот пример парольного входа автора:
russ:.pDIPADYfIXBY:103:101:Russ Sage:/usr/russ:/bin/sh
Слева направо вы видите имя пользователя (russ), пароль
(.pDI...), идентификатор пользователя (103), идентификатор группы
(101), личный комментарий, имя регистрационного каталога (/usr/russ) и
командный процессор shell, получаемый при входе в систему (/bin/ sh).
ФАЙЛЫ В РЕГИСТРАЦИОННОМ КАТАЛОГЕ
Файлы, описываемые ниже, разделяются на три категории: файлы, которые
обычно присутствуют в вашей системе, если вы работаете в System
V, файлы, которые имеются обычно в Berkeley 4.2, и файлы, которые создаются
при использовании программ из настоящей книги.
ФАЙЛЫ System V
Первый файл - это .news_time. Дата эт
...Поділитися у соцмережах