당신은 당신의 제안에 가까운 - stat
의 사용은 오프 조금 (그러나 제 생각에, 당신은 File::stat
을 사용하고 있어야합니다; 코드가 완료된 경우 도움), 마스크 상수, 결함 및 주석 잎이 다소 필요합니다 : 파일 권한이 755보다 큰 경우
use strict;
use warnings;
use File::stat;
my $fpath = "orion.properties";
my $info = stat($fpath);
my $retMode = $info->mode;
$retMode = $retMode & 0777;
if ($retMode & 002) {
# Code comes here if World has write permission on the file
}
if ($retMode & 020) {
# Code comes here if Group has write permission on the file
}
if ($retMode & 022) {
# Code comes here if Group or World (or both) has write permission on the file
}
if ($retMode & 007) {
# Code comes here if World has read, write *or* execute permission on the file
}
if ($retMode & 006) {
# Code comes here if World has read or write permission on the file
}
if (($retMode & 007) == 007) {
# Code comes here if World has read, write *and* execute permission on the file
}
if (($retMode & 006) == 006) {
# Code comes here if World has read *and* write permission on the file
}
if (($retMode & 022) == 022) {
# Code comes here if Group *and* World both have write permission on the file
}
질문 제목의 용어 '어떻게 Perl로 확인? 그룹/세계에 쓰기 권한이 있음 '은 조금 의심됩니다.
파일의 권한이 022 (또는 그럴듯하게 622) 일 수 있으며 그룹 및 세계 쓰기 권한이 포함되지만 어느 값도 '755보다 큼'이라고 합리적으로 주장 할 수 없습니다.
내가 유용하다고 한 개념의 집합은 다음과 같습니다
가능성, 데이터 파일, 나는이 필요할 수 있습니다 :
- 세트 0400 (소유자가 읽을 수 있어야합니다).
- 재설정 0133 (아무도 실행할 수없고 그룹 및 기타는 쓸 수 없습니다).
- Do not care 0244 (소유자가 글을 쓸 수 있는지 여부는 중요하지 않으며 그룹이나 다른 사람들이 읽을 수 있는지 여부는 중요하지 않음).
디렉토리가 약간 다릅니다 : 실행 권한은 디렉토리를 현재 디렉토리로 만들거나 디렉토리에있는 파일에 액세스 할 수 있음을 의미합니다. 읽기 권한은 디렉토리에있는 파일을 찾을 수 있음을 의미합니다. 하지만 실행 권한이 없어도 액세스 할 수는 없습니다. 그러므로 다음과 같이 설정해야합니다.
- (소유자가 디렉토리의 파일을 읽고 사용할 수 있어야 함).
- 재설정 0022 (그룹 및 다른 사용자는 디렉토리를 수정하거나 파일을 삭제 또는 추가 할 수 없어야합니다.)
- Do not care 0255 (사용자가 파일을 만들 수 있는지 여부는 신경 쓰지 않고 그룹 또는 다른 사람이 파일을 나열하거나 사용할 수 있는지 여부는 신경 쓰지 마십시오).
set 및 reset 비트는 분리되어야하며 (($set & $rst) == 0)
) 비트의 합계는 항상 0777입니다. "do not care"비트는 0777 & ~($set | $rst)
에서 계산할 수 있습니다.
매직 넘버 대신 [Fcntl] (http://p3rl.org/Fcntl) 모드 상수 ('S_I *')를 사용하십시오. – daxim
나 같은 낡은 가짜의 경우, 상수는'Fcntl'의 알파벳 수프보다 훨씬 읽기 쉽습니다. 개별적으로 상수는 더 읽기 쉽지만'S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH'는'0755'보다 읽기가 훨씬 어렵습니다. 그러나 알파벳 수프를 사용하는 것이 더 나은 스타일이라고 올바른지는 확실합니다. 편리한 상수를 정의 할 수 있다고 가정합니다 :'상수 S_I755 => (S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);를 사용 하시겠습니까? (예, 농담을하기위한 것입니다.)'상수 S_RWXR_XR_X => (S_IRWXU | S_IRGRP | S_IXROP | S_IROTH | S_IXOTH);를 사용하는 것이 더 맛있을 수도 있습니다. –