os.open не создает файлы с заданным режимом разрешения

При попытке открыть файл с помощью os.open с режимом 777 (что означает все)

os.open("/tmp/lol", flags=(os.O_CREAT), mode=0o777)

Он создает файл без разрешения на запись следующим образом:

-rwxrwxr-x  1 cybellum cybellum       0 Nov 20 09:38 lol*

При попытке использовать chmod ("/ tmp / lol", 0o777), файл получает правильные разрешения:

-rwxrwxrwx  1 cybellum cybellum       0 Nov 20 09:38 lol*

Почему osopen не работает должным образом?
И есть ли способ создать файл с режимом 777 (и если файл существует, он просто изменит разрешения .. (Потому что я попробовал pathlib.Path.touch))?

Всего 1 ответ


Когда вы создаете файл с open , разрешения, указанные в open вызове, изменяются с umask настройки umask . umask определяет биты, которые «замаскированы». В моей системе это выглядит как мой текущий umask 0002 :

$ umask
0002

Это означает, что когда я запускаю код, как ваш:

import os
os.open('testfile', flags=(os.O_CREAT), mode=0o777)

Я получу следующее поведение:

$ python filetest
$ ls -l testfile
-rwxrwxr-x. 1 lars lars       0 Nov 20 07:47 testfile

Я могу настроить umask на разные значения для управления разрешениями, применяемыми по умолчанию:

$ umask 022
$ python filetest
$ ls -l testfile
-rwxr-xr-x. 1 lars lars 0 Nov 20 07:49 testfile

Или же:

$ umask 077
$ python filetest.py
$ ls -l testfile
-rwx------. 1 lars lars 0 Nov 20 07:50 testfile

Подробнее читайте здесь .


Есть идеи?

10000