我需要找到所有目录,其中用户有权访问 search(command find
) 并在 shell 中回显该目录。 USER 是从 ksh 读取的。
例如:
read user
我知道,如果用户想find
在目录中使用,用户应该对该目录具有“读取访问权限”和“执行访问权限”。我应该检查输入用户的所有目录r
和访问权限。x
答案1
我不会给您确切的代码,但可以为您提供实现此目的的步骤:
找到该目录的所有者。如果这与
user
您要搜索的目录匹配,则检查该目录的所有者权限。如果是r+x(5)
或r+w+x(7)
,则用户可以在该目录内搜索,否则不能。如果目录的所有者与用户不匹配,请检查该目录所属的组,判断输入的内容是否
user
属于该组。如果用户属于。检查该目录的组权限。如果是r+x(5)
或r+w+x(7)
,则用户可以在该目录内搜索,否则不能。如果输入的内容
user
不属于该目录所属的组,请检查该目录的其他权限。如果是r+x(5)
或r+w+x(7)
,则用户可以在该目录内搜索,否则不能。
我认为上述算法将执行您想要的任务。
编辑:
方法一:
您可以使用 find 命令来实现:
$ find / -maxdepth 1 -type d -perm -u=rx
这将找到 / 内的所有目录,直到用户权限为一级至少(读取+执行)。
方法二:
$ stat <filename/directoryname> | grep Access | head -1 | awk 'BEGIN{FS="[/)]"} {print $2}'
这将为您提供 rwx 表示法的权限(例如 drwxr-xr-x)
$ stat <filename/directoryname> | grep Access | head -1 | awk 'BEGIN{FS="[(/]"} {print $2}'
这将为您提供 755 表示法的权限(例如 0755)
答案2
我不确定我是否理解你目前的问题。
如果您不关心将具有读取访问权限的子目录放置在没有读取访问权限的目录中,那么您可以简单地执行以下操作:
find . -type d -perm -u+r
如果您想知道特定用户是否具有目录的读取权限,请获取她/他所属的组:
groups $userID
并做:
find . -type d -group $groupID -perm -g+r