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

Eon*_*nil 90 ls permissions

当 I 时ls -la,它会打印许多属性。像这样的东西:

-rwSrwSr-- 1 www-data www-data   45 2012-01-04 05:17 README
Run Code Online (Sandbox Code Playgroud)

可耻的是,我不得不承认我不知道每个属性的确切含义。例如,S字符串中的 big是什么意思-rwSrwSr--?以下是1什么?我粗略了解其他人。

Gil*_*il' 74

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 是子目录的数量,因为它们可以被访问从他们的父目录、他们自己(通过.条目)和每个子目录(通过..条目)。

  • 当它应用于目录时,它在 OS X 上意味着什么?例如,`$ ls /Users` 返回 `drws--S---+ 12 jdoe staff 408 Jul 9 2013 jdoe` (5认同)
  • @jww 这意味着在该目录中创建的文件将属于拥有该目录的组,但无论如何这是 OSX 上的默认设置。请参阅 https://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories 和 http://unix.stackexchange.com/questions/12842/make-all-new-files-in-a-directory-accessible-to-a -group/12845#comment17274_12845 (4认同)
  • @布莱恩是的。在目录上,setgid 位使新创建的文件属于拥有该目录的组。如果该组无法访问目录中的文件,我看不到这一点。 (2认同)

Mat*_*Mat 23

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

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

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

权限部分后面的数字是硬链接数。

  • 基本上这就是你用`chmod gx,g+s dir` 得到的 (6认同)

小智 8

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

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

嗯.. 不知道这是否真的听起来像上面的简单英语..

  • @jayhendren 是的。它谈论目录。没有其他答案可以做到这一点。(吉尔斯可能应该将他的评论纳入他的回答中。) (2认同)

小智 5

这是因为缺少可执行文件

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

$
Run Code Online (Sandbox Code Playgroud)