Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java createSymbolicLink()接受FileAttribute<;的数组&燃气轮机;作为论据;这在任何操作系统上都有意义吗?_Java_Unix_Symlink_Java.nio.file - Fatal编程技术网

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