Pages

Thursday, 21 December 2017

chmod和chown小结

今天William在使用PHP提交任务时总是不成功,估计是exec()指令的问题.由于不太了解PHP, 所以也比较头痛. 后来测试他的PHP可以运行程序,有返回结果,但是却没有输出文件, 比较奇怪. 最后在tmp新建个777文件夹后测试问题解决.原来还是Linux权限的问题, 提交任务的用户没有权限写文件. 这可能是搭建服务器很关键的问题. 这里总结下chmod 和 chown两个重要权限相关指令的用法.

chmod

chmod指令是更改文件读写执行权限的.
文件权限可以通过ls -all来看,在每个文件前有10个字符,第一个是d是文件夹,否则为一划.后面三组rwx,分别是读取,写入和执行的权限; 三组分别是用户自己,同组以及其他人的相应rwx权限. 没有执行权限, 脚本和程序也不能直接跑; 没有写权限,就没法生成和保存文件; 没有读的权限就连访问都难. 一般文件权限是755,下面将介绍.
权限有两种表示方式, rwx方式和数字方式. r权限代表1,w权限代表2,x权限代表4,无权限代表0. rwx权限数字的值累加起来,就是一个用户/组/其余人的相应权限,例如775代表用户和组具有rwx权限,而其他人只有rx权限没有写权限.

命令格式: chmod(选项)(权限模式 文件)

选项

  • -c或--changes:效果类似“-v”参数,但仅汇报更改的部分;
  • -f或--quiet或--silent:强制执行,不显示错误信息;
  • -R或--recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
  • -v或—-verbose:显示指令执行过程;
  • --reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;

权限模式

  • <权限范围>+<权限设置>:开启权限范围的文件或目录的该选项权限设置;
  • <权限范围>-<权限设置>:关闭权限范围的文件或目录的该选项权限设置;
  • <权限范围>=<权限设置>:指定权限范围的文件或目录的该选项权限设置;

其中权限范围为:

  • u: User,即文件或目录的拥有者;
  • g: Group,即文件或目录的所属群组;
  • o: Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;
  • a: All,即全部的用户,包含拥有者,所属群组以及其他用户;

其中权限设置为:

  • r: 读取权限,数字代号为“4”;
  • w: 写入权限,数字代号为“2”;
  • x: 执行或切换权限,数字代号为“1”;
  • -: 不具任何权限,数字代号为“0”;
  • s: 特殊功能说明:变更文件或目录的权限。
  • 不指明权限范围时默认为All所有人.
  • 两种模式:
    1. 权限范围+/-/=权限设置,例如 u+x 就是用户增加执行权限; 不同组别设置使用,分隔,例如 u+wx,g+w,o-wx 这样; 也可以ug+wx写. o=r就是只有读权限(r–); +x就是三个组都增加执行权限.
    2. 三个数字模式, 例如755代表用户具有rwx, 组和其他人有rx.
比较重要知识点就是: 怎么知道权限, 怎么改变权限, 755代表什么, -R 对文件夹使用.
chmod u+x,g+w f01  #为文件f01设置自己可以执行,组员可以写入的权限 
chmod u=rwx,g=rw,o=r f01  #rwxrw-r--
chmod 764 f01    #rwx-wx--x权限
chmod a+x f01  #对文件f01的u,g,o都增加可执行属性
chmod -R +x DirName #对整个文件夹及里面内容都增加执行权限

chown

chown指令是更改文件归属的,归属哪个用户,用户组是什么.对应将影响chmod里rwx效果.
用户可以是用户或者是用户D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。-R选项后可以对整个文件夹操作. 只有文件主(改变自己的文件)和超级用户(改变他人的)才可以便用该命令。非root管理员慎用.

命令格式: chown 选项 用户:组 文件

  • -c或--changes:效果类似“-v”参数,但仅汇报更改的部分;
  • -f或--quite或--silent:强制执行,不显示错误信息;
  • -h或--no-dereference:只对符号连接的文件作修改,而不更改其他任何相关文件;
  • -R或--recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
  • -v或--version:显示指令执行过程;
  • --dereference:效果和“-h”参数相同;
  • --help:在线帮助;
  • --reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;
  • --version:显示版本信息。
归属可以只更改用户用户 文件.
除了用户:组名的写法,一般linux还可以用户.组名(MacOS不行..).
记住 -R 对文件夹, 用户:组 的写法就可以了.比较简单.

No comments:

Post a Comment