7.7 用字母表示法修改文件和目录的权限

chmod [ugo][+-=][rwx]

chmod命令使用两种权限表示法:字母或数字。二者各有各的优点,但是有时对于用户来说,先学习字母系统要更容易些。字母表示法基本上使用一个简单的公式:想要修改的用户组(u、g、或者o),后面用加号(+)来授予权限、用减号(-)来删除权限、用等号(=)来设置完全匹配的权限,后面再跟上表示想要修改的权限的字母(r、w、x、s、或者t)。例如,假设你想让family用户组的成员能够修改图片。

  1. $ ls l
  2. -rw-r--r-- 1 scott family ... libby.jpg
  3. $ chmod g+w libby.jpg
  4. $ ls -l
  5. -rw-rw-r-- 1 scott family ... libby.jpg

非常简单。但是如果你想让family组以及所有其他用户都有权改写文件,该怎么办呢?

  1. $ ls l
  2. -rw-r--r-- 1 scott family ... libby.jpg
  3. $ chmod go+w libby.jpg
  4. $ ls -l
  5. -rw-rw-rw- 1 scott family ... libby.jpg

当然,因为你真正想要的是让所有用户(拥有者、用户组以及所有其他人)都能读和写访问,应该使用以下命令:

  1. $ ls l
  2. -rw-r--r-- 1 scott family ... libby.jpg
  3. $ chmod a=rw libby.jpg
  4. $ ls -l
  5. -rw-rw-rw- 1 scott family ... libby.jpg

如果你觉得自己犯了一个错误,需要删除family组和其他人的权限,不让他们修改图片,甚至要确保其他人都看不到图片。

  1. $ ls l
  2. -rw-rw-rw- 1 scott family ... libby.jpg
  3. $ chmod go-w libby.jpg
  4. $ ls -l
  5. -rw-r--r-- 1 scott family ... libby.jpg
  6. $ chmod o-r libby.jpg
  7. $ ls -l
  8. -rw-r----- 1 scott family ... libby.jpg

除了使用-,也可以使用=:

  1. $ ls l
  2. -rw-rw-rw- 1 scott family ... libby.jpg
  3. $ chmod g=r libby.jpg
  4. $ ls -l
  5. -rw-r--rw- 1 scott family ... libby.jpg
  6. $ chmod o= libby.jpg
  7. $ ls -l
  8. -rw-r----- 1 scott family ... libby.jpg

注意最后的chmod命令,o等于什么也没有,相当于删除了系统中所有其他用户的所有权限。现在就又快又有效率了。

字母系统的优点在于它的速度通常很快。但是从最后一个例子中也能看到它的主要缺点:如果要修改两个或更多的用户组,每个用户组的修改又各不相同,至少要运行chmod命令两次。下一节就将介绍如何用数字表示法来解决这个问题。