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

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

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

drwxrwxrwt 30 root root 20480 Mar 11 14:17 /tmp

我有两个主要问题:

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

我觉得这不对。请帮我了解一下发生了什么。

答案1

那么粘性位是什么?

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

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

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

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

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

如何设置目录的粘滞位?

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

使用符号表示法(t代表粘着位):

chmod o+t ~/Desktop/test

或者

chmod +t ~/Desktop/test

使用八进制表示法(1第一个位置代表粘着位):

chmod 1757 ~/Desktop/test

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

ls -li ~/Desktop/test

1551793 drwxrwxrwt 45 hadi hadi 20485 Mar 11 14:35 ~/Desktop/test

删除/移除粘着位

chmod o-t ~/Desktop/test

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

ls -li ~/Desktop/test

1551793 drwxrwxrwx 45 hadi hadi 20485 Mar 11 14:35 ~/Desktop/test

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

答案2

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

有时你需要一个 Linux 目录,供 Linux 系统的所有用户创建文件。用户可以在这个目录中根据自己的方便创建、删除或重命名文件。

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

为了避免此类问题,我们使用了粘性位的概念。因为/tmp用于此目的。因此,为了避免上述情况,/tmp使用粘着位。

例如:

mkdir demo
chmod 777 demo

我还在此文件夹中以不同的用户创建了两个文件,其权限为 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

现在打开这个

 chmod +t demo/
 ls -ld demo
 drwxrwxrwt 2 guru guru 4096 Mar 11 18:17 demo

现在,如果一个用户(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  

粘滞位的由来

在 Linux 上,粘性位仅在目录上有上述用途。从历史上看,它对常规文件有完全不同的用途,这就是其名称的由来。

当执行程序时,需要花费一些时间将程序加载到内存中,然后用户才能真正开始使用它。如果某个程序(例如编辑器)被用户频繁使用,那么启动时间延迟在当时就是一项开销。

为了改善这种时间延迟,引入了粘滞位。操作系统检查可执行文件上的粘滞位是否为 ON,然后可执行文件的文本段将保留在交换空间中。这使得在程序再次运行时可以轻松地将可执行文件加载回 RAM,从而最大限度地减少时间延迟。

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

来源:Geek Stuff 上的“通过示例解释 Linux 粘性位概念”

答案3

粘性位是一种避免意外删除共享目录的变通方法。当目录具有粘性位时,只有所有者或根可以删除它,即使每个用户都可以获得其他所有权限。

/tmp是进程和用户之间共享最多的目录,为此它包含 stickybit 以确保没有用户可以删除该目录,即使权限为777,也必须如此,以便用户和进程能够使用该目录而不会发生权限冲突。

相关内容