다음과 같이 Linux 운영 체제에서 특정 파일 속성을 가진 파일을 검색할 수 있습니까?---S--l---
---S--l--- 1 root root 0 Mar 1004:25/opt/csTuner/iba/wys/tuer_lolk
무엇인가요에스권한:
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]* '