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


94

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

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

所以我有两个主要问题:

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

这对我来说似乎是错误的。请我帮忙,以了解这里的情况。


8
阅读Wikipedia文章,它比这里的答案要好。
吉尔斯2014年


OK,然后,为什么当我从/ tmp安装更新程序或新的rpm程序包时,粘性位是否被移除了?

Answers:


112

那么什么是粘性的?

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

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

为什么/tmp会有t粘性?

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

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

如何设置目录的粘性位?

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

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

chmod o+t ~/Desktop/test

要么

chmod +t ~/Desktop/test

数字/八进制方式(1,粘性位在第一个位置为值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

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


13
粘性位的这种用法仅适用于目录,不适用于文件。在遥远的过去,它在可执行文件上的含义是保存程序的文本段以进行交换而不是丢弃它,以便再次运行它会更快,但是如今,它对常规文件没有任何意义。
psusi 2014年

什么是程序的文本段?如何使其保持更快的速度?
BluePython '16

@BluePython可执行文件的'text'段是包含所有机器代码的部分:实际的可执行位。常见的其他段是用于静态数据的“数据”和用于全为零的数据的“ bss”(因此不需要存储在可执行文件中)。
Miles Rout

1
目录权限的't'和'T'之间没有什么区别?? @ psusi
Afshin

1
@Afshin:因为t隐藏了x指示所有用户是否都可以执行文件/目录的指示,所以我们需要其他指示方式。通常的事情是每个人都可以执行它,在这种情况下,您会得到一个普通的t(而不是x)。但是,如果没有,您将获得大写字母T(而不是-)。资料来源:维基百科。
Toby Bartels

25

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

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

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

好了,为避免此类问题,使用了粘性位的概念。由于/ tmp用于此目的。因此,为避免出现上述情况,/ tmp使用sticky位。

例如:

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之类的现代系统会自动管理其可执行文件和其他文件的缓存,而无需为此而烦恼。

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


2

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.