次のように特定のファイル属性を持つLinuxOSのファイルを検索することは可能ですか:---S--l---
---S--l--- 1 root root 0 Mar 1004:25/opt/csTuner/iba/wys/tuer_lolk
パーミッションの[〜#〜] s [〜#〜]とは:
S-変更はディスクに同期的に書き込まれます。これは、ファイルのサブセットに適用される「同期」マウントオプションと同等です。
私の目標は、ディスクに同期的に書き込まれているファイルを検索することです。
質問の例は、lsattr
出力ではなく、_ls -l
_出力のように見えます。 _ls -l
_出力では、最初のフィールドはmode、つまりタイプ(通常、ディレクトリ、シンボリックリンク...)とアクセス許可です。
その位置のS
ビットはsetuid
を意味しますが、ユーザーの実行権限はありません。ここでは、ユーザー/グループ/その他のいずれにも実行権限がないことを考えると、それはほとんど意味がありません。 l
は、setgidビットが設定されているが実行されていないことを意味します。通常のファイルの場合、これは必須ロックが有効になっているファイルを意味します。
ここでは、ファイルが_chmod 6000
_ではなく_chmod 600
_などの間違った権限で作成された可能性があります。
ここで、参照している「同期」S
ビットは、lsattr
の出力用です。
Linuxで_chattr +S file
_を実行すると、_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'
_
(各ファイル名の先頭は_.//
_で識別されます)。
find -perm
あなたが望むものです-それはあなたが 'find'の8進モードを指定することを可能にします...まあ、find。
'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]* '