2014-08-28 4 views
2

Я пытаюсь использовать createFile с атрибутом FileAttribute, полученным от "rw-rw-rw-". Мой файл создается как "rw-rw-r--" на Fedora.Как установить OTHERS_WRITE при создании файла?

Как настроить OTHERS_WRITE при создании файла?

Пример:

(->> "rw-rw-rw-" 
    PosixFilePermissions/fromString 
    PosixFilePermissions/asFileAttribute 
    vector 
    into-array 
    (Files/createFile (Paths/get "temp" (into-array String [])))) 
;;; temp is created as rw-rw-r-- 

ответ

3

В UNIX подобных системах каждый процесс имеет свойство umask, который маскируется на разрешения любого файла, созданного и наследуется дочерними процессами. по умолчанию 0002 или «выключить запись для других». Поэтому наиболее вероятно, что Java устанавливает разрешение, которое вы ищете, а затем оно замаскировано. Вы можете явно установить разрешения after, создав файл, или измените настройки umask java-процесса до, вы его запустите.

Сначала давайте посмотрим на текущий UMASK:

[email protected]:/tmp$ umask 
0002 

затем позволяет сделать файл с правами на чтение и запись для всех (прикосновение делает это так же, как ваш код Java)

[email protected]:/tmp$ touch foo 
[email protected]:/tmp$ ls -l foo 
-rw-rw-r-- 1 arthur arthur 0 Aug 28 13:58 foo 

мы видим что октал 0002 был замаскирован из фактических прав доступа к файлам.
Таким образом, мы можем удалить это биты полномочий, установив его в 0000:

[email protected]:/tmp$ umask 0000 
[email protected]:/tmp$ touch foo 

И мы видим, что Foo остается, как это было при обновлении, так как umasks применяются только к новых файлов. и новая файловая панель создается с помощью разрешения чтения-другого.

[email protected]:/tmp$ ls -l foo 
-rw-rw-r-- 1 arthur arthur 0 Aug 28 14:00 foo 
[email protected]:/tmp$ touch bar 
[email protected]:/tmp$ ls -l bar 
-rw-rw-rw- 1 arthur arthur 0 Aug 28 14:00 bar 

Я в привычке настройки разрешений явно после создания файла в Java, потому что это несет более легко от системы * Вы можете доказать это вашу собственную личность, установив в ваших биты полномочий оболочки перед запуском emacs/your-program и после проверки прав доступа к файлам.

* Java - это «писать, когда-нибудь бежать», а?