Вы близки с вашим предложением - использование stat
немного не подходит (но, если подумать, вы должны использовать File::stat
; это помогает, если ваш код завершен), константа маски неверна, и комментарий оставляет желать лучшего:
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, если разрешение файла больше 755? то есть Группа / Мир имеет разрешение на запись '- это немного подозрительно.
Файл может иметь разрешения 022 (или, более правдоподобно, 622), и это будет включать разрешение на запись группы и мира, но ни одно из значений не может быть обоснованно заявлено как «больше 755».
Набор понятий, которые я нашел полезными:
- Установить биты - биты в поле прав доступа, которые должны быть 1.
- Сбросить биты - биты в поле прав доступа, которые должны быть 0.
- Не волнует биты - биты, которые можно установить или сбросить.
Например, для файла данных мне может потребоваться:
- Установите 0644 (владелец может читать и писать; группа и другие могут читать).
- Сброс 0133 (владелец не может выполнить - это файл данных; группа и другие не могут записать или выполнить).
Скорее всего, для файла данных мне может потребоваться:
- Установите 0400 (владелец должен уметь читать).
- Сброс 0133 (никто не может выполнить; группа и другие не могут писать).
- Не волнует 0244 (не имеет значения, может ли владелец писать; не имеет значения, может ли группа или другие читать).
Каталоги немного отличаются: разрешение на выполнение означает, что вы можете сделать каталог вашим текущим каталогом, или обращаться к файлам в каталоге, если вы знаете их имя, в то время как разрешение на чтение означает, что вы можете узнать, какие файлы находятся в каталоге, но вы не может получить к ним доступ без разрешения на выполнение. Следовательно, вы можете иметь:
- Установите 0500 (владелец должен иметь возможность читать и использовать файлы в каталоге).
- Сброс 0022 (группа и другие не должны иметь возможности изменять каталог - удалять или добавлять файлы).
- Не волнует 0255 (не важно, может ли пользователь создавать файлы; не важно, может ли группа или другой список или использовать файлы).
Обратите внимание, что биты установки и сброса должны быть непересекающимися (($set & $rst) == 0)
), сумма битов всегда будет 0777; биты "все равно" могут быть вычислены из 0777 & ~($set | $rst)
.