摘要
相比 Windows® 和其他大部分操作系统而言,GNU/Linux 中对文件的处理方式大不相同。这一节,我们将介绍绝大多数明显的区别。要进一步了解详情,请参阅第 9 章 Linux 文件系统一文。
由于 Linux 是一个多用户系统,这直接导致了最主要的不同:每个文件都仅仅只属于某个用户以及某个组。每一个用户都拥有一个个人目录(称为主(home)目录)。该用户是这个目录及在其中创建的文件的所有者。
然而,如果文件所有权仅限于此的话就没多大意思。作为文件的所有者,用户可以对文件设置权限。这些权限将用户区分为三类:该文件的所有者,该文件所关联的组(亦称为所有组)中非所有者的成员,以及既不是该文件的所有者也不是该文件所有组中成员的其他人。
执行权限(x):允许执行文件(通常只有可执行文件才会被设置该权限)。对于目录,它允许用户遍历该目录,也就是说可以进入或者经过该目录。请注意,这和读权限的区别:某个目录可能让您能够遍历但是不允许您浏览其内容!
每种权限组合都是允许的。例如,您可以只让您自己可以阅读某个文件并阻止他人的访问。作为文件的所有者,您也可以改变该文件的所有组(当且仅当您也是那个新的所有组的成员)。
让我们举例说明。下文显示了您在命令行输入 ls -l 命令后的结果:
$ ls -l total 1 -rw-r----- 1 zhang users 0 7月 8 14:11 某一_文件 drwxr-xr-- 2 li_si users 1024 7月 8 14:11 某一_目录/ $ |
前十个字符表示该文件的类型及其权限。其中第一个字符表示该文件的类型:短横(-)表示是普通文件,字符 d 表示是目录。还有其他文件类型将在下文讨论。接下来的九个字符表示该文件的权限。实际上,这九个字符分成三组,每组又分为三种权限。第一组代表了该文件的所有者对它的权限,第二组是该文件所有组中其他成员的权限,而第三组表示了其他人的权限。短横(-)表示没有某一权限。
接下来的数字表示到该文件的链接。稍后,我们将会发现某个文件的唯一标识符不是它的名字而是一个数字(称为inode 号)。而且磁盘上的一个文件可以同时拥有好几个名字。对于目录,该链接数具有特殊的含义,我们在下文中也会提及。
最后是该文件的大小(以字节为单位)、最后修改日期和该文件或目录的名字。
让我们更进一步观察这些文件的权限。首先,我们必须去掉代表文件类型的第一个字符。这样,对于文件某一_文件,我们就得到了:rw-r-----。下面对其逐项解释。
上述规则对一个人例外:root。即使不是所有者,root 也能够更改所有文件的属性(权限、所有者和所有组),并因此将该文件的所有权指派给他自己。root 能够阅读没有赋予他阅读权限的文件,能够遍历没有赋予他访问权限的目录,诸如此类。如果 root 缺少某个权限,他只要自己加上就行了。root 能够控制整个系统,这就需要我们好好考虑谁可以获得 root 密码。
最后需要指出的一点是:文件名在 UNIX® 世界和 Windows® 世界不同。UNIX® 允许更大的灵活性和更少的限制。
文件名可以由任意字符组成(包括非可打印字符),除了代表字符串结束的 0 号 ASCII 字符和目录分隔符 /。而且,由于 UNIX® 是区分大小写的,文件 readme 和 Readme 就不相同。因为在基于-UNIX® 的系统中,r 和 R 会被看作是两个不同的字符。
您可能会注意到,除非您喜欢,文件名不需要包含扩展名。在 GNU/Linux 中,文件扩展名并不表示文件的内容,在大多数其他的操作系统中也如此。然而,要取所谓的“文件扩展名”也挺方便。在 UNIX® 点号(.)只不过是众多字符中的一个而已,不过它也有一个特殊的含义。在 UNIX® 下,拥有以点号开头文件名的文件是“隐藏文件”[1],其中也包括了以 . 开头的目录。
[1] 除非您特别指定,文件管理器是不会在默认情况下显示隐藏文件的。对于终端,您需要键入 ls -a 命令来查看所有隐藏文件。基本上,这些文件是用来保存配置信息的。比如,您可以看一看您的 home/ 目录中的 .mozilla 或 .openoffice 文件。