/lib
В каталоге /lib находятся библиотечные файлы языка С и других языков программирования. Стандартные названия библиотечных файлов имеют вид libx.a (или libx.so), где x — это один или более символов, определяющих содержимое библиотеки. Например, стандартная библиотека С называется libc.a, библиотека системы X Window System имеет имя libX11.a. Часть библиотечных файлов также находится в каталоге /usr/lib.
/lost+found
Каталог "потерянных" файлов. Ошибки целостности файловой системы, возникающие при неправильном останове UNIX или аппаратных сбоях, могут привести к появлению т.н. "безымянных" файлов — структура и содержимое файла являются правильными, однако для него отсутствует имя в каком-либо из каталогов. Программы проверки и восстановления файловой системы помещают такие файлы в каталог /lost+found под системными числовыми именами. Мы коснемся вопроса имен файлов далее в этой главе и, более подробно, в главе 4.
/mnt
Стандартный каталог для временного связывания (монтирования) физических файловых систем к корневой для получения единого дерева логической файловой системы. Обычно содержимое каталога /mnt пусто, поскольку при монтировании он перекрывается связанной файловой системой. Более подробно процесс монтирования и относящиеся к нему структуры данных ядра мы рассмотрим в главе 4.
/u или /home
Общеупотребительный каталог для размещения домашних каталогов пользователей. Например, имя домашнего каталога пользователя andrei будет, скорее всего, называться /home/andrei или /u/andrei. В более ранних версиях UNIX домашние каталоги пользователей размещались в каталоге /usr.
/usr
В этом каталоге находятся подкаталоги различных сервисных подсистем — системы печати, электронной почты и т.д. (/usr/spool), исполняемые файлы утилит UNIX (/usr/bin), дополнительные программы, используемые на данном компьютере (/usr/local), файлы заголовков (/usr/include), электронные справочники (/usr/man) и т.д.
/var
В UNIX System V этот каталог является заменителем каталога /usr/spool, используемого для хранения временных файлов различных сервисных подсистем — системы печати, электронной почты и т.д.
/tmp
Каталог хранения временных файлов, необходимых для работы различных подсистем UNIX. Обычно этот каталог открыт на запись для всех пользователей системы.
Владельцы файлов
Файлы в UNIX имеют двух владельцев: пользователя (user owner) и группу[4] (group owner). Важной особенностью является то, что владелец- пользователь может не являться членом группы, владеющей файлом. Это дает большую гибкость в организации доступа к файлам. Совместное пользование файлами можно организовать практически для любого состава пользователей, создав соответствующую группу и установив для нее права на требуемые файлы. При этом для того чтобы некий пользователь получил доступ к этим файлам, достаточно включить его в группу- владельца, и наоборот — исключение из группы автоматически изменяет для пользователя права доступа к файлам.
Для определения владельцев файла достаточно посмотреть подробный листинг команды ls -l. Третья и четвертая колонки содержат имена владельца-пользователя и владельца-группы, соответственно:
1 2 3 4 5 6 7 8
-rw-r--r-- 1 andy group 235520 Dec 22 19:13 pride.tar
-rw-rw-r-- 1 andy student 3450 Nov 12 19:13 exams.quest
Владельцем-пользователем вновь созданного файла является пользователь, который создал файл. Порядок назначения владельца-группы зависит от конкретной версии UNIX. Например, в SCO UNIX владельцем-группой является первичная группа пользователя, создавшего файл, а в Digital UNIX владелец-группа наследуется от владельца группы — каталога, в котором создается файл.[5]
Для изменения владельца файла используется команда chown(1). В качестве параметров команда принимает имя владельца-пользователя и список файлов, для которых требуется изменить данный атрибут. Например, следующая команда установит пользователя sergey владельцем файлов client.c и server.c:
$ chown sergey client.c server.c
Изменение владельца-группы производится командой chgrp(1). Как и chown(1), в качестве параметров команда принимает имя владельца-группы и список файлов, для которых требуется изменить данный атрибут. Например, для установки группы staff в качестве владельца всех файлов текущего каталога, необходимо задать следующую команду:
$ chgrp staff *
Владение файлом определяет тот набор операций, который пользователь может совершить с файлом. Часть из них, такие как изменение прав доступа или владельца файла (табл. 1.1), может осуществлять только владелец (или суперпользователь), другие операции, такие как чтение, запись и запуск на выполнение (для исполняемых файлов) дополнительно контролируются правами доступа.
Таблица 1.1. Операции изменения владельцев файла
Операция | Команда | Имеет право выполнять | |
---|---|---|---|
в системе BSD 4.x | в системе SVR4 | ||
Изменение владельца-пользователя | chown(1) | суперпользователь | владелец файла |
Изменение владельца-группы | chgrp(1) | суперпользователь | владелец файла только для группы, к которой сам принадлежит (в соответствии с POSIX) |
Права доступа к файлу
В операционной системе UNIX существуют три базовых класса доступа к файлу, в каждом из которых установлены соответствующие права доступа:
User access (u) | Для владельца-пользователя файла |
Group access (g) | Для членов группы, являющейся владельцем файла |
Other access (о) | Для остальных пользователей (кроме суперпользователя) |
4
Группой называется определенный список пользователей системы. Пользователь системы может быть членом нескольких групп, одна из которых является первичной (primary), остальные — дополнительными (supplementary).
5
На самом деле файл создает не пользователь, а процесс, запущенный пользователем. Процесс имеет атрибуты, связанные с пользователем и группой, которые и назначаются файлу при его создании. Более точное описание передачи "владения" имеет вид:
1. Идентификатор владельца-пользователя файла (UID) устанавливается равным EUID процесса, создающего файл (т. е. вызвавшего функцию
2. Идентификатор владельца-группы файла (group ID) устанавливается равным
а) EGID процесса (для версии System V);
б) GID каталога, в котором файл создается (для версии BSD).
Большинство систем, использующих наследование System V, позволяют также устанавливать наследование группового владельца в стиле BSD. Это достигается установкой флага SGID на каталог. Более подробно об этом см. раздел "Дополнительные атрибуты" далее в этой главе.