分类: 系统运维
2012-03-28 13:30:34
S_ISVTX位有一个有趣的历史。在UNIX系统的提前所需页面高度的版本上,这个位被熟知为粘滞位。如果它被设置到一个可执行程序文件,那么程序第一 次执行时,程序的代码(text)的一个复制会在程序终止时保留在交换区。(程序的代码部分是机器指令。)这会使程序下次运行时更快地载入到内存,因为相 对于在一个普通UNIX文件系统里的数据块的可能的随机位置,交换区作为一个相接的(contiguous)文件被处理。
粘滞位过去常为普通应用程序设 置,比如文本编辑器和C编译器的各个阶段。自然地,在用光交换区空间前有一个可以包含在交换区里的粘滞文件数的限制,但它是个非常有用的技术。名字“粘 滞”的由来是因为系统的代码段直到系统重启一直粘在交换区里。
UNIX的更后期的版本把这个指为“保存代码”位,从而常量为S_ISVTX。在今天
UNIX系统的更新的版本上,多数都有虚拟内存系统和更快的文件系统,这种技术就不再需要了。
在当代系统上,粘滞位的使用被扩展。SUS允许为目录设置粘滞位。如果目录被设置粘滞位,用户只有在拥有目录的写权限并同时满足以下条件,才能删除或重命名目录里的文件:
1、拥有这个文件;
2、拥有这个目录;
3、是超级用户。
目录/tmp和/var/spool/uucppublic是粘滞位的典型侯选--它们是任何用户都能创建文件的目录。这两个目录的权限通常对所有人(用户、组、其他人)可读、可写和可执行。然而用户不该删除或重命名其他人拥有的文件。
代码保留位不是POSIX.1的一部分。它作为基本POSIX.1功能的XSI扩展定义在SUS,并被FreeBSD 5.2.1、Linux 2.4.22、Mac OS X 10.3和Solaris 9支持。
Soloaris9为普通文件的粘滞位赋予特殊的含义。这种情况下,如果没有执行位被设置,操作系统会缓存文件的内容。