“ls -ld /tmp”输出中的“t”字母是什么?

120 permissions tmp

运行命令时 ls -ld /tmp,输出将是:

drwxrwxrwt 30 root root 20480 Mar 11 14:17 /tmp
Run Code Online (Sandbox Code Playgroud)

所以我有两个主要问题:

  • t权限后面的字母是什么?
  • 据我所知/tmp是用来创建系统中不同用户相关的临时文件,那它怎么有权限rwxrwxrwx(777)呢?

这对我来说似乎是错误的。请我需要你的帮助来了解这里发生了什么。

May*_*hux 141

那么什么是粘性位?

粘滞位是在目录上设置的权限位,仅允许该目录中的文件所有者、目录所有者或 root 用户删除或重命名文件。没有其他用户具有删除其他用户创建的文件所需的权限。

这是一种安全措施,可避免删除关键文件夹及其内容(子目录和文件),尽管其他用户具有完全权限。

为什么/tmp会有t粘性位?

/tmp不同的 Linux 用户可以使用该目录来创建临时文件。现在,如果用户删除/重命名此目录中其他用户创建的文件怎么办?

好吧,为了避免此类问题,使用了粘滞位的概念。因此,为此777给出了 a但保留粘性位并不是一个坏主意。

如何为目录设置粘滞位?

我将test在我的桌面上调用的目录上设置一个粘性位。

符号方式(t代表粘位):

chmod o+t ~/Desktop/test
Run Code Online (Sandbox Code Playgroud)

或者

chmod +t ~/Desktop/test
Run Code Online (Sandbox Code Playgroud)

数字/八进制方式(1,粘位位为第一个位置的值1)

chmod 1757 ~/Desktop/test
Run Code Online (Sandbox Code Playgroud)

现在让我们测试一下结果:

ls -li ~/Desktop/test

1551793 drwxrwxrwt 45 hadi hadi 20485 Mar 11 14:35 ~/Desktop/test
Run Code Online (Sandbox Code Playgroud)

删除/移除粘滞位

chmod o-t ~/Desktop/test
Run Code Online (Sandbox Code Playgroud)

现在让我们测试一下结果:

ls -li ~/Desktop/test

1551793 drwxrwxrwx 45 hadi hadi 20485 Mar 11 14:35 ~/Desktop/test
Run Code Online (Sandbox Code Playgroud)

来源:“什么是粘性位以及如何在 Linux 中设置它?” 在 Linux 主宰

  • 粘滞位的这种用法仅适用于目录,而不适用于文件。在遥远的过去,它对可执行文件的意义是保存程序的文本段以交换而不是丢弃它,以便再次运行它会更快,但现在它对常规文件没有意义。 (15认同)
  • @Afshin :因为 `t` 隐藏了指示所有用户是否可以执行文件/目录的 `x`,我们需要一些其他方式来表明这一点。通常的事情是每个人都可以执行它,在这种情况下,你会得到一个普通的 `t`(而不是一个 `x`)。但如果不是,那么你会得到一个大写的“T”(而不是“-”)。资料来源:维基百科。 (7认同)
  • @BluePython 可执行文件的“文本”段是包含所有机器代码的部分:实际的可执行位。常见的其他段是静态数据的“data”和全零数据的“bss”(因此不需要存储在可执行文件中)。 (3认同)
  • 程序的文本段是什么?如何保留它会使程序运行得更快? (2认同)
  • 目录权限的“t”和“T”之间有什么区别??@psusi (2认同)

g_p*_*g_p 25

粘滞位是在文件或目录上设置的权限位,仅允许文件/目录的所有者或 root 用户删除或重命名文件。没有其他用户被授予删除其他用户创建的文件的权限。

有时,您需要 Linux 系统的所有用户都可以使用的 Linux 目录来创建文件。用户可以根据自己的方便在此目录中创建、删除或重命名文件。

现在,如果用户不小心或故意删除(或重命名)此目录中其他用户创建的文件怎么办?

好吧,为了避免此类问题,使用了粘滞位的概念。由于/tmp用于此目的。所以为了避免上述情况,/tmp使用粘滞位。

例如:

mkdir demo
chmod 777 demo
Run Code Online (Sandbox Code Playgroud)

我还在这个文件夹中用不同的用户创建了两个文件,权限为 777。

ls -ld demo
drwxrwxrwx 2 guru guru 4096 Mar 11 18:17 demo

ls -l demo
-rwxrwxrwx 1 abhi abhi    0 Mar 11 17:11 file1
-rwxrwxrwx 1 anshu anshu   0 Mar 11 18:15 file2
Run Code Online (Sandbox Code Playgroud)

现在打开这个粘性位

 chmod +t demo/
 ls -ld demo
 drwxrwxrwt 2 guru guru 4096 Mar 11 18:17 demo
Run Code Online (Sandbox Code Playgroud)

现在如果一个用户(abhi)想要重命名第二个用户(anshu)会发生什么

mv /home/guru/demo/file2  /home/guru/demo/file3
mv: cannot move '/home/guru/demo/file2' to  '/home/guru/demo/file3': Operation not   permitted  
Run Code Online (Sandbox Code Playgroud)

粘钻的由来

在 Linux 上,粘滞位仅在目录上具有上述用途。从历史上看,它用于与常规文件完全不同的东西,这就是名称的来源。

当一个程序被执行时,在用户真正开始使用它之前需要时间将程序加载到内存中。如果一个程序,例如一个编辑器经常被用户使用,那么启动时间延迟在当时是一个开销。

为了改善这个时间延迟,引入了粘性位。操作系统检查如果可执行文件上的粘滞位为 ON,则可执行文件的文本段保留在交换空间中。这使得在程序再次运行时很容易将可执行文件加载回 RAM,从而最大限度地减少时间延迟。

Linux 等现代系统会自动管理其可执行文件和其他文件的缓存,因此不需要粘性位。

资料来源:The Geek Stuff 上的“Linux Sticky Bit 概念用示例解释”