Если путь уже существует, вместо удаления / повторного создания следует использовать os.chmod(path, mode)
.
Например:
import os
os.chmod("/var/www/aaa/tmp", 0o777)
Более того chmod
может получить разрешение от модуля stat
.
- stat.S_ISUID - Установить идентификатор пользователя при выполнении.
- stat.S_ISGID - Установить идентификатор группы при выполнении.
- stat.S_ENFMT - принудительная блокировка записи.
- stat.S_ISVTX - сохранение текстового изображения после выполнения.
- stat.S_IREAD - чтение владельцем.
- stat.S_IWRITE - Запись владельцем.
- stat.S_IEXE C - Выполнение владельцем.
- stat.S_IRWXU - Чтение, запись и выполнение владельцем.
- stat.S_IRUSR - чтение владельцем.
- stat.S_IWUSR - запись владельцем.
- stat.S_IXUSR - выполнение владельцем.
- stat.S_IRWXG - чтение, запись, и выполнить по группе.
- stat.S_IRGRP - чтение по группе.
- stat.S_IWGRP - запись по группе.
- stat.S_IXGRP - выполнение по группе. * 104 2 *
- stat.S_IRWXO - чтение, запись и выполнение другими.
- stat.S_IROTH - чтение другими.
- stat.S_IWOTH - запись другими.
- stat.S_IXOTH - Выполнить другими.
Например:
import os
import stat
# Set a file write by others.
os.chmod("/var/www/aaa/tmp", stat.S_IWOTH)
Вы можете установить дополнительные разрешения с помощью побитового оператора.
Например:
import os
import stat
os.chmod(
'/var/www/aaa/tmp',
stat.S_IRUSR |
stat.S_IROTH |
stat.S_IRGRP
)
Полное тестирование:
>>> touch test_perm.sh
>>> ll test_perm.sh
-rw-rw-r-- test_perm.sh
>>> python -c "import os; os.chmod('test_perm.sh', 0755)"
>>> ll test_perm.sh
-rwxr-xr-x test_perm.sh
РЕДАКТИРОВАТЬ:
Если вы получаете исключение PermissionError: [Errno 1] Operation not permitted:...
, когда хотите изменить разрешение с помощью os.chmod
, попробуйте следующую часть кода, чтобы решить ее. Важно запустить скрипт с правами администратора (с sudo
в Linux среде).
Код:
from getpwnam import pwd
from getgrnam import grp
import os
uid = getpwnam("USERNAME")[2]
gid = grp.getgrnam("GROUPNAME")[2]
os.chown("/var/www/aaa/tmp", uid, gid)
На основании официальной chown
документации:
os.chown (path, uid, gid , *, dir_fd = Нет, follow_symlinks = True)
Изменить владельца и идентификатор группы пути на цифры c uid и gid. Чтобы оставить один из идентификаторов без изменений, установите для него значение -1.
Эта функция может поддерживать указание дескриптора файла, пути относительно дескрипторов каталога и не следовать символическим ссылкам.
См. Shutil.chown ( ) для функции более высокого уровня, которая принимает имена в дополнение к цифрам c идентификаторам.
Доступность: Unix.
Новое в версии 3.3: добавлена поддержка указания пути как открытого дескриптор файла и аргументы dir_fd и follow_symlinks.
Изменено в версии 3.6: Поддерживается объект типа пути.
Ссылка на документацию: https://docs.python.org/3/library/os.html#os .chown