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
组的成员能够修改图片。
$ ls –l
-rw-r--r-- 1 scott family ... libby.jpg
$ chmod 664 libby.jpg
$ ls -l
-rw-rw-r-- 1 scott family ... libby.jpg
假设你想让family
组以及所有其他用户具有写这个文件的权限,应该怎么办?
$ ls –l
-rw-r--r-- 1 scott family ... libby.jpg
$ chmod 666 libby.jpg
$ ls -l
-rw-rw-rw- 1 scott family ... libby.jpg
如果你觉得自己犯了个错误,需要删除family
组和其他人的权限,不让他们修改图片,甚至要确保其他人都看不到图片。
$ ls –l
-rw-rw-rw- 1 scott family ... libby.jpg
$ chmod 640 libby.jpg
$ ls -l
-rw-r----- 1 scott family ... libby.jpg
这个例子体现了权限的数字表示法的重要优点。使用权限的字母表示法需要两步,先是chmod go-w
,然后是chmod o-r
(或chmod g=r
,然后chmod o=
),而使用权限的数字表示法则只需要一条简单的命令就可以了。也正因为这个原因,经常会看到高深的Linux大师使用权限的八进制表示法,因为它更快捷而且看起来更精确。