文章转自:点击打开链接

我们先来看看chmod()函数的原型:

  #include 
  #include 
  int chmod(const char *pathname,mode_t mode);
  其第一个常数是路径名,用来指定需要修改权限位的文件,我们这里要注意的是第二个常数,它是mode_t类型,*_t意味着它是原始系统数据类型(primitive system type),mode可以是多个常数的逐位或运算,参见《unix环境高级编程》第四章4.9节的表4-6
  在表4-6中,我们发现其中有一个常数S_ISVTX。这个常数跟粘住位有关,如果mode参数里有这一个常数参与或运算,就将设置粘性位。如果一个文件或者目录设置了粘性位,ls -l命令显示的时候,会用t来表示。
  关于S_ISVTX位,有一段有趣的历史。在早期的unix版本中,一个文件如果被设置了粘性位,那么在该脚本或者程序第一次执行并结束的时候,该程序的正文部分(程序的机器指令部分)将被保存在交换区里。因为在交换区,文件是被连续存放的,而在一般的unix文件系统中,文件的各个数据块是随机存放的,所以程序的正文部分被放在交换区之后,将使得下次执行该程序时能较快地将其装入内存。因此,对于常用的应用程序,设置它们的粘性位可以提高它们执行的速度,系统的性能随之上升,可见设置粘性位,尤其是对常用的执行程序设置粘性位是一种有用的技术。但很显然,由于交换区的空间大小是固定的,因此在交换区里,同时能存放的设置了粘性位的程序的数量是受到限制的。因为在系统再次自举前,这些执行程序的正文部分总是“粘”在交换区中的,所以就有了粘性位这样的叫法。后来的unix版本,把粘性位叫做保存-正文位(saved-text bit),因此就有了上面的S_ISVTX位。现在较新的unix系统,包括linux,大多数都具有虚存系统以及快速文件系统,而且随着计算机技术的发展,内存也越来越大,所以,可执行程序使用粘性位来提高运行性能实际上已经不在需要。
  所以,在现在的unix系统中,粘性位的概念,主要是为了给目录设置粘性位,而不是为了给可执行程序设置粘性位,以提高系统性能。但是,给目录设置粘性位的目的与给可执行程序设置粘性位是截然不同的。给目录设置粘性位的目的是:
  如果对一个目录设置了粘性位,则只有文件属主或者超级用户才能删除/更名该目录下的文件。(当然,文件属主还必须拥有对该目录的写、执行权限)。
  任何一种技术,都有其实际需求,没有实际需求的技术是不会产生的。最简单的举个现成的例子,就是上面讲到的给可执行程序设置粘性位这一技术,其实际需求是提升系统性能。同样地,给目录设置粘性位,其必然也有其现实中的需求。
  我们知道,unix/linux系统是一个多用户系统,一个unix系统可能有许多用户,同时/不同时的登陆,他们在自己的家目录创建文件,但也可能在一些公有文件夹里创建文件,典型的就是/tmp目录,这是一个任何用户在里面都可以创建文件的目录,而且任何用户对/tmp目录都具有读/写/执行权限,这意味着任何用户都可以删除/更名该目录下的文件。显然,对于/tmp这种公用目录,当然要使用一定的机制,来阻止“任何用户都可以删除/更名该目录下的文件”这种不该出现的现象,保证该目录下的文件,只有其文件属主才可以删除和更名,而其他用户不能删除和更名不属于他的文件。给/tmp目录设置粘性位,就实现了这一功能!(注意:在/tmp目录下,其他用户对不属于他的文件是否具有读/写/执行权限,按照×××××××××九个权限位的组合正常实现!)
  讲完了,我们来做最后的总结吧:
  1 粘性位是一个历史的概念,对可执行文件设置粘性位与对目录设置粘性位在历史上不是同时的,而是错开的
  2 给可执行文件设置粘性位与对目录设置粘性位,完全是基于不同的考虑,前者是为了提升性能,而后者是为了实现“在公用目录,保证只有文件属主或者超级用户才有权利删除和更名,而其他用户不能删除和更名不属于他的文件”

linux粘着位的作用相关推荐

  1. linux系统各文件夹的作用,linux系统文件夹的作用 good

    /bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 如:环境变量 /etc/rc.d 启动的配置文件和脚本 /home用户主目录的基点,比如用户user的主目录就是/ho ...

  2. 原linux的字符文件作用,linux特殊字符及其作用大全

    1.通配符 ? 匹配单个字符 * 代表所有字符 [abcd] 匹配[]里任意一个字符.4选1 [a-d] [!abcd]  匹配不含[]里任意一个字符的字符.[^abcd] 2.路径相关 ~     ...

  3. Linux常见命令作用(持续更新中,欢迎提议支持)

    Linux常见命令作用(持续更新中,欢迎提议支持) 1.ifconfig 查看ip地址 2.cd 切换工作目录(跳转路径) cd 路径 切换至工作目录"路径" 下同,指令后面都可附 ...

  4. 常用Linux命令及其作用(超详细,带演示)

    常用Linux命令及其作用(超详细,带演示) 文章目录 常用Linux命令及其作用(超详细,带演示) 1. 提前了解 1.1 终端命令格式 1.2 --help 1.3 man command 查询使 ...

  5. 学linux作用,linux有必要学吗?学linux有什么作用,学linux能干什么

    Linux是一种自由和开放源码的类UNIX操作系统.Linux有必要学吗?学Linux有什么作用,学Linux能干什么?Linux最大的作用就是提高效率.当你习惯在Linux命令行下工作,再回到win ...

  6. linux 冒号的作用

    linux 冒号的作用 文章目录 linux 冒号的作用 1.清空文件 2.占位符 总结 1.清空文件 我们新建一个文件 然后:>test.txt 再查看一下 nice! 2.占位符 相当于py ...

  7. linux 进程的作用,linux的几个进程的作用

    author:skate time:2011/08/10 linux的几个进程的作用 1. kswapd0 Linux uses kswapd for virtual memory managemen ...

  8. linux粘着位的使用(t权限)

    在linux中,如果对一个目录具有写权限,那么我们就可以在这个目录下创建删除文件. 现在我们要创建这样一个目录,我们可以在这个目录里创建文件,但是其他用户不能删除这个文件. 在这里就要用到一个特殊的权 ...

  9. linux命令vi作用,详解Linux常用命令的用法(二)――――文本编辑器命令vi/vim

    vi/vim介绍 它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面. 1.vi和vim的区别: 就是在进入一般命令模式后,当按下(i.I.o ...

最新文章

  1. 在Ubuntu 14.04 64bit上安装思维导图工具XMind
  2. jQuery鼠标移入移出(冒泡版和无冒泡版)
  3. dxf转pdf linux,4个最好的PDF转DXF格式的在线转换器
  4. linux CentOS7最小化安装环境静默安装Oracle11GR2数据库(静默创建实例_08)
  5. 利用CRT库函数检查内存泄漏
  6. 编写一个脚本,用它来操纵QTP的运行
  7. jq选中单选框后文本框不可编辑_3个Excel工作表的数据输入编辑技巧,助你工作更轻松...
  8. 项目管理学习总结(10)——项目经理需要具备8点管理素质
  9. 文件上传到部署服务器(添加附件)
  10. cygwin/msys: fatal error LNK1104: 无法打开文件“kernel32.lib”
  11. shell 学习之if语句
  12. html显示ftp资料,获取FTP信息及使用方法
  13. 用cmd 查看本机的IP地址
  14. AIGC:自动化内容生成,AI 的下一个引爆点?
  15. 2019北邮网安考研经验
  16. ViT为何引入cls_token
  17. 【吐槽】Android 第一步,雀氏纸尿裤
  18. linkkitapp log for debug
  19. docker build 时出现no space left on device解决方法
  20. 获取省市区geoJson数据(精确到县、镇)用于echarts实现地图数据可视化

热门文章

  1. 邮件作为证据如何提交_电子邮件证据如何保全
  2. 浪潮服务器 raid 系统引导,浪潮服务器RAID配置及系统引导.doc
  3. 20221128 影像组学特征提取
  4. 专注java分布式架构之Zeppelin不是飞艇
  5. 计算机的过程作文450,电脑课的那些事
  6. TP5根据条件IN里面的查询顺序进行排名
  7. SQL SERVER:查询显示结果中带有行号
  8. 工控软件——驱动框架
  9. 科学-建筑学-事务所:矶崎新-胡倩工作室
  10. #今日论文推荐#ACL 2022 | 引入角度margin构建对比学习目标,增强文本语义判别能力