7.8 用数字权限修改文件和目录的权限

chmod [0-7][0-7][0-7]

数字权限(也称为八进制权限)是基于二进制数字系统而创建的。我们将不解释为什么权限要用特定的数字来表示,而重点介绍最终的结果:读(read,r)的值为4,写(write,w)的值为2,而执行(execute,x)的值是1。记住,Linux权限识别三个用户组,即拥有者、组以及其他人,每个用户组都能进行读、写和执行操作(如表7-3所示)。 表7-3 权限和相应的数字表示

Owner(拥有者) Group(组) World(其他人)
权限 r; w; x r; w; x r; w; x
数字表示 4; 2; 1 4; 2; 1 4; 2; 1

在这种模式下,权限组合就演变成了简单的加法运算。下面举一些例子。

  • 用户具有读和写文件或目录的权限。读是4,写是2,执行是0(因为没有授权),4 + 2 + 0 = 6。
  • 用户具有读和执行文件的权限。读是4,写是0(因为没有授权),执行是1,4 + 0 + 1 = 5。
  • 用户具有读、写及执行目录的权限。读是4,写是2,执是1,4 + 2 + 1 = 7。

使用这种方法,用户组的最大权限值是7(读、写和执行),最小权限值是0(不能读、写和执行)。因为有三种用户组,所以就有三个相应的数字,每个值都介于0和7之间,分别表示相应用户组的权限。表7-4展示了可能的权限数值以及它们各自的含义。 表7-4 ls -l命令表示的数字权限

数  字 ls -l命令的表示 数  字 ls -l命令的表示
0 --- 4 r--
1 --x 5 r-x
2 -w- 6 rw-
3 -wx 7 rwx

虽然可以设置各种各样的权限,但是有一些权限会经常不断出现。表7-5列举了几种常用的权限以及它们的含义。 表7-5 使用ls -l命令表示的通用权限

Chmod命令 ls -l表示 含  义
chmod 400-r--------拥有者能够读,其他任何人不能进行任何操作
chmod 644-rw-r--r--所有人都能够读,但只有拥有者才能编辑
chmod 660-rw-rw----拥有者和组用户能够读和写,其他人不能进行任何操作
chmod 664-rw-rw-r--所有人都能读,但只有拥有者和组用户能够编辑
chmod 700-rwx------拥有者能够读、写和执行,其他用户不能进行任何操作
chmod 744-rwxr--r--所有人都能读,但只有拥有者才能编辑和执行
chmod 755-rwxr-xr-x所有人都能读和执行,但只有拥有者才能编辑
chmod 777-rwxrwxrwx所有人都能读、写和执行(这样的设置通常不是个好想法)

警告 可以对文件或目录使用chmod 000,但是那样的话,唯一能够对它进行任何操作或再使用chmod命令修改权限的用户就只有root了。

现在应该了解八进制权限了吧。与权限的字母表示法相比,八进制权限的理解需要更多的思考,但是它的优点就是能够一次设置许多权限。再看一下7.8节中的例子,这里演示如何用权限的数字表示法来完成相同的功能。

假设你想允许family组的成员能够修改图片。

  1. $ ls l
  2. -rw-r--r-- 1 scott family ... libby.jpg
  3. $ chmod 664 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 666 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 640 libby.jpg
  4. $ ls -l
  5. -rw-r----- 1 scott family ... libby.jpg

这个例子体现了权限的数字表示法的重要优点。使用权限的字母表示法需要两步,先是chmod go-w,然后是chmod o-r(或chmod g=r,然后chmod o=),而使用权限的数字表示法则只需要一条简单的命令就可以了。也正因为这个原因,经常会看到高深的Linux大师使用权限的八进制表示法,因为它更快捷而且看起来更精确。