是否可以在 Linux 操作系统中搜索具有特定文件属性的文件,如下所示:---S--l---
---S--l--- 1 root root 0 Mar 1004:25/opt/csTuner/iba/wys/tuer_lolk
什么是S在权限中:
S——更改同步写入磁盘;这相当于应用于文件子集的“sync”安装选项。
我的目标是搜索同步写入磁盘上的文件。
答案1
您问题中的示例看起来像是ls -l
输出,而不是lsattr
输出。在ls -l
输出中,第一个字段是模式,即类型(常规、目录、符号链接...)和权限。
S
该位置的位表示用户setuid
没有执行权限。考虑到用户/组/其他都没有执行权限,这没有什么意义。这l
意味着 setgid 位已设置但未执行。对于常规文件,这意味着启用了强制锁定的文件。
此处更有可能的是,该文件是使用错误的权限创建的,例如chmod 6000
而不是chmod 600
.
现在,您所指的“同步”S
位用于 的输出lsattr
。
如果您chattr +S file
在 Linux 上执行此操作,则lsattr file
输出将如下所示:
--S----------e-- file
要查找具有此类标志的文件:
如果文件名不包含换行符,您可以这样做:
find . ! -type l -exec lsattr -d {} + | sed -n 's/^[^ ]*S[^ ]* //p'
请注意,不保证 的一个版本与下一个版本中 的S
在线位置或-------
部件的长度相同。e2fsprogs
如果您不能保证文件名不包含换行符,您可以改为:
(find .//. ! -type l -exec lsattr -d {} +; echo //) |
sed -ne '/\/\//!{H;d;}' -e 'x; s|^[^ ]*S[^ ]* .//.|./|p'
(每个文件名的开头将由 标识.//
)。
答案2
find -perm
就是你想要的 - 它将允许你为“查找”指定八进制模式......好吧,查找。
您可以使用“stat”找到要查找的烫发,它会告诉您当前的烫发是什么。
例如
find . -perm 4750
我不能很好地识别你的位标志,无法告诉你它们的八进制模式,所以你必须自己寻找。
编辑:正如所指出的,这些不是“正常”文件权限,而是chattr
属性。所以你必须做一些不同的事情。我会这样处理:
#!/usr/bin/perl
use strict;
use warnings;
open ( my $attrs, "|-", "lsattr -R /path" );
while ( <$attrs> ) {
my ( $attrs, $filename ) = split;
if ( $attrs =~ m/S/ ) {
print $filename;
}
}
close ( $attrs );
尽管你可能可以:
lsattr -R | grep '^[-A-Za-z]*S[-A-Za-z]* '