特別なLinuxファイル属性を持つファイルを検索できますか?

特別なLinuxファイル属性を持つファイルを検索できますか?

次のようにLinuxオペレーティングシステムで特定のファイル属性を持つファイルを検索できますか?---S--l---

---S--l---  1  root    root          0 Mar  1004:25/opt/csTuner/iba/wys/tuer_lolk

何ですかS権限:

S - 変更はディスクに同期的に書き込まれます。これは、ファイルサブセットに適用される「同期」マウントオプションと同じです。

私の目標は、ディスクに書き込まれたファイルを同期的に検索することです。

答え1

あなたの質問に出てくる例は、出力ではls -lなくlsattr出力のように見えます。ls -l出力の最初のフィールドは次のとおりです。モデルつまり、タイプ(一般、ディレクトリ、シンボリックリンク...)と権限。

Sこの位置のビットは、ユーザーにsetuid実行権限がないことを示します。ユーザー/グループ/その他のどれも実行権限を持っていないことを考慮すると、これはほとんど意味がありません。これはlsetgid ビットがセットされたが実行されなかったことを意味します。通常のファイルの場合、これは強制ロックが有効になっているファイルを意味します。

ここで可能性が高いのは、ファイルが無効な権限です(たとえばchmod 6000chmod 600

今述べている「同期化」ビットはS出力用ですlsattr

chattr +S fileLinuxでこれを行うと、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

あなたが望むまさにそれです。 「検索」に8進モードを指定できます...まあ、検索してください。

「stat」を使って希望のパーマを見つけることができ、現在のパーマが何であるかを知らせます。

例えば

find . -perm 4750

私は8進パターンを知らせるほどビットフラグをよく認識していないので、自分で見つけなければなりません。

編集:指摘したように、これは「一般」ファイル権限ではなく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]* '

関連情報