2017-01-26 24 views
6

Genel yazma izinleri ile dizin oluşturmaya çalışıyorum. İşleri kolaylaştırmak için 777 izinlerinin olmasını istiyorum. Bu /tmp/data/2016/01 gibi klasörleri oluşturmalısınız rootDirectory=/tmp/data ileJava - 777 izni ile dizin oluşturulamadı (bunun yerine 775 var)

private static FileAttribute<Set<PosixFilePermission>> DIR_PERMISSIONS; 
static { 
    Set<PosixFilePermission> perms = new HashSet<>(); 
    perms.add(PosixFilePermission.OWNER_WRITE); 
    perms.add(PosixFilePermission.OWNER_READ); 
    perms.add(PosixFilePermission.OWNER_EXECUTE); 
    perms.add(PosixFilePermission.GROUP_WRITE); 
    perms.add(PosixFilePermission.GROUP_READ); 
    perms.add(PosixFilePermission.GROUP_EXECUTE); 
    perms.add(PosixFilePermission.OTHERS_WRITE); 
    perms.add(PosixFilePermission.OTHERS_READ); 
    perms.add(PosixFilePermission.OTHERS_EXECUTE); 
    DIR_PERMISSIONS = PosixFilePermissions.asFileAttribute(perms); 
} 

private Path ensurePath(LocalDate localDate) throws IOException { 
    String year = String.valueOf(localDate.getYear()); 
    String month = String.format("%02d", localDate.getMonthValue()); 
    Path path = Paths.get(rootDirectory, year, month); 
    return Files.createDirectories(path, DIR_PERMISSIONS); 
} 

, her 777 ile izinleri: İşte benim kod. Bunun yerine, klasörler 775 izinlerine (drwxrwxr-x.) Sahiptir, bu nedenle genel yazma yoksundur. Neden bu şekilde çalışıyor? Belki de JVM, bu tür izinleri ayarlayabilmek için özel bir parametreye ihtiyaç duyar? Benim sistemim Fedora 24, uygulama maven eklentisi tarafından başlatılan standart Spring Boot uygulaması.

+1

@ OlivierGrégoire Bu bir kopya değil çünkü açıklamasın * neden * 775 olarak çıkıyor. – Michael

+1

@Michael Buradaki sorunun ana kısmı "yapamıyorum", "neden" değil. Diğer konudaki kabul edilen cevap, bunu düzeltmek için tamamlandı. –

+0

@ OlivierGrégoire "** Neden bu şekilde çalışıyor?" – Michael

cevap

0

Tamam da bu işte beni merak var gider:

Google, bu yol açan

: https://stackoverflow.com/a/25557947/6768037 ("Java aradığınız izni ayarlama ve daha sonra dışarı maskeli ediliyor.") daha sonra geri açar Orijinal olarak sağlanan @ OlivierGrégoire bağlantısını yapın. umask sert bir metresi.

Spring Boot'un bu davranışla ilgisi yoktur. Aşağıda basit bir kavram kanıtıdır. Benim varsayılan umask 0002'dir. Benim/tmp dizini başlangıçta boştur.

public class Test { 
    public static void main(String[] args) { 
     Set<PosixFilePermission> fullPermission = new HashSet<PosixFilePermission>(); 
     fullPermission.add(PosixFilePermission.OWNER_EXECUTE); 
     fullPermission.add(PosixFilePermission.OWNER_READ); 
     fullPermission.add(PosixFilePermission.OWNER_WRITE); 

     fullPermission.add(PosixFilePermission.GROUP_EXECUTE); 
     fullPermission.add(PosixFilePermission.GROUP_READ); 
     fullPermission.add(PosixFilePermission.GROUP_WRITE); 

     fullPermission.add(PosixFilePermission.OTHERS_EXECUTE); 
     fullPermission.add(PosixFilePermission.OTHERS_READ); 
     fullPermission.add(PosixFilePermission.OTHERS_WRITE); 

     Path path = Paths.get("/tmp/data/", "01/26"); 
     try { 
      Files.createDirectories(path, PosixFilePermissions.asFileAttribute(fullPermission));    
      outputLS(path);   
      Files.setPosixFilePermissions(path, fullPermission);    
      outputLS(path);   
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    private static void outputLS(Path path) throws IOException { 
     System.out.println(new java.util.Scanner(Runtime.getRuntime().exec("ls -alt " + path.toAbsolutePath() + "/..").getInputStream()).useDelimiter("\\A").next()); 
    } 
} 

Verim:

total 12 
drwxrwxr-x 3 jsampson jsampson 4096 Jan 26 21:53 . 
drwxrwxr-x 2 jsampson jsampson 4096 Jan 26 21:53 26 
drwxrwxr-x 3 jsampson jsampson 4096 Jan 26 21:53 .. 

total 12 
drwxrwxr-x 3 jsampson jsampson 4096 Jan 26 21:53 . 
drwxrwxrwx 2 jsampson jsampson 4096 Jan 26 21:53 26 
drwxrwxr-x 3 jsampson jsampson 4096 Jan 26 21:53 .. 

umask'ı Sadece tüm dosya/dizin oluşturma izinleri sorumlu olduğunu. Oluşturulduktan sonra değişiklik yapmak mümkündür.

+1

Çok teşekkür ederim, çalışıyor. Umask hakkında daha fazla şey öğrenmeliyim. – xianoss

İlgili konular