На этом шаге мы рассмотрим назначение и изменение прав доступа к файлам и каталогам.
В операционных системах семейства UNIX каждому объекту (файлу или каталогу) назначаются права доступа, предоставляемые той или иной разновидности пользователей: владельцу, группе и прочим. Могут быть назначены следующие права доступа:
Права доступа обозначаются буквами:
Права доступа к файлу определяются записью типа:
-rw-r--r--
Первый символ - означает, что это файл, и не задает никаких прав доступа. Далее три символа (rw-) задают права доступа для владельца: чтение и запись, символ - означает, что права на выполнение нет. Следующие три символа задают права доступа для группы (r--) - только чтение. Ну и последние три символа (r--) задают права для всех остальных пользователей- также только чтение.
Права доступа к каталогу определяются такой строкой:
drwxr-xr-x
Первая буква (d) означает, что это каталог. Владелец может выполнять в каталоге любые действия (rwx), а группа и все остальные пользователи - только читать и выполнять поиск (r-х). Для того чтобы каталог можно было просматривать, должны быть установлены права на выполнение (х).
Права доступа могут обозначаться и числом. Такие числа называются маской прав доступа. Число состоит из трех цифр; от 0 до 7. Первая цифра задает права для владельца, вторая - для группы, а третья - для всех остальных пользователей. Например, права доступа -rw-r--r-- соответствуют числу 644. Сопоставим числам, входящим в маску прав доступа, двоичную и буквенную записи (таблица 1).
Восьмеричная цифра | Двоичная запись | Буквенная запись |
---|---|---|
0 | 000 | --- |
1 | 001 | --x |
2 | 010 | -w- |
3 | 011 | -wx |
4 | 100 | r-- |
5 | 101 | r-x |
6 | 110 | rw- |
7 | 111 | rwx |
Теперь понятно, что, согласно данным этой таблицы, права доступа rw-r--r-- можно записать так: 110 100 100, что и переводится в число 644. Таким образом, если право предоставлено, то в соответствующей позиции стоит 1, а если нет - то 0.
Для определения прав доступа к файлу или каталогу предназначена функция access() из модуля os. Функция имеет следующий формат:
access(<Путь>, <Режим>)
Функция возвращает True, если проверка прошла успешно, или False - в противном случае. В параметре <Режим> могут быть указаны следующие константы, определяющие тип проверки:
>>> import os # Подключаем модуль os >>> os.access (r"file.txt", os.F_OK) # Файл существует True >>> os.access (r"C:\book", os.F_OK) # Каталог существует True >>> os.access (r"C:\book2", os.F_OK) # Каталог не существует False
Чтобы изменить права доступа из программы, необходимо воспользоваться функцией chmod() из модуля оs. Функция имеет следующий формат:
chmod(<Путь>, <Права доступа>)
Права доступа задаются в виде числа, перед которым следует указать комбинацию символов 0o (это соответствует восьмеричной записи числа):
>>> os.chmod(r"file.txt", 0o777) # Полный доступ к файлу
Вместо числа можно указать комбинацию констант из модуля stat. За дополнительной информацией обращайтесь к документации по модулю.
На следующем шаге мы рассмотрим функции для работы с файлами.