Java createSymbolicLink()接受FileAttribute<;的数组&燃气轮机;作为论据;这在任何操作系统上都有意义吗?
是:Java createSymbolicLink()接受FileAttribute<;的数组&燃气轮机;作为论据;这在任何操作系统上都有意义吗?,java,unix,symlink,java.nio.file,Java,Unix,Symlink,Java.nio.file,是: 静态路径链接(路径链接、路径目标、, 文件属性…属性) 嗯。。。为什么? 符号链接只是一个inode,其内容是指向。。。不管怎样。目标甚至可能根本无效 出于好奇,我尝试了这个(是的,它作为root运行,但这是故意的): root@alustriel:/tmp#cat Test.java 导入java.io.IOException; 导入java.nio.file.*; 导入java.nio.file.attribute.*; 公开期末考试{ 公共静态void main(最终字符串…arg
静态路径链接(路径链接、路径目标、,
文件属性…属性)
嗯。。。为什么?
符号链接只是一个inode,其内容是指向。。。不管怎样。目标甚至可能根本无效
出于好奇,我尝试了这个(是的,它作为root运行,但这是故意的):
root@alustriel:/tmp#cat Test.java
导入java.io.IOException;
导入java.nio.file.*;
导入java.nio.file.attribute.*;
公开期末考试{
公共静态void main(最终字符串…args)引发IOException{
最终用户PrincipalOkupService查找服务=
FileSystems.getDefault().getUserPrincipalLookupService();
最终用户Principal user=lookupService.lookupPrincipalByName(“fge”);
最终文件属性属性属性=
新文件属性(){
@凌驾
公共字符串名称(){
返回“所有者:所有者”;
}
@凌驾
公共用户主体值(){
返回用户;
}
};
final Path target=Path.get(“谁在乎,我根本不存在”);
最终路径symlink=Path.get(“/tmp/meh”);
createSymbolicLink(符号链接、目标、属性);
}
}
root@alustriel:/tmp#javac Test.java
root@alustriel:/tmp#java测试
线程“main”java.lang.UnsupportedOperationException中出现异常:“所有者:所有者”不支持作为初始属性
位于sun.nio.fs.UnixFileModeAttribute.toUnixMode(UnixFileModeAttribute.java:74)
位于sun.nio.fs.UnixFileSystemProvider.createSymbolicink(UnixFileSystemProvider.java:440)
位于java.nio.file.Files.createSymbolicLink(Files.java:996)
at Test.main(Test.java:41)
嗯,我有点预料到了
我所知道的唯一一种符号链接权限重要的情况是在Linux的/proc/*/fd/中,因为符号链接的权限与打开文件描述符的权限相匹配。但这是一个系统生成的符号链接,与用户可以生成的完全不同
是否存在符号链接的权限会以任何方式、形状或形式影响符号链接和/或其目标行为的操作系统
编辑:嗯,我可以用
chown
更改符号链接的所有者,但是。。。再说一遍,这有什么意义呢?Oracle文档说这只是为了将来使用:
FileAttributes vararg允许您指定在创建链接时以原子方式设置的初始文件属性但是,此参数仅供将来使用,目前尚未实施。(;强调我的)
在Mac电脑上,权限似乎没有多大影响。我创建了一个只能由root读取的文件,以及指向它的两个符号链接:一个是世界可读的,一个是只能由root读取的。我可以cat
使用这三种方法来创建该文件,但是ls-l
仅在我以用户身份运行时列出了世界可读链接的链接目标:
-rwxrwxrwx 1 root wheel 7 Dec 21 21:32 actual
lrwxrwxrwx 1 root wheel 6 Dec 21 21:33 link_for_all -> actual
lrwx------ 1 root wheel 6 Dec 21 21:34 link_for_root
我找不到行为上的任何其他差异,但这是有意义的,所以也许你将来可以使用
createsymbolicink
来创建这样一个符号链接。Aah,所以你可以在Mac上这样做。。。对于Linux,如果你使用chmod符号链接,它会被轻轻地忽略;“权限”始终为777。
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)
-rwxrwxrwx 1 root wheel 7 Dec 21 21:32 actual
lrwxrwxrwx 1 root wheel 6 Dec 21 21:33 link_for_all -> actual
lrwx------ 1 root wheel 6 Dec 21 21:34 link_for_root