再说一个脑残系列的故事吧,今天讲的是“权限” (permission) 和“属性” (attribute) 的故事。和以前的惯例相同,脑残系列的故事一般都发生在我们英明神武的 Windows 平台下。

从前,当 PC 的文件系统还叫“胖”的时候,人们通过“属性”来管理对文件的操作。当时的文件有四种属性:只读、隐藏、系统和存档。这样的属性显然是远远不够的,最大的问题是,由于没有权限的概念,任何人都可以对属性进行修改,因此,如果你企图通过给一个文件添加“只读”权限来防止别人对这个文件进行修改的话,别人也同样可以通过修改权限来去掉这个限制。

后来,为了解决这个问题,人们把“胖”抛弃了,改用了一种叫 NTFS 的东西来管理文件。这时,人们终于可以更加细致地控制文件的访问了,可以精确地针对每个用户、每个组去控制对一个文件的读、写、执行等各种操作。听起来似乎一切都很理想,人们都很得意,然而,此时脑残的事情就发生了。很多以前的程序还依赖“属性”来控制文件的访问,对于这样的程序,我们该拿它们怎么办?

很多人也许会说,这很简单,隐藏、系统和存档这三种属性继续保留,只读属性去掉。当我们需要对一个文件加只读属性的时候,就把它的写权限去掉,这样文件自然就是只读的了,反之亦然。是啊,听上去很有道理,我一开始也是这么认为的。可惜的是,我们英明而伟大的微软却不是这么认为。

微软保留了所有的“属性”设置!

仔细想想也是,属性是直接绑定到文件的,并不区分用户。当一个古时候的程序想给一个文件加上只读权限,防止其它人修改这个文件,我们是只去掉当前用户的可写权限呢?还是同时去掉所有其它用户的可写权限?再加上 NTFS 的权限控制可比原始的 UNIX 系统精致多了,根本不是简单的 4 个八进制数那么简陋,它可以加一大堆规则,针对不同角色把同一项权限加上又减去,减去又加上,加上又减去,减去又加上……想通过权限来取代属性,想必这件事情还不是那么单纯。

于是,现在的一个结果就是权限和属性都同时存在了。而且滑稽的是,为了解决传统的属性设置无法杜绝其它用户修改属性后再修改文件的可能,微软甚至还提供了一项权限设置叫“是否允许修改属性”的权限。

事情已经是这样了,我们就只能接受这样一个事实:如果你想把一个文件设置成只读文件,你既可以通过权限,也可以通过属性。因此,如果你去掉了一个文件的只读属性后发现它还是只读的,那请你再查看一下权限的设置;同样的,如果你给自己分配了写文件的权限后,发现文件仍然是一个只读文件,那也请你顺便再查看一下属性。