当前位置: 首页 > 面试题库 >

在Linux下使用java.nio.Files更改文件所有者组

帅博远
2023-03-14
问题内容

我有一台Linux服务器,并且正在使用Java为服务器上的多个网站运行图像调整大小的作业。网站文件由不同的OS用户/组拥有。新创建的缩略图/预览由运行调整大小作业的用户拥有。现在,我在谷歌上搜索如何在调整大小程序中更改新创建的预览/缩略图的文件所有者,并遇到了以下问题:

java.nio.file.Files.setOwner(Path path, UserPrincipal owner);

如果是Windows,这确实可以解决我的问题,但是由于Linux文件有一个用户和一个组作为所有者,所以我有点麻烦。不幸的是,给定的方法似乎只能更改文件的用户所有权。组所有权保留在运行我的Java调整大小作业的用户组中。

这些网站属于不同的组,因此无法将我的调整大小的工作用户添加到一个组中。我也想避免对我的文件ProcessBuilder执行系统调用,并对其执行a
chown

我确实需要指出,可以通过网站访问创建的文件(预览/缩略图),更改组所有权并不是关键任务,但是我希望它尽可能整洁。

关于如何仅使用Java在Linux中更改文件的组所有权的任何建议?


问题答案:

感谢吉姆·加里森(Jim Garrison)为我指明了正确的方向。这里的代码,终于为我解决了问题。

检索文件的组所有者

File originalFile = new File("original.jpg"); // just as an example
GroupPrincipal group = Files.readAttributes(originalFile.toPath(), PosixFileAttributes.class, LinkOption.NOFOLLOW_LINKS).group();

设置文件的组所有者

File targetFile = new File("target.jpg");
Files.getFileAttributeView(targetFile.toPath(), PosixFileAttributeView.class, LinkOption.NOFOLLOW_LINKS).setGroup(group);


 类似资料:
  • 本文向大家介绍Linux下修改文件权限(所有权),包括了Linux下修改文件权限(所有权)的使用技巧和注意事项,需要的朋友参考一下 Linux与Unix是多用户操作系统,所以文件的权限与所有权的实现就显得很有必要;每个文件主要与三组权限打交道,分别是用户(user),用户组(group),其他用户(other) 用户(u)是文件的所有者,通常有所有的文件的操作权限 用户组(g)是多个用户的集合,可

  • chown 命令,可以认为是 "change owner" 的缩写,主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件(或目录)的所属组。 当只需要修改所有者时,可使用如下 chown 命令的基本格式: [root@localhost ~]# chown [-R] 所有者 文件或目录 -R(注意大写)选项表示连同子目录中的所有文件,都更改所有者。 如果需要同时更改所有者和所属组,

  • 问题内容: 如何使用C ++获取Linux文件系统上文件的所有者名称和组名称?该呼叫仅提供了所有者ID和组ID,但没有提供实际名称。 如何以编程方式获取“ john”和“ devl”? 问题答案: 使用和。

  • 问题内容: 鉴于以下Dockerfile 在复制的测试目录中,我已将文件许可权设置为770。 如果在容器内进行操作,则无法访问测试目录中的任何文件或子目录。似乎此问题与aufs文件系统中的所有权有关,在该文件系统中,复制的目录仍然由root拥有,并且权限设置为770。 是否有解决此问题的方法以正确设置权限?一种可能是在复制之前将原始目录的权限设置为容器用户的uid。但这似乎更像是一种hack。 问

  • 我试图通过更新权限来使用Google Drive API更改所有者: 我将我的帐户权限ID: 改变角色: 并进行更新: 但是得到一个错误:

  • 问题内容: 如何在Linux中更改.eclipse文件夹?我尝试添加此行: 在eclipse.ini的顶部,但是它不起作用。我也尝试将其添加到eclipse.ini中的其他各个位置,但还是没有运气。 编辑 我添加了这一行: -vmargs的正下方。当Eclipse启动时,它现在从正确的.eclipse位置读取,如果.eclipse不存在,它将创建它。不幸的是,在Eclipse加载之后,在我的主文件