先说说大家熟悉的Windows,对于WindowsNT,只要你对某个文件设置了所有人不可写的安全属性(也就是文件权限咯),无论在哪个文件夹中都是不可以删除的,不管他所在的文件夹的安全属性是什么。
当大家习惯了Windows的安全属性设置后,形成一个观念,文件是否可以删除是取决于这个文件的安全属性。我本来也有这个概念。
然后我们来看看日益增多的Linux系统。我用的是RedHat和红旗Linux,应该其他Linux也一样。
如果在Linux中有一个目录假定为 share (权限 drwxrwxrwx,即任何人完全控制),他的下面有一个文件 amtr,假设这个文件是某个用户写给root的一个message,他不想让别人看到文件的内容,于是把 amtr 的权限设置为 -rw-------,这样应该差不多了吧——如果另一个用户在 share 目录执行cat amtr就会显示Permission denied(没有权限)。
但是,如果另一个用户在 share 目录下执行 rm amtr,你说会有什么结果——amtr不见了。更坏的,别的用户可以任意改名。如执行 mv amtr rootTMD,呵呵,这样root肯定会看。
究其原因,是因为Linux把文件的i-nod信息全都交给了目录管理。包括文件存不存在、文件名是什么、文件存放在磁盘哪里等信息。只要你有这个目录的写权限,就可以删除目录下的任意文件(注:这里的文件不包括目录)和更改目录下的任意文件的文件名(注:包括目录)。
特别的,对于目录,如果你这个目录只是一个空目录的话,就相当于一个文件,完全可以删除。但是因为Linux不能删除一个非空的目录。只要你的目录别人没有权利写且目录内有别人没有权限写的文件,那就不能删除你的目录(执行 "rm -r 目录名" 不是把目录从当前目录一点截断,而是用递归逐个删除目录内容,所以没办法删除),最多改个名字。
大家应该可以看到/tmp的权限是 drwxrwxrwt ,t的意思是只有创建者可以修改。原来我以为这样设的原因是不让别人把tmp这个目录给删掉,把这个目录设成 o+t 的原因还有不让你删除别人不给删但是又在这个目录下的东西。
所以在Linux中要小心不要把你的重要文件放在任何人完全控制的目录里。即使这个文件的权限是0。