如何使用java在执行位(s)权限上设置组ID

Posted

技术标签:

【中文标题】如何使用java在执行位(s)权限上设置组ID【英文标题】:How to set group id on execution bit (s) permission using java 【发布时间】:2014-03-23 16:08:56 【问题描述】:

我正在尝试将下一组 posix 权限 rwxrwsr-x 设置为我在 java 中创建的文件夹,但没有成功。我尝试了下一个代码:

Set<PosixFilePermission> posixPermissions = PosixFilePermissions.fromString("rwxrwsr-x");
Files.setPosixFilePermissions(someDir, posixPermissions);

但我得到了下一个例外:

java.lang.IllegalArgumentException: Invalid mode

我花了一些时间寻找一种方法来做到这一点,但我找不到任何东西。我知道我可以使用ProcessBuilder 类在操作系统中运行命令来设置这些权限,但我想纯粹在 Java 中执行此操作。 我需要设置这些权限,以便在该目录中创建的任何文件“继承”该目录的组。

【问题讨论】:

【参考方案1】:

根据documentation,您只能使用字符“r”、“w”、“x”和“-”。但是在您的代码 sn-p 中,您使用的是“s”,这当然是非法的。它应该是这样工作的:

Set<PosixFilePermission> posixPermissions = PosixFilePermissions.fromString("rwxrwxr-x");
Files.setPosixFilePermissions(someDir, posixPermissions);

Setuid (+s) 在纯 Java 中是不可能的,因为它是特定于操作系统的特性。

【讨论】:

感谢您的回答。以前我没有完整阅读描述有效字符的文档。无论如何,我会接受您的回答,因为:“Setuid (+s) 在纯 Java 中是不可能的,因为它是特定于操作系统的功能。”

以上是关于如何使用java在执行位(s)权限上设置组ID的主要内容,如果未能解决你的问题,请参考以下文章

在Linux系统中,如何更改文件的访问权限

linux如何修改文件或目录的权限(chmod)

Linux命令----chmod

setuidsetgidsticky的权限简单用法

liunx 用户 ID

关于特殊权限