PythonでLinuxのファイルパーミッションをチェックする
2023-11-17 07:43:10
質問
ユーザーのディレクトリにあるファイルのパーミッションをチェックし、問題があれば警告を出すスクリプトを書いているのですが、ログインしているユーザーだけでなく、グループやその他のユーザーのパーミッションもチェックしたいのです。どうすればいいのでしょうか?どうやら
os.access()
はスクリプトを実行しているユーザーのパーミッションをチェックするだけです。
どのように解決するのですか?
あなたが正しいのは os.access のように、基礎となる アクセス syscall のように、特定のユーザー (suid 状況を助けるために、実効 ID ではなく実 ID) をチェックします。
os.stat
は、ユーザー、グループ、その他のパーミッションを含む、ファイルに関するより一般的な情報を得るための正しい方法です。 その
st_mode
属性は、そのオブジェクトの
os.stat
が返すオブジェクトはファイルのパーミッションビットを持ちます。
これらのビットを解釈しやすくするために
stat
モジュールを使うことができます。 具体的には、定義されたビットマスクが必要でしょう。
ここで
を、そして
&
演算子 (ビットアンド) を使って、その
st_mode
属性の関連ビットをマスクするために使用します。たとえば、特定のファイルがグループ読み取り可能かどうかを True/False でチェックするだけなら、1 つのアプローチで可能です。
import os
import stat
def isgroupreadable(filepath):
st = os.stat(filepath)
return bool(st.st_mode & stat.S_IRGRP)
気をつけたいのは
os.stat
の呼び出しは多少コストがかかるので、興味のあるビットごとに呼び出しを繰り返すのではなく、一度の呼び出しで気になるすべての情報を抽出するようにしてください;-) 。
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonでファイルやフォルダを削除する方法は?
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] 文字列が数値(float)であるかどうかを確認するにはどうすればよいですか?
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] Python 2.7サポート終了?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 'and' (boolean) vs '&' (bitwise) - なぜリストとnumpy配列で動作が異なるのですか?
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] Pandasの'Freq'タグにはどのような値が有効ですか?
-
[解決済み] 文字列から先頭と末尾のスペースを削除するには?
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] Ctrl-CでPythonスクリプトを終了できない
-
[解決済み] Python Empty Generator 関数
-
[解決済み] virtualenvsはどこに作成するのですか?
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。