あなたはあなたの提案に接近している - 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
}
質問タイトルに用語「ファイルのパーミッションが755より大きい場合はPerlでチェックする方法は?グループ/ワールドに書き込み権限があることは少し疑わしいです。
ファイルにはアクセス許可022(またはそれ以上の可能性がある622)が含まれている可能性があり、グループとワールドの書き込み許可が含まれますが、いずれの値も「755を超える」と主張できません。
私が役に立つことがわかりました概念の集合である:
それどころか、データファイルのために、私が必要な場合があります:
- セット0400(所有者が読み取ることができる必要があります)。
- リセット0133(誰も実行できません;グループとその他は書き込みできません)。
- Do not care 0244(所有者が書き込みできるかどうかは関係ありません;グループや他の人が読むことができるかどうかは関係ありません)。
ディレクトリは現在のディレクトリにすることができます。または、名前を知っていればディレクトリ内のファイルにアクセスできることを意味します。一方、読み取りアクセス権とは、ディレクトリ内のファイルただし、実行許可なしでアクセスすることはできません。したがって、次のようなことがあります。
- (所有者はディレクトリ内のファイルを読み込み、使用できる必要があります)。
- リセット0022(グループや他の人は、ディレクトリの変更やファイルの削除や追加ができないようにしてください)。
- Do not care 0255(ユーザーがファイルを作成できるかどうかは気にしないでください。グループや他のユーザーがファイルを一覧表示できるかどうかは気にしないでください)。
setビットとresetビットは分離している必要があります(($set & $rst) == 0)
)。ビットの合計は常に0777です。 「ドントケア」ビットは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);を使用するともっと美味しいかもしれません。 –