ファイル権限変更は「誰がファイルを読める・書ける・実行できるか」を制御するための重要な操作
業務自動化では、ファイルの権限(パーミッション)を正しく設定することが欠かせません。誤った権限は次のような問題を引き起こします。
- 読み取り禁止で処理が失敗する
- 書き込み不可でログが出力されない
- 実行権限がなくスクリプトが動かない
- セキュリティ上のリスクが生まれる
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重要ポイント
0o644の 0o は「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)は自動化スクリプトで必須
- フォルダは「実行権限」がないと中に入れない
- 一括変更処理を作ると大量ファイルでも効率的
- セキュリティ要件に合わせて権限を最小限にすることが重要
