我的几个 Linux 机器中有以下目录树:
/dir1/dir2/dir3/dir4/target
每个 dir[1-4] 目录下都有多个目录,并且所有这些目录(及其子目录)都具有750
权限。现在,我想others
浏览“目标”目录及其子目录。chmod -R o+rx
在 上运行,确实会更改的/dir1/dir2/dir3/dir4/target
权限,但用户无法访问该目录,因为其父目录没有权限。在其中一台服务器上,我通过授予以下权限来解决此问题:/dir1/dir2/dir3/dir4/target
755
others
r-x
chmod -R o+x /dir1
chmod -R o+rx /dir1/dir2/dir3/dir4/target
考虑到上述命令也会授予 /dir[1-4] 的所有子目录的“遍历”权限,是否有更好的命令来仅提供对 /dir[1-4] 目录的遍历权限以及对“/dir[1-4]”目录的 rx 权限目标目录?
答案1
设置x
“其他”目录/dir1/dir2/.../target
和所有中间目录(根目录除外)的权限,以及路径末尾目录r
的权限:target
dir=/dir1/dir2/dir3/dir4/target
chmod o+r "$dir"
while [ -n "$dir" ]; do
chmod o+x "$dir"
dir=${dir%/*}
done
对于给定的目录路径,这将执行命令
chmod o+r /dir1/dir2/dir3/dir4/target
chmod o+x /dir1/dir2/dir3/dir4/target
chmod o+x /dir1/dir2/dir3/dir4
chmod o+x /dir1/dir2/dir3
chmod o+x /dir1/dir2
chmod o+x /dir1
通过删除最后一个及其之后的所有内容,变量dir
值在循环的每次迭代中都会更改/
。