/tmp
Каталог хранения временных файлов, необходимых для работы различных подсистем UNIX. Обычно этот каталог открыт на запись для всех пользователей системы.
Владельцы файлов
Файлы в UNIX имеют двух владельцев: пользователя (user owner) и группу (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 владелец-группа наследуется от владельца группы - каталога, в котором создается файл.
Для изменения владельца файла используется команда 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 (о) | Для остальных пользователей (кроме суперпользователя) |
UNIX поддерживает три типа прав доступа для каждого класса: на чтение (read, обозначается символом на запись (write, обозначается символом w) и на выполнение (execute, обозначается символом x).
С помощью команды ls -l можно получить список прав доступа к файлу:
...
-rw-r--r-- 1 andy group 36482 Dec 22 19:13 report.txt.1
drwxr-xr-- 2 andy group 64 Aug 15 11:03 temp
-rwxr-xr-- 1 andy group 4889 Dec 22 15:13 a.out
-rw-r--r-- 1 andy group 7622 Feb 11 09:13 cont.c
...
Права доступа листинга отображаются в первой колонке (за исключением первого символа, обозначающего тип файла). Наличие права доступа обозначается соответствующим символом, а отсутствие - символом '-'. Рассмотрим, например, права доступа к файлу a.out:
| Тип файла | Права владельца- пользователя | Права владельца- группы | Права остальных пользователей |
|---|---|---|---|
| - | rwx | r-x | r-- |
| Обычный файл | Чтение, запись, выполнение | Чтение и выполнение | Только чтение |
Права доступа могут быть изменены только владельцем файла или суперпользователем (superuser) - администратором системы. Для этого используется команда chmod(1). Ниже приведен общий формат этой команды.

В качестве аргументов команда принимает указание классов доступа - владелец-пользователь, 'g' - владелец-группа, 'о' - остальные пользователи, 'а' - все классы пользователей), права доступа ('r' - чтение, 'w' - запись и 'x' - выполнение) и операцию, которую необходимо произвести ('+' - добавить, '-' - удалить и '=' - присвоить) для списка файлов file1, file2 и т.д. Например, команда
$ chmod g-wx ownfile
лишит членов группы-владельца файла ownfile права на запись и выполнение этого файла.
В одной команде можно задавать различные права для нескольких классов доступа, разделив их запятыми.
Приведем еще несколько примеров:
| $ chmod a+w text | Предоставить право на запись для всех пользователей |
| $ chmod go=r text | Установить право на чтение для всех пользователей, за исключением владельца |
| $ chmod g+x-w runme | Добавить для группы право на выполнение файла runme и снять право на запись |
| $ chmod u+w,og+r-w text1 text2 | Добавить право записи для владельца, право на чтение для группы и остальных пользователей, отключить право на запись для всех пользователей, исключая владельца |
Последний пример демонстрирует достаточно сложную установку прав доступа. Вы можете установить сразу все девять прав доступа, используя числовую форму команды chmod(1):
$ chmod 754 *
Число определяется следующим образом: нужно представить права доступа в двоичном виде (0 - отсутствие соответствующего права, 1 - его наличие) и каждую триаду, соответствующую классу доступа, в свою очередь преобразовать в десятичное число.
| Владелец | Группа | Остальные | ||||||
|---|---|---|---|---|---|---|---|---|
| r | w | x | r | - | x | r | - | - |
| 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 |
| 7 | 5 | 4 | ||||||
Таким образом, приведенный пример эквивалентен следующей символьной форме chmod(1):
$ chmod u=rwx, g=rx, o=r *