在我的 Web 应用程序目录中,如何将所有文件夹权限更改为rwxr-xr-x
(755)?如何将所有文件权限更改为rw-r--r--
(644)?我想更改所有文件夹和文件,包括子子文件和文件夹。
我知道以下命令会更改所有文件和文件夹,但我想区分文件和文件夹。
chmod -R 755 ./my_web_app_project
答案1
使用一个命令完全执行您想要的操作的一种方法find
是
find my_web_app_project '(' -type f -exec chmod 644 {} ';' ')' -o '(' -type d -exec chmod 755 {} ';' ')'
-o
意味着或。此命令处理项目树中类型为“文件”的所有对象或者输入“directory”,并根据每个对象的类型执行不同的命令。
';'
您可以通过用加号 ( ) 替换分号 ( +
)来稍微提高效率;这告诉find
运行chmod 644
一次,以所有普通文件的名称作为参数,并运行chmod 755
一次,以所有目录的名称作为参数。
./
顺便说一句,除了在当前目录中运行程序之外,您不需要说任何其他内容(尽管它有时在操作名称以某些特殊字符开头的文件时会派上用场)。
我想知道你的权限现在是什么样的(在运行递归树范围之前chmod
)。文件通常不会打开其执行权限位,除非它们实际上是可执行程序,或者您不小心做了类似chmod -R 755
.目录通常不会关闭其执行权限位,除非您做了一些灾难性的事情,例如chmod -R 644
.如果由于不明智地chmod -R
使用数字模式而导致权限严重混乱,请忽略本节并坚持使用本答案开头的命令。
但是,如果您的权限通常是合理的,并且您只想为用户施加读/写权限标准,并为其他人(组和世界)施加只读权限,那么您可以这样做
chmod -R +rX,u+w,go-w my_web_app_project
其中
+rX
意味着+r,+X
(注意 theX
是大写的——这很重要)。+r
表示为用户、组等设置读取权限。+X
表示为用户、组等设置执行权限 如果当前已为其中任何一个设置或者如果对象是目录。
u+w
意思是给用户设置写权限。go-w
表示关闭组和其他的写权限。
总结一些要点:
- 当然,您
chmod
只能访问您拥有的东西(除非您有特权)并且不是只读的。如果您的目录中存在您无法执行的操作chmod
,则这些命令中的任何一个都将导致错误。 - 这些
find
命令不会对目录或文件以外的内容(例如命名管道)执行任何操作。 - 如果您还没有顶级目录下所有文件夹的读取和执行权限,
find
则命令可能会失败。-exec chmod 755 {} +
- 该
chmod -R +rX,u+w,go-w
命令将- 将所有目录设置为模式 755,
- 忽略符号链接,
- 对于所有其他文件类型(包括命名管道):
- 如果已经至少有一位,则将其设置为 755
x
;否则, - 将其设置为 644。
- 如果已经至少有一位,则将其设置为 755
答案2
你不能。您需要两个命令。
find ./my_web_app_project -type d -exec chmod 755 {} \;
find ./my_web_app_project -type f -exec chmod 644 {} \;
编辑:
请参阅 G-Man 的答案,因为它更正确。