Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/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
Permissions 如何准确获取用户对给定fs对象的Unix权限?_Permissions_Filesystems - Fatal编程技术网

Permissions 如何准确获取用户对给定fs对象的Unix权限?

Permissions 如何准确获取用户对给定fs对象的Unix权限?,permissions,filesystems,Permissions,Filesystems,这就是我现在的逻辑: int getInodePermissions(final int uid, final int[] gids, final fsObject inode) { final int inodeOwner = getOwner(inode); final int inodeGroup = getGroup(inode); final int inodeMode = getMode(inode); int perm;

这就是我现在的逻辑:

  int getInodePermissions(final int uid, final int[] gids, final fsObject inode)
  {
     final int inodeOwner = getOwner(inode);
     final int inodeGroup = getGroup(inode);
     final int inodeMode = getMode(inode);

     int perm;
     if (uid == inodeOwner) {
         perm = (inodeMode >> 6) & 7;
     } else if (isUserInGroup(inodeGroup, gids)) {
        perm = (inodeMode >> 3) & 7;
     } else {
        perm = inodeMode & 7;
     }
     return perm;
  }
但我刚刚意识到,如果我们拥有例如
x
bit作为所有者和
w
bit作为组,那么我们应该同时拥有
x
w
。我试图查找一些教程,但它们解释了个人访问,而不是不同组的组合。有人可以告诉我这样的描述,或者列出所有的案例,这样我就可以确保我没有遗漏任何案例

如果我们有x位作为所有者,w位作为组,我们应该同时得到x和w

不!如果您是所有者,您将获得所有者权限,而不是组权限,即使您也在组中。例如:

> touch example.file
假定
example.file
不存在,如果您有一个普通的umask,该文件的权限将是664,以您的同名组作为组。现在:

> sudo chmod 077 example.file
> echo whatever >> example.file
bash: example.file: Permission denied
即使您在该组中并且该组具有rwx权限,您也会被拒绝,因为您是所有者,而所有者没有权限


所以,你已经拥有的是正确的

我理解使用|但我想知道这是否与我们预期使用的权限相符。我们是否也需要使用
其他人的权限?嗯……哎呀。和您一样,我假设如果用户同时是组的所有者和成员,则该用户可以同时获得两组权限。但事实证明这是错误的——我已经相应地编辑了答案。谢谢:)顺便说一句,如果你不介意的话,另一个简短的问题。如果我必须定义读、写和执行常量,那么将它们定义为4而不是0x4,或者将它们定义为2而不是0x2,将它们定义为1而不是0x1会有任何区别吗?它不会有任何区别,因为0x4(十六进制)==4(十进制),并且一直到0x9都是这样。然后你必须转换它们,0xa==10,0x10==16,等等。如果你高兴的话,记得勾选这个作为答案。