ls -la中的“ s”和“ S”有什么区别?


67

当我ls -la,它打印许多属性。像这样:

-rwSrwSr-- 1 www-data www-data   45 2012-01-04 05:17 README

可耻的是,我不得不承认我不知道每个属性的确切含义。例如,S字符串中big的含义是什么-rwSrwSr--?以下是1什么?我大概认识别人。


19
Eonil:毕竟这就是这个网站的意思,对提出一个问题并没有什么可耻的。对于那些说RTFM的人,我们中的许多人都这样做,但在浏览了难以理解的程序员编写的文档页面之后,仍然找不到最简单的答案(而且我是程序员)。在某些情况下,我们使用的是未安装手册页的系统。由于所有这些原因,还有更多类似的网站真是天赐之物。感谢您提出与我相同的问题。
艾伦

1
很好的问题-非常具体,并有具体示例。
2016年

Answers:


49

ls命令的文档回答了这些问题。在大多数Unix变体上,查找ls手册页(man ls或在线)。在Linux上,查找信息文档(info ls)或在线

该字母s表示已设置setuid(或setgid,取决于列)。当可执行文件为setuid时,它将以拥有可执行文件的用户而不是调用程序的用户身份运行。字母s代替字母x。文件可能是setuid的,但不是可执行文件。这用表示S,其中大写S字母警告您此设置可能是错误的,因为如果文件不可执行,则setuid位几乎(几乎总是)无用。

目录具有setuid(或setgid)权限时,在该目录中创建的任何文件将由与目录的所有者(或组)匹配的用户(或组)拥有。

权限后的数字是硬链接数。硬链接是文件的路径(即名称)。大多数文件只有一个路径,但是您可以使用该ln命令创建更多路径。(这与符号链接不同:符号链接说“哦,实际上,该文件在其他位置,请转到<location>”。)目录具有N + 2硬链接,其中N是子目录的数量,因为可以访问它们从他们的父母,从他们自己(通过.条目)以及从每个子目录(通过..条目)。


5
当OS X应用于目录时,这是什么意思?例如,$ ls /Users返回drws--S---+ 12 jdoe staff 408 Jul 9 2013 jdoe

4
@jww这意味着在该目录中创建的文件将属于拥有该目录的组,但这仍然是OSX上的默认目录。参见en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directoriesunix.stackexchange.com/questions/12842/…–
Gilles

@Gilles,当您说文件不可“执行”时?这是否意味着它没有可执行特权,或者它不是可以执行的文件类型?
ransh

@ransh我的意思是execute(x)权限。
吉尔斯

我已经提交了与
@Jag

16

根据 info coreutils ls(可能不完全是您所拥有的):

s
如果setuid或setgid位以及相应的可执行位都已设置。

'S'
如果设置了setuid或setgid位,但未设置相应的可执行位。

许可部分后面的数字是硬链接的数量。


2
基本上这就是您所得到的chmod g-x,g+s dir
sanmai 2014年

6

用(希望更简单的)术语来说,这意味着。目录为setgid。在其中创建的所有文件将归该文件夹所有者的那个组所拥有。

但是,该文件夹不能由该组执行,因此以大写S表示。这通常是在创建目录时,该目录最终将作为setgid出现。

嗯..不确定上面是否听起来像普通英语..


1
与现有答案相比,该答案没有提供更多或不同的信息。
jayhendren

1
@jayhendren是的。它谈论目录。没有其他答案。(吉尔斯可能应该在评论中加入他的评论。)
Sparhawk

0

这是因为缺少可执行文件

s->'x'已启用S->'x'被禁用。

见下面的例子

$ ls -l

total 0

-rwsrw-r--. 1 bpkmails bpkmails 0 Jun 25 20:18 ca

$ chmod u-x ca

$ ls -l

total 0

-rwSrw-r--. 1 bpkmails bpkmails 0 Jun 25 20:18 ca

$

您能否解释一下这会增加现有答案?
Stephen Kitt
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.