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

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

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

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

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

答案1

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

该信函s表示设定值(或 setgid,取决于列)位已设置。当可执行文件设置了 setuid 时,它会以拥有该可执行文件的用户(而不是调用该程序的用户)身份运行。该字母s取代了该字母x。一个文件有可能被 setuid 但不可执行;这用 表示S,其中大写字母S提醒您此设置可能是错误的,因为如果文件不可执行,setuid 位(几乎总是)无用。

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

权限后面的数字是硬链接数数。硬链接是文件的路径(换句话说,是名称)。大多数文件都有一个路径,但您可以使用该ln命令创建更多路径。 (这与符号链接不同:符号链接表示“哦,实际上,这个文件在其他地方,转到<位置>”。)目录有 N+2 个硬链接,其中 N 是子目录的数量,因为它们可以被访问来自其父目录、来自自身(通过条目.)以及来自每个子目录(通过..条目)。

答案2

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

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

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

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

答案3

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

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

嗯..不确定上面听起来是否真的像简单的英语..

答案4

还考虑掩码,shell 设置在创建文件时减去该值以获得完全访问权限(文件为 666,目录为 777)。

标准行为设定值/设置gid是从父目录传播到子目录

可以使用以下命令序列获得目录的“S”权限(检查umask 077,...):

~/test$ id
uid=1004(dsuser) gid=100(users) 
~/test$ 
~/test$ umask
0002
~/test$ 
~/test$ mkdir aaa
~/test$ ls -l
total 4
drwxrwxr-x 2 dsuser users 4096 Nov  5 14:57 aaa
~/test$ chmod g+s aaa
~/test$ ls -l
total 4
drwxrwsr-x 2 dsuser users 4096 Nov  5 14:57 aaa
~/test$ cd aaa
~/test/aaa$ 
~/test/aaa$ mkdir bbb
~/test/aaa$ ls -l
total 4
drwxrwsr-x 2 dsuser users 4096 Nov  5 14:58 bbb
~/test/aaa$ 


~/test/aaa$ umask 077
~/test/aaa$ 
~/test/aaa$ mkdir ccc
~/test/aaa$

 
~/test/aaa$ ls -l

total 8
drwxrwsr-x 2 dsuser users 4096 Nov  5 14:58 bbb
drwx--S--- 2 dsuser users 4096 Nov  5 14:59 ccc




相关内容