的原型Files.createSymbolicLink()
是:
static Path createSymbolicLink(Path link, Path target,
FileAttribute<?>... attrs)
嗯……为什么?
符号链接只不过是一个 inode,其内容是一个指向...的字符串。目标甚至可能根本无效。
出于好奇,我尝试了这个(是的,它以 root 身份运行,但这是故意的):
root@alustriel:/tmp# cat Test.java
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.*;
public final class Test {
public static void main(final String... args) throws IOException {
final UserPrincipalLookupService lookupService =
FileSystems.getDefault().getUserPrincipalLookupService();
final UserPrincipal user = lookupService.lookupPrincipalByName("fge");
final FileAttribute<UserPrincipal> attr =
new FileAttribute<UserPrincipal>() {
@Override
public String name() {
return "owner:owner";
}
@Override
public UserPrincipal value() {
return user;
}
};
final Path target = Paths.get("whocares, I don't exist anyway");
final Path symlink = Paths.get("/tmp/meh");
Files.createSymbolicLink(symlink, target, attr);
}
}
root@alustriel:/tmp# javac Test.java
root@alustriel:/tmp# java Test
Exception in thread "main" java.lang.UnsupportedOperationException: 'owner:owner' not supported as initial attribute
at sun.nio.fs.UnixFileModeAttribute.toUnixMode(UnixFileModeAttribute.java:74)
at sun.nio.fs.UnixFileSystemProvider.createSymbolicLink(UnixFileSystemProvider.java:440)
at java.nio.file.Files.createSymbolicLink(Files.java:996)
at Test.main(Test.java:41)
嗯,我有点期待。
我知道符号链接的权限在哪里很重要的唯一情况是在 Linux 的 /proc/*/fd/ 中,因为符号链接的权限与打开文件描述符的权限相匹配。但这是系统生成的符号链接,与用户可以生成的完全不同。
是否存在任何操作系统,其中符号链接的权限实际上会以任何方式、形状或形式影响符号链接和/或其目标的行为?
编辑:好吧,我可以更改符号链接的所有者,chown
但是...再次,有什么意义?