Брайан Керниган - UNIX — универсальная среда программирования
Почему команда ls -l выдает четыре связи у каталога recipes?
Подсказка: попробуйте ввести
$ ls -ld /usr/you
Чем эта информация полезна?
Упражнение 2.7В чем состоит разница между
$ mv junk junk1
и
$ cp junk junk1
$ rm junk
Подсказка: установите связь с junk и затем используйте ее.
Упражнение 2.8Команда cp не производит копирования во вложенных каталогах, а ограничивается файлами первого уровня вложенности. Каковы будут ее действия, если один из аргументов окажется каталогом? Насколько это хорошо и осмысленно? Обсудите возможные преимущества трех вариантов: включить еще один флаг в cp, чтобы работать с вложенными каталогами, ввести отдельную команду rcp (рекурсивную cp) для данного случая или просто предъявить к cp требование копировать все файлы из каталога, если он встретится среди аргументов (см. гл. 7). Что получат другие программы, если они смогут перемещаться по дереву каталогов?
2.6 Иерархия каталогов
В первой главе рассмотрение иерархии файловой системы, начиная с каталога /usr/you, носило несколько неформальный характер. Теперь мы хотим изучить ее последовательно, начиная от корня дерева.
Корневой каталог называется /:
$ ls /
bin
boot
dev
etc
lib
tmp
unix
usr
$
Программа /unix — это программа ядра UNIX: когда система начинает работу, /unix считывается с диска в память и начинает выполняться. Все происходит за два шага: вначале считывается файл /boot, а затем он считывает /unix. Более подробно о таком процессе раскрутки можно узнать в справочном руководстве по boot(8). Остальные файлы каталога /, по крайней мере в нашей версии, являются каталогами, каждый из которых представляет законченный раздел файловой системы. После дальнейшего краткого обзора иерархии читателю будет предоставлена возможность поэкспериментировать с упоминаемыми здесь каталогами. Чем лучше вы разберетесь в устройстве файловой системы, тем более эффективно сможете ею пользоваться. В табл. 2.1 указаны подходящие места для поиска, хотя некоторые имена каталогов зависят от системы.
/ Корень файловой системы /bin Основные программы, готовые к выполнению (двоичные) /dev Файлы устройств /etc "Разное" системы /etc/motd Сегодняшнее сообщение при входе в систему /etc/passwd Файл паролей /lib Основные библиотеки и т.п. /tmp Временные файлы; обновляется при запуске системы /unix Операционная система в форме, готовой к выполнению /usr Файловая система пользователей /usr/adm Системная служба: справочная информация и т.п. /usr/bin Команды для пользователей: troff и т.п. /usr/games Игровые программы /usr/include Файлы определений Си-программ, например math.h /usr/include/sys Системные файлы определений Си-программ, например inode.h /usr/lib Библиотеки для Си, Фортрана и т.п. /usr/man Диалоговое справочное руководство /usr/man/man1 Страницы справочного руководства раздела 1 /usr/mdec Диагностика ошибок аппаратуры, программы раскрутки и т.п. /usr/news Служба сообщений пользователей /usr/pub "Всякая всячина": см. ascii(7) и eqnchar(7) /usr/src Исходные тексты служебных функций и библиотек /usr/src/cmd Исходные тексты команд из /bin и /usr/bin /usr/src/lib Исходные тексты библиотечных функций /usr/spool Рабочий каталог для взаимодействующих программ /usr/spool/lpd Временный каталог для печатающего устройства /usr/spool/mail Почтовые ящики /usr/spool/uucp Рабочий каталог программ uucp /usr/sys Исходный текст ядра операционной системы /usr/tmp Альтернативный временный каталог (редко используется) /usr/you Ваш начальный каталог /usr/you/bin Ваши собственные программыТаблица 2.1: Интересные каталоги (см. также hier(7))
Каталог /bin вам уже известен: в нем находятся основные программы типа who или ed.
Каталог /dev (device — устройства) мы обсудим в следующем разделе.
Каталог /etc (et cetera — и т.д.) также уже вам встречался ранее. В нем находится различная служебная информация, например файл паролей, и некоторые системные программы, такие, как /etc/getty, которая инициирует связь с терминалом для команды /bin/login, /etc/rc — это файл команд, выполняющихся после раскрутки системы. В файле /etc/group содержатся сведения о составе всех групп.
Каталог /lib (library — библиотека) включает основные части компилятора языка Си, такие, как /lib/cpp — препроцессор Си, /lib/libc.a — библиотека стандартных функций Си.
Каталог /tmp (temporaries — временное) представляет собой хранилище для временных файлов, создаваемых при выполнении программы.
Например, когда вы вызываете редактор, он создает файл с именем типа /tmp/e00512, что позволяет иметь свою копию редактируемого файла, а не работать с оригиналом. Редактор мог бы, конечно, создать копию в вашем текущем каталоге, но есть причина для преимущественного использования /tmp: хотя это и маловероятно, в вашем каталоге уже мог присутствовать файл e00512. Далее каталог /tmp автоматически очищается при запуске системы, так что в случае системной аварии в вашем каталоге не появится ненужный файл. Часто каталог /tmp организуется на диске для обеспечения быстрого доступа к нему. Однако здесь возникает проблема: если сразу несколько программ создают файлы в каталоге /tmp, их файлы могут перепутаться. Именно поэтому редактор ed выбирает особое имя; оно построено таким образом, чтобы никакая другая программа не могла выбрать то же имя для временного файла. В гл. 5 и 6 будет показан способ достижения этого.
Каталог /usr называется файловой системой пользователей, хотя он может быть мало связан с файлами настоящих пользователей системы. На своей машине мы используем исходные каталоги /usr/bwk и /usr/rob, но у вас часть иерархии, начинающаяся с /usr, может быть другой. Независимо от того, находятся ли ваши файлы в каталоге, вложенном в /usr, вы всегда найдете в нем что-нибудь интересное (если нет местной специфики). Так же, как и в каталоге /, здесь есть каталоги с именами /usr/bin, /usr/lib и /usr/tmp. Эти каталоги имеют назначение, сходное со своими тезками в каталоге /, но содержат программы, менее критичные для системы. Например, программа nroff обычно находится в /usr/bin, а не в /bin, библиотеки компилятора с Фортрана располагаются в /usr/lib. Правда, "критичными" для разных систем считаются разные программы. Некоторые системы, такие, как широко распространенная седьмая версия, все программы хранят в /bin, не имея дела с /usr/bin. В других системах каталог /usr/bin разбивается на два каталога в зависимости от частоты использования.