Читаем UNIX полностью

Текущий каталог представляет собой атрибут процесса, а не пользователя или программы: пользователям соответствуют начальные каталоги, а процессам — текущие. Если процесс порождает процесс-потомка, последний наследует текущий каталог родителя. Но, если затем потомок сменит текущий каталог, родителя это не затронет: его текущий каталог останется тем же, независимо от действий потомка.

Понятие текущего каталога, конечно, обеспечивает удобство обозначения, поскольку освобождает от излишнего ввода, но настоящее его назначение — организационное. Связанные друг с другом файлы находятся в одном каталоге. Каталог /usr обычно является начальным каталогом файловой системы пользователей (usr — сокращение от user, подобно cmp, ls и т.д.). Ваш начальный каталог /usr/you — это ваш текущий каталог при первом вхождении в систему. Каталог /usr/src содержит исходные тексты системных программ, каталог /usr/src/cmd — исходные тексты команд UNIX, /usr/src/cmd/sh — исходные тексты интерпретатора shell и т.д. Всякий раз, когда вы приступаете к новому проекту или когда у вас появляется группа связанных файлов, скажем, набор рецептов, вы можете создать новый каталог с помощью команды mkdir и поместить в него файлы.

$ pwd

/usr/you

$ mkdir recipes

$ cd recipes

$ pwd

/usr/you/recipes

$ mkdir pie cookie

$ ed pie/apple

...

$ ed

...

$

Заметьте, как легко ссылаться на вложенные каталоги. Файл pie/apple имеет очевидный смысл: рецепт яблочного пирога из каталога /usr/you/recipes/pie. Вместо этого вы могли бы поместить рецепт, например, в каталог recipes/apple.pie, а не во вложенный каталог в каталоге recipes, но лучшее решение — собрать все рецепты пирогов вместе. Так, рецепт крема мог бы храниться в recipes/pie/crust, чтобы не дублировать его в рецепте для каждого пирога. Хотя файловая система предоставляет мощное средство организации данных, вы можете забыть, куда помещен файл, и даже какие файлы у вас есть. Естественным решением было бы иметь одну или несколько команд, позволяющих "порыться" в каталогах. Конечно, команда ls помогает искать файлы, но не дает возможности исследовать вложенные каталоги:

$ cd

$ ls

junk

recipes

$ file *

junk: ascii text

recipes: directory

$ ls recipes

cookie

pie

$ ls recipes/pie

apple

crust

$

Эту часть файловой системы можно изобразить графически:

Рис. 2.1: Часть файловой системы

С помощью команды du ("disk usage" — использование диска) вы можете выяснить, какое пространство на диске занято файлами каталога, включая все вложенные каталоги:

$ du

 6 ./recipes/pie

 4 ./recipes/cookie

11 ./recipes

13 .

$

Смысл имен файлов понятен; числа соответствуют количеству блоков на диске (обычно размер блока составляет 512 или 1024 байта) для хранения каждого файла. При использовании каталога число показывает, сколько блоков задействовано всеми файлами этого каталога, включая вложенные каталоги и сам каталог.

Команда du имеет флаг -a ("all" — все), который означает, что требуется выдавать все файлы в каталоге. Если один из них является каталогом, команда du сообщает и о нем:

$ du -а

 2 ./recipes/pie/apple

 3 ./recipes/pie/crust

 6 ./recipes/pie

 3 ./recipes/cookie/choc.chip

 4 ./recipes/cookie

11 ./recipes

 1 ./junk

13 .

$

Выходной поток команды du -a можно направить по программному каналу через команду grep для поиска каких-либо файлов:

$ du -a | grep choc

 3 ./recipes/cookie/choc.chip

$

Напомним (см. гл. 1), что имя '.' — это запись в каталоге, обозначающая сам каталог; оно обеспечивает доступ к каталогу в тех случаях, когда не известно его полное имя. Команда du просматривает файлы в каталоге, причем если вы не указали, в каком именно каталоге следует производить поиск, то она выберет '.', т. е. каталог, с которым вы работаете в данный момент. Значит, junk и ./junk — имена одного и того же файла.

Несмотря на то, что каталоги играют в системе важную роль, они представляются в файловой системе как обычные файлы. Эти каталоги можно читать, но в отличие от традиционных файлов их нельзя создавать и в них нельзя писать. Для сохранения целостности системы и файлов пользователей ядро берет на себя контроль за содержимым каталогов.

Теперь представим содержимое каталога в байтовой форме:

$ od -cb

000000  4   ;   .  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0

       064 073 056 000 000 000 000 000 000 000 000 000 000 000 000

Перейти на страницу:

Похожие книги

Полное руководство по Microsoft Windows XP
Полное руководство по Microsoft Windows XP

В книге известного американского автора описывается среда ОС Windows XP и принципы ее функционирования, приведен сравнительный анализ Windows XP с предшествующими версиями операционной системы Windows. Рассматриваются вопросы применения и модификации нового интерфейса с целью получения прямого доступа ко всем функциям Windows XP обсуждаются варианты подключения к компьютерным сетям. Несколько разделов посвящены работе с реестром и конфигурационными файлами, мультимедийным функциям и разнообразным системным службам, а также методам решения проблем с программным обеспечением и оборудованием. Особое внимание уделено обеспечению безопасности операционной системы.Издание адресовано пользователям и сетевым администраторам, желающим активно применять возможности операционной системы Windows XP (в том числе и недокументированные).

Джон Поль Мюллер , Питер Нортон

ОС и Сети, интернет / ОС и Сети / Книги по IT