有人可以解释一下这些属性的含义吗:---S--l---
?
何时以及为何需要设置此属性?为了什么?
$ ls -ltr
---S--l--- 1 root root 0 Mar 10 04:25/opt/sm/OP/Tor/kur/ll3/tur_lock
答案1
我相信您熟悉基本-rwxrwxrwx
符号。您可能知道 set-user-ID 可以帮助您-rwsrwxrwx
,而 set-group-ID 可以帮助您-rwxrwsrwx
。但是,如果没有进一步澄清,这些形式是含糊不清的。如果您看到-rws------
,您可能会认为模式是 04700(设置用户 ID + 用户读取 + 写入 + 执行),但是当x
不显示 时,您如何知道执行位已打开?答案是模式 04600(设置用户 ID + 用户读 + 写,但不执行)显示为-rwS------
。同样,02060(设置组 ID + 组读取 + 写入,但不执行)显示为---rwS---
。
现在,事实l
证明这方面的文档很难找到。幸运的是,我已经在这里呆了一段时间,我知道一些尸体埋在哪里。我找到了这个fcntl(2)页面上写着,
(非 POSIX。)……记录锁可以是建议性的,也可以是强制的,并且默认情况下是建议性的。咨询锁不强制执行,仅在协作进程之间有用。
对所有进程强制执行强制锁。如果进程尝试执行不兼容的访问(例如,阅读(2) 或者写(2))在具有不兼容强制锁的文件区域上,那么结果取决于O_非阻塞对其打开的文件描述启用标志。如果O_非阻塞标志未启用,则系统调用将被阻止,直到锁被移除或转换为与访问兼容的模式。如果O_非阻塞启用标志,然后系统调用失败并出现错误伊加恩。
要使用强制锁定,必须在包含要锁定的文件的文件系统和文件本身上启用强制锁定。使用“
-o mand
”选项在文件系统上启用强制锁定安装(8), 或者MS_MANDLOCK标志为安装(2)。通过禁用文件的组执行权限并启用 set-group-ID 权限位,可以对文件启用强制锁定(请参阅修改(1) 和修改(2))。Linux 的强制锁定实现是不可靠的。请参阅下面的错误。
长话短说
在某些(非 POSIX?)*nix 系统上,打开 set-group-ID 模式位,同时关闭组执行位,可以强制锁定该文件(如果在文件系统中启用了该功能)。因此,ls
其中一些系统上的程序在模式文本表示的第七个位置显示l
(而不是),以指示强制S
我锁定已启用。因此,您的tur_lock
文件的模式为 06000。
长话短说2
- 第四个位置中的
S
表示设置用户 ID (04000) 模式位已设置,但用户(所有者)执行许可 (00100) 模式位已关闭。 - 第七位中的An
S
或 anl
表示设置组 ID (02000) 模式位已设置,但组执行许可 (00010) 模式位已关闭。 - 是否在第七位
ls
显示 anS
或 anl
(当设置了 set-group-ID 模式位但组执行权限模式位关闭时)由没有明确记录的规则确定;但看起来l
如果您的操作系统和文件系统支持强制文件锁定,您就会得到。 thenl
表示对该文件启用了强制文件锁定。
您可以使用以下命令查看目录树中所有文件和其他内容的数字模式(或者至少是用户控制下的模式位)
寻找目录-printf“%.5m %p\n”
find
接受以数字方式(八进制)报告模式的-printf
格式。 %m
(用于%M
象征性地报告模式,就像这样ls
做一样。)当然,您可以指定多个目录find
,或使用 或 等选项,-mindepth
或、、和/或-maxdepth
等测试来缩小搜索范围,或修改格式。-mtime
-name
-iname
-size
-printf
您可以使用以下命令查看所选文件的数字模式
统计-c“%a%n”文件 …
stat
的报告格式(用-c
或指定--format
)用于%a
以数字(八进制)报告模式(“访问权限”)。 (用于%A
象征性地报告模式,就像这样ls
做一样。)
以上两者仅显示用户控制下的模式位。查看全部模式位(包括指定文件/索引节点类型的位),使用
统计-c“%f%n”文件 …
不幸的是,这以十六进制显示。
...是否有任何选项可以识别带有“S”的文件...?
S
您可以查找第四个位置有 的文件
寻找目录-烫发-4000! -烫发-100
这与英语语法最接近find
:查找设置了“权限”(模式)位 04000 但未设置模式位 0100 的文件。
同样,您可以使用以下命令查找第七个位置有 anS
或 an 的文件l
寻找目录-烫发-2000! -烫发-010
查找满足上述任一条件的文件有点混乱:
寻找目录“(”“(”-perm -4000!-perm -100“)”-o“(”-perm -2000!-perm -010“)”“)”
答案2
这可以通过 Linux 中的命令进行设置chattr
。
chattr
是 Linux 操作系统中的命令,允许用户对驻留在 Linux 文件系统上的文件设置某些属性。
它也称为不可变位。
Linux 中存在许多可应用于文件的属性。在上面的问题中,S和I是一些属性。下面是属性S和I的描述。
S
- 更改同步写入磁盘;这相当于应用于文件子集的“sync”安装选项。
I
- htree 代码使用它来指示目录位于使用散列树进行索引的后面。
要将不可变位设置为任何文件,语法如下。
chattr +(attribute) (file name)
要删除任何文件的不可变位,语法如下。
chattr -(attribute) (file name)
要检查哪个文件设置了属性,请使用lsattr
命令。
欲了解更多信息,请阅读chattr
手册页。手册页中提到了所有属性及其特征。