
次のように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
実行権限がないことを示します。ユーザー/グループ/その他のどれも実行権限を持っていないことを考慮すると、これはほとんど意味がありません。これは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
あなたが望むまさにそれです。 「検索」に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]* '