是否可以搜索具有特殊 Linux 文件属性的文件?

是否可以搜索具有特殊 Linux 文件属性的文件?

是否可以在 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]* '

相关内容