Python 業務自動化 | ファイル・フォルダ自動化:基本操作 - ファイル権限変更

Python Python
スポンサーリンク

ファイル権限変更は「誰がファイルを読める・書ける・実行できるか」を制御するための重要な操作

業務自動化では、ファイルの権限(パーミッション)を正しく設定することが欠かせません。誤った権限は次のような問題を引き起こします。

  • 読み取り禁止で処理が失敗する
  • 書き込み不可でログが出力されない
  • 実行権限がなくスクリプトが動かない
  • セキュリティ上のリスクが生まれる

Python では、os.chmod() を使って権限を変更できます。
ここでは、初心者でも理解しやすいように、基本から実務テンプレートまで丁寧に解説します。


権限の基本:読み・書き・実行の3つを理解する

UNIX系(Linux・macOS)では、権限は3つの要素で構成されます。

  • r(read):読み取り
  • w(write):書き込み
  • x(execute):実行

さらに、権限は3つの対象に分かれます。

  • 所有者(user)
  • グループ(group)
  • その他(others)

例えば 755 は次の意味になります。

  • 所有者:7(rwx)
  • グループ:5(r-x)
  • その他:5(r-x)

Python では、この数値を使って権限を設定します。


基本:os.chmod() で権限を変更する

最小構成:ファイルを読み書き可能にする

import os

path = "script.sh"
os.chmod(path, 0o644)  # 所有者: rw-, グループ: r--, その他: r--
Python

重要ポイント

  • 0o6440o は「8進数」を表す記号
  • 644 は「所有者は読み書き、他は読み取りのみ」
  • 一般的なテキストファイルの権限としてよく使われる

スクリプトを実行可能にする(業務で最もよく使う)

Python やシェルスクリプトを実行可能にする

import os

os.chmod("run.sh", 0o755)  # 所有者: rwx, 他: r-x
Python

深掘りポイント

  • 755 は「誰でも実行できるが、書き込みは所有者のみ」
  • 自動化スクリプトをサーバーで動かすときの定番設定
  • 実行権限がないと Permission denied が発生する

読み取り専用にする(誤更新防止)

誤って書き換えられたくないファイルに使う

import os

os.chmod("config.ini", 0o444)  # 全員読み取りのみ
Python

深掘りポイント

  • 444 は「誰も書き込めない」
  • 設定ファイル・マスターデータの保護に最適
  • 誤操作による破損を防げる

ディレクトリの権限を変更する(フォルダは実行権限が重要)

フォルダは「実行権限」がないと中に入れない

import os

os.chmod("logs", 0o755)
Python

深掘りポイント

  • フォルダの x(実行) は「フォルダに入る権限」
  • 755 は「所有者は書き込み可、他は読み取りのみ」
  • ログフォルダや作業フォルダでよく使う

例題①:ダウンロードしたファイルを読み取り専用にして保護する

シナリオ

外部システムから取得した CSV を誤って編集されないようにしたい。

import os

path = "downloads/data.csv"
os.chmod(path, 0o444)
print("読み取り専用に設定しました:", path)
Python

深掘りポイント

  • 外部データは「原本」として扱うことが多い
  • 誤更新を防ぐために読み取り専用が有効

例題②:自動化スクリプトを実行可能にしてタスクスケジューラで動かす

シナリオ

backup.sh を cron で実行したい。

import os

os.chmod("backup.sh", 0o755)
print("実行可能にしました")
Python

深掘りポイント

  • cron や systemd で動かすには実行権限が必須
  • 755 は最も安全で一般的な設定

例題③:フォルダ内のすべてのファイルの権限を一括変更する

シナリオ

ログフォルダ内のファイルをすべて読み取り専用にしたい。

import os

def chmod_all(folder, mode):
    for name in os.listdir(folder):
        path = os.path.join(folder, name)
        if os.path.isfile(path):
            os.chmod(path, mode)
            print("変更:", path)

chmod_all("logs", 0o444)
Python

深掘りポイント

  • 大量ファイルの権限変更を自動化できる
  • 誤操作防止やセキュリティ強化に役立つ

pathlib を使った読みやすい権限変更コード

Path オブジェクトで直感的に書ける

from pathlib import Path

p = Path("script.sh")
p.chmod(0o755)
Python

メリット

  • chmod() がメソッドとして使える
  • パス結合が / で直感的
  • 大規模コードでも保守性が高い

権限変更を業務で設計するときの視点

  • 読み取り専用(444)は誤更新防止に有効
  • 実行可能(755)は自動化スクリプトで必須
  • フォルダは「実行権限」がないと中に入れない
  • 一括変更処理を作ると大量ファイルでも効率的
  • セキュリティ要件に合わせて権限を最小限にすることが重要

タイトルとURLをコピーしました