- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
UNIX — универсальная среда программирования - Брайан Керниган
Шрифт:
Интервал:
Закладка:
Кроме того, в /usr есть каталог /usr/adm со справочной информацией и /usr/dict, содержащий небольшой словарь (см. spell(1)). Диалоговое справочное руководство хранится в /usr/man (см. в качестве примера /usr/man/man1/spell.1). Если в вашей системе имеются исходные тексты, вы, вероятно, найдете их в /usr/src.
Вероятно, целесообразно потратить немного времени на исследование файловой системы, особенно каталога /usr, чтобы вам было понятно, как она устроена и где что можно найти.
2.7 Файлы устройств
В нашем кратком обзоре мы пропустили каталог /dev по той причине, что файлы в нем дают хорошее общее представление о файлах вообще. Как можно догадаться по его названию, этот каталог содержит файлы устройств ("device" — устройство).
К привлекательным чертам системы UNIX относится форма ее работы с периферийными устройствами: дисками, магнитными лентами, принтерами, терминалами и т.п. Вместо того чтобы иметь специальные системные программы, например программу чтения с магнитной ленты, достаточно создать файл с именем /dev/mt0 (опять-таки местные соглашения могут различаться). В ядре обращения к этому файлу преобразуются в машинные команды обращения к магнитной ленте, как если бы программа читала /dev/mt0, выдавая содержимое магнитной ленты, подключенной к устройству. Например, команда
$ cp /dev/mt0 junk
копирует содержимое магнитной ленты в файл junk. Команда cp не имеет понятия о специфике файла /dev/mt0; для нее он является обычным файлом, т.е. просто последовательностью байтов.
Файлы устройств в чем-то подобны зверинцу, где каждая особь чем-нибудь отличается от остальных, но основные характеристики применимы ко всем. Ниже приведен сокращенный список нашего каталога /dev:
$ ls -l /dev
crw--w--w- 1 root 0, 0 Sep 27 23:09 console
crw-r--r-- 1 root 3, 1 Sep 27 14:37 fcmem
crw-r--r-- 1 root 3, 0 May 6 1981 mem
brw-rw-rw- 1 root 1, 64 Aug 24 17:41 mt0
crw-rw-rw- 1 root 3, 2 Sep 28 02:03 null
crw-rw-rw- 1 root 4, 64 Sep 9 15:42 rmt0
brw-r----- 1 root 2, 0 Sep 8 08:07 rp00
brw-r----- 1 root 2, 1 Sep 27 23:09 rp01
crw-r----- 1 root 13, 0 Apr 12 1983 rrp00
crw-r----- 1 root 13, 1 Jul 28 15:18 rrp01
crw-rw-rw- 1 root 2, 0 Jul 5 08:04 tty
crw--w--w- 1 root 1, 0 Sep 28 02:38 tty0
crw--w--w- 1 root 1, 1 Sep 27 23:09 tty1
crw--w--w- 1 root 1, 2 Sep 27 17:33 tty2
crw--w--w- 1 root 1, 3 Sep 27 18:48 tty3
$
Первое, что здесь бросается в глаза, это то, что вместо количества байтов указывается пара небольших целых чисел, а в первой позиции прав доступа используется 'b' или 'c'. В таком виде команда ls выдает информацию из индексного дескриптора для файла устройств, но не для обычного файла. Обычному файлу предназначен хранимый в индексном дескрипторе список блоков памяти диска, в которых находится содержимое файла. В случае же файла устройств индексный дескриптор содержит внутреннее имя устройства, включающее его тип (символьное с или блочное b) и пару чисел, называемых верхним и нижним числами устройства. К блочным устройствам относятся диски и магнитные ленты, а все остальное: терминалы, принтеры, линии сетевой связи и т.п. — к символьным. Верхнее число устройства обозначает его тип, а нижнее характеризует различные экземпляры устройств одного типа. Например, /dev/tty0 и /dev/tty1 — это два порта одного контроллера терминала, поэтому они имеют одно и то же верхнее число и различные нижние числа.
Файлы для дисков обычно именуются в соответствии с тем вариантом оборудования, которое представлено в системе. Файлы /dev/rp00 и /dev/rp01 названы так потому, что в системе используются дисковые накопители DEC RP06. Есть только один дисковый накопитель, логически поделенный на две файловые системы. Если бы существовал еще один накопитель, связанные с ним файлы имели бы имена /dev/rp10 и /dev/rp11. Первая цифра обозначает номер накопителя, а вторая показывает, какая его часть используется.
У вас может возникнуть вопрос: почему существует несколько дисковых файлов устройств, а не одно? Исторически так сложилось (и для удобства поддержания), что файловая система была разделена на подсистемы. Файлы в подсистеме доступны через каталог главной системы. Программа /etc/mount показывает соответствие между файлами устройств и каталогами:
$ /etc/mount
rp01 on /usr
$
В нашем случае каталог root находится на /dev/rp00 (хотя команда /etc/mount об этом не сообщает), а файловая система пользователей, т.е. файлы из каталога /usr и вложенных каталогов, находится на /dev/rp01.
Каталог /root должен быть доступен системе для выполнения команд. Каталоги /bin, /dev и /etc всегда находятся в корневом каталоге, поскольку при запуске системы доступны только файлы корневого каталога, а такие, как /bin/sh, необходимы для работы. Во время раскрутки системы все файловые системы проверяются на целостность (см. icheck(8) или fsck(8)) и подключаются к корню иерархии файлов. Эта операция подключения называется присоединением и является программистским эквивалентом операции установки пакета дисков на накопитель; обычно она выполняется только суперпользователем. После присоединения /dev/rp01 в качестве /usr файлы пользователей становятся доступными, как если бы они были частью корневого каталога.
Для обычного пользователя детали операции присоединения подсистемы файлов представляют мало интереса, но здесь есть несколько моментов, относящихся к нашей теме. Во-первых, поскольку подсистемы файлов могут быть присоединены и отсоединены, недопустимо устанавливать связь с файлом из другой подсистемы. Например, нельзя связать программы из общего каталога /bin с какими-то файлами из каталогов /bin пользователей, поскольку /usr находится в иной подсистеме файлов, чем /bin:
$ ln /bin/mail /usr/you/bin/m
ln: Cross-device link
$
Проблема могла возникнуть и потому, что значения индексных дескрипторов иногда совпадают в различных файловых системах.
Далее, каждая подсистема ограничена по размеру (числу доступных блоков для файлов) и числу индексных дескрипторов. Если подсистема заполнена, то невозможно расширять файлы в такой системе, пока не будет добавлено какое-то пространство. Команда df ("disc free space" — свободное пространство диска) выдает сообщение о доступном пространстве в присоединенной подсистеме файлов:
$ df
/dev/rp00 1989
/dev/rp01 21257
В каталоге /usr имеется 21257 свободных блоков. Достаточно ли этого пространства или наступил кризис, зависит от того, как система используется; в одних случаях требуется больше свободного пространства, в других — меньше. Кстати, из всех команд df, вероятно, обеспечивает наибольшее разнообразие в формате вывода. Результат действия вашей команды df может выглядеть совершенно иначе.
Рассмотрим теперь некоторые более общие понятия. При входе в систему вы устанавливаете связь вашего терминала с системой и, значит, получаете в каталоге /dev файл, через который передаются вводимые и принимаемые вами символы. Команда tty сообщает, какой терминал вы используете:
$ whoami
you tty0 Sep 28 01:02
$ tty
/dev/tty0
$ ls -l /dev/tty0
crw--w--w- 1 you 1, 12 Sep 28 02:40 /dev/tty0
$ date >/dev/tty0
Wed Sep 28 02:40:51 EDT 1983
$
Заметьте, что вы владелец устройства и только у вас есть право на чтение с него. Иными словами, никто не может непосредственно читать вводимые вами символы, но выводить на ваш терминал может любой. Во избежание этого можно изменить права доступа к устройству, запретив тем самым другим использовать программу write для прямой записи или просто воспользоваться командой mesg.
$ mesg n Запретим сообщения
$ ls -l /dev/tty0
crw--w---- 1 you 1, 12 Sep 28 02:41 /dev/tty0
$ mesg y Разрешим
$ ls -l /dev/tty0
crw--w--w- 1 you 1, 12 Sep 28 02:42 /dev/tty0
$
Часто бывает удобно использовать имя для ссылки на применяемый терминал, но трудно определить, каково имя вашего терминала. Имя устройства /dev/tty является синонимом имени терминала, с которого вы вошли в систему, с каким бы терминалом вы ни работали на самом деле:
$ date >/dev/tty
Wed Sep 28 02:42:23 EDT 1983
$
Имя /dev/tty особенно полезно, если программе необходимо начать диалог с пользователем, в то время когда ее стандартный входной и выходной потоки связаны с файлами, а не с терминалом. Команда crypt является одной из команд, использующих имя /dev/tty. "Открытый" текст поступает из стандартного входного потока, а зашифрованная информация направляется в стандартный выходной поток, поэтому команда crypt читает ключ для шифрования с /dev/tty:

