GNU 和 Unix 系统是被设置为可以多人使用同一部计算机,但亦能把某些文件设定为私人的,或是可以使某些人不能更改某些文件。您可以试一试去验证。用您自己的账号登入,即是不要使用 root。
现在输入 ls -l /etc/resolv.conf,
您会得到类似这样的输出:
首先,来个简短的技术性解释:-rw-r--r--
是文件的状态,1 是指着这个文件的硬性连结 (hard link)(或是一个目录中的文件数目),而那两个 root 是分别指拥有这个文件的用户 (user) 和群组 (group)。
是的,这是有点难以理解,现在就让我们慢慢地解释吧。
每一个文件都有两个拥有者:用户和群组。先前的那个例子有点混淆,因为除了用户 root 之外还有一个群组叫做 root。群组只是一些被一同容许存取系统某部份的用户。games 群组就是一个好例子。
这是一个比较实际的例子。幻想您现在正为一所学校架设一部计算机,您可能想设置某些文件为只可以让老师存取,而学生是不可以的,因此您把所有的老师都放到同一个群组里去。跟着您便告诉系统哪些文件是属于群组 teachers 的成员,而其他人就不能接触到这些文件的。
现在就让我们探索一下系统中的群组。首先,您可以在 shell prompt 用指令 groups,这样会显示您所属于的群组。例子如下:
很大机会您只是一个群组的成员,而那个群组的名称和您的用户名称是一样的。不过,root 可以加您到别的群组中。以上的例子表示那个用者是五个群组的成员。
提示: 如果您是刚安装 Debian 的,您可能是唯一的用户。您可以使用 adduser 指令来增加用户。
文件和目录除了是被用户及群组所拥有之外,它们还有一个状态。状态决定谁可以读、写、和执行那个文件(如果它是一个程序)。其实还有其它的东西决定文件的状态,但这些是较深的课题,所以我们亦不会在此讨论。
在 ls 的输出里,我们可以看到文件的状态是:-rw-r--r--
。我们会把它分成九部份来看:拥有文件的用户、群组、和其他用户(others,即是系统的所有用户,有时会称这个为world)的读 (read),写 (write),及执行 (execute) 权限。
在状态一行中,第一个“元素”是文件种类 (file type)。这里的 - 表示这是一个普通的文件。如果它是 d,那么我们就是在检查一个目录。还有其它的种类,因太复杂所以不会在这里解说。详细资料可看第 页的第 13.2.2 节。
剩下来的九个元素是用来显示文件的状态,那九个位(用户、群组、和其他用户的读、写和执行权)是由三组 rwx 来表示。
所以如果文件所有的权限都被许可,而它又是一个普通的档,状态将会是类似这样:-rwxrwxrwx。如果它是一个目录,而所有其他用户的权限都被释放,但用户和群组都被赋予所有权限,那么状态将会是:drwxrwx---
。
|
目录的状态的意义可能有点混淆,所以这里有一些例子用来阐明不同组合的效果:
目录的写入权限决定了您是否可以删除目录中的文件,如果您有权写入一个目录,您亦可以把内里的一个唯读文件删除掉;然而您不可以删除一个唯读目录中的文件,就算您有权更改那些文件。
亦即是说,如果您拥有一个目录,您就一定可以删除内里的文件,就算那些文件是属于 root 的。
目录的执行权限决定您是否有权存取文件──亦因此决定文件权限的用处。如果您拥有一个目录的执行权限,这个目录类文件的权限就会变得有关系了,否则,文件权限是什么也没有所谓的,因为反正您也不能存取得到那些文件。
在这一节我们会看看一个示范怎样使用权限的例子,以下会利用到 chmod 这个指令去改变权限的。
$ touch myfile
若您还记得,用 cd 可以立即回到您自己的 home 目录; touch 通常是用来把文件的更新日期 (modification time) 改为现在的时间。但它有另一个有趣的特点:如果文件不存在,touch 便会制造它。所以您是用它来制造一个作练习用的文件。用 ls -l 来确定文件真的已被建立,并且记住它的权限模状态:
-rw-r--r-- 1 user user 0 Nov 18 22:04 myfile
-rw-r--r--
是 Debian 上的默认权限。
但在问题里出现的那个 0444 究竟是什么呢?其实权限是由一个 12 个位的二进制数字所组成,如 000100100100。044 就是这个二进制数字的八进制写法,八进制是填写状态的惯用写法。所以除了输入 chmod ugo=r myfile 之外,您还可以键入 chmod 444 myfile。
John Goerzen / Ossama Othman / Debian 中文计划