gpt4 book ai didi

java - Files.createSymbolicLink() 采用 FileAttribute 数组作为参数;它在任何操作系统上都有意义吗?

转载 作者:行者123 更新时间:2023-11-30 03:37:07 25 4
gpt4 key购买 nike

The prototype of Files.createSymbolicLink()是:

static Path createSymbolicLink(Path link, Path target,
FileAttribute<?>... attrs)

嗯...为什么?

符号链接(symbolic link)只不过是一个 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)

嗯,我有点预料到了。

我知道符号链接(symbolic link)的权限重要的唯一情况是在 Linux 的/proc/*/fd/中,因为符号链接(symbolic link)的权限与打开文件描述符的权限相匹配。但这是系统生成的符号链接(symbolic link),与用户可以生成的符号链接(symbolic link)完全不同。

是否存在任何操作系统,其中符号链接(symbolic link)的权限实际上以任何方式、形状或形式影响符号链接(symbolic link)和/或其目标的行为?

<小时/>

编辑:好吧,我可以使用chown更改符号链接(symbolic link)的所有者,但是......再说一遍,有什么意义?

最佳答案

Oracle 文档说这仅供将来使用:

The FileAttributes vararg enables you to specify initial file attributes that are set atomically when the link is created. However, this argument is intended for future use and is not currently implemented. (source; emphasis mine)

在 Mac 上,权限 seem to be settable ,尽管它们似乎没有多大作用。我创建了一个只能由 root 读取的文件,以及两个指向它的符号链接(symbolic link):一个是全局可读的,一个是只能由 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

我找不到任何其他行为差异,但它是一些东西,所以也许您将来可以使用createSymbolicLink来创建这样的符号链接(symbolic link).

关于java - Files.createSymbolicLink() 采用 FileAttribute<?> 数组作为参数;它在任何操作系统上都有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27595842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com