我有一个包含文件和目录的目录结构,并且我喜欢分配权限,以便所有文件和目录对用户都具有读写权限,对组都具有读取权限,此外还对目录具有执行权限。
我想实现这样的目标:
$ ls -l
total 16
-rw-r----- 1 daniel daniel 0 5月 23 16:20 1
-rw-r----- 1 daniel daniel 0 5月 23 16:20 2
-rw-r----- 1 daniel daniel 0 5月 23 16:20 3
-rw-r----- 1 daniel daniel 0 5月 23 16:20 4
-rw-r----- 1 daniel daniel 0 5月 23 16:20 5
drwxr-x--- 2 daniel daniel 4096 5月 23 16:00 a
drwxr-x--- 2 daniel daniel 4096 5月 23 16:00 b
drwxr-x--- 2 daniel daniel 4096 5月 23 15:59 c
drwxr-x--- 2 daniel daniel 4096 5月 23 15:59 d
答案1
要授予目录但不授予文件的执行(搜索)权限,请使用:
chmod -R +X .
要按照示例分配所有权限,请使用:
chmod -R u=rwX,g=rX,o= .
-R
递归地更改文件和目录,而+X
仅当文件是目录或某些用户已经具有执行权限时才设置执行/搜索。r
和w
当然分别用于读取和写入。
它也应该可以在其他类 Unix 系统上运行,例如FreeBSD,网络BSD或者OpenBSD. 引自chmod(1)The Open Group Base Specifications 第 7 期,2018 年版的手册页:
这Xperm 符号是从基于 BSD 的系统中采用的,因为它在执行递归时提供了通常需要的功能(-R选项)修改。寻找实用程序。历史 BSD 版本修改模式然而,仅支持X和操作+;它已在 POSIX.1-2017 卷中得到扩展,因为它也适用于操作=。(还添加了操作- 即使它重复X,在这种情况下,因为它更直观并且更容易解释。)
1 man 1 chmod
2 info '(coreutils)Conditional Executability'
答案2
如果你想以递归方式执行此操作,IE,对于目录中的目录内的目录,要使用的命令是:
find /path/to/starting/directory -type d -exec chmod +x {} \;
这将定位所有且仅定位子目录(类型 d目录 /path/to/starting/directory 的 _path_to_starting_directory_path 标志,然后对每个目录执行所需的执行权限更改。\;是强制性的。
答案3
您是否尝试过类似这样的事情:
chmod +x $(ls -p | grep /)
,这将添加仅目录的执行权限
如果您想授予文件和目录执行权限,只需执行以下操作:
chmod +x *
并删除文件执行的权限,请尝试以下命令:
chmod -x *.*
希望有帮助
答案4
chmod -R u=rwX,g=rX,o= .
大写X
表示只有在其他地方已经设置时才会设置。由于所有目录对于用户来说都是可执行的,因此它们对于组来说也是可执行的。由于文件对于用户来说不是可执行的,因此它们对于组来说也不是可执行的。
使用chmod +X
将产生大致相同的效果,只是当它授予执行权限时,它会授予用户、组和其他人执行权限。