2017-01-26 11 views
6

私はパブリック書き込み権限でディレクトリを作成しようとしています。私はそれが777権限を持っていることを簡単にするために。ここに私のコードは次のとおりです。rootDirectory=/tmp/dataJava - 777パーミッションのディレクトリを作成できません(代わりに775)

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); 
} 

これは/tmp/data/2016/01777権限を持つそれぞれのようなフォルダを作成する必要があります。代わりに、フォルダには775権限(drwxrwxr-x。)があるので、パブリック書き込みが不足しています。なぜこのように動作していますか?そのようなパーミッションを設定するには、JVMに特別なパラメータが必要なのでしょうか? 私のシステムはFedora 24です、appは標準のSpring Bootアプリケーションで、mavenプラグインで起動します。

+1

@OlivierGrégoireなぜそれが775として出てくるのか説明していないので重複していません。 – Michael

+1

@Michaelここの質問の主な部分は「私はできません」、「なぜ」ではありません。他のトピックで受け入れられた答えは、それを修正する方法として完全です。 –

+0

@OlivierGrégoire "**なぜこのように動作していますか? – Michael

答えて

0

はオーケーだけでなく、これはので、ここで私は好奇心旺盛だ行く:

Googleはこれにつながった:https://stackoverflow.com/a/25557947/6768037「Javaは、あなたが求めるし、それがマスクされているの許可を設定している。」)当時につながります@OlivierGrégoireが最初に提供したリンク。 umaskはひどい女神です。

スプリングブートはこの動作とは関係ありません。以下は概念の簡単な証明です。私のデフォルトumaskは0002です。My/tmpディレクトリは最初は空です。

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()); 
    } 
} 

収量:

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は、単純にすべてのファイル/ディレクトリ作成権限を担当しています。作成後、変更を加えることが可能です。

+1

ありがとうございます、それは働いています。私はumaskについてもっと学ぶべきだと思う。 – xianoss

関連する問題