今天在查看自己电脑上工作目录下项目时,发现有一个项目的目录权限与其他不同,颜色也就在所有目录里显得格外显眼。对于我这种有点轻微强迫症的人来说,总感觉很别扭。可一直对Unix系的系统权限理解不是那么清晰,总是模糊的记得有chmodchown两个命令。因此索性就系统的看了下关于Unix系系统文件的权限内容。

使用ls -al命令列出一个目录,如:

➜  oh-my-zsh git:(master) la
total 40
drwxr-xr-x   13 Alan  staff   442B Jun 23 15:50 .git
-rw-r--r--    1 Alan  staff   130B Jun  6 23:49 .gitignore
……
`</pre>
一行第一部分`drwxr-xr-x`

其中第一个代表的是文件的类型,类型有:
  • 若为d表示目录;
  • 若为-则表示文件;
  • 若为l则表示连接;
  • 若为b则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
  • 若是c则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
    后面9个字符每3个为一组,其中第一组代表当前文件拥有者的权限,第二组代表当前拥有者所属用户组的权限,第三组则代表其他用户组的权限。并每一组中三个字符r代表可读(read)、w代表可写(write)、x代表可执行(execute)。

    一行第二部分表示连接到此节点文档数目。

    一行的第三部分表示当前文件的拥有者。

    一行的第四部分表示当前文件拥有者所属的用户组。

    一行当的第五部分表示文件的大小。

    一行的第六部分表示文件的创建日期或者修改日期。

    主要熟悉一下第一部分的权限,事实上跟权限相关的有三个命令:

  1. chgrp:change group的缩写,改变文件的所属用户组;
  2. chown:change owner的缩写,改变文件的拥有者;
  3. chmod:change mode的缩写,改变文件模式,即可读、可写和可执行;

    chgrp

    如想要改变一个文件的用户组为users,则为:

    chgrp users file

    这样文件的所属用户组被改为users,但其中有一点,这个用户组必须是/etc/group中所存在的,否则执行会报错。

    chown

    需要改变文件的拥有者,则可以使用这个命令,如改变文件的拥有者为alan

    chown alan file

    这样这个文件的拥有者变为alan,需要注意的是这个用户是/etc/passwd中所包含的。若想改变文件的拥有者和用户组,也可是用这个命令,如:
    chown user:group file

    若需要改变目录及其子目录文件的拥有者,则可加上参数-R

    chmod

    这个命令是修改文件的模式,比如文件是否可读、可写或者可执行。通常在修改模式时可是用两种方式,数字或者直接r、w、x这些。数字形式分别对应:

  • r可读代表4;
  • w可写代表3;
  • x可执行代表1.
    一个文件的权限分为当前用户、当前用户所属的用户组和其他组三部分,因此如一个命令:

    chmod 777 file

    其中777就表示了这个文件当前用户、当前用户组、其他组三部分的权限,7表示4+3+1。因此想要改变一个文件拥有者不可读、不可写、不可执行,只要第一个数字为0即可,若可读、可写、不可执行则第一个数字为4+3,一次类推。

    若使用字符,则更简单。用u表示当前用户,g表示用户组,o表示其他;r表示可读,w表示可写,x表示可执行;=表示设定权限,-表示去掉权限,+表示添加权限。这样如果想为文件去掉其他用户组的可执行权限,执行:

    chmod o-x file

    为一个文件添加当前拥有者的可读、可写、可执行权限,其他用户组去掉可执行权限,则可以这样写:
    `chmod u+rwx,o-x file

字符改变权限比数字更加直观灵活,同样的想改变一个目录及所有子目录文件的权限,和chgrpchownchmod一样加上-R参数。

系统的去研究一下一个知识点,会发现其实还是比较简单的。因此有时候觉得对一个知识点比较模糊,那就应该去找时间系统的学习。