chmod命令用来变更文件或目录的权限。文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。
背景
最近有个web/rop项目的需求,项目服务端依靠nginx和php提供。在安装完项目后,访问主页面的时候,主页显示nginx 500,http500状态码,第一反应服务有问题,进入项目log文件夹,发现没有日志。然后查看nginx错误日志,
显示项目log目录下没有权限生成日志文件,好了问题找到了,解决吧。
解决
我一看权限问题,那好办啊,果断使用 sudo chmod -R 777 / 命令,重新访问项目主页,OK,解决问题。
但高兴的太早,使用git status命令后,发现被修改权限的目录以及文件,全变成modified,5千个修改,这分支还能用么。 删除掉更改权限的目录,然后重新拉了代码,访问主页,一切又回到了原点。
突然想web/www项目安装过程中有关于目录权限处理,然后照猫画虎,chmod -R a+w /log/ 命令过后, 重新访问主页,发现已解决;再git status查看,没有冗余修改。至此问题成功解决。
问题解决了,想想以前只觉得只要是权限问题,就可以使用777来解决,未免有点太暴力,那就好好研究下chmod命令吧。
学习
chmod命令用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。(关于符号链接参考ln -s命令)
语法
|
|
参数
mode : 权限设定字串,格式如下 :
[ugoa…][[+-=][rwxX]…][,…]
其中:
u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。+表示增加权限、-表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
- 其他参数说明:
-c : 若该文件权限确实已经更改,才显示其更改动作
-f : 若该文件权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
–help : 显示辅助说明
–version : 显示版本
实例
文字模式
|
|
数字模式
此外chmod也可以用数字来表示权限如 :
|
|
语法
|
|
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=5。
很有意思的一个地方,为何数字不是3,2,1,反而是4,2,1。是因为1+2=3,3=3。在解析数字对应权限的时候要对应惟一一种情况,不能出现多种情况都满足。
|
|